stm32 encoder mode 丢脉冲的问题

用stm32f4在做电机的驱动和编码器的计数,遇到一个问题:

  1. 电机转的慢的时候,编码器获取的pulse数正常
  2. 电机转的快的时候,编码器获取的pulse数比预期的少(少很多)

第一反应是硬件有问题,单独测了电机和编码器,好的。
第二反应是PCB上有干扰,示波器测了MCU引脚端的编码器波形,方方正正的脉冲,频率也对。
第三反应是编码器counter溢出了,结果算了一下整个运动范围,编码器counter变化不超过5000,不可能溢出。
第四反应是…真没啥反应了,只能干瞪眼。

查查google,发现了有一个哥们遇到了同样的问题:

Check your digital filter setting:

TIM_ICInitStructure.
TIM_ICFilter

in the timer configuration. I use rotary optical encoders, single ended on a short cable, at up to 40KHz with a filter setting of 5 and GPIO at 2MHz. I see attenuation when running at higher filter settings so you may need to check the filter calculations for whatever speed your inputs run at.
Jack Peacock

醍醐灌顶!
试验一下,果然是这个问题。看来编码器的位数越做越高也不一定都是好处(编码器进STM32后我做了20分频…真心用不到这么高,但是厂家就是不提供低位数的…)。


版权声明:本文为sharemon原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。