首页 / 驱动算法 / 进阶篇

三闭环带宽分配与PI整定:传递函数与滞后时间

电流环、速度环、位置环的带宽该按什么比例分配?PI 参数能不能"算"出来而不是"试"出来?为什么电流环带宽很难超过开关频率的十分之一?本文用传递函数把三环层层剥开,再用滞后时间模型解释带宽的物理天花板,最后用仿真器验证。

1. 三闭环架构:为什么要"外慢内快"

FOC 伺服控制本质上是三个嵌套的闭环

级联设计有一条铁律——"外慢内快":外环带宽必须比内环低一个数量级左右(速度环取电流环的 1/5~1/10,位置环取速度环的 1/3~1/5)。原因是:外环把内环当成"已调好的快惯性",只有内环足够快、能瞬时跟踪外环输出时,外环的模型才成立;若内外环带宽接近,两个环会互相"打架",出现振荡甚至失稳。

控制环被控对象反馈量典型带宽与内环关系
电流环1/(Ls·s+Rs)(电气)id / iq500 Hz ~ 2 kHz(≈fsw/10)
速度环1/(J·s+B)(机械)ωm≈ 电流环 1/5~1/10(50~300 Hz)把电流环当 1/(τis+1)
位置环1/s(积分)θm≈ 速度环 1/3~1/5(10~60 Hz)把速度环当惯性

理解级联的关键:每个外环看到的"被控对象"都包含了内环的闭环特性。所以整定的顺序只能是"由内到外":先整电流环,再整速度环,最后位置环——因为外环的模型依赖内环的真实带宽。

2. 电流环:从电机模型算出 PI

2.1 电气模型

d 轴电流调零后,q 轴电压方程(忽略摩擦与凸极耦合,加入前馈解耦后)简化为:

q 轴电气模型(一阶)

uq = Rs·iq + Ls·diq/dt  ⟹  Gi(s) = iq(s)/uq(s) = 1/(Ls·s + Rs)

其中 Rs 是相电阻、Ls 是 q 轴电感。这是一个一阶惯性环节,转折频率(电气自然频率)为 fe = Rs/(2π·Ls)。注意:反电动势项 ωe·ψf 和交叉耦合项 ωe·L·id扰动,正常做法是加前馈解耦把它抵消掉,否则它们会挤占控制器的调节能力(这在高速尤其明显)。

2.2 PI 零极点对消

电流环 PI 控制器 Ci(s) = Kp + Ki/s。它的零点在 s = −Ki/Kp,正好用来对消对象的极点 s = −Rs/Ls

零极点对消条件

Ki/Kp = Rs/Ls  ⟹  积分时间 Ti = Ls/Rs

对消之后,开环传函变成 Kp/(Ls·s)——纯积分器,闭环为一阶:

电流环闭环传函

Gcl,i(s) = Kp/(Ls·s + Kp) = ωci/(s + ωci) ,   ωci = Kp/Ls

这是一阶低通,-3dB 带宽正好等于 ωci/(2π)。于是 PI 参数可以直接由电感和期望带宽算出来,不用试凑:

电流环 PI 整定公式

Kp = Ls·ωci ,    Ki = Rs·ωci

ωci = 2π·fbw,i;例如 R=0.5Ω、L=1mH、期望带宽 1kHz → Kp = 6.28 V/A,Ki = 3140 V/(A·s)

2.3 带宽怎么选:开关频率是天花板

电流环带宽不是想多高就多高。三条硬约束:

  1. 采样定理:理论上 fbw,i < fsw/2,否则控制频率都跟不上信号
  2. 工程惯例:为保证数字控制效果与抗噪,通常取 fbw,i ≤ fsw/10(20kHz 开关 → 约 2kHz,实际常用 1~1.5kHz)
  3. 电压极限:要快速改变电流就要高 di/dt,而母线电压有限——理论带宽超出母线电压能力时,"带宽"只是个够不到的饼

3. 速度环:把电流环当成"快惯性"

3.1 机械模型

机械运动方程

J·dω/dt = Te − Tl − B·ω  ⟹  Gω(s) = 1/(J·s + B)

J 是折算到电机轴的转动惯量,B 是粘性阻尼(通常很小,可忽略)。速度环看到的对象里,还叠加了电流环的闭环特性——电流环被等效成一个一阶惯性 1/(τi·s+1),其中 τi ≈ 1/ωci。所以速度环的实际被控对象 ≈ 1/(J·s) × 1/(τis+1)(忽略 B)。

3.2 速度环 PI 整定

仍用零极点对消的思想:把 PI 零点放到对象极点处,但对象这里只有积分器(极点在中点),所以工程上用对称整定更实用:把期望带宽放在对象"积分 + 电流环惯性"两个极点之间。简化公式:

速度环 PI 整定(对称整定近似)

Kpv = J·ωcv / Kt ,    Kiv = Kpv·ωcv/2

ωcv = 2π·fbw,v;Kt 为转矩常数(Nm/A)。带宽取电流环 1/5~1/10,例如电流环 1kHz → 速度环 100~200Hz

4. 位置环:最外环,P 控制就够

位置环对象是速度→位置的积分器 1/s。外环已经够慢,P 控制即可获得无稳态误差的跟踪(因为被控对象自带积分器,P 控制对阶跃位置指令稳态误差为 0):

位置环 P 控制整定

Kpp = ωcp ,    fbw,p = fbw,v/3~5

带宽 10~60Hz。Kpp 单位是 1/s,物理含义就是位置环带宽

若要进一步压低跟踪滞后,可加速度前馈(把速度指令前馈到速度环),不影响稳定性却能大幅减小位置跟踪相位滞后。

5. 传递函数汇总

环节被控对象 G(s)控制器 C(s)闭环近似带宽
电流环1/(Lss+Rs)Kp+Ki/sωci/(s+ωci)fsw/10
速度环1/(Js+B)·1/(τis+1)Kpv+Kiv/s≈ 二阶(对称整定)电流环/5~10
位置环1/sKpp(P)ωcp/(s+ωcp)速度环/3~5

注意规律:每一层内环闭环后都会"升级"成外环眼中的一阶惯性,所以带宽逐级递减的本质,是每一级都要给内环的动态留出足够的频带余量。

6. 滞后时间:带宽的物理天花板

6.1 滞后从哪里来

理论 PI 算出的带宽是"理想连续域"的数字,实际永远达不到,因为数字控制引入了滞后(延迟)

合在一起,电流环的总等效延迟 Td ≈ 1~1.5·Tsw(论文常用的电流采样更新延时即 1.5·Ts)。

6.2 滞后如何吃掉相位裕度

延迟的传函是 e−sTd,一阶帕德近似为 1/(1+sTd)。在开环穿越频率 ωc 处,它引入的相位滞后约 −ωc·Td(弧度)。对电流环(开环近似积分器),理想相位裕度约 90°,扣除延迟后:

相位裕度与带宽极限

φm ≈ 90° − ωc·Td · (180°/π)

要求 φm ≥ 45° ⟹ ωc·Td ≤ π/4 ≈ 0.79 rad;Td=1.5Tsw 时 ⟹ fbw ≤ 0.79/(2π·1.5Tsw) ≈ 0.084·fsw

看,0.084·fsw ≈ fsw/12——这就是"电流环带宽很难超过开关频率 1/10"的数学根源!它不是经验玄学,而是 1.5 拍滞后直接限死的。想提高带宽,要么提高开关频率(减小 Tsw),要么用预测控制/无差拍等补偿滞后的手段。

6.3 滞后对速度环/位置环同样成立

速度环的滞后 = 速度采样周期 + 速度滤波;位置环滞后 = 位置采样/输出周期。虽然外环带宽低、滞后影响小,但速度滤波常成为实际瓶颈:滤波时间常数越大,可达到的速度环带宽越低。经验值:速度环控制频率 500Hz~2kHz、位置环 100Hz~500Hz 是常见选择。

⚠️ 实测带宽永远低于理论

有资料统计:按公式算出电流环理论带宽 400Hz,实测 Bode 图却只有 128Hz——差距正是采样/计算延迟(约 1.5 个 PWM 周期)、PWM 更新模式、电流滤波与反电动势扰动共同吃掉的。因此理论整定只是起点,务必用实测 Bode(扫频/系统辨识)确认真实带宽,再往回调。

7. 交互式演示:三环整定与滞后仿真

下面输入电机参数(Rs/Ls/J)与开关频率,系统按"电流环=fsw/10、速度环=电流环/8、位置环=速度环/4"自动算三环 PI 参数;左上图看三环带宽在对数频率轴上的配比与滞后极限线(相位裕度<45° 标红),右下图是电流环/速度环阶跃响应离散仿真——把"滞后系数"拉大,看超调如何涨上去。

三闭环带宽分配与 PI 整定仿真器
调整参数后,带宽配比与 PI 参数会自动更新。

观察要点:

8. 代码实现(C语言)

8.1 通用 PI 控制器

/* 通用 PI 控制器:带限幅与条件积分(抗饱和) */ typedef struct { float kp; /* 比例增益 */ float ki; /* 积分增益(连续域) */ float integral; /* 积分累加值 */ float out_max; /* 输出上限 */ float out_min; /* 输出下限 */ } pi_ctrl_t; float pi_update(pi_ctrl_t *p, float err, float ts) { float out, u_unlim; p->integral += p->ki * ts * err; /* 积分项(离散) */ u_unlim = p->kp * err + p->integral; /* 比例 + 积分 */ /* 条件积分:输出饱和时冻结积分,防止积分饱和 */ out = u_unlim; if (out > p->out_max) { out = p->out_max; if (p->integral > p->out_max) p->integral = p->out_max; } else if (out < p->out_min) { out = p->out_min; if (p->integral < p->out_min) p->integral = p->out_min; } return out; }

8.2 电流环 PI 参数整定

/* 电流环整定:由 R/L 与期望带宽直接算出 Kp/Ki(零极点对消) */ void current_loop_tune(pi_ctrl_t *p, float rs, float ls, float bw_hz) /* bw_hz = fsw/10 附近 */ { const float wc = 2.0f * 3.14159265f * bw_hz; /* 期望带宽 (rad/s) */ p->kp = ls * wc; /* Kp = Ls·ωc */ p->ki = rs * wc; /* Ki = Rs·ωc */ p->integral = 0.0f; p->out_max = 0.95f * VDC; /* 电压指令限幅(留 5% 余量给解耦/前馈) */ p->out_min = -p->out_max; }

8.3 电流环 ISR 主循环

/* PWM 中心对齐采样触发的中断:采样→PI→前馈→输出 */ void current_loop_isr(void) { float iq_meas = get_iq(); /* Park 变换后的 q 轴电流 */ float err = iq_ref - iq_meas; float uq_pi = pi_update(&pi_iq, err, TS_CTRL); /* 前馈解耦:补偿反电动势与交叉耦合(dq 轴) */ float uq_ff = omega_e * PSI_F + omega_e * Ls * id_meas; float ud_ff = -omega_e * Ls * iq_meas; vq_ref = uq_pi + uq_ff; vd_ref = pi_update(&pi_id, id_ref - id_meas, TS_CTRL) + ud_ff; /* vd/vq → 逆 Park → SVPWM(更新比较寄存器,本周期生效) */ inverse_park_and_svpwm(vd_ref, vq_ref, theta_e); }

8.4 速度环整定(离散)

/* 速度环整定:对称整定近似;J 为折算惯量,Kt 为转矩常数 */ void speed_loop_tune(pi_ctrl_t *p, float j, float kt, float bw_hz) /* bw_hz = 电流环/5~10 */ { const float wc = 2.0f * 3.14159265f * bw_hz; p->kp = j * wc / kt; /* Kpv = J·ωc/Kt */ p->ki = p->kp * wc * 0.5f; /* Kiv = Kpv·ωc/2(对称整定) */ p->integral = 0.0f; p->out_max = IQ_MAX; /* 速度环输出即 iq 指令,有硬限幅 */ p->out_min = -p->out_max; }

9. 工程要点与常见误区

  1. 整定顺序固定:先电流环→再速度环→最后位置环,由内向外,顺序不能乱
  2. 理论只是起点:公式算出的 PI 先给初值,务必用实测 Bode/阶跃验证真实带宽,滞后会吃掉一部分
  3. 带宽宁可留余量:电流环取 fsw/10 而非 fsw/5,是为了相位裕度和抗噪,别把带宽逼到开关频率附近
  4. 高速别忘前馈:反电动势与交叉耦合在高速占主导,前馈解耦不做,电流环带宽再高也白搭
  5. 抗积分饱和必须做:速度环(iq 限幅)和电流环(电压限幅)都容易饱和,条件积分是标配
  6. 速度滤波是隐形瓶颈:速度滤波时间常数决定了速度环能达到的带宽上限,滤波太狠带宽上不去
✅ 一句话记住

电流环带宽由 R/L 算出、由开关频率卡死速度环带宽是电流环的 1/5~1/10位置环带宽再降 1/3~1/5;而所有带宽的共同天花板,是 滞后时间 Td≈1.5 个 PWM 周期。想更快?提高开关频率,或补偿滞后。