在 STM32 中实现电机测速的方法介绍
关键字:M 法测速, T 法测速,编码器
1. 电机测速方法介绍
在电机控制类应用中,经常会需要对电机转速进行检测,测速常用的方式有 M 法测速和 T法测速。
M 法测速是利用在规定时间 Ts 内编码器输出脉冲数量 M1 计算电机转速,如下图所示,信号 A 和 B 为正交编码器的输出信号,C 解码后的计数脉冲(4x)。
单位时间(1s)内编码器输出脉冲数量,即脉冲频率:
𝑓𝑐 = 𝑀1⁄𝑇𝑠
假设电机每旋转一圈正交编码器(4x)的输出脉冲数量为 Z,则电机转速为:
𝑛 =𝑓𝑐/𝑍∗ 60 =(60∗𝑀1)/(𝑍∗𝑇𝑠) (r/min) -----(1)
r/min 代表圈/分钟。
M 法测速的分辨率为:
𝑄 =( 60 ∗ (𝑀1 + 1))/(𝑍 ∗ 𝑇𝑠) −(60 ∗ 𝑀1)/(𝑍 ∗ 𝑇𝑠) =60/(𝑍 ∗ 𝑇𝑠)
M 法测速的误差率为:

由上可知,M 法测速的分辨率与速度无关,要提高分辨率,即减小 Q 值,必须增大编码器每圈输出的脉冲个数 Z ,或者增大采样周期 Ts。M 法测速误差率与测定时间内的脉冲数量成反比关系,转速越高 M1 值越大,当转速很低时,M1 值很小,误差率会变大,因此 M 法适合高速测量。
T 法测速是测量编码器输出两个脉冲之间的间隔来计算转速,通过计算高频时钟脉冲数量M2 来衡量编码器两个脉冲间隔的时间。
由上可知,T 法测速的分辨率 Q 与 M2 相关,当转速越低时 M2 的值越大,Q 值越小,分辨能力越强。T 法测速的误差率也与 M2 相关,当转速越低时 M2 的值越大,误差率越小,因此T 法测速非常适合低速测量。
2. M 法与 T 法测速在 STM32 中的实现
STM32 中的很多定时器都带编码器接口,在对输入编码器信号进行计数的同时,还通过该接口可以将正交编码器的输入信号解码成脉冲输出映射到 TIMx_TRGO,手册中的原文描述如下:
结合上述的测速原理,在 STM32 中应用定时器的编码器接口完成 M 法测速和 T 法测速的方案框图如下:
使用两个 32bit 的定时器 TIM2 和 TIM3 来处理编码器信号,TIM3 的编码器接口与外部的编码器信号连接直接实现 4x 计数 ;解码后的输出映射到 TIM3_TRGO,并作为 TIM2 的定时器捕获和复位的触发源。TIM6 作为基本定时器,实现一个 ms 级别的中断,在中断服务程序中实现 M 法和 T 法测速的计算。
M 法测速中,在 TIM6 的定时中断服务程序中读取 TIM3 的计数值 TIM3_CNT,两次连续读取值的差值即为图 1 种的 M1,TIM6 的中断定时时间即为 Ts,在 Z 为已知固定值的情况下,根据公式(1)即可计算出转速 n。
T 法测速中,在 TIM6 的定时中断服务程序中读取 TIM2 捕获值 TIM2_CCR1(TIM3_TRGO内部连接到 TIM2_CH1),TIM2_CCR1 即为图 2 中所示的编码器连续两个输出脉冲之间的高频脉冲数量 M2,TIM2 的时钟频率即为 ft,在 Z 为已知固定值的情况下,根据公式(2)即可计算出转速 n。
3. 方案测试结果
基于以上的方案,通过定时器模拟生成编码器输出信号 A 和 B,分别的高速和低速情况下进
行模拟测试,结果如下,图中 Speed_M_Ref 和 Speed_T_Ref 为速度参考值,Speed_M 和
Speed_T 为测试结果值。
高速 M 法测试结果(1460rpm~2920rpm):
高速 T 法测试结果(1460rpm~2920rpm):
中速 M 法测试结果(146rpm~292rpm):
中速 T 法测试结果(146rpm~292rpm):
低速 M 法测试结果(19rpm~35rpm):
低速 T 法测试结果(19rpm~35rpm):
4. 小结
本文简单介绍了电机控制中 M 法和 T 法测速的原理,给出了在 STM32 中如何利用定时器
的编码器接口和多个定时器合作的方式实现两种测速的方案,并对方案进行了模拟测试,给出测
试结果,高速下 M 法的效果更好,在低速情况下 M 法测速偏差大,T 法测速更适合低速测速。
本文档参考ST官方的《LAT1447-电机测速方法以及在STM32中的实现-M法与T法的应用详解》文档。
参考下载地址:https://download.csdn.net/download/u014319604/90471172