4、速度测量方法:M法、T法、M/T法

速度测量,说白了就是回答一个问题:电机现在转多快?

在C2000的编码器换相调参里,速度值不仅用于显示,更直接参与电流环和速度环的闭环控制。测不准,环就调不稳。我见过不少新手,花了好几天调PI参数,最后发现是速度测量本身就有问题——嗯,这种坑我踩过不止一次。

常用的方法有三种:M法(单位时间测速)、T法(周期测速)、M/T法(混合测速)。它们各有各的脾气,选对了事半功倍。

核心结论先放这:

  • 高速用M法,低速用T法,全速域兼顾用M/T法。
  • C2000的eQEP模块硬件支持M法和T法,M/T法需要软件配合。
速度测量方法对比框架 速度测量方法 M法(单位时间) T法(周期测速) M/T法(混合) 适用:高速 原理:固定时间测脉冲数 低速误差大 适用:低速 原理:固定脉冲测时间 高速误差大 适用:全速域 原理:M法+T法结合 计算量稍大 C2000 eQEP 硬件支持 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线,速度直接翻倍——这种低级错误查起来很费时间。