4. 速度环控制:让电机听话的关键一环

速度环,说白了就是让电机按照你想要的转速稳定运行。电流环管的是力矩,速度环管的是转速。这两个环串在一起,就构成了FOC最经典的双环结构。我个人习惯把速度环看作是「指挥官」,电流环是「执行者」——指挥官说我要多快,执行者就去出力实现。

核心认知:速度环的输出就是电流环的输入(通常是Iq的给定值)。没有速度环,电机只能开环跑;有了速度环,电机才能闭环稳速。

4.1 速度环在FOC中的位置

先看一张我手绘的结构图,帮你理清位置关系:

FOC双环控制结构(速度环 + 电流环) 速度给定 ω* 速度PI ASR 电流给定 Iq* 电流PI ACR 电机 PMSM/BLDC 速度反馈 ω_fb 关键路径:ω* → 速度PI → Iq* → 电流PI → 电机 → 速度反馈 → 速度PI 速度环的输出(Iq*)直接决定了电机的转矩电流,进而控制转速

从图上你能看到,速度环是外环,电流环是内环。速度环的PI输出直接作为电流环的Iq给定。这个级联关系非常重要——内环必须比外环快得多,一般电流环的带宽是速度环的5~10倍。我在项目中遇到过有人把两个环的带宽设成一样,结果系统振荡得一塌糊涂。

4.2 速度测量方法

速度环离不开速度反馈。没有准确的反馈,PI调得再好也是白搭。常用的速度传感器有两种:编码器和霍尔传感器。

4.2.1 编码器测速

编码器分增量式和绝对式。增量式编码器输出A、B、Z三路信号,通过脉冲计数来算速度。绝对式编码器直接输出位置值,精度更高但价格也贵。

我个人在工业伺服项目里用得最多的是增量式编码器,性价比高,配合M法或T法测速,精度完全够用。

4.2.2 霍尔传感器测速

霍尔传感器一般用在BLDC电机里,三个霍尔元件相隔120°安装。电机每转一圈,每个霍尔会输出6个状态变化(6步换相法)。通过检测霍尔边沿的时间间隔,就能算出转速。

霍尔测速的优点是便宜、简单,但精度有限。低速时尤其明显——我曾经在低速伺服项目里试过霍尔测速,结果速度波动大得没法看,最后还是换成了编码器。

4.3 M法与T法测速

这是测速的两个基本方法。很多初学者搞不清区别,我在这里给你讲透。

方法 原理 适用场景 精度特点
M法 固定时间T内,计脉冲数M 中高速(>100 RPM) 高速时精度高,低速时误差大
T法 固定脉冲数M,计时间T 低速(<100 RPM) 低速时精度高,高速时误差大
M/T法 同时测M和T,综合计算 全速域 宽范围高精度,计算稍复杂

M法:比如你固定10ms测一次,数出这段时间内来了多少个脉冲。转速 = 脉冲数 / (时间 × 编码器线数 × 倍频系数)。高速时脉冲多,精度好;低速时脉冲少,一个脉冲的误差就能让速度跳得很厉害。

T法:反过来,我固定等N个脉冲,然后测这N个脉冲花了多长时间。低速时脉冲间隔长,计时精度高;高速时脉冲间隔短,计时误差占比大。

M/T法:把两者结合,低速用T法,高速用M法,中间区域平滑切换。我建议你在实际项目中直接上M/T法,虽然代码多几行,但全速域精度都有保障。

我的经验:编码器线数越高,M法低速精度越好。如果编码器只有500线,M法在50RPM以下基本不可用。这时候要么换T法,要么换更高线数的编码器。

4.4 速度环PI设计

速度环的PI设计和电流环类似,但有一些特殊之处。

4.4.1 PI参数整定

速度环的传递函数可以简化为:

G(s) = (Kp * s + Ki) / (J * s² + Kp * s + Ki)

其中J是转动惯量。实际工程中,我很少去精确建模,而是用工程整定法:

  1. 先调Kp:从小到大加,直到速度响应出现轻微振荡,然后回调30%
  2. 再加Ki:消除稳态误差,但不要加太多,否则低速会抖
  3. 限幅保护:速度环输出(Iq*)必须限幅,防止电流环饱和

注意:速度环的Ki不能太大。Ki太大会导致积分饱和,尤其在启动和停止时,速度超调会非常严重。我见过有人把Ki设到电流环的Ki一样大,结果电机一启动就飞车。

4.4.2 积分分离与抗饱和

速度环启动时,误差很大,积分项会迅速累积。等速度接近目标时,积分项已经「撑」得很大,导致严重的超调。解决办法有两个:

  • 积分分离:误差大于某个阈值时,积分项不累加
  • 抗饱和(Anti-Windup):输出限幅时,积分项停止更新

代码实现很简单:

// 速度环PI(带积分分离和抗饱和)
float speed_pi(float target, float feedback) {
    float error = target - feedback;
    float p_out = Kp * error;
    
    // 积分分离:误差太大时不积分
    if (fabs(error) < INTEGRAL_THRESHOLD) {
        integral += Ki * error * dt;
    }
    
    // 抗饱和:输出限幅时冻结积分
    float output = p_out + integral;
    if (output > OUTPUT_MAX) {
        output = OUTPUT_MAX;
        integral = output - p_out;  // 回退积分
    } else if (output < OUTPUT_MIN) {
        output = OUTPUT_MIN;
        integral = output - p_out;
    }
    
    return output;
}

4.5 速度环与电流环的级联关系

级联控制是FOC的精髓。速度环和电流环的关系,我总结成一句话:速度环决定「要多少力」,电流环决定「怎么给这个力」。

具体来说:

  • 速度环的采样频率一般是1kHz~2kHz(周期0.5ms~1ms)
  • 电流环的采样频率一般是10kHz~20kHz(周期50μs~100μs)
  • 速度环每算一次,电流环已经跑了10~20次

为什么要这样设计?因为电流环要快速响应反电动势变化和负载扰动,而速度环的机械时间常数本来就大,不需要那么快。你想想看,电机转子的惯性决定了它不可能瞬间改变转速,所以速度环慢一点完全没问题。

级联设计原则:

  • 内环(电流环)带宽 = 5~10倍 × 外环(速度环)带宽
  • 速度环输出限幅值 = 电流环额定值的80%~90%
  • 速度环积分项必须在电流环限幅范围内工作

我在一个机器人关节项目里,把速度环带宽设到50Hz,电流环带宽设到500Hz,效果非常好。后来有人问我为什么电流环不设到1kHz?我说没必要,500Hz已经能覆盖机械谐振频率了,再高只会增加噪声敏感度。