我正试图控制一个伺服电机(联系). 它是一种无刷直流电机,其接口类似于步进电机。
电机根据它收到的脉冲数,在规定的距离内旋转。PWM
. 速度是由脉冲频率决定的。PWM
,像一个步进电机。
为了控制这个电机,我使用的是一个单片机。STM32F407ZET6
. 我可以很容易地改变PWM的频率和占空比,但我的疑惑是,如何在PWM中产生固定数量的脉冲?
我如何在PWM中产生固定数量的脉冲?例如,我想让PWM在某一时间发送1000个脉冲,频率为20KHz,占空比为50%。20KHz和50%的占空比很容易定义,但我无法确定如何产生1000个固定脉冲。
我试过的一个解决方案是将PWM以计数器模式连接回定时器,当产生所需的脉冲数时,停止PWM。但脉冲数并不总是固定的,有时从998到1005不等(例如)。
是否可以做到不需要反馈?
最简单的方法。
UG中断=计数周期。n个周期后,禁用定时器。
在存储器中用定时器寄存器的值创建一个缓冲区,并使用定时器突发模式。
配置DMA mem-mem,n个周期的源地址和目的地址相同。在n个周期后,交易结束将产生中断--禁用定时器。
当PWM更新(溢出)时,使用从属定时器计数。设置溢出中断,禁用PWM定时器。
通过将所谓的 "单脉冲模式"(参考手册第551页)与重复计数器(第529页)结合起来,可以很容易地实现这一点。你要做的就是启用这个模式(CR1中的OPM位),设置重复计数器(RCR)并启动定时器。IIRC你还必须强制更新事件才能让RCR加载。参考手册会有更多的信息。