参考资料:
- https://blog.csdn.net/lzzzzzzm/article/details/119416134
- 野火STM32电机开发教程
1. 编码器种类及原理
常见的编码器有两种,分别为霍尔编码器和GMR编码器。
1.1 霍尔编码器

霍尔编码器圆盘上分布有磁极,当圆盘随电机主轴转动时,会输出两路相位差90°的方波,用这两路方波可测出电机的转速和转向。霍尔编码器一般是13线的,就是转一圈每项会输出13个脉冲,这个精度基本能够满足大部分使用场景的要求。
1.2 光电编码器

如图,打孔码盘随电机进行旋转。每当光线穿过圆孔,输出电平就会改变,如此产生方波,测量方波的频率即可测出电机转速。
1.3 GMR编码器
GMR编码器利用巨磁阻效应进行测速,GMR编码器一般是500线的,转一圈每项会输出500个脉冲,精度比霍尔编码器高得多,适合对精度要求高的环境或者最求完美的人。
下图来自淘宝店铺轮趣科技

2. 常用测速方法
2.1 倍频技术
编码器会输出两路方波信号,如果只在通道A的上升沿计数,那就是1倍频;通道A的上升、下降沿计数,那就是2倍频;如果在通道A、B的上升、下降沿计数,那就是4倍频。
使用倍频可以最大程度地利用两路信号,提高测速的灵敏度。
下面说的三种测速方法只是在软件计算上的区别,硬件上是没有改变的
2.1 M法测速(周期测量法)
简单地说就是根据单位时间一共有多少个脉冲来计算转速。
设转速为n(r/s);测量时间为 T 0 T_0 T0(s); T 0 T_0 T0时间内的脉冲数为 M 0 M_0 M0;电机转一圈产生的脉冲数为C;则转速计算公式为
n = M 0 C T 0 n=\frac{M_0}{CT_0} n=CT0M0
当 M 0 M_0 M0很大,即转速快时,这个方法测得精度和平稳性都很好,但当 M 0 M_0 M0很小,速度改变带来的 M 0 M_0 M0变化很小,即转速慢时算出的误差就很大。所以M法测速适用于高转速场景
2.2 T法测速(频率测量法)
T法测速是这样操作的:是指先建立一个频率已知且固定的高频脉冲,当编码器读到一个信号,开始对高频脉冲进行计数,编码器第二个信号到来后,停止计数。根据对高频脉冲计数的次数、高频脉冲频率和电机转一圈编码器产生的脉冲数进行速度计算。
设转速为n(r/s);两个脉冲的时间间隔为 T E T_E TE(s);电机转一圈产生的脉冲数为C; F 0 F_0 F0(Hz)为编码器输出脉冲的频率; M 1 M_1 M1为高频脉冲的计数值,则转速计算公式为
n = 1 C T E = F 0 C M 1 n=\frac{1}{CT_E}=\frac{F_0}{CM_1} n=