资讯动态

重复控制逆变器的仿真解析

发布时间:2026/10/14 16:24:33 来源:尧图企业网站定制
本文首发博客园 · 作者JustKevinShen请观看我的原文https://www.cnblogs.com/CIB27149/p/19656366重复控制器的传递函数重复控制器Repetitive ControllerRC是一种基于“内模原理”Internal Model Principle设计的控制器用于消除周期性参考信号或周期性扰动下的稳态误差。逆变器具有周期性参考信号的特征采用重复控制器进行控制可以获得更稳定的控制性能。重复控制器的基本传递函数为G ( z ) z − N 1 − z − N G(z)\frac{z^{-N}}{1-z^{-N}}G(z)1−z−Nz−N​其中N NN表示在一个周期内的采样数。意思是采用一个重复周期之前的采样样本作为环路的反馈值进行计算。通常重复控制器更为实用的传递函数是:G ( z ) z m Q ( z ) z − N 1 − Q ( z ) z − N G(z)\frac{z^m Q(z) z^{-N}}{1-Q(z) z^{-N}}G(z)1−Q(z)z−NzmQ(z)z−N​其中Q ( z ) Q(z)Q(z)是一个低通滤波器用于消减高频处的增益增加相位裕量。z m z^mzm是一个超前相位补偿器m mm表示超前的采样数。重复控制逆变器的仿真调试仿真过程中将搭建一个逆变器电路并使用重复控制器对输出电压进行控制观察其性能。仿真软件使用的 GeckoCircuits 。步骤1搭建逆变器电路搭建一个全桥逆变器电路母线电压设为400 V 400V400V输出电压有效值230 V 230V230V频率50 H z 50Hz50Hz负载电阻200 Ω 200 \Omega200Ω。其中LC 滤波器参数的估算过程LC 滤波器截止频率计算公式为f c 1 / 2 π L C f_c 1/2\pi \sqrt{LC}fc​1/2πLC​该频率应远高于10 1010倍基波频率远低于开关频率10 % 10\%10%开关频率取32 k H z 32kHz32kHz即500 H z f c 3200 H z 500Hz f_c 3200Hz500Hzfc​3200Hz。输出峰值电流I p k U r m s ∗ 1.414 / R 230 V ∗ 1.414 / 200 Ω ≈ 1.6 A I_{pk} U_{rms}*1.414/R 230V*1.414/200 \Omega \approx 1.6AIpk​Urms​∗1.414/R230V∗1.414/200Ω≈1.6A。电感纹波电流取峰值电流的10 % 30 % 10\% ~ 30\%10%30%即Δ I I p k ∗ 0.3 0.53 A \Delta I I_{pk}*0.3 0.53AΔIIpk​∗0.30.53A。根据伏秒定理计算电感值L ( V d c ∗ T s ∗ D ) / ( Δ I ∗ 2 ) ≈ 1.6 m H L (V_{dc}*T_s*D)/(\Delta I*2) \approx 1.6mHL(Vdc​∗Ts​∗D)/(ΔI∗2)≈1.6mH。根据截止频率的取值范围电容值取2.2 μ F 2.2 \mu F2.2μF。步骤2搭建控制环路及驱动控制环路采用了重复控制器和比例控制器并联的方式。其中重复控制器的代码内容如下publicclasstmpJav393624554implementsjava.io.Serializable,ch.technokrat.gecko.ControlCalculatable{// variables:privatefinaldoublesampleRate32000;privatefinaldoublefrequency50;privatefinaldoublevRMS230;privatefinalintindexMAX(int)(sampleRate/frequency);privatefinaldoublePIMath.PI;privatefinaldoubleTWOPI2.0*PI;privatefinaldoublethetaStepTWOPI/indexMAX;privatedouble[]bufferINnewdouble[indexMAX];privatedouble[]bufferOUTnewdouble[indexMAX];privateintbufferIndex;privatedoubleerror;privateintcount;privateintcountMAX;privatebooleaninitialized;privatedoublevSet;privatedoubletheta;privatedoublevIN;privatedoublevOUT;privatedoublegain,gain1;privatedoubleq_b0,q_b1,q_a1;privatedoubley,y0,y1,y2;privatedoublex,x0,x1,x2;privatedoublerc0,rc1,rc2;privatedoublelpf_b0,lpf_b1,lpf_a1;privateintm;privatedouble[]yOUTnewdouble[2];Overridepublicvoidinit(){initializedfalse;bufferIndex0;count0;theta0;gain0.0035;q_b00.07246376811594202;q_b10.07246376811594202;q_a1-0.855072463768116;lpf_b00.23809523809523814;lpf_b10.23809523809523814;lpf_a1-0.5238095238095238;m3;}Overridepublicdouble[]calculateYOUT(finaldouble[]xIN,finaldoubletime,finaldoubledt)throwsException{// ****************** your code segment **********************if(initialized){count;if(countcountMAX){count0;vINxIN[0];vSet1.414*vRMS*Math.sin(theta);error(vSet-vIN);y0bufferOUT[bufferIndex];yy0*q_b0y1*q_b1-y2*q_a1;y1y0;y2y;if(bufferIndexmindexMAX){x0bufferIN[bufferIndexm];}else{x0bufferIN[bufferIndexm-indexMAX];}xx0*q_b0x1*q_b1-x2*q_a1;x1x0;x2x;rc0xy;bufferIN[bufferIndex]error;bufferOUT[bufferIndex]rc0;vOUTrc0*lpf_b0rc1*lpf_b1-rc2*lpf_a1;vOUTvOUT*gain;if(vOUT0.980){vOUT0.980;}elseif(vOUT-0.980){vOUT-0.980;}if(vSet0){if(vOUT0){vOUT0;}}else{if(vOUT0){vOUT0;}}lpf_b1lpf_b0;lpf_a1vOUT;bufferIndex;if(bufferIndexindexMAX){bufferIndex0;}thetathetaStep;if(thetaTWOPI){theta0;}}}else{countMAX(int)(1/(sampleRate*dt));initializedtrue;vOUT0;}yOUT[0]vOUT;yOUT[1]vSet;returnyOUT;// ****************** end of code segment **********************}}H 桥驱动器的代码内容如下publicclasstmpJav1901723632implementsjava.io.Serializable,ch.technokrat.gecko.ControlCalculatable{// variables:privatedouble[]yOUTnewdouble[4];Overridepublicvoidinit(){}Overridepublicdouble[]calculateYOUT(finaldouble[]xIN,finaldoubletime,finaldoubledt)throwsException{// ****************** your code segment **********************if(xIN[1]0){yOUT[0]xIN[0];yOUT[1]1-xIN[0];yOUT[2]1;yOUT[3]0;}else{yOUT[1]xIN[0];yOUT[0]1-xIN[0];yOUT[3]1;yOUT[2]0;}returnyOUT;// ****************** end of code segment **********************}}步骤3运行结果运行仿真查看输出电压波形转载请注明文章出处https://www.cnblogs.com/CIB27149/p/19656366

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑