双降压全桥并网逆变器的控制方法Word格式.docx
《双降压全桥并网逆变器的控制方法Word格式.docx》由会员分享,可在线阅读,更多相关《双降压全桥并网逆变器的控制方法Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
双降压全桥并网逆变器的控制方法,属逆变器控制方法。
采用电流传感器采样并网逆变器进网电流,采用电压传感器采样电网电压通过锁相环输出与电网电压同频同相的进网电流给定。
进网电流环接收所述进网电流给定和进网电流反馈信号,输出电压给定1。
PWM产生电路接受所述电压给定1,输出逻辑控制信号PWM1和PWM2。
功率开关管驱动逻辑电路接收所述逻辑控制信号PWM1和PWM2以及电网电压反馈信号,输出各个功率开关管的高低电平驱动信号。
采实现了单极性倍频控制,减小了滤波器的体积和重量,不存在传统单极性调制进网电流过零点畸变问题;
每半个工频周期只有2个功率开关管高频开关,提高了变换效率。
1.双降压全桥并网逆变器的控制方法,所述双降压全桥并网逆变器包括电网(Ugrid)、电源(Uin)、第一滤波电感(L1)、第一功率开关管(S1)、第一续流二极管(D1)、第二滤波电感(L2)、第二功率开关管(S2)、第二续流二极管(D2)、第三滤波电感(L3)、第三功率开关管(S3)、第三续流二极管(D3)、第四滤波电感(L4)、第四功率开关管(S4)和第四续流二极管(D4),其中电源(Uin)的正极分别与第一功率开关管(S1)的漏极、第二续流二极管(D2)的阴极、第三功率开关管(S3)的漏极和第四续流二极管(D4)的阴极连接,第一功率开关管((S1)的源极分别与第一续流二极管(D1)的阴极和第一滤波电感(L1)的输入端连接,第一滤波电感(L1)的输出端分别与电网(Ugrid)的正极和第二滤波电感(L2)的输出端连接,第二滤波电感(L2)的输入端分别与第二续流二极管(D2)的阳极和第二功率开关管(S2)的漏极连接,第二功率开关管(S2)的源极分别与电源(Uin)的负极、第四功率开关管(S4)的源极、第一续流二极管(D1)的阳极和第三续流二极管(D3)的阳极连接,第三续流二极管(D3)的阴极分别与第三滤波电感(L3)的输入端和第三功率开关管(S3)的源极连接,第四功率开关管(S4)的漏极分别与第四滤波电感(L4)的输入端和第四续流二极管(D4)的阳极连接,第三滤波电感(L3)的输出端分别与电网(Ugrid)的负极和第四滤波电感(L4)的输出端连接接地;
其特征在于:
采用电流传感器采样进网电流(ig)输出进网电流反馈信号(igf);
采用电压采样电路采样电网电压(Ugrid)输出电网电压反馈信号(Ugridf);
将所述电网电压反馈信号(Ugridf)通过锁相环(PLL)输出与电网电压(Ugrid)同频同相的进网电流给定(iref);
将所述电网电压反馈信号(Ugridf)通过第一比较器输出工频开关逻辑信号;
将所述工频开关逻辑信号通过第一非门输出工频开关逻辑的非信号;
将所述进网电流给定(iref)与进网电流反馈信号(igf)相减后通过进网电流调节器输出电压给定1(Uref1);
将所述电压给定1(Uref1)与三角载波信号(Uc)通过第二比较器输出逻辑控制信号PWM1;
将所述电压给定1(Uref1)通过反相器输出电压给定2(Uref2)后与三角载波信号(Uc)通过第三比较器输出逻辑控制信号PWM2;
将所述逻辑控制信号PWM1与工频开关逻辑信号通过第一与门输出第一功率开关管(S1)的开关逻辑信号,所述第一功率开关管(S1)的开关逻辑信号通过第一驱动电路驱动第一功率开关管(S1);
将所述逻辑控制信号PWM1通过第二非门后与工频开关逻辑的非信号通过第二与门输出第二功率开关管(S2)的开关逻辑信号,所述第二功率开关管(S2)的开关逻辑信号通过第二驱动电路驱动第二功率开关管(S2);
将所述逻辑控制信号PWM2与工频开关逻辑的非信号通过第三与门输出第三功率开关管(S3)的开关逻辑信号,所述第三功率开关管(S3)的开关逻辑信号通过第三驱动电路驱动第三功率开关管(S3);
将所述逻辑控制信号PWM2通过第三非门后与工频开关逻辑信号通过第四与门输出第四功率开关管(S4)的开关逻辑信号,所述第四功率开关管(S4)的开关逻辑信号通过第四驱动电路驱动第四功率开关管(S4)。
4.F28035DSC处理器使用的一些关键算法介绍:
1)
//增量式PID控制设计
floatIncPIDCalc(floatNextPoint)
{
registerfloatiError,iIncpid;
//当前误差
iError=sptr->
SetPoint-NextPoint;
//增量计算
iIncpid=sptr->
Proportion*iError//E[k]项
-sptr->
Integral*sptr->
LastError//E[k-1]项
+sptr->
Derivative*sptr->
PrevError;
//E[k-2]项
//存储误差,用于下次计算
sptr->
PrevError=sptr->
LastError;
LastError=iError;
//返回增量值
return(iIncpid);
}
2)数字锁相算法:
inlinevoidSPLL_1ph_run(SPLL_1ph*spll_obj)
//-------------------//
//PhaseDetect//
spll_obj->
Upd[0]=SPLL_Qmpy(spll_obj->
AC_input,spll_obj->
cos[1]);
//Notchfilterstructure//
ynotch[0]=-SPLL_Qmpy(spll_obj->
notch_coeff.A1_notch,spll_obj->
ynotch[1])-SPLL_Qmpy(spll_obj->
notch_coeff.A2_notch,spll_obj->
ynotch[2])+SPLL_Qmpy(spll_obj->
notch_coeff.B0_notch,spll_obj->
Upd[0])+SPLL_Qmpy(spll_obj->
notch_coeff.B1_notch,spll_obj->
Upd[1])+SPLL_Qmpy(spll_obj->
notch_coeff.B2_notch,spll_obj->
Upd[2]);
//updatetheUpdarrayforfuture
Upd[2]=spll_obj->
Upd[1];
Upd[1]=spll_obj->
Upd[0];
//---------------------------//
//PIloopfilter//
ylf[0]=-SPLL_Qmpy(spll_obj->
lpf_coeff.A1_lf,spll_obj->
ylf[1])+SPLL_Qmpy(spll_obj->
lpf_coeff.B0_lf,spll_obj->
ynotch[0])+SPLL_Qmpy(spll_obj->
lpf_coeff.B1_lf,spll_obj->
ynotch[1]);
//updatearrayforfutureuse
ynotch[2]=spll_obj->
ynotch[1];
ynotch[1]=spll_obj->
ynotch[0];
ylf[1]=spll_obj->
ylf[0];
//------------------//
//VCO//
wo=spll_obj->
wn+spll_obj->
//integrationprocess
sin[0]=spll_obj->
sin[1]+SPLL_Qmpy((SPLL_Qmpy(spll_obj->
delta_t,spll_obj->
wo)),spll_obj->
cos[0]=spll_obj->
cos[1]-SPLL_Qmpy((SPLL_Qmpy(spll_obj->
sin[1]);
if(spll_obj->
sin[0]>
SPLL_Q(0.99))
spll_obj->
sin[0]=SPLL_Q(0.99);
elseif(spll_obj->
sin[0]<
SPLL_Q(-0.99))
sin[0]=SPLL_Q(-0.99);
cos[0]>
cos[0]=SPLL_Q(0.99);
cos[0]<
cos[0]=SPLL_Q(-0.99);
theta[0]=spll_obj->
theta[1]+SPLL_Qmpy(spll_obj->
wn,SPLL_Q(0.00001591549));
SPLL_Q(0.0)&
&
sin[1]<
=SPLL_Q(0.0))
{
theta[0]=SPLL_Q(0.0);
}
theta[1]=spll_obj->
theta[0];
sin[1]=spll_obj->
sin[0];
cos[1]=spll_obj->
cos[0];
3)GRANDOPID算法:
PID_GR_MACRO(v)
{
/*proportionalterm*/
v.data.up=_IQmpy(v.param.Kr,v.term.Ref)-v.term.Fbk;
/*integralterm*/
v.data.ui=_IQmpy(v.param.Ki,_IQmpy(v.data.w1,(v.term.Ref-v.term.Fbk)))+v.data.i1;
v.data.i1=v.data.ui;
/*derivativeterm*/
v.data.d2=_IQmpy(v.param.Kd,_IQmpy(v.term.c1,(_IQmpy(v.term.Ref,v.param.Km)-v.term.Fbk)))-v.data.d2;
v.data.ud=v.data.d2+v.data.d1;
v.data.d1=_IQmpy(v.data.ud,v.term.c2);
/*controloutput*/
v.data.v1=_IQmpy(v.param.Kp,(v.data.up+v.data.ui+v.data.ud));
v.term.Out=_IQsat(v.data.v1,v.param.Umax,v.param.Umin);
v.data.w1=(v.term.Out==v.data.v1)?
_IQ(1.0):
_IQ(0.0);
}
5.附图: