手把手教你学Simulink——基于数字 PID 的 DC‑DC 变换器 Z 域建模与离散化仿真
目录
手把手教你学Simulink——基于数字 PID 的 DC‑DC 变换器 Z 域建模与离散化仿真
一、背景 & 离散 PID 基础
1.1 连续 PID(理想)
1.2 Tustin(双线性)映射 s=Ts2z+1z−1
二、系统参数
三、Simulink 建模(手把手)
3.1 Step 1️⃣ —— Buck 功率级(同前章)
3.2 Step 2️⃣ —— 离散 PI(Z‑域)
推荐做法:Discrete PID Controller块
手写(Diff Eq)可选:
3.3 Step 3️⃣ —— 含 ADC 采样延时
3.4 Step 4️⃣ —— PWM(连续等效 or 离散 Compare)
3.5 Step 5️⃣ —— 运行 & 对比
四、结果解读
✅ 离散 PI (Tustin + 1拍延时)
✅ 若去掉 Unit Delay(理想零延时采样)
✅ 若改用 Forward Euler 离散 PI
五、工程注意点
六、结论
手把手教你学Simulink——基于数字 PID 的 DC‑DC 变换器 Z 域建模与离散化仿真
在数字电源(Digital Power) 中,补偿器不再以连续模拟运放实现,而是MCU / DSP / C2000 ePWM + ADC + 数字 PID(离散控制器) 按采样周期 Ts运算。
这带来几个必须仿真验证的问题:
离散化方法(Forward Euler / Backward Euler / Tustin)对环路稳定性影响
ADC 采样延时(1/2 Ts或 1 Ts滞后)
PWM 更新方式(Immediate / Shadow / Double‑Update)引入的额外相位 lag
Z‑域 PID 参数与 S‑域 Kp,Ki,Kd对应关系
想让你的同步 Buck(24V→12V, L=22µH, C=470µF, fsw=200kHz, 控制采样 Tctrl=5µs(与 PWM 同步)):
用Tustin 离散 PID(Z‑域) 等价连续 Type‑II 补偿(Kp=0.02,Ki=120,Kd=0)
含1步 ADC 延时(Unit Delay)
0.1s 负载 2A→5A 跳变 → Vo过冲 < 3%,恢复 < 0.5ms,与连续域吻合
基于 Simulink 的 Buck 功率级 + Discrete PID (Z‑域) + 采样延时 + PWM 重构架构是破局关键。
无论你是数字电源 firmware 工程师还是学离散控制映射的硕博,这篇硬核指南都成为你手中“Z‑域环路标尺”。
一、背景 & 离散 PID 基础
1.1 连续 PID(理想)
Gc(s)=Kp+sKi+Kds
(本例 Kd=0→ PI)
1.2 Tustin(双线性)映射 s=Ts2z+1z−1
PI 的 Z‑域传递:
Gc(z)=Kp+Ki⋅2Ts⋅z−1z+1
写成差分(增量)形式固件常用:
u[k]=u[k−1]+A⋅e[k]+B⋅e[k−1]−C⋅e[k−2]
其中(PI, Tustin):
A=Kp+Ki2Ts
B=−Kp+Ki2Ts
C=0(PI 无 Kd)
📌 若用Forward Euler:Gc(z)=Kp+Kiz−1Ts(幅/相偏大,少用电源)
📌Backward Euler:Gc(z)=Kp+Kiz−1Tsz(稍保守)
二、系统参数
参数 | 值 |
|---|---|
Vin | 24 V |
Vo | 12 V |
L | 22 µH |
C | 470 µF (ESR=10mΩ) |
Rload | 初 2.4Ω(2A) → 1.2Ω(5A) @0.1s |
fsw(PWM) | 200 kHz (Tsw=5µs) |
控制采样 Tctrl | 5 µs(与 PWM 同步,1× per switch周期) |
连续 PI | Kp=0.02,Ki=120(rad/s ⇒ Ki=120) |
离散法 | Tustin |
PWM 三角幅 | 0~1 V |
反馈分压 | 12V→2.5V (H=0.2083) |
Tustin 系数(Ts=5e−6):
KiTs/2=120∗5e−6/2=3e−4
A=0.02+3e−4=0.0203
B=−0.02+3e−4=−0.0197
三、Simulink 建模(手把手)
3.1 Step 1️⃣ —— Buck 功率级(同前章)
Solver:
Fixed‑step,ode4,Ts=5e-7(500ns 看 PWM,也可 power 用Ts=5e-6对齐 ctrl——推荐多速率:PowerTs_pwm=5e-7, CtrlTs_ctrl=5e-6)输入 24V DC
开关:同步 Buck
Q1 (HS MOS, PWM)
Q2 (LS SR MOS, ~Q1 经 Dead Zone)
死区 200ns
LC:L=22e−6H, C=470e−6F+ESR+ RloadStep
量测:Vo, iL
反馈:Vfb=Vo×0.2083
3.2 Step 2️⃣ —— 离散 PI(Z‑域)
推荐做法:Discrete PID Controller块
Controller type: PITime domain: Discrete (Ts=5e-6)Form: ParallelKp = 0.02Ki = 120Kd = 0Discretization method: Tustin (Bilinear)Sample time: 5e-6Anti-windup: back-calculation / clamping (Output limit 0~1)
ℹ️ 此块内部自动用 Ki⋅Ts/2⋅(z+1)/(z−1)+ Kp(Tustin),无需手写差分
手写(Diff Eq)可选:
u[k] = u[k-1] + A*e[k] + B*e[k-1] A = 0.0203 B = -0.0197用Unit Delay+Sum+Gain搭 ✔
3.3 Step 3️⃣ —— 含 ADC 采样延时
实际数字电源:ADC 在 PWM 中点触发 → 结果就绪下周期初生效
Simulink 最简单近似:在 Vfb与 误差求和间加
Unit Delay(Sample Time=5e-6)→ 模拟 1‑step计算延迟(相位 lag ≈ −180⋅fc⋅Ts°)
结构:
Vref(2.5V) ─(+)─▶ UnitDelay(反馈 V_fb) ─▶ Discrete PI ─▶ Vea │ Sat(0~1) ↓ PWM Compare (Carrier 200k)3.4 Step 4️⃣ —— PWM(连续等效 or 离散 Compare)
三角载波
Repeating Sequence(0~1 @200kHz)Compare
Carrier < Vea→ HS GateLS Gate = ~HS (经 Dead Zone)
📌 若想更精确可改用
PWM Generator (DC-DC)块设Frequency=200k, Sample time=5e-6, Use sawtooth并把Vea作 duty cycle input(需注意幅值匹配 0~1)
3.5 Step 5️⃣ —— 运行 & 对比
0~0.1s Rload=2.4Ω
0.1s → 1.2Ω
Scope:Vo, Vea(D), Vfb
可选跑连续 PI(Ts=5e-6, Continuous PID) 同参数对比动态(应近似)
四、结果解读
✅ 离散 PI (Tustin + 1拍延时)
Vo=12.0±0.15V稳
负载阶跃 2A→5A:
Vo跌 ≈0.22V (1.8%)
恢复 ≈0.4ms
无振荡
与连续 PI 动响几乎重合(Tustin 保频响,1拍延时引入微相 lag 但 PM 仍 >55°)
✅ 若去掉 Unit Delay(理想零延时采样)
稍快恢复,PM 略高 → 实机不现实(总有 ADC 延迟)
✅ 若改用 Forward Euler 离散 PI
同 Kp,Ki可能略振铃(幅/相误差大)→ 需重调 Ki(提示:数字电源忌盲目用 Forward Euler 不改参数)
五、工程注意点
实机因素 | Simulink 处理 |
|---|---|
ePWM | Unit Delay 已近似 |
ADC 均值 (4x oversample) | 先 |
定点 Q‑format (IQ24) 截断 | 可用 |
启动时积分 wind‑up (D=0→ramp) | PI 块设 |
Z‑域参数导出 (C code) |
|
六、结论
你掌握了数字 PID(Z‑域 Tustin)Buck 闭环仿真全流程:
✅ Buck 功率级 200kHz
✅Discrete PID (Tustin) Kp=0.02,Ki=120,Ts=5µs
✅1拍 Unit Delay 模拟 ADC→计算滞后
✅ 负载阶跃 Vo稳、过冲 <2%、恢复快 ≈连续 PI
明确:
Tustin 离散 → 最接近连续原型(推荐数字电源)
Forward/Backward Euler 需谨慎或重调 Ki
1拍采样延时必加(防过乐观 PM 预估)
可直接扩展 →多相数字 Buck、数字 CLLC/LLC 调频 PI、Ti C2000
PID模块代码生成
