VIENNA维也纳拓扑,三相整流仿真模型:采用电压电流双闭环控制,电压外环采用PI控制,电流内环采用bang bang滞环控制。 整流电压稳定在600V 有相关参考资料。
最近在搞三相维也纳整流器的仿真,发现这玩意儿双闭环控制确实有点门道。今天咱们就掰开揉碎了聊聊怎么用电压外环PI+电流内环滞环控制实现600V稳定输出。先上个仿真结构图镇楼(假装这里有张Simulink截图)——其实就是电压环给电流指令,电流环直接怼滞环控制器,简单粗暴但有效。
先说电压外环的PI设计,这个直接关系到稳态精度。我的经验是先用Ziegler-Nichols法试个初值,然后边跑仿真边调。这里有个MATLAB函数片段展示参数计算:
function [Kp, Ki] = calc_pi_params(Vdc_ref, L_filter) % 基于直流母线电容和滤波电感估算 Ts = 1e-4; % 采样周期 C_dc = 2200e-6; % 直流侧电容 Kp = 0.5 * C_dc / (Vdc_ref * Ts); Ki = 0.2 * (L_filter / Vdc_ref); % 这里的L_filter是网侧电感 % 实际应用中需要加抗饱和和限幅 end这个算法里Ki的计算有点意思,把电感参数直接揉进去了,主要考虑电流环响应速度对电压环的影响。不过实测发现当电网电压波动超过10%时,得手动把Ki调高30%左右才能稳住。
电流内环的滞环控制才是真·暴力美学,直接上Simulink里的Relay模块搞定。但要注意死区设置——我之前在仿真里用0.1A的滞环宽度,结果开关频率飙到20kHz烧了IGBT模型。后来改成动态滞环宽度才解决:
function hysteresis_width = dynamic_hysteresis(i_error) % 根据电流误差动态调整滞环宽度 base_width = 0.05; % 基准滞环宽度 max_width = 0.2; % 最大允许宽度 if abs(i_error) > 0.3 hysteresis_width = max_width; else hysteresis_width = base_width + 0.15*abs(i_error); end end这个函数让滞环宽度随误差增大而变宽,有效抑制了开关频率突增。不过实际调试发现当误差小于0.1A时容易产生高频震荡,后来加了个最小滞环宽度限制才消停。
仿真时最坑的是初始电压建立过程。直接上电会报过流,得先给直流侧电容预充电。我的解决方案是用受控电压源模拟充电过程:
% 预充电逻辑 if t < 0.02 Vdc_initial = min(600, 30000*t); % 30ms内线性充电 else Vdc_initial = 600; end这种软启动策略让电容电压在30ms内从0爬升到600V,避免了浪涌电流。实测发现充电斜率超过500V/ms时会触发过流保护,调到300V/ms就稳如老狗。
最后跑出来的波形(假装有张FFT分析图)显示THD控制在3%以内,动态负载切换时电压跌落不到5%,恢复时间20ms。不过滞环控制的开关频率不固定这点是真头疼,准备下次试试改进型定频滞环方案。有同行的老铁欢迎评论区交流调参玄学~