伺服系统基本架构:位置环、速度环、电流环三环结构解析
做伺服驱动的人都知道,伺服系统最核心的就是三个闭环:位置环、速度环、电流环。这三个环像俄罗斯套娃一样,一层套一层。我刚开始接触伺服时,总觉得这结构太复杂,后来才明白——正是这种嵌套结构,才让伺服系统有了高精度的跟随能力。
说白了,三环结构就是一套「目标分解」机制。位置环负责最终精度,速度环负责平稳性,电流环负责响应速度。你想想看,如果只有一个环,既要管位置又要管电流,那控制器根本忙不过来。
2.1 三环结构总览
先看一张整体框架图,把三环的关系理清楚。
从图上你能看到,位置环在最外层,速度环在中间,电流环在最里面。每个环都有自己的控制器和反馈通道。我习惯把这种结构叫做「洋葱模型」——剥开一层还有一层。
2.2 电流环:最内层,最快
电流环是三个环中响应最快的。它的任务很简单:让电机绕组中的实际电流,快速跟上指令电流。
为什么电流环要放在最里面?因为电流直接决定电磁转矩。你想想看,如果电流响应慢了,速度环和位置环再怎么调都没用。我在调试高速冲床时遇到过这种情况——电流环带宽不够,电机一加速就丢步,后来把电流环采样频率从 8kHz 提到 16kHz,问题才解决。
电流环关键参数:
- 带宽:通常 500Hz ~ 2kHz,取决于开关频率和电机电感
- 采样频率:一般与 PWM 开关频率相同,8kHz ~ 20kHz
- 控制器:PI 控制为主,很少用纯 P
- 反馈:霍尔电流传感器或采样电阻
电流环的数学模型其实不复杂。以永磁同步电机为例,d-q 轴电压方程是:
Vd = Rs * Id + Ld * dId/dt - ω * Lq * Iq
Vq = Rs * Iq + Lq * dIq/dt + ω * (Ld * Id + ψf)
实际工程中,我们通常做 id=0 控制,这样转矩只和 iq 成正比,控制起来简单很多。我建议初学者先从 id=0 入手,等把电流环调稳了,再考虑 MTPA 等高级策略。
💡 我的经验:电流环 PI 参数整定时,先把积分项设成 0,只调比例增益。让电流响应不振荡了,再加积分消除静差。这样一步步来,不容易出问题。
2.3 速度环:中间层,承上启下
速度环接收位置环给出的速度指令,输出电流指令给电流环。它的核心任务是让电机转速平稳,不受负载扰动影响。
速度环的带宽通常比电流环低 5~10 倍。为什么?因为速度反馈来自位置微分,本身就有噪声。带宽设太高,反而会把噪声放大。我记得有次调试印刷机,速度环带宽设到 200Hz,结果电机嗡嗡响,后来降到 80Hz 就安静了。
| 参数 | 典型范围 | 说明 |
|---|---|---|
| 速度环带宽 | 20 Hz ~ 200 Hz | 取决于机械刚性和负载惯量 |
| 速度环采样周期 | 0.5 ms ~ 2 ms | 通常比电流环慢 5~10 倍 |
| 控制器类型 | PI | 纯 P 会有静差 |
| 反馈方式 | 编码器微分 / 测速机 | 微分会放大噪声 |
速度环整定时,我有个习惯:先让电机空载跑,调好 PI 参数;然后加上 50% 负载,看速度跌落和恢复时间。如果恢复太慢,加大 Ki;如果超调太大,减小 Kp。说白了,就是反复试,直到找到平衡点。
⚠️ 注意:速度环的输出(电流指令)一定要做限幅。否则一旦位置环给出过大的速度指令,电流环可能饱和,导致电机失控。我曾经见过一台设备因为没限幅,加速时电流直接冲到驱动器保护值,整条产线停了半小时。
2.4 位置环:最外层,精度担当
位置环是最终用户能感知到的环。它的输入是目标位置,输出是速度指令。位置环的精度直接决定了伺服系统的跟随误差。
位置环的带宽最低,通常只有 5 Hz ~ 50 Hz。为什么这么低?因为位置反馈来自编码器,而编码器分辨率有限。带宽设高了,位置反馈的量化噪声会被放大,导致电机抖动。
位置环控制器有两种常见选择:
- 纯 P 控制:简单,但有静差。适合点位运动,不适合轮廓跟踪。
- P + 前馈控制:加入速度前馈和加速度前馈,能大幅减小跟随误差。我强烈推荐这种方式。
前馈控制的原理其实不复杂。你想想看,如果我知道目标轨迹的速度和加速度,那我可以提前给速度环一个补偿信号,而不是等位置误差出来了再调整。这样做的好处是——跟随误差能减小 80% 以上。
// 位置环 + 前馈控制伪代码
void PositionLoop(void)
{
// 位置误差计算
pos_error = target_pos - actual_pos;
// P 控制
speed_cmd_p = Kpp * pos_error;
// 速度前馈
speed_cmd_ff = Kff_v * target_velocity;
// 加速度前馈
speed_cmd_aff = Kff_a * target_acceleration;
// 合成速度指令
speed_cmd = speed_cmd_p + speed_cmd_ff + speed_cmd_aff;
// 限幅
if(speed_cmd > MAX_SPEED) speed_cmd = MAX_SPEED;
if(speed_cmd < -MAX_SPEED) speed_cmd = -MAX_SPEED;
}
关键结论:位置环的跟随误差主要来自三个方面:
- 比例增益不足:Kpp 太小,误差收敛慢
- 前馈缺失:没有速度/加速度前馈,动态误差大
- 速度环响应慢:位置环输出速度指令,但速度环跟不上
2.5 三环之间的配合关系
三个环不是独立工作的,它们之间有严格的配合关系。我总结了几条「铁律」:
| 原则 | 说明 | 后果 |
|---|---|---|
| 带宽逐级递减 | 电流环 > 速度环 > 位置环 | 内环响应快,外环才能稳定 |
| 输出限幅 | 每环输出都要限幅 | 防止饱和,保护下级 |
| 采样同步 | 电流环采样最快,速度环次之,位置环最慢 | 避免数据混叠 |
| 积分分离 | 外环饱和时,内环积分应停止 | 防止积分饱和 |
我曾经在调试一台五轴机械手时,发现 Z 轴在下降时总是过冲。查了半天,原来是位置环输出限幅设得太高,速度环收到过大的速度指令,导致电流环饱和。把限幅降到合理值后,问题就解决了。嗯,这种问题其实很常见,但排查起来确实费时间。
2.6 实际调试中的常见问题
最后分享几个我在项目中踩过的坑:
🔧 调试顺序:先调电流环,再调速度环,最后调位置环。这个顺序不能乱。我见过有人先调位置环,结果电机抖得像筛子,还以为是位置环参数问题,其实是电流环根本没调好。
⚠️ 编码器噪声:位置反馈的噪声会通过微分放大到速度环。如果电机在静止时有微小抖动,先检查编码器信号质量,别急着调参数。我曾经换了一根屏蔽电缆,抖动就消失了。