4、速度测量方法:M法、T法、M/T法
速度测量,说白了就是回答一个问题:电机现在转多快?
在C2000的编码器换相调参里,速度值不仅用于显示,更直接参与电流环和速度环的闭环控制。测不准,环就调不稳。我见过不少新手,花了好几天调PI参数,最后发现是速度测量本身就有问题——嗯,这种坑我踩过不止一次。
常用的方法有三种:M法(单位时间测速)、T法(周期测速)、M/T法(混合测速)。它们各有各的脾气,选对了事半功倍。
核心结论先放这:
- 高速用M法,低速用T法,全速域兼顾用M/T法。
- C2000的eQEP模块硬件支持M法和T法,M/T法需要软件配合。
4.1 M法:单位时间测速法
M法的思路很直接:固定一个时间窗口,数一数编码器输出了多少个脉冲。
速度 = 脉冲数 / (时间窗口 × 编码器线数 × 倍频系数)
举个例子。我用一个1000线的编码器,4倍频后每转4000个脉冲。如果固定时间窗口是10ms,数到200个脉冲,那转速就是:
200 / (0.01 × 4000) = 5 转/秒 = 300 RPM
我个人习惯:在C2000里用eQEP的QPOSCNT寄存器来读脉冲数。配合CPU定时器,每10ms进一次中断,读一次计数值,减掉上次的值,就是脉冲增量。
M法的优缺点:
- 优点:实现简单,高速时精度高。转速越高,单位时间内的脉冲数越多,量化误差越小。
- 缺点:低速时很尴尬。比如电机只转1 RPM,10ms内可能只来1-2个脉冲,算出来的速度跳变非常大。
我曾经踩过的坑:在低速调试时用M法,速度环输出一直在震荡。我以为是PI参数问题,调了两天。后来发现是M法在低速下测速值本身就在±50%跳动——你想想看,环路的输入都在抖,输出怎么可能稳?
4.2 T法:周期测速法
T法换了个思路:固定脉冲数,测量经过的时间。
速度 = 固定脉冲数 / (测得时间 × 编码器线数 × 倍频系数)
说白了,就是等编码器输出N个脉冲,用定时器量一下花了多久。低速时脉冲间隔长,时间测量值大,相对误差反而小。
T法的优缺点:
- 优点:低速精度好。我做过对比,在10 RPM以下,T法的测量稳定性明显优于M法。
- 缺点:高速时反而不好。转速一高,脉冲间隔变短,定时器分辨率不够的话误差就大了。另外,测量时间不固定,控制周期也跟着变——这对闭环控制不太友好。
关键点:T法在C2000上可以用eQEP的QCAP模块来实现。QCAP可以捕获两次脉冲之间的时间,存入QCPRD寄存器。我建议把捕获的边沿设为“每两个脉冲捕获一次”,减少中断频率。
4.3 M/T法:混合测速法
M/T法,说白了就是把M法和T法结合起来,取长补短。
它的做法是:固定一个测量周期,在这个周期内同时测量脉冲数和最后一个脉冲的时间戳。这样既保证了控制周期固定,又兼顾了低速精度。
计算公式稍微复杂一点:
速度 = (M2 - M1) / (T2 - T1) × (1 / (编码器线数 × 倍频系数))
其中:
M1、M2:周期开始和结束时的脉冲计数值
T1、T2:周期开始和结束时的时间戳(来自eQEP的时间基)
我建议的做法:在C2000上实现M/T法时,利用eQEP的QPOSCNT和QCPRD两个寄存器。QPOSCNT提供脉冲数,QCPRD提供时间戳。软件上只需要在固定周期中断里读取这两个值,做一次减法运算。计算量很小,实测在100kHz中断频率下,CPU占用不到2%。
M/T法的优缺点:
- 优点:全速域精度都比较均衡。从1 RPM到10000 RPM,误差都能控制在1%以内。控制周期固定,对环路友好。
- 缺点:实现比前两种稍微复杂一点。需要同时处理脉冲计数和时间戳,对定时器资源有要求。
4.4 三种方法对比
| 特性 | M法 | T法 | M/T法 |
|---|---|---|---|
| 测量原理 | 固定时间,数脉冲 | 固定脉冲,测时间 | 固定时间,同时测脉冲和时间 |
| 低速精度 | 差 | 好 | 好 |
| 高速精度 | 好 | 差 | 好 |
| 控制周期 | 固定 | 不固定 | 固定 |
| 实现复杂度 | 低 | 中 | 中高 |
| C2000硬件支持 | eQEP + 定时器 | eQEP QCAP | eQEP + 定时器 + 软件 |
4.5 实际项目中的选择建议
我在几个项目里试过这三种方法,总结下来:
- 如果电机主要工作在高速区(比如1000 RPM以上),而且对成本敏感,M法就够了。代码简单,调试也快。
- 如果电机经常在低速区运行(比如伺服定位、力矩控制),建议用T法或者M/T法。我曾经在一个AGV项目里只用M法,结果低速时速度环一直在抖,换成M/T法后问题立刻解决。
- 如果项目要求全速域高性能,别犹豫,直接上M/T法。C2000的eQEP模块天生支持这种测量方式,硬件资源够用,软件也不复杂。
注意:不管用哪种方法,编码器的线数和倍频系数一定要在初始化时配置正确。我见过有人把1000线编码器配成500线,速度直接翻倍——这种低级错误查起来很费时间。