硬件: AC7801电机demo板
软件: Keil 5.23
BLDC是用六步换相原理去控制无刷电机的,即AB->AC->BC->BA->CA->CB. 每次换相PWM模块都会输出不同的PWM波形。在PWM模块初始化配置好后,只需在换相时刻,设置PWM的软件输出控制寄存器PWM_CHOSWCR即可完成换相,非常简单方便,耗时非常短(实测,只需1us),只对一个寄存器操作就完成,非常适合于对时间要求非常高要求的场合应用,例如高速电机。
之前用过其他的MCU做BLDC电机控制,很多是用到操作两个寄存器才能完成的,操作繁琐且耗时长。如果只操作一个寄存器也可以完成换相,但是有缺点,比如换相时刻PWM不衔接,或者下桥臂要配置成IO模式才行。下桥臂配置成IO模式,在触发大电流保护时,下桥臂MOS或IGBT又不是硬件关断的(上下桥臂都配置成PWM才是硬件关断,硬件关断比软件关断快的多,且安全)。
ATC7801上下桥臂都可以配置成PWM模式,用硬件关断,换相时刻只需调用一个寄存器(PWM_CHOSWCR),真是很方便,很有效率,感觉专门为电机控制而设计的,做过产品了解这方面需求的朋友应该很清楚这个点的重要性。
下面附上换相调用的函数:
void MosDriver(uint8_t ChangePhanseTemp)
{
switch(ChangePhanseTemp)
{
case AH_PWM_BL_ON://AH_PWM - BL_ON - C_Phanse OFF
PWM1->CHOSWCR = 0x083C;
PWM_SET_SOFT_TRI;
break;
case AH_PWM_CL_ON://AH_PWM - CL_ON - B_Phanse OFF
PWM1->CHOSWCR = 0x203C;
PWM_SET_SOFT_TRI;
break;
case BH_PWM_CL_ON://BH_PWM - CL_ON - A_Phanse OFF
PWM1->CHOSWCR = 0x2033;
PWM_SET_SOFT_TRI;
break;
case BH_PWM_AL_ON://BH_PWM - AL_ON - C_Phanse OFF
PWM1->CHOSWCR = 0x0233;
PWM_SET_SOFT_TRI;
break;
case CH_PWM_AL_ON://CH_PWM - AL_ON - B_Phanse OFF;
PWM1->CHOSWCR = 0x020F;
PWM_SET_SOFT_TRI;
break;
case CH_PWM_BL_ON://CH_PWM - BL_ON - A_Phanse OFF
PWM1->CHOSWCR = 0x080F;
PWM_SET_SOFT_TRI;
break;
}
}
通过这个函数可以知道,函数入口是序号(0~5),导通相应的相(AB->AC->BC->BA->CA->CB之一)。可见,换相只需设置PWM1->CHOSWCR即可,PWM_SET_SOFT_TRI是一个宏定义,刷新PWM1->CHOSWCR的值的意思(即ATC7801里面介绍到的同步功能),这两个语句完成换相,只需1us时间。
0x083C,0x203C,0x2033,0x0233,0x020F,0x080F这几个值,根据外部驱动芯片的逻辑而定,可定义成宏方便修改。
亲自对比过,亲自用过,发现是真的很方便,很好!
|