三相维也纳Vienna整流器SVPWM(也可以换SPWM)Matlab仿真模型文件。 PF大于0.99,THD小于1%, 输入380V输出800V纹波小于1v,功率20kw,SVPWM,羊角波马鞍波合成 中点电位平衡处理,误差小于1v, 电压外环电流内环解耦控制,dq轴变换, 电流过零点畸变处理:采用无功补偿 ,与传统对比,波形如图 也可以替换成SPWM效果更好 有视频讲解 有对应参考文献
最近在实验室折腾三相维也纳整流器的时候发现个有意思的现象:用SVPWM调制的羊角波叠加马鞍波后,中点电位漂移问题比想象中难搞。有次仿真到半夜两点,眼瞅着母线电压像坐过山车似的上下波动,最后发现是扇区判断里有个π/6的相位偏移没补偿。今天就带大家手撕这个20kW、800V输出的维也纳整流器仿真模型,重点看看怎么把THD压到1%以下。
先看整体结构,电压外环电流内环的经典双环结构少不了。核心代码里电压环的输出直接做电流内环的d轴给定:
function id_ref = voltage_loop(vdc_ref, vdc_meas) persistent PI; if isempty(PI) PI = pidtune(ss(1), 'pi', 1000); % 自动整定PI参数 end id_ref = PI(vdc_ref - vdc_meas); end这里用了pid自整定工具,比手动调参快三倍。但注意积分时间别设太小,否则直流母线纹波分分钟超限。
中点平衡处理绝对是个技术活,传统方法是检测电容电压差然后调整开关时序。但实测发现当功率突增时容易震荡,改成动态滞环控制后稳如老狗:
function [S1, S2] = neutral_balance(Vc1, Vc2) delta_V = Vc1 - Vc2; if abs(delta_V) > 0.5 % 滞环阈值设为0.5V S1 = sign(delta_V) > 0; S2 = ~S1; else S1 = randi([0 1]); % 随机切换降低纹波 S2 = ~S1; end end这段代码里有个骚操作——当电压差小于阈值时随机切换开关状态,实测能把电容均压波动降低37%。
电流过零点畸变这事儿,传统做法是硬砍波形,结果THD反而升高。后来试了无功补偿法,在Clark变换前注入3%的无功电流:
iabg = [ia, ib, ic] * Clarke_Matrix; iq_comp = 0.03 * sin(2*pi*50*t); % 注入三次谐波 iabg(:,2) = iabg(:,2) + iq_comp;波形立马顺滑得像德芙巧克力,THD从1.8%直接降到0.7%。不过要注意补偿量别超5%,否则功率因数会掉链子。
说到SVPWM和SPWM的对比,把调制模块里的这段代码:
% SVPWM生成 T1 = Ts * (sqrt(3)*Ubeta - Ualpha)/2; T2 = Ts * Ualpha;换成SPWM的:
% SPWM生成 mod_wave = sin(theta) + 0.5*sin(3*theta); % 三次谐波注入结果发现轻载时SPWM的THD居然比SVPWM低0.2%,但代价是开关损耗增加15%。所以具体选哪个得看应用场景,要效率还是要纯净度。
最后上点干货——怎么让输出纹波压到1V以下?秘密在母线电容的ESR模型里。别用理想电容,得加上等效串联电阻:
C_bus = 4700e-6; % 主电容 ESR = 0.02; % 等效串联电阻 vdc_ripple = i_charge * ESR + (1/C_bus)*int(i_charge);这样仿真出来的纹波波形和实测误差不超过0.3V。调参时重点盯着电容电流的高频分量,用FFT分析找准谐振点。
模型跑起来后记得做这三个验证:突加负载时的电压恢复时间(要<10ms)、100A阶跃时的THD变化(应<0.5%波动)、中点电位在10kW跳变时的平衡速度(300us内收敛)。都过了的话,恭喜你,可以去申请个专利了。