最近在做PWM的电机控制,需要通过修改PWM的频率来控制电机的速度。
使用如下的函数:
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint32_t Autoreload);
该函数可修改定时器的ARR值,使得定时器的周期改变。
在使用时,总是会随机的出现PWM输出消失的情况,通过排查,在调用TIM_SetAutoreload()函数时,需要初始化使能定时器的Preload功能,调用如下函数:
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState)
TIM_ARRPreloadConfig(TIM2,ENABLE);
该功能使能是,ARR的值先暂存在影子寄存器,带ARR溢出后再更新ARR的值。
使能该功能后,该问题解决。
本文探讨了在PWM电机控制中,通过修改PWM频率控制电机速度的方法。作者遇到PWM输出偶尔消失的问题,并发现这与定时器的ARR值更新有关。通过使能定时器的Preload功能,即先将ARR值暂存于影子寄存器,待ARR溢出后再更新,成功解决了这一问题。
2940





