资讯动态

维也纳整流器Simulink仿真建模:三相PFC与中点电位平衡控制详解

发布时间:2026/8/31 22:22:44 来源:尧图企业网站定制
电动汽车充电桩的电源系统绕不开前级 AC-DC 变换。做三相大功率 PFC 时维也纳整流器VIENNA Rectifier几乎是绕不过去的方案。很多电气专业学生和电源工程师在 Matlab/Simulink 里搭这个模型时会遇到一个普遍困惑主电路拓扑并不复杂但仿真就是跑不稳电流 THD 偏高直流母线电压纹波大甚至中点电位持续漂移。这篇文章不打算只贴一张仿真截图而是把维也纳整流器 Simulink 仿真从拓扑理解、环境准备、模型搭建到控制回路实现完整梳理一遍。这套建模思路既适合做电动汽车充电桩前级 PFC 的工程师参考也适合毕业设计、课程设计中需要自己搭建三相 PFC 仿真模型的人。文章会给出可复用的参数初始化脚本、控制环配置方法和 THD 分析脚本你可以基于它们继续修改参数逐步搭出自己的模型。1. 为什么充电桩要选维也纳整流器做三相 PFC电动汽车充电桩的功率等级通常从 30kW 起步往上到 60kW、120kW 甚至更高。这个量级的电源如果直接用二极管不控整流加电容滤波输入电流会变成很窄的尖峰脉冲谐波含量很高功率因数也达不到并网要求。要让充电桩通过国标 GB/T 18487 系列和并网电能质量要求前级整流电路必须做到两件事输入电流接近正弦波功率因数接近 1。三相 PFC 的方案不止一种。工程上常见的对比是这样的。方案输入电流谐波功率因数开关管电压应力系统复杂度典型应用二极管不控整流很高低无主动控制最简单小功率低端应用两电平三相 Boost PFC较好较高高等于母线电压中等中小功率维也纳整流器低接近 1低约为母线电压一半较高大功率三相 PFC两电平三相 Boost PFC 在大功率场景下有一个突出问题开关管要承受完整的直流母线电压。充电桩直流母线电压通常设计在 700V 到 800V两电平方案下开关管的耐压必须留足裕量损耗和散热压力也更大。维也纳整流器采用三电平拓扑开关管只承受母线电压的一半这就让器件选型更从容也更容易获得较高的开关频率和效率。从材料提供的关键词看电动汽车充电桩、三相 PFC、Simulink 这几个词经常同时出现。这不是偶然。充电桩前级需要三相 PFC而后级 DC-DC 负责电池充电管理前级直流母线的稳定性和输入谐波指标直接决定了整机能否通过认证。维也纳整流器正是在这个技术节点上把成本和性能平衡得比较好所以很多产品设计主题和仿真论文都会选择它。对初学者来说维也纳整流器的仿真模型是很好的三相 PFC 学习载体。它比两电平 Boost PFC 复杂但又不至于难到完全无法入手。掌握了它的建模方法再去理解其他三相 PFC 拓扑就会轻松很多。2. 维也纳整流器的拓扑与核心原理维也纳整流器的三相主电路可以看成是三个单相 Boost PFC 通过三电平结构组合而成。每一相有一个输入滤波电感、两个整流二极管组和一个双向开关。直流侧由两个电容串联中间点引出作为中点 O。三电平的含义是交流输入端相对中点 O 可以输出三种电位P、O、N。当双向开关导通时这一相被钳位到中点 O电感电流通过开关续流当双向开关关断时根据电流方向和当前工作区域相电流通过二极管流向上电容或下电容输出端被钳位到 P 或 N。双向开关是维也纳整流器最容易建模出错的地方。它不是普通功率开关管而是一个能双向导通、双向阻断的开关组合。在 Simulink 中常见实现方式有两种一种是用两个 MOSFET 反串联另一种是一个 MOSFET 配合四个二极管组成整流桥式开关。两种方式在原理上都成立实际建模时要注意器件内部体二极管方向和关断后的电压阻断方式。从等效电路看维也纳整流器每相都相当于一个工作在电感电流连续模式CCM下的 Boost 变换器。通过控制双向开关的占空比可以控制电感电流的波形让输入电流主动跟踪输入电压实现单位功率因数。输出电压则通过电压外环维持稳定。这里有一个关键点需要理解维也纳整流器本身是升压型拓扑所以直流母线电压必须高于输入线电压的峰值。按三相 380V 输入计算线电压峰值约为 537V母线电压通常设计在 650V 到 800V 之间才合适。如果目标输出电压低于这个范围拓扑本身就不成立。中点电位平衡是维也纳整流器需要额外处理的问题。由于直流侧两个电容串联实际运行中两个电容电压可能出现偏差。电容电压不平衡会导致输出电压纹波增大严重时还会让开关管承受更高电压应力。控制策略里通常需要加入中点电位平衡调节。传统控制方式以电压外环、电流内环的双闭环结构为主。外环控制输出电压输出为有功电流指令内环控制三相输入电流通过 PLL 获取电网电压相位经过 dq 坐标变换之后再做 PI 解耦控制。PWM 调制可以采用载波 PWM 或者空间矢量调制 SVPWM其中 SVPWM 在三电平整流器里能获得更好的直流电压利用率和更低的谐波但实现也相对复杂。3. Simulink 仿真环境与工具箱准备在 Matlab/Simulink 里搭建维也纳整流器需要确认本机已经安装包含电力电子仿真模块的工具箱。最常用的是 Simscape Electrical 中的 Specialized Power SystemsSPS库也就是过去的 SimPowerSystems。这个库包含三相电源、MOSFET、IGBT、二极管、电感电容等基础元件以及三相变压器、PLL 等专用模块。检查工具箱是否可用的最简单方法是在 MATLAB 命令行执行powerlib如果系统弹出电力系统模块库窗口能看到各类电力电子器件和电源模块说明 Specialized Power Systems 库已经可用。如果没有这个库需要先在授权许可中确认是否包含 Simscape Electrical 工具箱。关于 MATLAB 版本文章示例不绑定具体版本只要你的版本支持 Simscape Electrical 即可。较新版本中模块命名和库路径会有调整但核心建模思路没有变化。建议使用 R2021 之后的版本界面和模块搜索会更顺手。仿真模式建议使用离散固定步长求解器。电力电子仿真中包含开关器件离散化之后可以避免部分收敛性问题也能更贴近实际数字控制器的工作方式。开关频率 50kHz、固定步长 1e-6 秒是比较常用的配置。环境准备需要注意的一点是Simscape Electrical 的电力电子模块与 Simulink 普通模块之间需要经过信号转换。控制回路里的 PWM 信号是 Simulink 逻辑信号主电路功率模块接收的 PWM 门极信号可以是数字信号但测量得到的电压电流量经过电压电流测量模块后输出的是 Simulink 信号。这个转换关系在建模时比较自然但理解清楚会有助于排查调试。4. 模型顶层架构与模块划分不要把整个仿真模型画在一张巨大的图里。工程上更推荐按照功能拆分成子系统每个子系统只负责一个任务。顶层模型通常包括四个部分主电路子系统三相电源、滤波电感、功率器件、输出电容、负载。测量与控制子系统电压电流测量、PLL 锁相环、坐标变换、双闭环控制器。PWM 调制子系统把控制器输出的调制波转换为开关管门极脉冲。结果显示与数据导出Scope 波形显示、保存到 Workspace、后续 THD 分析。这样拆分之后每一部分可以单独调试也方便替换控制策略。比如把载波 PWM 换成都空间矢量调制时只需要替换 PWM 子系统主电路不用动。Simulink 模型中可以使用 Subsystem 模块做封装。建议给每个子系统起清楚的名字比如Main_Circuit、Control、PWM_Generation。子系统内部端口使用 Inport 和 Outport 模块对外连接。模型的仿真设置建议求解器discrete固定步长1e-6秒仿真时长0.1到0.2秒能观察到启动瞬态和稳态过程负载先使用纯电阻负载调试通过后再改为恒功率负载功率器件的导通压降和导通电阻可以先设置为理想模式减少收敛难度顶层模型的信号流方向通常是主电路输出三相电压电流和直流母线电压采样后送给控制子系统控制子系统计算三相调制波送给 PWM 调制子系统PWM 脉冲再返回主电路驱动双向开关器件。按这个结构搭建建模思路会非常清晰。5. 主电路建模双向开关与三电平结构在 Simulink 的 Simscape Electrical 中搭建主电路建议按从左到右的电源流向依次放置模块。第一步是把 Three-Phase Source 模块拖入模型中。三相电压设为相电压有效值 220V对应线电压 380V频率 50Hz。三相电源的接法通常选择 Y 接中性点可以接地也可以不接地实际仿真中建议先不接地连接到中点让控制自由度更高。第二步是放置三相滤波电感。可以用三个单相 Series RLC Branch 模块也可以使用 Three-Phase Series RLC Branch。电感量需要根据功率等级和开关频率设计。作为演示20kW 到 30kW 功率等级下电感量在0.5mH到1.5mH之间是可用的范围。电感太小电流纹波会很大电感太大电流环响应变慢系统体积也大。第三步是摆放整流二极管。维也纳整流器每相需要两个二极管组分别连接到输出正母线和负母线。在 Simulink 中可以直接使用 Diode 模块。二极管的导通电阻 Ron 和正向压降 Von 可以先保留默认值后续逐步修改为更接近实际器件参数。第四步是构建双向开关。这是整套模型最核心的部分。推荐方式用两个 MOSFET 反向串联也就是两个 MOSFET 源极对源极或者漏极对漏极。需要注意 MOSFET 内部体二极管的方向确保组合后能够承受双向电压阻断。仿真模型中两个 MOSFET 的门极信号可以接同一个 PWM 信号因为双向开关的导通控制是同时的。第五步是输出电容。用两个电解电容串联中间引出中点 O。每个电容容量可以用2000uF左右根据输出功率和允许的电压纹波调整。输出负载先接一个电阻负载功率根据仿真目标设置。为了便于控制和观察主电路还需要放置电流测量模块和电压测量模块。输入三相电流、输出母线电压、上电容电压、下电容电压这几个量需要引出并接入控制回路。为了避免每次修改参数都要手工双击模块推荐把主电路参数放到一个 MATLAB 初始化脚本中。下面是一个示例脚本可以直接保存为vienna_sim_params.m% vienna_sim_params.m % 维也纳整流器仿真参数初始化脚本 % 运行环境MATLAB/Simulink Simscape Electrical clear; clc; % 电网参数 Vg_phase_rms 220; % 相电压有效值单位 V f_grid 50; % 电网频率单位 Hz % 主电路参数 L_grid 1e-3; % 网侧滤波电感单位 H C_bus 2000e-6; % 直流母线单电容容量单位 F Vdc_ref 800; % 直流母线电压参考值单位 V P_rated 20000; % 额定功率单位 W R_load Vdc_ref^2 / P_rated; % 根据额定功率折算负载电阻 % 开关与控制周期 f_sw 50000; % 开关频率单位 Hz Ts_control 1e-5; % 控制周期单位 s % PLL 参数 pll_kp 50; pll_ki 400; % 电压外环 PI kp_v 0.08; ki_v 3.0; % 电流内环 PI kp_i 1.5; ki_i 80; % 中点电位平衡调节系数 kp_bal 0.002; ki_bal 0.02;脚本中的参数是常见的练习初始值不等于所有工况的最优值。实际调试时负载变化、母线电压目标、开关频率不同都需要重新整定 PI 参数。6. 控制回路实现双闭环与中点电位平衡控制回路是整个维也纳整流器仿真模型的灵魂。主电路拓扑再标准控制设计不合理仿真结果也一定不理想。先看 PLL 锁相环。三相电网电压经过三相电压测量之后送入 PLL 模块。PLL 的输出是电网电压相位角这个角度用于 abc/dq 坐标变换。PLL 参数一般用工程经验值但要注意采样时间要和主仿真步长匹配。再看电流内环。三相输入电流经过测量后通过 abc_to_dq0 变换得到 d 轴电流分量和 q 轴电流分量。在单位功率因数控制目标下q 轴电流指令设为 0d 轴电流指令来自电压外环输出。两个电流内环可以分别使用 PI 控制器。实际工程中d 轴和 q 轴之间还会有交叉耦合项通常需要在控制输出中叠加-ωL和ωL前馈补偿以提升动态性能。电压外环相对简单。直流母线电压参考值与实际值求差送入 PI 控制器输出作为 d 轴电流指令。电压环响应速度比电流环慢设计原则是让电流环带宽远高于电压环带宽否则系统会出现振荡。中点电位平衡控制是这个模型区别于普通两电平 PFC 的特征环节。用电压测量模块分别测量上电容电压Vc1和下电容电压Vc2求差得到Vc1 - Vc2。这个差值经过调节器后叠加到三相调制波上。基本原理是当中点电压偏离零位时通过调整占空比修正电容充放电时间让两个电容电压重新回到平衡。这里给出一个控制参数配置脚本片段% 控制器可调参数也可以直接写到模型初始化回调里 % 具体 PI 参数以实际调试结果为准这里只给出初始值 % 电压外环 PI 控制器参数 voltage_PI.kp kp_v; voltage_PI.ki ki_v; % d 轴电流内环 PI 参数 current_d_PI.kp kp_i; current_d_PI.ki ki_i; % q 轴电流内环 PI 参数 current_q_PI.kp kp_i; current_q_PI.ki ki_i; % 中点平衡 PI 参数 balance_PI.kp kp_bal; balance_PI.ki ki_bal; % 调制波限幅值用于 PWM 比较器 modulation_limit 0.95;PWM 调制部分初学者推荐先用两个三角载波的三电平载波调制方式。三相调制波分别与两个相位相差 180 度的三角载波比较产生每相双向开关的门极信号。这种方案实现相对简单逻辑清晰适合作为第一个跑通的版本。如果要追求更高性能可以切换到三电平 SVPWM。SVPWM 需要判断扇区、合成矢量实现复杂度明显提高但能改善直流电压利用率。建议先把载波 PWM 跑通确认闭环正确后再替换调制算法。C2000 DSP 代码生成是后续方向不需要在仿真阶段完全模拟数字控制器的延时但可以在控制模型中插入一个单位延迟模块模拟一拍延时对系统的影响。7. 运行仿真、THD 分析与效果验证主电路和控制回路搭建完成后运行仿真验证效果。建议先使用连续理想开关模式仿真缩短调试时间等结果合理后再把求解器切换为离散固定步长观察更真实的开关纹波。运行仿真和获取波形数据的基本命令如下% 运行 Simulink 模型模型文件名根据实际情况修改 simOut sim(vienna_rectifier_sim.slx); % 从 logsout 中读取信号数据 % 前提需要在该信号路径上启用 Log signal 功能 timeVec simOut.logsout.get(Vdc).Values.Time; vdcData simOut.logsout.get(Vdc).Values.Data; iaTime simOut.logsout.get(Ia).Values.Time; iaData simOut.logsout.get(Ia).Values.Data; % 绘制直流母线电压波形 figure; plot(timeVec, vdcData); xlabel(时间 (s)); ylabel(直流母线电压 (V)); title(Vienna 整流器直流母线电压); grid on;判断模型是否正常建议按以下顺序观察直流母线电压是否在 0.05 秒左右稳定到 800V稳态纹波是否在允许范围内。输入 A 相电流是否接近正弦波电流相位与 A 相电压相位是否接近重合。输入电流的总谐波畸变率THD是否达到预期目标。对于三相 PFC常见要求是 THD 小于 5%。THD 的计算可以自己写脚本。下面是一个基于 FFT 的简化计算函数输入电流波形数据和采样频率返回 THD 百分比function thd_value calc_thd(signal, fs) % 计算信号的 THD 百分比 % 输入signal 为时域信号列向量fs 为采样率(Hz) % 输出thd_value 为总谐波畸变率(%) N length(signal); if mod(N,2) 1 signal signal(1:end-1); N length(signal); end % 去除直流分量后做 FFT sig signal - mean(signal); Y fft(sig); P2 abs(Y / N); P1 P2(1:N/21); P1(2:end-1) 2 * P1(2:end-1); freqs (0:N/2) * fs / N; % 找到基波频率位置通常在 50Hz 附近 [~, f0_idx] max(P1(freqs 40 freqs 60)); valid_indices find(freqs 40 freqs 60); f0_idx valid_indices(f0_idx); f0_amp P1(f0_idx); % 累加 2~20 次谐波功率 harm_power 0; base_freq freqs(f0_idx); for h 2:20 target h * base_freq; [~, nearest_idx] min(abs(freqs - target)); harm_power harm_power P1(nearest_idx)^2; end thd_value sqrt(harm_power) / f0_amp * 100; end使用这个函数时要注意两点一是必须截取稳态数据比如仿真时间0.05s之后的数据二是采样率需要足够高否则谐波频率会混叠。离散固定步长1e-6秒的模型中数据采样率是1MHz分析 20 次以内的谐波完全足够。% 调用示例截取 0.05s 之后的 A 相电流 steady_idx timeVec 0.05; ia_steady iaData(steady_idx); thd_ia calc_thd(ia_steady, 1/ (iaTime(2) - iaTime(1))); fprintf(A 相电流 THD %.2f%%\n, thd_ia);如果 THD 偏高首先检查电感电流是否已经进入连续模式其次检查电流环 PI 参数和电感量是否匹配。很多时候 THD 偏高不是因为拓扑错误而是控制参数没有整定好。功率因数在仿真中可以用有功功率除以视在功率来近似。更直接的方式是观察稳态下相电压和相电流的相位差。相位差值接近 0 度功率因数就接近 1。PLL 相位锁定正确时dq 坐标系下 q 轴电流稳态值应当很小大约为 0。8. 仿真常见问题与排查思路在模型调试过程中最影响效率的不是复杂算法而是一些看起来不起眼的小问题。下面是维也纳整流器 Simulink 仿真中经常遇到的现象和排查方法。问题现象可能原因排查方式解决方案仿真不收敛、步长错误开关器件理想模式引起高频振荡电感或电容取值不当查看报错提示缩小步长检查电感电流是否过大改用离散求解器增加串联电阻增加电感量直流母线电压振荡无法稳定到 800V电压环 PI 参数过大或电流环带宽不足观察电压环输出是否超限电流指令是否饱和降低电压环比例系数提高电流环响应速度输入电流 THD 很高电感电流断续电流环带宽太低调制波过调制查看电流波形是否明显畸变检查调制波峰值增大电感量重新整定电流环 PI增加调制限制中点电位明显漂移中点平衡调节未生效观察Vc1 - Vc2波形检查中点平衡调节器输出是否接入调制波启动瞬间电流冲击过大没有软启动流程电压环初始输出饱和观察启动阶段电流峰值增加启动限流逻辑限制电压环输出变化率PLL 无法锁定电网电压测量接线错误初始相位设错查看 PLL 输出角度波形是否线性增长检查三相电压极性正确设置 PLL 初始条件波形正常但效率很低开关管导通损耗、二极管压降设置过于保守检查功率测量模块数据根据器件数据手册修正损耗参数排查仿真问题有一个通用思路先从开环开始。把控制回路断开给双向开关固定占空比 PWM 脉冲看主电路输出是否合理。开环能跑通再逐步接入电压环、电流环。这样可以快速定位是主电路问题还是控制问题。还有一个值得注意的地方Simulink 中电力电子仿真的代数环问题。如果 PWM 信号从控制子系统输出后直接驱动主电路开关而控制子系统又采样主电路电流就可能在离散系统中产生代数环。解决方法是引入单位延迟或者 memory 模块。遇到仿真特别慢或者代数环报错时优先检查这里的信号流。9. 工程化建议与最佳实践维也纳整流器仿真模型与最终量产电源之间还有很多工程化差距。以下建议可以帮助你把仿真做得更接近实际也避免踩常见的坑。第一参数分层次。电网参数、主电路参数、控制参数不要全部写在同一个脚本里。推荐做成三个数据文件或者结构体这样更换工况时只需要改一层其他层保持不变。例如电网参数写grid_params主电路写power_stage_params控制器写controller_params。第二模拟软启动。实际充电桩开机时如果直接以满占空比启动冲击电流会很大。仿真中也要加入软启动环节在启动阶段让电压外环输出逐渐上升或者直接限制电流指令的最大爬升速率。这会让仿真波形更接近实测同时减少启动阶段的数值振荡。第三重视测量与记录。Simulink 模型可以使用Data Logging记录关键信号也可以把数据输出到 MATLAB 工作区。建议记录输入三相电流、三相电压、母线电压、上下电容电压、开关状态、电流环输出这几个关键量。数据一次性记录完整后续 THD 分析、效率计算、动态响应分析都能重用。第四考虑数字控制延时。模型中的控制环路如果是连续的响应速度会显得比实际系统快。为了贴近工程可以在控制输出 PWM 之前加入一个单位延迟模块来模拟单片机或者 DSP 的一拍延时。这个细节对控制稳定性有显著影响尤其在高带宽设计时。第五保护逻辑。仿真模型里可以提前加入母线过压保护、输入过流保护、中性点电位越限保护逻辑。这些逻辑在模型阶段实现起来并不难但移植到实际控制器时会省下很多时间。第六安全边际。搭建实际高压充电桩实验平台之前务必确认仿真参数对应的功率等级、电压等级和器件耐压是否匹配。仿真中的理想开关和实际功率模块的开关特性差别很大直接照搬仿真参数去做硬件驱动有损坏设备的风险。高压试验需要遵循相关安全规范和合规授权。10. 总结与后续学习方向维也纳整流器的 Simulink 仿真建模核心可以归纳为三句话主电路要抓双向开关和三电平结构控制回路要抓双闭环和中点电位平衡仿真调试要抓离散步长和参数整定顺序。任何一个环节没有做好最终的输入电流 THD 和母线电压波形都会反馈问题。如果你刚开始接触三相 PFC建议不要直接在复杂模型上堆 SVPWM。先把载波 PWM 版本跑通确认 PLL 锁定正确、直流母线稳压成功、输入电流正弦化再逐步加入中点平衡和空间矢量调制。先跑通再优化是这个领域比较稳妥的路径。后续值得深入的方向包括三电平 SVPWM 的实现与扇区分析、基于 SiC 器件的损耗建模、双向维也纳整流器在 V2G 充电桩中的应用、以及从 Simulink 模型到 DSP 嵌入式代码的自动代码生成。每一个方向都能单独写一篇完整的文章。如果你在搭建模型时遇到了具体的报错或者指标问题可以把现象描述清楚在评论区一起讨论。建议先收藏这篇文章动手建模的时候再对照各部分参数和排查思路。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价