为了进行测速,我们一共需要3个定时器,作用分别是:①输出PWM;②编码器模式进行脉冲计数;③计时,确定每次测速的时间间隔。
其中,用于定时的定时器③可以用输出PWM的定时器①代替,输出PWM的定时器一样有更新中断,只要在更新中断里运行测速程序即可。
但由于PWM定时器的频率很快,所以我们会间隔很多个更新中断后进行测速。
具体配置如下:
TIM2:编码器输入定时器
这里开启了两个通道计数,即Encoder Mode中设置为Encoder Mode TI1 and TI2。这里就是上文倍频技术的4倍频。
编码器模式下的定时器其实是个计数器,在编码器的脉冲到来时,Counter会相应地加和减,正转时加,反转时减,溢出后到达另一个极端值,比如说向上计数到达20001时会变成0
接下来我们需要设定编码器的两个引脚为上拉,防止误触发。
TIM3:PWM输出定时器
STM32F103的定时器时钟来源于APB总线时钟,最高为72MHz,我们一般也配置为72MHz。APB时钟经过PSC分频后得到实际的定时器的计数频率。定时器的计数频率为
当计数值达到ARR寄存器的设定值后计数值归零,重新开始计数,完成一个周期。在一个周期中,PWM高电平时间由比较寄存器(ARRARR)的值决定。
在设置PWM mode1且向上计数时,计数值小于ARR的值时是高电平,大于ARR值是低电平。所以PWM频率是这样计算的
上图中设置初始PWM频率为100Hz。但是设置频率最好在20Hz~20000Hz以外,因为这个频率内的PWM波会让电机发出明显的电流声。我们可以将PSC设置为3-1,将ARR设置为1000-1,我这里作为演示就先不管了。
TIM4:计时间隔定时器
设定为10Hz即1秒计算10次速度。
最后要开启中断,并保证编码器定时器的中断优先级高于计时间隔定时器的中断优先级,避免编码器输入被间隔计时中断。
其他基础配置不再赘述。
全部0条评论
快来发表一下你的评论吧 !