
三相PWM整流器是电力电子与新能源方向的常见仿真课题课程设计、毕业设计、论文验证都会用到。这类模型的核心不在于“能不能转起来”而在于双闭环能不能稳住、SVPWM 调制出来的波形正不正、交流侧电流谐波大不大、直流母线电压的抗扰动能力够不够。这次我们来看一套基于 MATLAB/Simulink 的三相 PWM 整流器双闭环仿真模型控制结构采用电压外环、电流内环的 VOC电压定向控制调制方式用 SVPWM模型可以在 Simulink 里完整搭出来也可以按自己的参数批处理跑波形。这个模型要解决的核心问题有三个。第一交流侧电流要接近正弦功率因数接近 1第二直流母线电压要稳定在给定值负载突变时不能出现大的超调和振荡第三SVPWM 算法要能正确计算扇区和作用时间保证 IGBT 桥臂按七段式顺序动作。下文会给出拓扑结构、控制原理、双闭环 PI 参数设计思路、SVPWM 算法实现代码、Simulink 搭建步骤、仿真验证方法和常见问题排查清单。如果你正在做 PWM 整流器仿真、SVPWM 代码实现或者 simulink 建模这篇可以直接对照参考。先说清楚这是一篇建模与调试向的文章不是“下载即跑”的一键包教程。模型需要你自己在 Simulink 里按步骤搭或者借助脚本生成。文章末尾也会单独讲如果不想从零搭或者需要按你的电机参数、电网参数、控制指标改模型这类定做 matlab 仿真模型服务的对接思路是什么。1. 核心能力速览能力项说明项目类型三相 PWM 整流器 Simulink 仿真模型双闭环控制控制结构电压外环 电流内环dq 旋转坐标系下 VOC 控制调制方式SVPWM 空间矢量调制七段式仿真平台MATLAB/Simulink需要 Simulink、Simscape Electrical或 SimPowerSystems工具箱主电路拓扑三相全桥 IGBT 整流器交流侧进线电感直流侧支撑电容输入电源三相交流电源示例按 380V/50Hz 搭建可修改主要输出直流母线电压 Vdc、三相电流 ia/ib/ic、dq 轴电流、SVPWM 开关脉冲分析能力通过 Powergui 的 FFT 工具做电流谐波分析通过 Scope 观察动态波形批处理能力支持用 sim 命令做负载、电感、PI 参数的批量扫描适用场景课程设计、毕业设计、论文仿真、工程预研验证扩展方向弱磁控制、LCL 滤波器、单位功率因数验证、双向整流器、电机侧整流等从材料看这套模型的重点是双闭环和 SVPWM。搭建时必须把“主电路、坐标变换、PI 调节器、SVPWM 调制、脉冲驱动”五块全部打通任何一环极性接反或者采样时间不匹配波形都会出问题。2. 拓扑结构与双闭环控制原理三相 PWM 整流器的主电路由三相交流电源、进线电感 L、三相 IGBT 全桥和直流侧电容 C 组成。交流侧电感起到升压和滤波作用直流侧电容维持母线电压稳定。与普通不控整流相比PWM 整流器通过控制 IGBT 的开通顺序可以让交流侧电流跟踪电压相位实现单位功率因数同时把直流母线电压抬升到高于交流侧线电压峰值。控制上最常用的是电压定向控制 VOC。把电网电压矢量定向到 d 轴q 轴电压分量为零则有功电流和无功电流自然解耦。外环是直流电压环负责把 Vdc 稳在给定值 Vdc_ref它的输出作为 d 轴电流给定 id_refq 轴电流给定 iq_ref 通常设为 0也就是要求无功电流为零。内环是 dq 轴电流环分别调节 id 和 iq输出经过反 Park 变换得到静止坐标系下的 Ualpha 和 Ubeta送给 SVPWM 模块生成开关脉冲。整个控制回路可以写成下面这条链路Vdc_ref → 电压PI → id_ref → 电流PI → Vd_ref → Vq_ref iq_ref 0 → 电流PI → ↑ Vd/Vq → 反Park → Ualpha/Ubeta → SVPWM → IGBT脉冲电流内环的响应速度要远快于电压外环。一般电流环带宽取开关频率的 1/10 到 1/20电压环带宽再比电流环慢 5 到 10 倍。这个带宽关系决定了 PI 参数的数量级后续整定时会用到。3. 双闭环控制器设计与 PI 参数整定3.1 电流内环设计忽略电网电压扰动单相电流环路的被控对象近似为一阶惯性环节G(s) 1 / (Ls R)其中 L 为进线电感R 为电感等效串联电阻。电流环 PI 可以采用零极点对消方式整定。设电流环期望带宽为 omega_c则 PI 参数可按下式估算Kp L * omega_c Ki R * omega_c这里 omega_c 的单位是 rad/s。如果开关频率是 10 kHz电流环带宽通常取 500 到 1000 Hz 左右对应 omega_c 约为 3000 到 6000 rad/s。注意这只是工程估算起点实际要在模型里微调。3.2 电流解耦在 dq 坐标系下d 轴和 q 轴电流之间存在交叉耦合项。为了消除这种耦合需要在电流 PI 输出上叠加前馈补偿。常见写法如下Vd_ref Vd_pi - omega * L * iq ed Vq_ref Vq_pi omega * L * id eq其中 omega 是电网角频率ed 和 eq 是电网电压的 dq 轴分量。Vd_pi 和 Vq_pi 是电流 PI 调节器的输出。加上前馈后d 轴和 q 轴电流可以独立控制动态性能会明显改善。3.3 电压外环设计电压外环控制对象是从交流侧有功功率到直流母线电压的能量平衡关系。近似模型可以写成一阶惯性环节PI 参数一般从电流环带宽的 1/5 到 1/10 起步。外环输出必须限幅因为 id_ref 代表交流侧允许的最大有功电流不限幅会导致启动时电流冲击过大。3.4 示例参数下面给一组可以起仿的示例参数具体数值需要按你的电网电压和功率等级调整。参数数值说明电网线电压380V / 50Hz三相交流源进线电感5 mH可在 3~10 mH 之间调整电感等效电阻0.1 Ω寄生电阻直流侧电容4700 μF影响电压纹波和动态响应直流母线给定650 V必须高于交流侧线电压峰值开关频率10 kHzSVPWM 载波频率负载电阻负载可改恒功率负载用于验证抗扰性4. SVPWM 调制算法原理与 MATLAB 实现SVPWM 的基本思想是把三相逆变桥的 8 种开关状态对应到 6 个有效电压矢量和 2 个零矢量在一个开关周期内用相邻有效矢量和零矢量来合成期望的参考电压矢量。相比 SPWMSVPWM 的直流电压利用率更高电流谐波也更小。实现 SVPWM 需要做四件事扇区判断、计算相邻矢量作用时间 T1 和 T2、处理过调制、生成七段式开关序列。下面是可直接放到 MATLAB Function 或 .m 文件里的完整函数。function [Da, Db, Dc] svpwm_duty(Ualpha, Ubeta, Vdc, Ts) % SVPWM 七段式调制 % 输入 % Ualpha, Ubeta - 静止两相坐标系电压指令 (V) % Vdc - 直流母线电压 (V) % Ts - 开关周期 (s) % 输出 % Da, Db, Dc - 三相上桥臂占空比 (0~1) % 1. 扇区判断 U1 Ubeta; U2 0.5 * sqrt(3) * Ualpha - 0.5 * Ubeta; U3 -0.5 * sqrt(3) * Ualpha - 0.5 * Ubeta; N 0; if U1 0 N N 1; end if U2 0 N N 2; end if U3 0 N N 4; end switch N case 3, sector 1; case 1, sector 2; case 5, sector 3; case 4, sector 4; case 6, sector 5; case 2, sector 6; end % 2. 基本矢量作用时间中间变量 X sqrt(3) * Ubeta * Ts / Vdc; Y (1.5 * Ualpha sqrt(3) / 2 * Ubeta) * Ts / Vdc; Z (-1.5 * Ualpha sqrt(3) / 2 * Ubeta) * Ts / Vdc; % 3. 按扇区计算 T1, T2 switch sector case 1 T1 Z; T2 Y; case 2 T1 Y; T2 -X; case 3 T1 -Z; T2 X; case 4 T1 -X; T2 Z; case 5 T1 X; T2 -Y; case 6 T1 -Y; T2 -Z; end % 4. 过调制限幅 if (T1 T2) Ts T1 T1 * Ts / (T1 T2); T2 T2 * Ts / (T1 T2); end T0 Ts - T1 - T2; % 5. 七段式比较值 Tcm1 T0 / 4; Tcm2 T0 / 4 T1 / 2; Tcm3 T0 / 4 T1 / 2 T2 / 2; % 6. 按扇区分配三相占空比 switch sector case 1 Ta Tcm1; Tb Tcm2; Tc Tcm3; case 2 Ta Tcm2; Tb Tcm1; Tc Tcm3; case 3 Ta Tcm3; Tb Tcm1; Tc Tcm2; case 4 Ta Tcm3; Tb Tcm2; Tc Tcm1; case 5 Ta Tcm2; Tb Tcm3; Tc Tcm1; case 6 Ta Tcm1; Tb Tcm3; Tc Tcm2; end Da Ta / Ts; Db Tb / Ts; Dc Tc / Ts; end这段代码的输出是三相上桥臂占空比。在 Simulink 里可以把占空比和一个 0 到 1 的三角载波做比较占空比大于载波时输出高电平得到 IGBT 的驱动脉冲。注意下桥臂必须取反并且要加死区防止同一桥臂上下管直通。5. MATLAB/Simulink 仿真环境准备搭建模型之前先确认环境满足要求。MATLAB 版本建议 R2020a 及以上版本太老时部分模块名称和位置会有差异。必备工具箱Simulink、Simscape Electrical旧版本叫 SimPowerSystems。求解器PWM 整流器模型建议使用离散固定步长求解器步长取 1e-6 到 1e-5 秒。模型里必须放置 Powergui 模块否则 Simscape Electrical 的主电路仿真无法运行。环境检查清单如下MATLAB 能正常打开 SimulinkSimscape Electrical 库可以访问能看到 Three-Phase Source、Universal Bridge、Powergui 等模块MATLAB Function 模块可用支持自定义函数工作区变量能通过 .m 脚本初始化和读取。如果缺少 Simscape Electrical 工具箱通用办法是换用 Simulink 基础模块搭建主电路但工作量和调试难度都会增加建议优先确认工具箱是否完整。6. Simulink 模型搭建步骤下面按模块顺序给出搭建步骤模型命名建议用“主电路 控制回路”分层的结构。6.1 主电路搭建从 Simscape Electrical 库中拖入 Three-Phase Source设置线电压 380V、频率 50Hz。串联三根进线电感 L再接到 Universal Bridge 模块。Universal Bridge 选择 IGBT/Diodes桥臂数选 3。直流侧接电容 C 和负载电阻。电容建议并联一个大电阻用于初始放电避免仿真初始时刻出现数值奇异。6.2 采样与坐标变换把三相电流 ia、ib、ic 和直流母线电压 Vdc 通过 Goto/From 或者信号线送入控制回路。电流先经过 Clarke 变换得到 i_alpha、i_beta再经过 Park 变换得到 id、iq。Park 变换需要电网电压相位 theta可以用 Simscape Electrical 自带的 Three-Phase PLL 模块锁定电网电压相位也可以自己搭一个单同步坐标系锁相环。Clarke 和 Park 变换可以直接写成 MATLAB Function 模块也可以拆成 Gain 和三角函数组合。推荐写成函数便于复用。function [i_alpha, i_beta] clarke(ia, ib, ic) % 三相 abc 到两相静止坐标系 i_alpha (2/3) * (ia - 0.5 * ib - 0.5 * ic); i_beta (2/3) * (sqrt(3)/2 * ib - sqrt(3)/2 * ic); endfunction [id, iq] park(i_alpha, i_beta, theta) % 两相静止到两相旋转坐标系 id i_alpha * cos(theta) i_beta * sin(theta); iq -i_alpha * sin(theta) i_beta * cos(theta); end6.3 双闭环控制回路直流电压给定 Vdc_ref 通过阶跃或斜坡信号输入与 Vdc 反馈做差后进电压 PI 控制器输出限幅后作为 id_ref。iq_ref 直接给 0。id、iq 与给定做差后进两个电流 PI 控制器得到 Vd_pi、Vq_pi。在此基础上叠加解耦前馈项得到 Vd_ref、Vq_ref再经过反 Park 变换得到 Ualpha、Ubeta。function [Ualpha, Ubeta] inv_park(Vd, Vq, theta) % 两相旋转到两相静止坐标系 Ualpha Vd * cos(theta) - Vq * sin(theta); Ubeta Vd * sin(theta) Vq * cos(theta); end6.4 SVPWM 与脉冲驱动把 Ualpha、Ubeta、Vdc 和 Ts 送入前面写的 svpwm_duty 函数得到 Da、Db、Dc。在 Simulink 里用 Repeating Sequence 生成 0 到 1 的三角载波频率设为开关频率。占空比与载波比较后生成上桥臂脉冲下桥臂信号取反并通过 Transport Delay 或 Programmable Pulse Generator 加死区再送入 Universal Bridge 的 gate 端口。6.5 波形显示用 Scope 或 Data Type Conversion 加 To Workspace 把 Vdc、ia、ib、ic、id、iq、Ualpha、Ubeta 保存到工作区。推荐用 To Workspace 保存结构体或数组便于后续批处理和 FFT 分析。7. 仿真参数设置与运行仿真参数直接影响收敛性和速度建议按下表设置初始值。设置项推荐值说明求解器类型离散固定步长与 SVPWM 数字控制匹配固定步长1e-6 s可放宽到 5e-6步长太大影响 PWM 精度仿真时长0.4~0.6 s足够观察启动和稳态开关频率10 kHzSVPWM 载波频率Vdc_ref 软启动斜坡上升减小启动冲击运行之前先在工作区初始化参数。推荐单独建一个 init.m把所有参数集中写在里面。% init.m 参数初始化示例 Vg_rms 380; % 电网线电压有效值 f_grid 50; % 电网频率 L 5e-3; % 进线电感 R 0.1; % 电感等效电阻 C 4700e-6; % 直流侧电容 Vdc_ref 650; % 直流母线电压给定 f_sw 10000; % 开关频率 Ts 1 / f_sw; % 开关周期 Ts_sim 1e-6; % 仿真步长 RL 20; % 负载电阻 % PI 参数 w_cc 2 * pi * 500; % 电流环带宽 Kp_i L * w_cc; % 电流环 Kp Ki_i R * w_cc; % 电流环 Ki w_cv w_cc / 8; % 电压环带宽 Kp_v C * w_cv; % 电压环 Kp Ki_v 100; % 电压环 Ki需微调注意 Kp_v 和 Ki_v 只是估算起点实际要观察波形微调。建议先只闭环电流环用开环电压方式验证电流跟踪能力再闭合电压环这样定位问题更快。运行仿真时直接点 Run或者在命令行执行% 运行仿真并读取结果 simOut sim(PWM_Rectifier_DoubleLoop, StopTime, 0.4); Vdc simOut.Vdc.Data; Ia simOut.Ia.Data; t simOut.tout;8. 仿真结果分析与波形验证模型搭完后重点看四类波形。第一直流母线电压 Vdc。启动后 Vdc 应该从初始值平稳爬升到 650V稳态误差尽可能小电压纹波在允许范围内。如果 Vdc_ref 加了斜坡波形应该平滑跟随如果直接用阶跃会有一定超调这是正常的但超调不应太大。第二三相交流电流 ia、ib、ic。稳态时电流应接近正弦幅值由负载功率决定。用 Powergui 的 FFT 工具分析稳态电流波形THD 应该在一个可接受的范围内。工程上通常以 5% 作为电网侧电流谐波的参考红线但仿真模型的值会随电感和开关频率变化。第三dq 轴电流 id 和 iq。id 应该跟随 id_refiq 应该在 0 附近小幅波动。如果 iq 均值明显偏大说明功率因数没有调好需要检查 Park 变换角度和给定方向。第四SVPWM 脉冲。展开波形看桥臂驱动信号确认七段式顺序正常同一桥臂上下管之间有死区间隔。判断仿真是否成功的标准可以归纳为Vdc 稳态误差在 1% 以内交流电流正弦度好无明显尖峰和非周期振荡iq 平均值为 0 附近功率因数接近 1负载突变后 Vdc 能重新收敛恢复时间在可接受范围SVPWM 脉冲频率和开关频率一致不死区异常。9. 批量仿真与参数扫描Simulink 模型本身不支持自动批量跑但可以通过 sim 命令在工作区批量修改参数。这是做论文参数分析和定做模型时最常用的方式。下面是一个负载电阻扫描脚本的通用模板。% 批量负载扫描脚本 clear; clc; init; % 先运行参数初始化脚本 R_list [10, 20, 40]; for k 1:length(R_list) set_param(PWM_Rectifier_DoubleLoop/RL, Resistance, num2str(R_list(k))); simOut sim(PWM_Rectifier_DoubleLoop, StopTime, 0.4); Vdc simOut.Vdc.Data; Ia simOut.Ia.Data; save(sprintf(result_R%d.mat, R_list(k)), Vdc, Ia); end注意 set_param 的模块路径必须和实际模型一致RL 模块名称也要对应。批量扫描时建议每次只改一个参数并给输出文件加上参数标识避免结果互相覆盖。如果要做 PI 参数扫描可以外层再套一层循环把每组 Kp、Ki 写入工作区再调用 sim。批量仿真的耗时取决于模型复杂度和步长模型规模大时可以先用较短仿真时长粗扫锁定候选参数后再跑长仿真。10. 常见问题与排查方法问题现象可能原因排查方式解决方案仿真直接报错缺少 Powergui或模块库不完整检查模型里有没有 Powergui添加 Powergui并选择离散求解模式直流母线电压一直冲高电流环极性接反或 PI 参数不合理观察 id 是否跟随给定先单独调电流环确认反馈极性正确启动冲击电流过大Vdc_ref 阶跃给定PI 积分饱和查看启动段电流波形Vdc_ref 加斜坡限制 PI 输出限幅SVPWM 脉冲异常扇区判断错误或限幅没处理查看 Ualpha/Ubeta 和占空比波形单独给 svpwm_duty 喂固定电压做单元测试电流 THD 偏高电感偏小或开关频率太低用 FFT 工具分析电流增大电感、提高开关频率、检查采样时间仿真速度很慢连续求解器或步长太小查看仿真执行时间改用离散固定步长适当放大步长同一桥臂直通死区未加或下桥臂取反错误展开脉冲波形下桥臂取反并加死区负载突变后 Vdc 发散电压环带宽过高或相位裕度不足观察 Vdc 和 id 动态波形降低电压环带宽重新整定 PI调试时的第一原则是“先内环后外环”。先把电压环断掉给 id_ref 一个固定值确认电流能跟踪再把电压环闭合确认 Vdc 能稳定。绝大多数模型跑不出波形都是坐标变换方向、PI 极性或者脉冲取反这类细节问题。11. 定做仿真模型服务的对接思路标题里提到的“定做 matlab 仿真模型服务”本质上是把通用模型按你的具体场景改造成可以直接用的版本。常见的定做需求包括修改进线电感和电容参数、更换三相电源电压频率、增加 LCL 滤波器、把电阻负载改成恒功率负载、把 SVPWM 换成其他调制方式、增加弱磁或单位功率因数验证逻辑、整理成论文格式的波形图和 FFT 分析图以及把单次仿真改造成批量参数扫描脚本。如果你需要这类服务对接时建议准备以下信息电网电压和频率、额定功率、进线电感电容参数、直流母线电压给定、开关频率、负载类型、控制要求电压纹波、THD 指标、动态响应时间、MATLAB 版本和已有模型文件。信息越完整定做出来的模型越接近你的实际需求。有一点要说明定做模型不等于“包通过”。仿真模型需要和你的控制目标、参数设定匹配拿到模型后第一件事应该是按自己的工况做参数验证再决定是否用在论文或项目里。任何仿真模型在用于正式场合前都要经过与目标工况一致的测试复核。12. 总结与下一步这套三相 PWM 整流器双闭环仿真模型最值得先验证的功能是电流内环的跟踪能力和 SVPWM 脉冲的正确性。只要这两个环节没问题电压外环闭合后通常能较快稳定。最容易踩的坑是坐标变换方向、PI 极性、死区设置和 Powergui 缺失调试时优先按“内环 → 外环 → 整体”的顺序排查。下一步可以做的扩展方向很多加 LCL 滤波器观察高频谐波抑制效果把负载改成恒功率负载验证电压环抗扰性加入启动软启动逻辑减小冲击电流或者用批量脚本跑一组 PI 参数对比曲线。先按这篇文章的流程把基础模型跑通再逐步增加复杂度比一次性搭一个“什么都有”的大模型更可控。建议收藏备用。遇到模型跑不动的情况回头对照第 10 节的排查表逐条查大部分问题都能在半小时内定位。