
我一直觉得搞电力电子的人如果还停留在“整流只能靠二极管”的认知里确实有点说不过去了。传统的二极管不控整流甚至晶闸管相控整流最大的痛点就是交流侧电流畸变严重、功率因数低而且直流侧电压纹波大想往高性能电源、PFC、储能变换这些方向走几乎寸步难行。而PWM可控整流器本质上就是把整流这件事从“不可控”变成“可控”让输入电流波形接近正弦、功率因数可以做到接近1甚至还能实现能量双向流动。这篇文章就基于我在Matlab/Simulink里搭建单相PWM可控整流器仿真模型的经验把从原理到双闭环参数整定再到波形分析的关键环节全部梳理一遍。内容偏实操适合刚接触电力电子仿真的学生、做电源的硬件工程师以及想快速验证控制算法的朋友参考。1. 单相PWM可控整流器的整体设计与核心思路1.1 为什么非要用PWM整流器先说说传统整流方案的先天短板。二极管不控整流靠的是电网电压自然换相晶闸管相控整流靠的是移相触发这两种方式都有个共同毛病交流侧的电流不是正弦波。二极管整流后面带大电容的电流是窄尖峰脉冲谐波含量很高功率因数普遍在0.6到0.7左右晶闸管整流在深控的时候功率因数更低而且还会向电网注入大量低次谐波。在电网对谐波要求越来越严格的背景下这种方案早就满足不了需求。PWM可控整流用得是全控型器件IGBT或MOSFET通过对开关管的PWM控制让交流侧电感上的电流被主动整形从而逼近正弦。最关键的是这个电路可以工作在四种象限整流模式之外还能做逆变模式电动车回馈制动、储能系统并网放电、变频器能量回馈这些场景都需要它。单相PWM整流器的原理本质上是“Boost型”的也就是直流侧电压要高于交流侧电压峰值比如220V交流直流侧一般控制在380V到400V这个特点决定了它的特性和控制方式。1.2 仿真方案选型的考量做仿真之前我对比过几种工具。PLECS的优点是开关器件建模快、跑得快但很多人用的是学生版器件库受限PSIM在电力电子领域也很流行不过在控制系统搭建和数据处理上我还是觉得Matlab/Simulink更顺手尤其是Simulink自带的Simscape Electrical元件库加上庞大的控制系统模块库做双闭环控制模型基本不用自己写太多S函数全是图形化模块拖拽。我选择的方案是Simulink里搭建主电路加控制系统一体化的模型主电路用Simscape Electrical里的元件控制部分用标准Simulink模块实现。这套方案的好处很明显能够在仿真里直接看PWM驱动波形、交流侧电压电流、直流侧电压动态响应同时改PI参数也方便不用重新编译。坏处是Simulink仿真速度比专门器件级工具慢一点但单相全桥结构简单跑几百毫秒的仿真时间其实很快的我实测一台普通i5笔记本定步长10微秒跑0.5秒仿真大概几十秒就能完成完全在可接受范围内。1.3 控制目标的确定——单相PWM整流器到底控什么单相PWM整流器的控制目标有两个核心第一个是直流侧电压的稳定无论交流侧电压怎么波动、负载怎么变化直流侧Vdc要稳定在给定值比如400V第二个是交流侧电流要正弦化并且功率因数尽量接近1最好能做单位功率因数控制也就是输入电流和电网电压同频同相。这两个目标叠在一起就需要双闭环结构。外环是电压环采集直流电压误差经PI调节后输出内环有功电流指令Id*内环是电流环让实际交流电流跟踪Id*。这套结构是工业变频器、PFC电源、光伏逆变器里最常见的架构跑通它对后续其他算法都能举一反三。2. 核心原理拆解主电路拓扑与数学模型2.1 单相全桥PWM整流器的拓扑结构我用的拓扑是单相全桥电压型PWM整流器结构上就是四个IGBT组成H桥交流侧通过滤波电感L连接到电网直流侧接滤波电容C和负载。和单相全桥逆变器其实是同一个拓扑只是功率流动方向不同——整流时能量从交流流向直流逆变时反过来。四个IGBT分别为Q1、Q2组成一个桥臂Q3、Q4组成另一个桥臂。工作时Q1/Q4同时导通交流侧得到正电压Q2/Q3同时导通交流侧得到负电压。单极性调制还可以在调制波正半周让Q4常通、Q1高频PWM负半周让Q3常通、Q2高频PWM这样交流侧电压波形是两电平跳到零的形态谐波性能更好。电感L是PWM整流器的核心它的角色是储能和滤波元件。开关管高频动作在电感上产生的电流纹波被电感自身阻抗抑制同时电感本身就是连接电网电压和桥臂电压之间的桥梁只要控制好桥臂电压和电网电压之间相位差就能控制功率流动的方向和大小。电容C的作用是稳定直流侧电压、滤除直流侧高频纹波。在仿真中C容值要选的合适太大则动态响应慢、启动冲击电流大太小则直流电压纹波大、负载突变时过冲明显。这个参数的取舍后面实操部分细讲。2.2 交流侧基波数学模型与功率的传递忽略开关谐波只看基波的情况下PWM整流器交流侧等效为一个可控电压源Vab。设电网电压为Vs电感L上的电压为jωL·I桥臂基波电压为Vab那么相量关系为Vs jωL·I Vab。这里的关键就出来了当Vab的相位和幅值相对于Vs变化时电感电流I的幅值和相位就跟着变。要让I与Vs同相实现单位功率因数整流需要Vab的幅值略高于Vs且Vab在相位上滞后Vs一个小的角度。此时功率从交流往直流流动直流侧电压被抬升。而要让能量反向流动逆变模式就需要Vab在相位上超前Vs电感电流与电网电压反相功率因素为-1能量从直流侧回馈到交流电网。这种双向流动特性使得PWM整流器在再生场合可以取代“整流桥制动电阻”的笨办法直接做能量回馈。功率关系也很直观交流侧有功功率P Vs·I·cosφ无功功率Q Vs·I·sinφ。单位功率因数控制就是让φ0此时Q0。但PWM整流器也可以做超前或滞后无功补偿只要调整电流指令中的无功分量这在有源滤波器APF、STATCOM领域同样是核心技术单相模型拿来做这个方向的前期验证也很合适。2.3 单相电路的dq变换虚拟正交分量的构造三相整流器很自然地能用Clarke变换和Park变换得到d、q轴但单相电路只有一个交流量没法直接做坐标变换。这时候就要构造一个虚拟正交分量——把实际电流i延迟90度作为虚拟的β轴分量原电流作为α轴分量然后照常做Park变换。仿真中实现虚拟正交分量的方法有几种。最简单粗暴的是用Transport Delay延时模块延迟1/4个工频周期50Hz就是5ms直接把当前时刻的电流延迟5ms得到近似的正交分量。这种方法在电网频率稳定时误差很小实现最简单。更精确的办法是用SOGI二阶广义积分器或者全通滤波器构造正交信号频率自适应谐波抑制能力也更强。我实际仿真用的方法是延迟5ms加滤波原因是模型简单、算得快对单相单位功率因数整流这个场景完全够用。但如果你后续想扩展到电网频率波动的情况建议用SOGI方案精度会好很多。dq变换以后实际电流的有功分量id、无功分量iq分别对应d、q轴的电流值控制起来非常直观。3. Matlab/Simulink仿真模型搭建全过程3.1 主电路模型搭建的步骤和细节打开Simulink后我建议直接用Simscape Electrical库里的元件。在主电路部分用到的模块包括AC Voltage Source交流电压源220V/50HzSeries RLC Branch串RLC支路设置为R0.01Ω、L3mH模拟电网阻抗和滤波电感Universal Bridge通用桥设成4个臂、IGBT/Diode模式Series RLC Branch直流侧设L0、R0、C2200μF负载用Series RLC Branch设置成10Ω电阻或者用Breaker加电阻做负载突变的模拟Universal Bridge不用自己搭四个IGBT桥臂了设置成Bridge type为Single-phase universal bridgePower electronic device选IGBT/diodes动作频率和Ron、Roff这些参数按平台默认值也基本OK仿真速度优先。要注意点交流电压源的内阻不要设太大我习惯设0.01Ω太小有时候初始化会卡太大的话会吃掉部分电压影响功率因数的观测。直流侧电容初始电压设成0V观察启动过程。电感L还有一个很容易忽略的地方仿真里理想电感和实际电感差在寄生电阻上如果不给电感串一个小的等效电阻比如0.2Ω~0.5Ω电流在低频段的阻尼会偏小启动过程中容易产生低频振荡。我给3mH电感串了0.3Ω的等效电阻相当于比较真实地模拟了铜损和磁芯损耗。3.2 控制系统模型搭建PLL、dq变换和双闭环控制系统的核心模块链路是交流电流采样 → 虚拟正交构造 → dq变换 → 电流PI → 电压前馈 → 调制信号 → 输出PWM驱动Universal Bridge。每一项拆开说。PLL锁相环用来获取电网电压的相位和频率。单相PLL实现方式同样要构造正交信号Simulink库里有PLL模块但单相的PLL需要给一个单相电压信号加90度延迟再通过Park变换锁相。我用的是Simulink标准库里的Single-Phase PLL模块直接输入电网电压输出sin、cos相位信号非常省事。dq变换模块需要严格注意坐标对齐。我们的目标是把电网电压矢量对齐到d轴这样当电流id与电压同相时iq就自然为0。在实际处理中αβ坐标系下的电压向量的相位角θ是由PLL输出的相位角Park变换公式为id iα·cosθ iβ·sinθ iq -iα·sinθ iβ·cosθ注意方向别搞反了很多人在这里吃了亏导致id和iq的响应完全不对。PI调节器的输出意义很明确电流内环调节器的输出对应调制信号的d轴分量Vd再叠加电网电压前馈项和电感耦合项生成Vd_cmd、Vq_cmd然后反Park变换生成调制信号Vmod。单相情况下不需要像三相那样把dq反变换后输出三相调制波只需要把d轴调制信号映射回α轴就行因为β轴是虚拟的不参与实际PWM。双闭环结构上电压外环的输出作为电流内环的有功电流指令Id*无功电流指令Iq*直接设0。电压环带宽低、响应慢电流环带宽高、响应快这是双闭环控制设计的基本规则参数整定下一步详细讲。3.3 PWM调制与闭环的连接方式PWM调制我用的是Simulink里比较常见的做法调制波信号和三角载波比较生成四个IGBT的驱动脉冲。三角载波频率我设为10kHz载波幅值归一化到±1调制波信号幅值范围也就对应±1过调制的现象可以很直观地通过饱和限幅来防止。具体连接上电流内环生成的调制波信号Vmod_sin先做一个增益处理把标幺值转换为调制波幅值然后送给比较器。比较器输出0/1逻辑信号再用逻辑运算模块生成H桥四个开关管的驱动信号。单极性调制时还要根据电网电压的过零方向来判断正半周和负半周切换导通方式。仿真参数上我建议用定步长Fixed-step求解器步长可以设5微秒或10微秒对应10kHz开关频率采样率和PWM脉冲宽度足够匹配。否则用变步长会频繁穿越开关切换点拖慢仿真速度。求解器选ode23t或者ode15s这类刚性求解器都行我习惯用ode23tb效果稳定。4. 双闭环控制参数整定从理论到实测调试4.1 电流内环的参数设计电流内环的直接控制对象是电感L上的电流。忽略电网电压扰动从调制电压到电流的传递函数近似为1/(LsR)其中L是滤波电感3mHR是电感等效电阻0.3Ω。这个一阶惯性环节用PI控制器补偿就行。我的整定方法是基于零极点对消PI控制器的积分时间常数Ti设为L/R也就是3mH/0.3Ω10ms这样PI零点可以和被控对象极点对消系统降阶成一阶惯性加增益。然后用期望的电流环带宽ωci来定比例增益Kp。电流环带宽我选2000rad/s约318Hz对应的比例增益KpL·ωci3mH×20006。仿真测试下来这个参数对单位阶跃响应上升时间约1ms动态响应快超调约4.3%效果不错。如果切换频率较低或者电感较大带宽要相应下调否则开关纹波会进入电流环造成振荡。电流环的输出要加限幅限制调制波幅值不超过1这是防止过调制导致电流失控的关键保护。4.2 电压外环的参数设计电压外环的控制目标是直流侧电压Vdc稳定。被控对象的近似传递函数主要由直流侧电容C决定积分特性明显典型传递函数为1/(sC)再加上电流内环等效为低通环节。由于电流内环带宽远高于电压环带宽设计电压环时可以把电流内环近似为纯比例增益1简化处理。按照典型II型系统设计方法电压环的穿越频率需要取得远低于电流内环带宽。我取穿越频率ωcv314rad/s约50Hz电压环PI参数整定下来Kp_v约为0.03~0.05Ki_v约5~10。这个参数在负载突变时直流电压最大跌落控制在6%以内恢复时间约100ms适合大多数电源场景。整定过程中有个直观的经验电压环的Kp太大会导致直流侧电压波形出现高频抖动因为电压误差中的纹波被放大了太小则负载突变时电压跌得深、恢复慢。Ki太大还会引发低频振荡启动时尤其明显表现为直流电压来回过冲几次才能稳住。调试的时候先固定Ki从零往上调Kp看电压阶跃的响应再微调Ki就能较快收敛。4.3 前馈控制与抗扰动措施的补充纯靠PI反馈去扛负载突变动态响应总是慢半拍的。为了改善动态特性我在电流内环里加了电网电压前馈调制波指令Vd_cmd PI输出 电网电压d轴分量Vd_ff这样电流环对电网电压的扰动就有了直接的前馈补偿电压跌落时的电流响应更快。另外一个实用的做法是在启动时对电压环输出做斜坡限制。PWM整流器启动瞬间直流侧电容相当于短路如果不加限制电压环会输出很大的电流指令导致启动电流过大交流侧可能看到比额定高好几倍的浪涌电流。我给Id*加了一个斜坡给定从0在0.2秒内匀速升到目标值启动电流能控制在1.5倍额定以内这个细节实测非常有效。直流侧电压采样也需要滤波但滤波时间常数不能太大否则影响动态响应。我用了一阶低通时间常数取1ms够用了。5. 仿真结果分析与常见问题排查5.1 关键波形怎么看稳态和动态各看什么仿真模型跑通之后重点看几个波形来判断系统是否正常工作。稳态下第一看交流侧电流的波形理想情况是均匀的正弦波THD在5%以内同时把电流和电网电压放在同一张图里看相位差单位功率因数时两者过零点几乎重合。第二看直流侧电压正常应稳定在设定值400V左右纹波峰峰值控制在2%以内。动态下用Step模块或Breaker在0.4秒时把负载从20Ω突加到10Ω观察直流电压跌落、恢复时间、交流电流的突变。我实测在Kp_v0.04、Ki_v8的参数下电压最大跌落约18V4.5%在100ms内恢复到400V电流从约10A平滑上升到20A过渡过程中没有明显振荡。启动过程也要看重点检查直流电压有没有超调过大或者启动电流冲击。加了斜坡限制后Vdc缓慢上升到400V没有过冲交流电流始终在安全范围内这是正常现象。5.2 仿真发散和初始化错误的排查仿真最常见的错误是初始化失败或者代数环问题。如果遇到Initialization of the model failed多半是回路中有不可解的矛盾检查方法从几个方向入手交流电压源是否和电感、电阻形成了有效的串联回路直流侧电容有没有接地参考点Simscape里单相电路经常因为缺参考地导致矩阵奇异Universal Bridge模块的测量端口有没有正确连接控制系统的采样模块有没有设置成物理端口而不是Simulink端口另一种常见问题是仿真开始不久就发散NaN。原因通常是电流内环PI输出过大或者PWM调制波超过载波幅值后进入过调制区导致系统失控。对策给PI输出加好限幅、给调制波加饱和模块以及把电流环比例增益先调小确认系统跑稳以后再逐步加增益。仿真速度特别慢的时候检查是不是用了变步长求解器且最大步长过小。定步长10微秒跑0.5秒仿真应该很快如果很慢看看模型里有没有隐式动态环节很多或者把载波频率降到5kHz试算一版对比速度。5.3 几个容易被忽视的工程细节这些细节是我反复踩坑之后才注意到的列在这里能帮你少走弯路第一Universal Bridge里的IGBT必须要有反向并联的二极管。因为电感电流不能突变桥臂需要一个续流回路如果模型里IGBT模型本身不自带二极管具体看选的器件模型整流模式下电流断流会产生极高的di/dt仿真直接闪断。选定IGBT/Diode模式能规避这个问题。第二交流电流采样要采电感上的电流最好是桥臂和电网之间的连线上的电流不要采交流电压源的输出电流后者在故障仿真时会包含充电电容的尖峰电流容易误导分析。第三Ploss损耗模块不要省。Simscape里默认器件是理想的跑出来的效率会高得离谱和真实电路差距很大。想贴近实测量在IGBT和二极管上加上导通电阻和管压降。不过这会让仿真变慢如果是纯算法验证可以不加但做工程评估一定要加。第四数据保存用Scope模块里的log signal或者输出到工作空间用timeseries格式方便后面做FFT分析看谐波。Simulink自带的Powergui模块里FFT工具非常好用直接在Scope数据上就能做谐波分析。5.4 常见问题速查表现象可能原因检查与解决思路初始化失败电路回路缺少参考地给交流源负极或直流侧加接地参考检查回路闭合性直流电压不稳定、振荡电压环PI参数不合适降低Kp_v和Ki_v检查电压环带宽是否远小于电流环交流电流波形有削顶调制波饱和、过调制加限幅模块调节电流环Kp使调制波裕量充足启动电流冲击大缺少软启动/斜坡对Id*做斜坡限制或给直流电压加预充电功率因数偏低dq相位不对、Iq*非零校准PLL相位确认Iq指令为0检查Park公式方向仿真速度极慢变步长/载波频率过高固定步长10μs载波10k以内关掉不必要示波器IGBT桥臂直通死区时间未设置在PWM生成时加入死区模块比如500ns至2μs的延迟5.5 从仿真到硬件移植的过渡思考很多朋友仿真跑通了下一步想上STM32G070CBT6或者FPGA做硬件验证这时候有几个准备工作可以提前做。首先把仿真里的PI参数换算成离散域的采样频率和PWM频率保持一致比如PWM频率10kHz电流环采样也是10kHz用增量式PI实现其次软件里要做ADC采样窗口对齐尽量在PWM载波峰值附近采样避免在开关切换瞬间采到纹波尖峰。控制系统的标幺化建议在仿真阶段就做电压基值取400V电流基值取额定电流这样参数移植到DSP或FPGA时不用反复缩放也方便排查定点数的溢出问题。FPGA实现时要注意duty计算和PWM比较器之间最好用单时钟域同步否则亚稳态问题很头疼。关于硬件方面还有一个容易被低估的细节是驱动电源。全桥四个IGBT中桥上两个需要隔离驱动电源如果驱动电源没做好隔离或者时序没调好开关直通烧毁是常事这部分对于从仿真转向硬件调试的人来说是最大的坎。我做仿真时习惯在模型里加几个监测点直流侧电压采样点、交流电流测量点、PWM驱动逻辑信号监测点。这几个信号在硬件调试时也都是必备的外设采集通道仿真阶段养成分模块、分信号管理的习惯硬件上会顺利很多。最后分享一个仿真调试的小技巧不管遇到什么问题先把参数退回到一个“绝对安全”的配置——比如电压环Ki调到0、电流环Kp调到1、负载用纯电阻、载波频率降低到5kHz——确认模型能不能基本运行起来再一步步加参数、加功能。这种“最小系统验证”的思路在Simulink阶段和硬件调试阶段都好用比一次堆满功能再找bug高效得多。