ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MATLAB/Simulink三相PWM整流器双闭环SVPWM仿真搭建与调试

MATLAB/Simulink三相PWM整流器双闭环SVPWM仿真搭建与调试 三相PWM整流器双闭环控制是电力电子仿真里很经典的一套结构电压外环稳住直流侧电压电流内环控制网侧电流波形和功率因数最后用SVPWM调制驱动三相桥臂。这篇文章直接说说在 MATLAB/Simulink 里怎样把这套模型搭出来参数怎么设跑出来什么波形算正常仿真发散或波形畸变时又该往哪里查。这套仿真适合三类人一是研究生写论文需要把三相 PWM 整流器的控制算法用仿真验证一遍二是做并网变流器、储能 PCS、电机回馈制动等方向的工程师先在小模型里验证控制逻辑三是刚接触 SVPWM 的人想看看空间矢量调制怎么和双闭环接起来。很多人卡住不是因为概念难懂而是模型里一个采样时间、一个 PI 极性、一个 SVPWM 扇区判断写错结果整个波形都不对。下面按我实际搭建时的顺序拆开讲。1. 先搞清楚这套仿真在解决什么问题1.1 “双闭环”不是两个PI简单叠加三相PWM整流器本质上是把交流电变成直流电同时还能控制输入电流的波形和相位。和普通不控整流相比它不需要靠二极管自然导通而是用IGBT或MOSFET组成的桥臂主动调制让网侧电流接近正弦功率因数接近1直流电压可调。这里的“双闭环”包含两个控制环电压外环采直流母线电压和给定电压比较经过PI调节后输出有功电流参考值 id_ref。电流内环采三相网侧电流经过坐标变换得到 d 轴和 q 轴电流分别用PI调节输出 d 轴和 q 轴的电压指令再变换回去送给调制器。为什么需要一个外环一个内环因为直流电压变化比电流变化慢电流是快速状态量。如果只用电压单闭环负载跳变时电流可能瞬时冲击很大开关管压力也会很大。加上电流内环之后相当于先把电流这个快速变量控制住再由外环决定电流该给多大。两级配合动态响应和稳定性都好很多。1.2 SVPWM在三相整流里管什么SVPWM空间矢量脉宽调制本质是让三相桥臂输出的电压矢量在一个开关周期内去逼近给定电压矢量。它比普通SPWM的直流电压利用率高谐波也更集中所以在三相PWM整流器里很常用。在双闭环模型里SVPWM的输入是控制环算出来的电压指令一般是静止两相坐标系下的 Ualpha、Ubeta输出是三相桥臂的开关信号。也就是说电流内环和坐标变换负责算“应该输出什么电压”SVPWM负责算“六个开关管在哪些时刻导通能达到这个电压”。两者是上下游关系不能反过来。1.3 适合谁做以及做之前要先弄懂哪几个概念这个仿真不算很小涉及的概念包括坐标变换、锁相环、PI限幅、空间矢量调制、开关管死区。如果你对这些完全没接触建议先把下面几件事弄明白三相静止 abc 坐标系和二相旋转 dq 坐标系的关系至少知道 Clarke 变换和 Park 变换的公式。d 轴和 q 轴电流的含义。d 轴对应有功q 轴对应无功。电压定向控制。一般用锁相环跟踪电网电压相位保证 d 轴和电网电压同方向。SVPWM 的扇区判断和作用时间计算。即便直接用现成函数也要知道它的输入范围是多少防止调制度过大导致输出饱和。这些概念不一定都要自己推公式但在 Simulink 里看模型时至少要能对上信号流。2. 搭建仿真之前先把主电路和控制参数列清楚2.1 主电路参数电压、电感、电容、负载我不建议打开 Simulink 直接拖模块先把参数表写在纸上。因为后面所有 PI 参数、限幅值都由这些基础参数决定。一套常见的三相 PWM 整流器主电路参数可以这样做项目示例值说明三相线电压380V / 50Hz常见的工业并网等级方便对照网侧电感3mH ~ 10mH影响电流纹波和响应速度直流母线电容1000uF ~ 5000uF影响启动充电和负载阶跃恢复直流电压给定650V ~ 750V必须高于输入线电压峰值开关频率10kHz平衡仿真速度和波形效果需要说明的是这些数值不是唯一的实际参数要以你的设计目标为准。我这里给的是方便先跑通仿真的量级。低功率小模型可以按比例缩小但电感电容的配合要重新算。2.2 开关频率、采样时间与SVPWM实现方式Simulink 里有两个时间概念容易混仿真算法步长负责解微分方程比如连续求解器下的最大步长。控制算法采样时间对应真实 DSP 或控制器里的中断周期SVPWM 和 PI 计算都按这个周期执行。我做这类仿真时开关频率一般先设在 10kHz控制采样时间和 PWM 载波周期保持一致也就是 1e-4 秒。太高会明显拉慢仿真速度太低又不容易看出谐波效果。10kHz 算是一个容易验证、速度也能接受的起点。SVPWM 实现方式在 Simulink 里常见有三种用 MATLAB Function 写 SVPWM 函数输入 Ualpha、Ubeta输出三对互补 PWM 信号。这种方式最灵活也最容易查扇区判断和时间计算公式。用 Stateflow 或纯逻辑模块搭扇区判断和占空比计算。适合想完全看清 SVPWM 底层逻辑的人但模型会很大。用 Simscape Electrical 自带 PWM 发生器但要注意自带模块未必是严格意义上的 SVPWM需要看具体算法。我的建议是如果想学习原理用第二种或第一种如果只是想把控制算法跑通用第一种 MATLAB Function 最省事。2.3 控制参数初始值怎么给双闭环 PI 参数一开始不容易给准。我给初始值的习惯是电流内环先调。给定一个阶跃的 id_ref不接电压外环只看电流能不能快速跟踪。内环 Kp 从几十开始Ki 从几百到几千逐步加直到电流无静差、响应快、不振荡。电压外环再接上。外环 Kp 给较小值Ki 给较小值先让电压能爬起来再慢慢增大响应速度。如果波形剧烈振荡先减小增益不要强行提高响应速度。这里不写死具体数值因为同一个电感、电容、电压等级下PI 参数差别很大。你只要记住一个方向内环快外环慢带宽相差 5 到 10 倍比较合理。这是一个工程经验不是公式推导出来的绝对结论。2.4 仿真求解器和步长设置模型风格会影响求解器选择如果主电路用开关器件和连续积分模型是连续系统可以用 ode23t 或 ode15s。最大步长要能覆盖 PWM 开关波形比如最大步长设置成 1e-5 秒或更小否则开关细节会丢失。如果控制算法用离散 PID需要单独设置控制采样时间。如果整个仿真想跑得更快可以把主电路离散化用离散求解器。这样更接近真实数字控制系统。我一般先按连续模型跑通再转离散模型验证。直接一步到位上离散出现数值发散时不容易判断是算法问题还是离散化问题。3. Simulink模型分块搭建主电路、双闭环、SVPWM3.1 先搭主电路从电源到三相桥再到直流侧Simulink 里搭三相 PWM 整流器主电路建议按以下顺序放三相交流电源。Simscape Electrical 里有 Three-Phase Source也可以直接用 Simulink 的三相正弦信号加电压源。如果是想研究波形用 Simscape Electrical 电气模型更直观。接网侧电感和等效电阻。电感一般用系列电感模型电阻可以选线路电阻和功率电阻也可以用很小的串联电阻模拟线路损耗。接三相桥臂。三相 PWM 整流器一般用 Universal Bridge选择三臂、IGBT/Diode。这里要注意桥臂的开关信号要和 SVPWM 输出对应。接直流母线电容和负载电阻。电容跨接在直流正负母线之间负载接在电容两端。加电压和电流测量模块。直流电压必须测三相电流必须测网侧电压最好也测控制环要用。主电路搭完先不加控制信号看开环状态是否正常。整流桥如果完全不给脉冲应该表现为二极管不控整流直流电压会稳定在一个值。这一步能帮你确认电源、电感、电容有没有接反。3.2 控制环接线电压外环和电流内环怎么串控制环的信号流可以拆成三段第一段是测量。直流母线电压 Vdc 经过一阶低通滤波或直接送到电压 PI三相电流先做 Clarke 变换和 Park 变换得到 id 和 iq。Park 变换需要角度这个角度来自锁相环 PLL或者来自三相电源电压的相位。第二段是外环。Vdc_ref 减去 Vdc得到误差进电压 PI输出 id_ref。为了单位功率因数运行iq_ref 一般设为 0也可以用无功指令控制无功功率。第三段是内环。id_ref 减去 idiq_ref 减去 iq得到电流误差分别进电流 PI。输出是 vd 和 vq再经过反 Park 变换得到 Ualpha、Ubeta送给 SVPWM。这里最容易犯的错是把电压 PI 输出直接当调制波。正确的链条是电压 PI 输出的是有功电流参考不是电压指令。必须经过电流内环之后才得到电压指令。少数简化模型会省略电流内环但那个不叫双闭环。3.3 SVPWM调制模块和PWM脉冲生成SVPWM 部分按下面方式处理最容易对号入座输入Ualpha、Ubeta。计算扇区号和相邻矢量作用时间。结合载波周期 T生成三相占空比。输出三对互补 PWM 信号给三相桥臂的六个开关管。如果使用 MATLAB Function 实现函数内部要自己写扇区判断和伏秒平衡公式。测试时可以先给 Ualpha、Ubeta 一个固定值看三个桥臂占空比是否合理也可以开着 SVPWM 但把直流给定设低让系统不进入过调制。关于死区Simulink 里可以用 Gain 或者延时模块模拟也可以先不加死区跑通逻辑。实际工程中死区一定存在仿真里先不加能减少很多波形毛刺问题。3.4 测量、示波器和数据记录模型跑完之后至少要记录这些信号三相输入电压和三相输入电流直流母线电压d 轴和 q 轴电流电压外环输出也就是 id_refSVPWM 的相电压或线电压波形调制度或占空比建议把波形分开显示不要全部塞进一个 Scope。电压和电流的参考值、反馈值画在一起方便看跟踪情况。波形数据可以导出到 MATLAB 工作区便于算 THD 和 FFT 分析。数据记录这一步容易被跳过。很多同学跑出波形后觉得好看但论文里需要谐波分析、稳态误差、动态时间没有记录就只能重新跑。建议在模型里放几个 To Workspace 模块把关键变量存成结构体或数组。4. 双闭环PI参数整定先内环后外环看波形而不是只看数值4.1 电流内环怎么调第一次整定时建议先把电压外环断开给一个恒定 id_ref单独观察电流内环给 id_ref 一个阶跃看 id 实际值能否快速跟踪。跟踪慢增大 Kp跟踪有静态误差增大 Ki。振荡说明 Kp 或 Ki 过大先降 Kp 再降 Ki。两个方向都要看不只是 d 轴。iq_ref 给 0 时iq 应该稳定在 0 附近。如果电流毛刺很大先看采样时间和开关频率是否匹配再考虑滤波。判断内环是否合格的简单标准电流阶跃响应没有明显超调几个毫秒内能跟踪上稳态纹波在可接受范围内。这不是绝对指标但对 10kHz 开关频率的模型足够起步使用。4.2 电压外环怎么调电流内环调稳后把电压外环接上。外环 PI 输出的是 id_ref要特别注意这条信号的限幅。如果 id_ref 没有限幅启动瞬时它会冲得很大直流电压很容易过冲甚至把电流内环逼到饱和。外环整定的顺序先给很小的 Kp 和 Ki让直流电压慢慢爬升。此时波形可能又慢又软但稳定。逐步增大 Ki消除稳态误差让电压能精确落在设定值。再逐步增大 Kp提高响应速度。当负载突变时观察直流电压跌落和恢复时间。恢复太快容易超调恢复太慢说明带宽不足。外环的积分限幅也要设置好。电压外环输出 id_ref 的最大值一般由系统允许的最大输入电流决定。比如设计峰值电流 20A就把 id_ref 限幅在 ±20A 附近。限幅过小会限制整流器输出能力限幅过大会让启动电流冲击变大。4.3 启动、稳态和负载阶跃怎么验证一套双闭环仿真能不能交付通常看三个过程第一是启动过程。仿真开始后直流电压从零升到给定值。这个过程中电流应该被内环限制在合理范围电压不应该出现大幅度超过给定值的尖峰。如果启动瞬间电压过冲到 800V说明外环 Kp 或 id_ref 限幅设置有问题。第二是稳态过程。电压稳定后输入电流应该是接近正弦的波形。用 FFT 看电流 THD在 10kHz 开关频率下不加死区时 THD 通常可以做得比较低。THD 高一般先查 SVPWM 扇区判断和坐标变换方向再查采样时间。第三是负载阶跃。在稳定运行一段时间后突然增大或减小负载电阻观察直流电压恢复情况。合格系统的电压跌落应在允许范围内并且能在几十毫秒到一两百毫秒内恢复。如果电压一直恢复不了检查外环 PI 带宽和 id_ref 限幅是否太小。我实际做的时候会把三个过程用同一个仿真跑完0 到 0.2 秒启动0.3 秒加负载0.8 秒减负载。这样一次仿真能覆盖大部分验证需求。5. 仿真发散、波形异常的排查链路5.1 仿真直接发散或结果无穷大遇到仿真结果发散不要先怀疑模型算法按下面顺序排查看电源、电容、电感的初始值。Simulink 里电容初始电压、电感初始电流可能影响仿真起始状态。带初始值不合理的模型很可能在第一拍就发散。看 PI 反馈极性。PI 反馈接成正反馈系统通常很快发散。一个简单检查方法是把 PI 输出断开手动给固定值看系统能不能稳定。看 SVPWM 输出是否超出范围。调制波太大或调制度超过 1仿真会出现脉冲丢失波形乱掉。看仿真步长。连续模型最大步长太大开关管切换的瞬间可能被跳过数值上就表现为发散。看代数环。Simulink 里如果出现代数环求解会特别慢或报错。用代数环提示定位。我在调模型时有个习惯先去掉所有 PI手动给固定占空比看主电路能不能稳定。主电路稳定后再接入控制环这样能快速区分是主电路问题还是控制问题。5.2 电压跟踪不上、过冲大、震荡直流电压几种典型异常电压偏低启动后一直达不到给定值。常见原因是 id_ref 限幅太小或电源电压不足以支撑直流给定电压。三相 380V 系统如果直流给定设成 900VSVPWM 输出极限不够电压就上不去。电压过冲很大。常见原因是电压外环 Kp 太大、id_ref 限幅太大、启动时外环积分饱和。解决方法给外环积分加限幅给 id_ref 加合理限幅限制最大充电电流。电压持续震荡。可能外环带宽和内环带宽太接近导致两个环互相影响。按先内环后外环重新调整让外环明显慢于内环。5.3 SVPWM没输出或电流畸变严重SVPWM 没有输出先看函数是不是被正确调用了。很多 MATLAB Function 报错不会立刻停仿真而是输出恒为 0。你可以用 Display 模块把 Ualpha、Ubeta 显示出来确认输入不是 0再看函数输出。电流畸变严重常见几个原因坐标变换角度方向反了。Park 变换的旋转方向不对电流跟踪不上波形就会扭曲。dq 轴接反了。id 当作 iq 处理功率因数会异常。调制度接近或超过 1输出进入过调制区电流谐波增大。解决办法是提高直流电压给定值或降低输入电压。SVPWM 扇区判断公式写错。这种错误最隐蔽建议先用固定电压矢量做开环测试检查三相占空比是否和理论一致。5.4 常见错误定位顺序我把自己的排查顺序固定下来基本能覆盖大多数问题第一步看现象是发散、卡住、无输出还是波形很差。 第二步看输入三个电压源、三相电流、直流电压反馈是否接到正确点位。 第三步看控制环PI 极性、限幅、参考值大小。 第四步看 SVPWM输入角度是否连续输出占空比是否在合理范围。 第五步看求解器步长、采样时间、代数环。没有足够经验时最忌讳的是一上来就调 PI 参数。如果 SVPWM 本身没工作调 PI 没有任何意义。先把信号流对着端口走一遍再用波形定位。6. 模型整理、结果说明和找人定制时的验收边界6.1 自己搭完模型后整理什么模型能跑通之后建议花时间整理这样后面复用、改参数、参与论文或项目时效率会明显提高模块命名电源、电感、桥臂、PI、SVPWM 都用有意义的名称不要叫 Gain1、Gain2。参数集中管理把主电路参数、控制参数、限幅值都放到 MATLAB 脚本或模型里定义的变量中不要散在各个模块里写死。版本保存每改一版参数保存成带时间和版本号的副本避免调坏之后回不去。注释和说明对 SVPWM 函数、坐标变换、PI 极性这些关键点写简短注释防止过两周自己看不懂。整理模型花费的时间可能比搭模型还长但对后续有利。6.2 找人做仿真模型需求写到什么程度才算清楚很多人在网上找人做 matlab 仿真模型但需求只写“三相PWM整流器双闭环仿真”这个描述太宽泛。交付结果很难保证。如果你需要找人定制我建议至少把下面几项写清楚主电路参数电压等级、频率、功率、电感、电容、负载电阻范围。控制要求是否必须用 SVPWM还是 SPWM 也可以是否要求单位功率因数是否需要 PLL 锁相环是否要求离散模型。输入输出信号你期望看到哪些波形是否需要导出 THD 分析数据。MATLAB 版本不同版本对 Simulink 模块支持有差异不说版本很容易出现打不开的问题。交付物除了 .slx 模型是否需要说明文档、参数脚本、报告和演示视频。如果这些信息都写不清楚定制回来的模型大概率还需要你自己大量调试因为对方猜到的主电路参数和控制要求可能和你项目需求不一致。6.3 交付和验收要核对哪些点拿到一个别人做的仿真模型我建议按一套验收清单检查模型能不能在你本地 MATLAB 版本里直接打开和运行有没有缺失模块。主电路参数是否和你的设计一致三相对称性是否正常。双闭环结构是否完整电压外环输出是否真的送到电流内环参考而不是直接送调制波。SVPWM 是否真正参与驱动把 SVPWM 输出断开换成固定占空比系统行为是否明显不同。启动、稳态、负载阶跃三个过程的波形是否正常。参数改了之后模型能否在合理范围内继续稳定运行。有些模型只在某个固定 PI 参数下稳定稍微改负载就可能发散这种模型只能当演示不能用于论文或项目。验收时最好自己动手改几个关键参数跑一遍不要只看对方提供的截图。最后说一点个人经验三相 PWM 整流器双闭环仿真最核心的不是把 SVPWM 函数写得多么漂亮而是控制环的信号流向、PI 参数整定顺序和异常波形的定位能力。先把主电路跑通再拆开电流内环调最后接上电压外环一层一层验证。如果只是学习默认参数跑通就够如果要用于论文或工程项目就把参数脚本、模型版本、波形记录和调试日志都留好。很多问题不是工具能力不够而是前置参数和模型结构没有理干净。
返回列表