项目场景:
闭环电机控制:客户编码器的反馈值与实际出入过大,闭环控制下,电机一直来回运动。
问题描述
闭环控制下,电机一直往复运动,编码器反馈值与实际发出脉冲不相关。
使用场景介绍:
- 6线差分编码器:A+ A- B+ B- VCC 和GND
编码器线数 1000,4倍计数 - 42步进电机 A+ A- B+ B-
256细分 一圈51200脉冲
原因分析:
客户将电机方向改变,线圈互调 A+ A- B+ B- 换为 B+ B- A+ A-。编码器接线未改变,计数由正转变为反转,由于闭环控制相关代码根据接收到的脉冲数大小与编码器计数值相比较,做出闭环控制,导致上述问题。
解决方案:
编码器计数原理:
STM32定时器配置双边沿,向上计数。
因为电机换向导致本来正转 A相比B相提早90°,即高电平比B先来半个脉冲,计数++。现在变为反转B相比A相线高电平,计数–。
由于编码器选用的差分编码器, 表明除了A、B通道以外,还有其反相信号,A-是A+的反相,也就是当A+为高电平的时候,A-即为低电平;当A+为低电平的时候,A-即为高电平,也就是A-与A+是0和1的互反,B信号也一样。
因此将编码器A- 与A+ 交换,或B+与B-交换,保证电机正转时A相高电平比B相提前,即可实现正计数,问题解决。
如下图: