PWM模式:
PWM模式1,向上计数时,PWM信号从有效电平变为无效电平
PWM模式2,向上计数时,PWM信号从无效电平变为有效电平
PWM极性:
极性为高时,高电平为有效电平,低电平为无效电平
极性为低时,低电平为有效电平,高电平为无效电平
中心对齐模式(先向上再向下计数):
1:仅在向下计数时产生比较中断
2:仅在向上计数时产生比较中断
3:向下和向上计数均产生比较中断
中心对齐模式PWM频率是普通模式的一半,会产生上溢和下溢两个update事件,均可触发更新中断。
设定RCR的值,可以使计数器累积多少次再产生中断。比如设定RCR为1,则中心对齐模式会经过一次上溢和一次下溢才产生中断。
SVPWM驱动无刷电机时,采用中心对齐的PWM模式能够取得好的驱动效果。默认采用中心对齐模式1即可。由于中心对齐模式先向上计数再向下计数,在极性为高的情况下,采用PWM模式1会得到中间低电平、两边高电平的调制波形,如图所示。而我们期望SVPWM的波形为中间高电平、两边低电平,因此需要选择PWM模式2。
在极性为高的PWM模式2下,设置高电平占空如下
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, (1-duty_a)*TIM1_COUNT);
其中,duty_a是高电平的占空比。
将RCR设为1,这样我们能够在每个PWM周期结束时(即计数器向下溢出时)触发一次更新中断,执行相应的任务。
当然也可以不设置RCR,而是在中断中读取计数器的count值的大小来判断此次更新中断为上溢还是下溢。
上图显示了两个通道的PWM输出,并且在更新中断里翻转GPIO来表示更新中断触发。使用基本定时器函数HAL_TIM_Base_Start_IT(&htim1)
来开启更新中断。