1. 三环控制基础:电流环、速度环、位置环的基本概念与层级关系

做PMSM控制这些年,我见过不少新手一上来就调PID参数,结果调了半天电机要么抖得像筛子,要么干脆转不起来。其实说白了,三环控制就像盖楼——你得先打好地基,再砌墙,最后才能装修。这个地基,就是电流环。

1.1 为什么是三个环?

永磁同步电机的控制,本质上是在跟电磁转矩较劲。你想让电机转多快、转到哪、输出多大扭矩,最终都得靠电流来实现。所以三个环的分工很明确:

  • 电流环(最内层):直接控制电机绕组里的电流,响应最快
  • 速度环(中间层):根据目标转速和实际转速的偏差,给电流环发指令
  • 位置环(最外层):根据目标位置和实际位置的偏差,给速度环发指令

我刚开始做伺服驱动时,总觉得位置环直接给电流环发指令不就行了?结果电机到位后总在目标位置附近来回震荡。后来才明白——没有速度环做阻尼,位置环就是个没刹车的跑车。

核心认知:三环的本质是带宽分层。电流环带宽最高(1-5kHz),速度环次之(100-500Hz),位置环最低(10-100Hz)。内环必须比外环快5-10倍,否则系统会失稳。

1.2 电流环——最内层的"肌肉"

电流环控制的是啥?说白了就是Id和Iq。Id负责励磁,Iq负责转矩。在表贴式PMSM(SPMSM)里,我们通常让Id=0,只控制Iq;但在内置式PMSM(IPMSM)里,还要考虑MTPA(最大转矩电流比)控制,Id和Iq要配合着来。

电流环的典型结构是这样的:

// 电流环PI控制器(离散化实现)
typedef struct {
    float Kp;           // 比例增益
    float Ki;           // 积分增益
    float integral;     // 积分累加项
    float output_max;   // 输出限幅
    float output_min;   // 输出限幅
} PI_Controller;

float PI_Update(PI_Controller *pi, float error) {
    pi->integral += pi->Ki * error;
    // 抗积分饱和
    if (pi->integral > pi->output_max) pi->integral = pi->output_max;
    if (pi->integral < pi->output_min) pi->integral = pi->output_min;
    
    float output = pi->Kp * error + pi->integral;
    // 输出限幅
    if (output > pi->output_max) output = pi->output_max;
    if (output < pi->output_min) output = pi->output_min;
    return output;
}

实战技巧:调电流环时,我习惯先给一个阶跃电流指令(比如0.5A),用示波器看实际电流的响应波形。如果电流上升沿有超调,说明Kp偏大;如果上升太慢,说明Kp偏小。积分项Ki主要消除稳态误差,但Ki太大会引起震荡。

1.3 速度环——中间的"大脑"

速度环接收位置环或用户直接给定的速度指令,输出给电流环作为Iq的参考值。速度环的带宽比电流环低一个数量级,所以它的采样周期通常比电流环慢5-10倍。

这里有个坑——速度反馈的精度直接影响控制效果。我遇到过一台电机,低速时转速波动特别大,查了半天发现是编码器分辨率不够,导致速度计算值跳变太大。后来换了高分辨率编码器,问题就解决了。

参数 电流环 速度环 位置环
采样频率 10-20 kHz 1-4 kHz 0.1-1 kHz
带宽 1-5 kHz 100-500 Hz 10-100 Hz
主要干扰 反电动势、死区 负载突变、摩擦 机械谐振、间隙
PI参数影响 电流响应速度 转速跟随性 定位精度

1.4 位置环——最外层的"指挥官"

位置环是最外层的控制环,它根据目标位置和实际位置的差值,计算出速度指令给速度环。位置环的带宽最低,因为位置信号通常来自编码器,采样频率受限,而且机械系统的惯性也限制了位置响应的速度。

位置环的控制策略有两种主流方式:

  • P控制:只用比例项,位置误差直接映射为速度指令。简单,但会有稳态误差
  • PI控制:加入积分项消除稳态误差,但容易引起位置超调

我个人更倾向于在位置环用P控制加前馈。为什么?因为位置环的积分项很容易和速度环的积分项打架,导致系统响应变慢甚至震荡。前馈补偿可以提前给速度指令,让系统更快响应。

避坑指南:我曾经在一个高精度定位项目中,位置环用了PI控制,结果每次到位后都会过冲再回调。后来把积分项去掉,换成纯P控制加速度前馈,定位精度从±0.1mm提升到了±0.02mm。记住——位置环的积分项不是必须的,有时候反而是累赘。

1.5 三环的层级关系——一张图说清楚

下面这张图展示了三环控制的完整结构。你从右往左看,就是信号流动的方向:位置指令→速度指令→电流指令→电机。从左往右看,是反馈信号的反向流动。

三环控制PMSM系统结构图 位置环 P/PI控制器 带宽: 10-100Hz 速度环 PI控制器 带宽: 100-500Hz 电流环 PI控制器 带宽: 1-5kHz PMSM 电机+负载 速度指令 Iq指令 电压 位置反馈(编码器) 速度反馈(编码器差分/观测器) 电流反馈(ADC采样) 💡 关键理解: 内环(电流环)响应最快,外环(位置环)响应最慢。调参时必须从内到外依次进行——先调好电流环,再调速度环,最后调位置环。 外环的输出是内环的输入,所以外环的带宽必须远低于内环,否则系统会震荡。

1.6 调参顺序——为什么必须从内到外?

这个问题我回答过很多次。你想想看——如果电流环都没调好,速度环给一个Iq指令,实际电流却跟不上,那速度环调得再好有什么用?

正确的调参顺序是:

  1. 先调电流环:让Id和Iq能快速准确地跟踪指令值
  2. 再调速度环:让转速能平滑跟随速度指令
  3. 最后调位置环:让位置定位精准且无超调

每个环节调好后,最好锁定参数,不要回头乱改。我见过有人调速度环时觉得响应慢,就去改电流环的Kp,结果电流环开始震荡,速度环也跟着抖——这就是典型的"拆东墙补西墙"。

一句话总结:三环控制就是电流环保响应、速度环保平稳、位置环保精度。从内到外,层层递进,缺一不可。