1
电机测速方法概述
在电机控制领域,对电机转速的实时检测至关重要,以便实现精准的速度控制和闭环反馈。
常见的电机测速方法包括 M法测速 和 T法测速,它们各具优缺点,适用于不同的工作场景。
1.1. M法测速原理
M法测速通过在固定的时间窗口 (T_s) 内统计编码器输出的脉冲数 (M_1),并基于脉冲数计算电机转速。下图展示了M法测速的基本原理。
公式1:
假设编码器在电机旋转一圈时输出 (Z) 个脉冲(4x模式下),则电机转速 (n) (r/min) 计算公式为:
分辨率:
误差率:
由此可知,M法测速分辨率与 (T_s) 和 (Z) 相关,误差率与 (M_1) 成反比。当电机高速旋转时,(M_1) 较大,测量精度较高;但在低速情况下,(M_1) 变小,误差率显著增大,因此M法更适用于高速场景。
1.2. T法测速原理
T法测速通过测量编码器连续两个脉冲之间的时间间隔,间接计算转速。通过捕获高频时钟脉冲数量 (M_2),可计算时间间隔,进而计算转速。
公式2:
电机转速 (n) 为:
分辨率:
误差率:
T法测速在低速时 (M_2) 较大,分辨率更高,误差率更低,因此非常适合低速电机测速。
2
基于STM32的M法和T法测速实现
STM32内部定时器具备编码器接口功能,可以直接对编码器信号进行计数。
在本方案中,通过配置TIM3和TIM2定时器配合,实现M法和T法测速。
3
M法测速实现
在TIM6的定时中断中,每隔(T_s)读取一次TIM3的计数值,并计算两次计数之差(M_1),即可通过公式(1)计算转速。
中断服务函数示例:
void TIM6_IRQHandler(void)
{
staticuint32_t last_cnt =0;
uint32_t current_cnt = TIM3->CNT;
// 计算M1
int32_t M1 = current_cnt - last_cnt;
if(M1 <0) M1 +=0xFFFF;
// 计算转速
float speed =(60.0* M1)/(Z * Ts);
// 更新计数值
last_cnt = current_cnt;
}
4
T法测速实现
在TIM2的捕获中断中,每次捕获到一个脉冲时记录捕获值M2,通过高频时钟(f_t)计算间隔时间,进一步计算转速。
中断服务函数示例:
void TIM2_IRQHandler(void)
{
uint32_t capture = TIM2->CCR1;
// 计算时间间隔
floatdelta_t= capture /(float)ft;
// 计算转速
float speed =60.0/(Z *delta_t);
}
5
测试与结果
5.1. 高速测试(1460rpm~2920rpm)
M法测速结果:偏差小,精度高。
T法测速结果:误差略大。
5.2. 中速测试(146rpm~292rpm)
M法: 误差增加。
T法: 精度较高。
5.3. 低速测试(19rpm~35rpm)
M法: 误差非常大。
T法: 误差较小,适合低速场合。
基于STM32硬件平台实现了两种测速方法。实验结果表明:
高速状态:M法精度更优,T法误差较大。
低速状态:T法精度更优,M法误差较大。
中速状态:两者效果接近,但T法更具优势。
在实际应用中,可根据电机的运行速度选择合适的测速方法,或者结合软硬件算法,动态切换测速模式,以获得最佳测速效果。