4. 速度环控制:让电机听话的关键一环
速度环,说白了就是让电机按照你想要的转速稳定运行。电流环管的是力矩,速度环管的是转速。这两个环串在一起,就构成了FOC最经典的双环结构。我个人习惯把速度环看作是「指挥官」,电流环是「执行者」——指挥官说我要多快,执行者就去出力实现。
核心认知:速度环的输出就是电流环的输入(通常是Iq的给定值)。没有速度环,电机只能开环跑;有了速度环,电机才能闭环稳速。
4.1 速度环在FOC中的位置
先看一张我手绘的结构图,帮你理清位置关系:
从图上你能看到,速度环是外环,电流环是内环。速度环的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是转动惯量。实际工程中,我很少去精确建模,而是用工程整定法:
- 先调Kp:从小到大加,直到速度响应出现轻微振荡,然后回调30%
- 再加Ki:消除稳态误差,但不要加太多,否则低速会抖
- 限幅保护:速度环输出(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已经能覆盖机械谐振频率了,再高只会增加噪声敏感度。