目录
手把手教你学Simulink——基于自抗扰控制(ADRC)的电动汽车电机抗负载扰动仿真
一、为什么要用 ADRC(Active Disturbance Rejection Control) 控制电机
二、LADRC 转速环原理(二阶系统)
2.1 PMSM 机械运动(离散看作)
2.2 扩张状态(ESO)
2.3 控制律
三、关键参数
四、Simulink 建模(手把手)
4.1 Step 1️⃣ —— PMSM + FOC 电流环(同前篇)
4.2 Step 2️⃣ —— LADRC 转速环(核心)
MATLAB Function LADRC_Speed.m
4.3 Step 3️⃣ —— 对比 PI 转速环(可选并排)
4.4 Step 4️⃣ —— 运行 Scenario
五、结果解读(典型)
✅ 稳态 0~1s
✅ 负载突加 @1s
✅ 卸载 @1.5s
六、工程注意点**
七、结论**
手把手教你学Simulink——基于自抗扰控制(ADRC)的电动汽车电机抗负载扰动仿真
一、为什么要用ADRC(Active Disturbance Rejection Control) 控制电机
传统PMSM FOC 转速环 PI:
对负载突变(坡起、急加速、制动拖拽) 响应依赖整定 → 超调 / 震荡
需精确电机参数(J,B)
ADRC 思想(Han·J.Q):
扩张状态观测器(ESO) 实时估计:
未测状态(转速 → 扩张 x1=ω)
总扰动(负载 Torque + 参数摄动 + 摩擦变化) → x3
非线性 / 线性反馈律 用 ESO 补偿扰动:
u=(u0−f^)/b0
u0=Kp⋅(ωref−ω^)
f^: ESO 估的总扰动
b0: 控制增益近似 =1/Jnom(可粗估)
⇒强鲁棒、对 J 不敏感、抗负载突加
目标(前两篇 PMSM FOC 参数):
PMSM p=4,ψf=0.175Wb,Ld=Lq=0.85mH,Rs=0.05Ω,J=0.01,B=0.001
原 FOC 电流环 PI 保留
转速环 PI替换为 LADRC(Linear ADRC):
ESO 阶 n=2(ω + 总扰动)
β1=100,β2=3000,Kp=80
b0=1/Jnom=100
工况:0~1s 空载加速到 1500rpm;1s 突加负载 TL=20Nm;1.5s 卸荷
对比:PI vs ADRC → 速降 Δω、恢复时间
基于 Simulink + PMSM FOC + MATLAB Function ESO + ADRC 转速环架构是破局关键。
无论你是 电机先进控制 / 鲁棒驱动工程师,这篇硬核指南都成为你手中“ADRC‑电机抗扰模板”。
二、LADRC 转速环原理(二阶系统)
2.1 PMSM 机械运动(离散看作)
J⋅ω˙+B⋅ω=Te−TL⇒ω˙=f(ω,t)+b⋅u
u=Te(电磁转矩指令)
f(ω,t)=−JBω−JTL→总扰动 =f(ω,t)
b≈1/Jnom
2.2 扩张状态(ESO)
⎩⎨⎧x˙1=x2+b0⋅ux˙2=x3+β1⋅(ω−x1)x˙3=β2⋅(ω−x1)
观测:
ω^=x1
f^=x2(总扰动估计)
离散实现用 Euler(Ts=1e‑5)
2.3 控制律
u0=Kp⋅(ωref−ω^)
u=(u0−f^)/b0
sat u∈[−Tmax,Tmax]
三、关键参数
参数 | 值 |
|---|---|
J | 0.01 kg·m² |
B | 0.001 N·m·s/rad |
Tmax | 300 Nm(→ iqmax≈286A) |
b0 | 100 (1/J_nom) |
ESO β1 | 100 |
ESO β2 | 3000 |
ADRC Kp | 80 |
转速 PI(对比) | Kpn=0.1,Kin=5 |
Load Torque | 0 → 20 N·m @1s → 0 @1.5s |
nref | 1500 rpm (≈157 rad/s) |
仿真 Ts | 1e‑5(电+机械) |
四、Simulink 建模(手把手)
4.1 Step 1️⃣ —— PMSM + FOC 电流环(同前篇)
PMSM(p=4,ψf=0.175Wb,Ld=Lq=0.85mH,Rs=0.05Ω,J=0.01)
三相全桥 400V
Clarke/Park + 电流 PI(Kp=0.5,Ki=200)→ SVPWM
电流环输出 = Tecmd(限 300Nm)
机械负载 TL来自 Step (0→20→0)
量测:
ωmech(rad/s), nrpm
Te
id,iq
4.2 Step 2️⃣ —— LADRC 转速环(核心)
MATLAB FunctionLADRC_Speed.m
function [Te_cmd, w_hat, f_hat] = LADRC_Speed(w_mech, w_ref, b0, beta1, beta2, Kp, Ts, Tmax) % persistent ESO states persistent x1 x2 x3 if isempty(x1) x1 = w_mech; % omega est x2 = 0; % disturbance est x3 = 0; % derivative of disturbance est end % ---- ESO update (Euler) e = w_mech - x1; x1 = x1 + Ts * (x2 + b0 * Te_cmd_prev + beta1 * e); x2 = x2 + Ts * (x3 + beta2 * e); x3 = x3 + Ts * (-beta2 * beta1 * e); % optional: assume f dot slow % Use previous Te_cmd for causality (or pass u in as input) % We'll compute u AFTER ESO using x2, then feed back next step % Simpler: compute u with x2 from *last* sample: persistent u_last if isempty(u_last), u_last = 0; end u0 = Kp * (w_ref - x1); Te_cmd = (u0 - x2) / b0; % saturate Te_cmd = max(min(Te_cmd, Tmax), -Tmax); % store for next ESO Te_cmd_prev = Te_cmd; u_last = Te_cmd; % outputs w_hat = x1; f_hat = x2; end⚠因果处理:
Simulink 推荐Discrete State‑Space ESO 或 用Unit Delay存 u(k−1)→ ESO → 新 u(k)(无 algebraic loop)。
最简可靠法:
MATLAB Function内用Unit Delay逻辑(或 拆 ESO 为 Discrete Filter)
✅更直观:Discrete ESO 搭积木(推荐教学)
e=ωmech−ω^
f^˙=β2⋅e→
1/s→ f^ω^˙=f^+b0⋅u+β1⋅e→
1/s→ ω^u0=Kp⋅(ωref−ω^)
u=(u0−f^)/b0
Unit Delay封闭环
→ 无代数环,清晰观测 ω^,f^
4.3 Step 3️⃣ —— 对比 PI 转速环(可选并排)
ωerr=ωref−ωmech
PI(Kpn=0.1,Kin=5) → iqref(sat ±Imax)
→ 同电流 PI → Tecmd
用 Manual Switch 选ADRC / PI
4.4 Step 4️⃣ —— 运行 Scenario
时间 | 事件 |
|---|---|
0~1s | nref=1500rpm, TL=0 |
1s | TL=+20Nm(坡起/急加) |
1.5s | TL=0(卸载) |
Scope / To Workspace:
nrpm,ωerr,Te,f^(ESO 估扰动 ≈ −T_L/J)
对比 PI 同况
✅ 预期:
ADRC:速降 Δn ↓(≈ PI 的 40~60%),恢复快,ω_err 小
PI:较明显 dip(≈ 30~50rpm @1500rpm),恢复慢
f^在 1s ↑ ≈ −T_L/J = −20/0.01 = −2000 rad/s² ✔
五、结果解读(典型)
✅ 稳态 0~1s
ADRC ω→ωref,ESO f^≈0(小摩擦 Bω 微估)
Te平衡 load(≈0)+accel
✅ 负载突加 @1s
PI:n 跌 ≈ 40rpm, 恢复 ≈ 0.3~0.5s
ADRC:n 跌 ≈ 15rpm, 恢复 ≈ 0.1~0.15s ✔
f^阶 ↑ ≈ −2000 → 控制量 u 提前补 ⇒ 抗扰 ✔
✅ 卸载 @1.5s
ADRC 速回稳,无 overshoot ✔
六、工程注意点**
实机因素 | Simulink 处理 |
|---|---|
b0不准 | 扫 b0=50 200→ ADRC 仍稳(自抗扰特点) |
噪声测速 | 加 quantizer / randn → ESO 仍跟(β 可调) |
离散化 | ESO Ts 同控制 Ts(1e‑5~1e‑4) |
代码生成 | LADRC 拆为 C‑code(ESO 状态更新) → TI C2000 |
弱磁区 | ADRC 仍包 idref(iq)MTPA 外环 |
七、结论**
✅ 你掌握了PMSM FOC + LADRC 转速抗扰 Simulink 原型:
扩张状态观测器 ESO 估总扰动 f^(t)=−TL/J−(B/J)ω+ΔJ
控制 u=(Kp(ωref−ω^)−f^)/b0
对比 PI:ADRC速降小、恢复快、J 不敏感 ✔
f^在负载突加 → ≈−T_L/J 可视验证 ESO 效 ✔
📌 ADRC 是EV 驱动抗负载扰动 / 坡起 / 再生制动波动 先进控制选项(不替代 FOC 电流环)
可直接扩展:
NLSEF(非线性 ADRC / TD‑ESO)
ADRC + MTPA id弱磁联合
参数自校正 b0(递推辨识)
HIL 生成 C 代码(定浮 IQmath)
如果下一步你想要👇
🧮Discrete ESO 搭积木截图级说明(每个模块名)
📐ADRC 参数整定法则(β1≈ω_o, β2≈ω_o², Kp≈2~3·ω_o)
💻C2000 实现(ESO 状态更新 + PI 电流环)代码框架说明
🔁TD‑ADRC(Tracking Differentiator 滤 ω_ref 阶跃)