在驱动伺服或步进电机的时候,都需要用精确的PWM脉冲数。并且PWM的频率都还挺高,一般100kHz,还可能是多路同时工作,比如驱动4个伺服。
大体看到有两种做法可以实现精确的脉冲数:1,外部再弄个IO口接到PWM脚上,用外部中断的办法,单独来计数。此办法可行,但非常不科学,并且浪费资源。 2,使用定时器,使用一个和PWM频率一致的定时器,使用定时器中断来计数。此方法比第一种办法好了很多,但是仍然感觉比较笨。
STM32的定时器寄存器中有一个重复次数寄存器RCR。 这个寄存器在定时器中可以使用,个人想,若这个重复次数能做到PWM的重复次数计数该多好?
请问大伙,这个能实现吗?或者有不用每个脉冲中断一次的办法实现PWM的精确计数吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我测试用STM32F103C8发出两路PWM,一路200KHz,另外一路150KHz,这两路频率都是固定的,同时以位置控制的模式(精确个数脉冲)驱动两个伺服电机,还带有USB通讯,没有什么问题。要搞六路的话,还得看资料,换资源多的芯片,六路有点多。DMA方式输出,控制机器人最少8路PWM输出,至少需要8路DMA传输完毕中断。不如上CAN open。
假设你想要测量的是100PWM周期为一次计数,需要重复计数10次的话:
1、选择TIM1的时钟源为“外部时钟源模式1”;
2、TIM1向上计数,且计数周期为100;
3、重复计数RCR设为10;
4、设置产生UDE更新时中断,你已经测量到100x10=1000个脉冲了。
以前用过STM32的PWM计数,测量发动机转速,都是基于比较捕获引脚的定时器计数或是中断计数,转速快的时候就用计数方式,转速慢的时候就测量周期,也挺好用的,就是中断进的次数多,不过我的项目中处理速度跟转速有关,所以必须进中断。
发出的PWM脉冲数是准确的。而不仅仅是频率或占空比。
一周热门 更多>