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分频…真心用不到这么高,但是厂家就是不提供低位数的…)。

经验分享 程序员 微信小程序 职场和发展