ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

MATLAB/Simulink电力电子仿真入门:整流与逆变案例详解

MATLAB/Simulink电力电子仿真入门:整流与逆变案例详解 最近带几个朋友从零开始学电力电子仿真发现大家卡住的往往不是电路原理而是不知道怎么在MATLAB/Simulink里把脑子里的电路图变成能跑的模型。今天就把我认为最适合入门电力电子仿真的两个案例完整拆开讲透单相半波可控整流电路和三相半波逆变电路。这两个案例一个整流、一个逆变一正一反刚好能把晶闸管的触发角控制、自然换相、阻感负载特性、波形分析这些基本功全过一遍。文章适合刚接触电力电子仿真、虽然知道基本拓扑但还没在Simulink里搭过晶闸管电路的读者我会尽量把每一步怎么想、为什么这么做讲明白。我先把项目思路捋一遍然后从环境准备、单相半波可控整流仿真、三相半波逆变仿真、常见问题排查一路写到实操心得。内容偏长建议收藏后照着搭。1. 项目整体思路为什么偏偏选这两个电路入门1.1 整流和逆变其实是一体两面很多人学电力电子喜欢从Buck、Boost这类DC-DC开始也有人一上来就搞三相桥式整流。但我的看法是想理解晶闸管相控电路单相半波可控整流是最短路径整条电路只有一个开关管、一个负载、一个交流源所有核心概念都能塞进去。触发角alpha是什么、移相范围多大、电阻负载和阻感负载波形差在哪、为什么需要续流二极管这些问题在单相半波里全部能回答。等单相半波想明白了再去看三相半波逆变逻辑就顺了。三相半波逆变不是新电路它和三相半波可控整流共用同一个拓扑区别只是触发角跨过了90度、直流侧多了一个反电动势源。很多人觉得逆变很难其实是被PWM逆变器带偏了相控逆变器用的是祖传的晶闸管原理完全建立在“整流器反向运行”的基础上。把三相半波逆变跑通一次你就会明白什么叫直流侧电压平均值变负、能量从直流侧倒灌交流侧。所以这两个案例组合起来等于用最少的器件把“电力电子功率变换”这扇门推开了一半。剩下的一半比如PWM调制、软开关、高频变压器都是在这套基本功上面长出来的。1.2 为什么选MATLAB/Simulink而不是PSIM或手写代码做电力电子仿真可选的工具其实不少。PSIM在开关电源仿真上更快PLEECS也有自己的优势Python里甚至可以用SciPy手写差分方程模拟开关过程。但我带人入门还是首选MATLAB/Simulink原因有三个电力电子从来不是孤立的晶闸管触发后面往往跟着电流环、电压环、锁相环Simulink里控制系统和主电路在同一张模型里连线天然适合做闭环仿真。Specialized Power Systems库把晶闸管、二极管、IGBT、变压器、电机都封装好了你不需要自己写开关状态判断逻辑入门门槛反而比手写代码低。波形后处理太方便Scope看波形、To Workspace导出数据、MATLAB脚本批量扫参数整个工作流非常顺。要说缺点Simulink的电力电子仿真在开关频率很高时会比较慢而且模型里一堆参数容易让新手懵。但这些都不是入门阶段的核心矛盾。你的第一目标应该是把原理和波形对上而不是追求仿真速度。1.3 你需要准备的软件基础和环境跑这两个仿真硬件上只需要一台能装MATLAB的电脑不需要任何实验台。软件上需要MATLAB/Simulink以及Simscape Electrical工具包在Simulink库浏览器里显示为Simscape Electrical Specialized Power Systems。不同版本界面稍有差异但库结构基本一致我用的是近几年的版本下面提到的模块路径都通用。如果你完全没碰过Simulink建议先花半小时做一件事新建一个空白模型拖一个Sine Wave接一个Scope跑通看波形。把基本操作手感找到之后再进入电力电子模型否则一边找模块一边连线会很挫败。1.4 我建议的推进顺序千万别一上来就搭三相半波逆变。我的项目推进顺序是这样安排的手算单相半波可控整流在几个典型触发角下的输出电压平均值。搭单相半波可控整流仿真对比公式。给负载加电感观察电流连续和断续的波形差异。搭三相半波逆变先算预期值再动手连线。把触发角从0度扫到接近180度画出Ud随alpha变化的曲线。这样每一步都有“预判-验证”的过程跑出来的波形对不上时你能快速定位是理论理解问题还是模型搭建问题。2. 环境准备与仿真基础2.1 常用的Simulink库和模块清单在Simulink库浏览器里展开Simscape - Electrical - Specialized Power Systems这个库下面就是我们需要的全部器件。入门阶段只需要记住几个子库模块类别路径常用模块电源Electrical SourcesAC Voltage Source、DC Voltage Source器件Power ElectronicsThyristor、Diode无源元件ElementsSeries RLC Branch测量MeasurementsVoltage Measurement、Current Measurement仿真环境库根目录powergui另外在Simulink基础库里还会用到Pulse Generator、Scope、To Workspace、Mean这些模块。Scope虽然简单但后面要同时看四五路波形建议多用带多个输入口的Scope方便对比时间轴。2.2 powergui是电力电子仿真的心脏这个模块经常被忽略但它必须放在模型里否则整个电力电子仿真会报错。powergui是个隐形指挥所双击它可以设置仿真类型、采样时间、显示稳态值。入门阶段我的建议是在powergui里把仿真类型选成Discrete固定步长步长设1e-6秒。为什么不用Continuous因为晶闸管触发脉冲宽度是毫秒级的如果用变步长求解器数值算法在开关时刻可能会自适应调整步长积分器容易漏掉极窄的触发脉冲导致晶闸管明明应该导通却没导通。固定步长虽然慢一点但每个采样点都在晶闸管动作时间点不会丢。步长大小怎么权衡1e-6秒属于保守值两个仿真案例跑0.1秒也就是十万步电脑完全扛得住。如果你把步长放到1e-5仿真速度能快十倍但触发脉冲宽度只有几度电角度时容易产生波形畸形。我的经验是入门阶段老老实实用1e-6跑顺了再优化。2.3 用工作区变量统一管理参数这是我自己做仿真必用的习惯强烈建议你一开始就养成。新建一个MATLAB脚本文件把所有参数写在脚本里% 仿真公共参数 f 50; % 电网频率单位Hz U2_rms 220; % 交流电压有效值单位V alpha_deg 60; % 触发角单位度 alpha alpha_deg * pi / 180; R 10; % 负载电阻单位ohm L 5e-3; % 平波电感单位H Ts 1e-6; % 仿真固定步长单位sSimulink模块参数框里直接填变量名比如AC Voltage Source的Peak amplitude填U2_rms*sqrt(2)Pulse Generator的Phase delay填alpha_deg/360*0.02。这样改参数只需要改脚本不需要一个一个双击模块去改。后面扫触发角的时候用循环改alpha_deg再仿真效率能差出一个数量级。2.4 最小模型先跑通再往下走我搭电力电子模型永远不会一步到位。即使是单相半波可控整流我也建议先搭一个不含晶闸管的模型交流源直接接电阻负载用Scope看负载电压和电流跑0.05秒。这一步看起来多余但能确认三件事交流源的幅值和初相设置正确、测量模块的极性没接反、Scope的时间轴和采样步长正常。确认这些基础无误后再插入晶闸管。很多人喜欢一口气把所有模块全连好然后F5结果波形一团糟根本不知道是电源问题、测量问题还是触发问题。分步验证是性价比最高的调试手段。3. 单相半波可控整流电路的建模与仿真3.1 电路拓扑和输出电压公式电路结构如下交流电压源U2一个晶闸管T负载电阻R或者R-L负载电流回路从交流源正端流经晶闸管、负载回到源负端。触发角alpha定义为晶闸管阳极电压由负变正的过零点到门极触发脉冲出现的角度间隔。纯电阻负载情况下输出电压平均值公式为Ud 0.45 * U2 * (1 cos(alpha)) / 2这个0.45是单相半波不控整流时的电压平均值系数来自正弦电压半波积分。触发角alpha越大导通角pi - alpha越小输出电压平均值越低。alpha等于0时Ud 0.45 * U2 * (11)/2 0.45U2和不控半波整流一样alpha等于180度时Ud 0。举个例子U2 220Valpha 60度Ud 0.45 * 220 * (1 0.5) / 2 74.25V。记住这个数后面仿真完直接对比。如果负载是阻感负载且没有续流二极管情况就变了。由于电感储存的能量维持电流流动晶闸管在交流电压过零后不会立刻关断输出电压会出现负值平均电压公式变成Ud 0.45 * U2 * cos(alpha)注意这个公式成立的前提是电流连续电感量要足够大。alpha 90度时Ud趋于0alpha超过90度平均电压变负这已经进入逆变区。单相半波可控整流的阻感负载通常不这么干因为交流侧会有直流电流分量所以实际电路里会加续流二极管。加上续流二极管后负半周电流从续流管走晶闸管关断输出电压负值被钳位到0Ud回到0.45 * U2 * (1 cos(alpha)) / 2移相范围也恢复到0到180度。三种情况我整理成一张表方便对照负载类型Ud公式移相范围输出电压特征纯电阻0.45U2(1cosα)/20~180°只有正半周部分电流和电压同形状阻感无续流管0.45U2cosα0~90°电流连续时存在负电压段电流连续平滑阻感加续流管0.45U2(1cosα)/20~180°负电压被钳位到0电流流经续流管3.2 触发脉冲设计与同步问题这是单相半波可控整流仿真最容易翻车的地方。Simulink里最简单的触发方式是直接用Pulse Generator模块周期设0.02秒脉冲宽度设一个较小值Phase delay设成触发角对应的时间。比如50Hz电源alpha 60度Phase delay 60/360 * 0.02 0.003333秒。这个方案如果只是快速教学验证完全够用。但有个前提交流电压源的初始相位必须设为0度Pulse Generator的触发起点才会和电源过零点对齐。否则你会看到触发脉冲明明在走晶闸管导通时间却不对输出电压平均值和理论值差一大截。更贴近实际控制思路的做法是用同步过零检测把交流电源电压接到一个Voltage Measurement用Hit Crossing模块捕捉电压由负到正的过零点再经过一个时间延迟输出触发脉冲。这个方案的优点是不依赖仿真起始时刻即使交流源初始相位不是0也能在每个周期正确触发。缺点是模块组合稍多需要Hit Crossing加Delay或者自定义逻辑。我的建议是初学阶段先用Pulse Generator把主电路跑通理解波形变化。等你打算做闭环控制或者模拟真实工况时再换成同步触发方案。实操中还有一个细节Pulse Generator的脉冲宽度不要设太小。晶闸管触发脉冲宽度一般取10度到20度电角度比较稳妥对应时间大约是0.00055秒到0.0011秒。太窄的脉冲比如0.1度在固定步长1e-6下虽然能捕捉到但门极电荷积累不够在真实器件里可能触发失败。3.3 仿真模型搭建步骤我以纯电阻负载为例给出完整搭建步骤从Simscape - Electrical - Specialized Power Systems - Fundamental Blocks - Electrical Sources里拖一个AC Voltage Source双击设置Peak amplitude为220*sqrt(2)Phase为0Frequency为50。从Power Electronics里拖一个Thyristor参数保持默认即可。如果后面发现波形尖刺太大可以把Snubber resistance设成1e5Snubber capacitance设成1e-9。从Elements里拖一个Series RLC BranchBranch type选RResistance填R。从Measurements里拖Voltage Measurement和Current Measurement分别并联在负载两端和串联在负载回路中。从Simulink - Sources里拖一个Pulse GeneratorAmplitude设为10Period设为0.02Pulse Width设成1表示百分比大约0.18毫秒Phase delay填alpha_deg/360*0.02。加一个powergui到模型里双击设置Discrete solver步长Ts。Scope接三路信号触发脉冲、晶闸管电压Vak、输出电压ud。设置仿真时间0.1秒跑完看波形。alpha 60度时输出电压正好是正弦正半周上从60度到180度那一段平均值约74V。用Scope里的平均值显示或者把ud导出到工作区算mean验证一下。3.4 阻感负载和续流二极管的仿真对比在R-L负载下做两次仿真第一次不加续流二极管第二次在负载两端反并联一个Diode。你会看到明显差异不加续流管时输出电压波形出现负半周片段电流波形比电阻负载平滑很多平均值会低于电阻负载公式算出来的值。电感越大负电压段越长电流越连续。加了续流二极管后当晶闸管关断的瞬间负载电流通过续流管续流负载电压被钳位到约0V不再出现负压。电压平均值回到0.45U2(1cosα)/2电流波形也比无续流时更平稳。这个对比做完你对晶闸管关断条件和续流二极管作用的理解会立刻立体起来。很多教材写了一大段文字不如你在Scope里亲眼看一遍波形切换。3.5 用MATLAB脚本自动验证理论值仿真跑完后用To Workspace模块把ud信号存到工作区然后写两行脚本对比ud_mean mean(ud); ud_theory 0.45 * U2_rms * (1 cos(alpha)) / 2; disp([仿真平均电压 , num2str(ud_mean), V]); disp([理论计算值 , num2str(ud_theory), V]);如果两者差别在5%以内说明模型基本正确。如果差别很大先检查触发角对应的Phase delay对不对再看负载是不是设成了电感再看晶闸管缓冲电路有没有产生额外压降。4. 三相半波逆变电路的建模与仿真4.1 到底什么叫“逆变”还是那句话逆变不是新拓扑。三相半波逆变电路的交流侧就是三相电源三只晶闸管共阴极连接直流侧接一个反向电动势负载。当触发角alpha小于90度时整流状态Ud 1.17 * U2 * cos(alpha)为正值能量从交流侧流向直流侧。当alpha大于90度时Ud变成负值这就是逆变状态。这里有个必须理解透彻的点晶闸管只能单向导电电流方向不能反向所以逆变态的电流方向和整流态完全相同变的只是电压平均值。直流侧必须有一个直流电动势源EE的方向要能推动电流继续流并且E要比Ud的绝对值大电流才能维持住。能量流动方向也跟着反了直流侧发出功率交流侧吸收功率。数值算例三相相电压有效值U2 100Valpha 120度Ud 1.17 * 100 * cos(120度) -58.5V。若直流电动势E 80V回路电阻R 1ohm平波电感足够大则稳态电流Id约为(80 - 58.5) / 1 21.5A。这21.5A是从直流源正极流出、经晶闸管进入交流侧的功率P Ud * Id -58.5 * 21.5约等于-1258W负数表示功率从直流侧回馈交流侧。仿真验证的核心就是这个负功率。你不要只看电压波形要把直流电压、直流电流、直流源功率三条线全拉出来看。4.2 仿真模型搭建步骤步骤比单相半波复杂我用最清晰的顺序写搭三相交流电源用三个AC Voltage SourcePeak amplitude填100*sqrt(2)Frequency填50Phase分别填0、-120、-240度。三个源的负端连在一起作为中性点N。搭晶闸管整流桥从Power Electronics里拖三只Thyristor阳极分别接A、B、C三相三个阴极短接在一起作为直流正母线P。中性点N作为直流负母线。搭直流侧从Electrical Sources里拖一个DC Voltage Source电压填E工作区变量设80V正极接直流正母线P负极串一个Series RLC BranchR 1ohmL 10mH后接中性点N。加测量在直流正母线上串Current Measurement测Id在P和N之间并Voltage Measurement测Ud在直流源正极串Current Measurement测Ie。加powergui选Discrete solver步长1e-6。触发脉冲单独讲见4.3。这里直流电压源极性容易搞反。记住一点电流要从直流源正极流出所以DC Source正极必须接晶闸管阴极P。如果接反了晶闸管阳极电压始终低于阴极整个电路不会有电流。4.3 三相半波逆变触发脉冲生成三只晶闸管需要三路相位差120度的触发脉冲而且必须和三相电源电压同步。单纯用三个Pulse Generator手动设置Phase delay很容易乱。我推荐用PLL加一个MATLAB Function模块来生成逻辑清楚调参也方便。先从Specialized Power Systems的Control库拖一个3-Phase PLL模块输入接三相电压Va、Vb、Vc输出有一个wt信号范围0到2pi代表A相电压的实时相位角。然后拖一个MATLAB Function模块输入PLL的wt和触发角alpha输出三路脉冲信号y1、y2、y3function y three_phase_trigger(alpha, wt) % alpha: 触发角弧度相位需与A相过零点对齐 % wt: PLL输出的瞬时相位角范围0~2*pi pw 0.08; % 触发脉冲宽度约4.6度电角度 y zeros(1,3); offset [0, 2*pi/3, 4*pi/3]; for k 1:3 delta mod(wt - alpha - offset(k), 2*pi); if delta pw y(k) 1; else y(k) 0; end end end解释一下三个晶闸管的触发基准相位差120度所以alpha加上各自的偏移量。wt从PLL出来若和A相电压过零点完全对齐alpha 0时第一个脉冲在wt 0处触发。实际仿真中PLL的初始相位可能有一个固定偏置导致第一路脉冲和A相阳极电压过零点错开一点。这时不用改代码在Scope里对比A相电压波形和第一路脉冲手动给alpha加一个修正偏量即可。仿真参数表如下参数数值说明相电压有效值U2100V三相星接峰值141.4V触发角alpha120度对应beta 60度直流电动势E80V必须大于平波电感L10mH维持电流连续回路电阻R1ohm限制稳态电流仿真时间0.2s至少看到10个工频周期步长Ts1e-6s固定步长4.4 波形观察与能量回馈验证模型跑完后重点看四个波形直流输出电压Ud平均值应该在-58V附近波形由三相电压各负半周的片段拼接而成没有正电压段。直流电流Id稳定在21A左右有纹波但连续。如果电流掉到0说明电感不够大或者E太小电路已经断续。直流源功率Pe用P E * Ie算应为正数约1600W。这个说明直流源在对外做功电能从直流侧流出。晶闸管两端电压Vak确认关断的晶闸管承受反压时波形正常没有持续正压导致误导通。我最想强调的是一定要养成看平均值的习惯。党务Scope显示瞬时电压一上一下很多人就慌了。其实逆变状态的瞬时电压本来就是脉动的判断是不是逆变要看平均值。Simulink里可以直接拖一个Mean模块把时间窗口设成0.1秒就能实时显示平均值曲线这样整流还是逆变一眼看清。4.5 故意触发一次“逆变失败”会学到更多这是仿真特有的福利真实实验不敢做仿真里随便试。把alpha改成175度再跑一次你会看到Ud波形彻底乱掉电流急速上升已经不是正常逆变波形。原因就是逆变角beta 180度 - 175度 5度太小了。晶闸管换相需要时间换相结束后还必须给刚关断的晶闸管留出恢复阻断能力的时间如果beta不够大下一相还没换完流前一相又重新导通换相失败直流侧相当于被短路。工程上一般要求最小逆变角beta_min不小于30到35度对应alpha最大约145到150度。仿真里你可以从alpha 150度开始一点点加大看看波形从正常逆变到失稳的临界点在哪。这个临界观察比背十遍公式都有用。5. 常见问题与排查技巧5.1 问题速查表我自己带人做这两个仿真时高频踩坑基本集中在这几个地方整理成表格方便你排查症状可能原因排查与解决输出电压平均值和公式差很多触发脉冲相位没对齐电源检查Pulse Generator的Phase delay配合Scope看脉冲落在正弦波的哪个位置晶闸管始终不导通门极没有收到脉冲触发电压太低阳极电压低于阴极确认脉冲幅值至少5~10V检查晶闸管阳极是否接交流相线在Scope里叠加门极信号和Vak波形毛刺多、尖峰大晶闸管缓冲电路参数不合适步长太大把Snubber resistance调大、Snubber capacitance调小步长改1e-6阻感负载仿真的Ud严重偏低电感太小电流断续增大电感比如10mH以上或用Mean模块看平均值而不是瞬时值三相逆变电流为0直流源极性接反E小于Ud三相逆变波形突然混乱alpha超过安全范围beta太小把alpha调回150度以内重建正常工况后再调参仿真速度极慢步长太小、仿真时间太长适当增大步长到5e-6减少仿真时间到0.1s关掉不用的数据日志5.2 一个很难发现的坑缓存电路在偷偷改变波形Thyristor模块默认自带RC缓冲电路作用是为数值仿真提供人为阻尼避免因理想开关导致的数值震荡。但这个缓冲电路会给晶闸管并联一个漏电流通路在高阻抗负载时会明显影响输出电压波形和平均值。如果发现仿真结果和理论值总有几个百分点的偏差而触发角、负载参数都检查过了没问题那就把Snubber resistance设成1e5以上或者Snubber capacitance设成1e-9以下再看波形是否接近理论值。这在真实晶闸管电路里也有对应物实际的阻容吸收浪涌抑制电路也会产生损耗。但仿真入门阶段为了把基本原理看清晰可以先把缓冲弱化。5.3 排查也讲究顺序波形不对时我建议按这个顺序排查效率最高先看电源波形对不对再看触发脉冲有没有、位置对不对然后看晶闸管压降波形最后看输出电压和电流。很多新人一上来就在负载波形里找问题其实病根在触发脉冲上。把四路信号全部接到同一个Scope里时间轴对齐一眼就能看出触发脉冲到底落在哪里。6. 实操心得与进阶方向仿真做多了你会发现跑通一个模型不是目的真正有价值的是跑通之后做参数扫描。我建议你做完这两个案例后写一个脚本把alpha从0度扫到175度每隔5度仿一次记录Ud平均值画成一条曲线。三相半波电路中这条曲线在90度附近穿过0点From正到负的转折点就是整流和逆变的交界。亲眼看到这个转折你对相控电路的理解会产生质变。具体扫参数脚本大致长这样alpha_list 0:5:175; ud_list zeros(size(alpha_list)); for idx 1:length(alpha_list) assignin(base, alpha_deg, alpha_list(idx)); sim(three_phase_half_wave_inverter); ud_list(idx) mean(out.ud(end-1000:end)); end plot(alpha_list, ud_list, o-); grid on;建议接下去做的方向我列三个把开环改成闭环比如加一个简单的电流PI控制目标就是通过调整alpha让Id稳定在设定值。这时候你才开始真正接触电力电子控制系统的核心。把阻感负载换成直流电机模型观察电机处于电动状态和回馈制动状态下电路如何切换。把三相半波变成三相桥式全控整流/逆变虽然晶闸管数量翻倍但触发逻辑你已经完全掌握只是多加三只管子的事。第一次把三相半波逆变跑出负电压的时候我盯着Scope看了很久突然就理解了老师上课说的那句“晶闸管电路既能整流也能逆变区别只在触发角和直流侧条件”。仿真最好的地方就在于你可以放心地试那些在真实实验台上不敢碰的边界条件然后把这种直观慢慢变成直觉。这两个案例只是起点它们背后延伸出来的功率变换世界足够你玩很久。
返回列表