编码器计数
编码器的计数值结合电机的减速比和PPR(每分钟转数)可以计算电机转速。为了提高转速的计算精度,可以使用编码器倍频计数,相同时间内得到更多的计数值。
原理
如表所示,是编码器信号与计数器方向和计数位置之间的关系。
STM32 的编码器接口在计数的时候,并不是单纯采集某一通道信号的上升沿或下降沿,而是需要综合另一个通道信号的电平。表中“相反信号的电平”指的就是在计数的时候所参考的另一个通道信号的电平,这些电平决定了计数器的计数方向。
倍频
如上图所示,对应表格中“仅在TI1 处计数”。图中包含TI1、TI2 两通道的信号,以及计数器的计数方向,其中TI1 比TI2 提前1/4 个周期,以TI1 的信号边沿作为有效边沿。
当检测到TI1 的上升沿时,TI2 为低电平,此时计数器向上计数1 次,下一时刻检测到TI1 的下降沿时,TI2 为高电平,此时计数器仍然向上计数一次,以此类推。这样就能把TI1 的上升沿和下降沿都用来计数,即实现了对原始信号的2倍频。
“仅在TI2处计数”与此同理。
对照表格中的“在TI1处和TI2处均计数”可以看到计数值在两通道的上升沿和下降沿都递增,实现了4倍频。
测速
4倍频情况下,每秒钟转速:
Speed_rps=EncoderTim/(4 * ppr * 减速比) * 1/T0
T0为用来读取计数值的定时器的周期,1/T0也就是f0。
在使用STM32CUBE MX或者IDE时,Filter INPUT尽量不要默认为0,可能会出现计数值不稳定的情况,对后面的转速、位置反馈产生影响。