概述
最近,在使用DM542驱动来控制步进电机时。需要调节步进电机的速度,PWM来控制步进电机这个十分的简单。调节步进电机的速度就是通过调节步进电机的PWM的频率,可以通过重新设置自动重装载值来进行更改PWM的频率值,但是在实验中发现每次更改频率都需要等待一段时间才能更改电机的速度。对应这个问题通过阅读STM32手册发现了问题所在。
一、TIMx功能描述
我们先来看官方手册给出的这段话的意思。
通过这句话我们的可以得知,我们将自动重装载值直接写入ARR中内容会有两种方式,一种是立即一种则是在每次更新UEV事件才能传送到影子寄存器。那我们就可以有两种方式,一种是产生一次更新中断,一次则是修改CR1中的ARPE位来控制ARR值的直接写入。下面给出官方给出的时序图:
可以看出ARPE=0没有缓存直接写入,而为1时需要缓存存入到影子寄存器。而且要在产生更新中断时才能进行更新影子寄存器。
这样我们的问题就好解决了,我们只需要在写入新的重载值出,产生一次更新中断就可以快速更改PWM的频率。为什么我们之前修改会出现要等待一定的时间才能修改频率呢?
假设我们的ARR值之前设定为10,当前的准备将ARR设置为2。我们在开启定时器之后,定时器不断在0-10内进行计数如果:
>
当前的值本身是要和旧的ARR值进行对比,但是发现当前值大于新的ARR值,只能一直进行计数加到65535才溢出产生更新中断,这样才能从0-2进行计数。如果<
不需要考虑这种问题,处理这个问题我们可以通过软件产生一次更新中断从而重新开始计算。在更改ARR值之后只需要在之后加上以下代码即可。
TIM_SetAutoreload(TIMX,ARR);
TIM_GenerateEvent(TIMx,TIM_IT_Update);
最后
以上就是朴素小猫咪为你收集整理的STM32中定时器产生PWM更改频率在步进电机中的问题的全部内容,希望文章能够帮你解决STM32中定时器产生PWM更改频率在步进电机中的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复