第7章基于TMS320F2812的永磁同步电动机控制例1、空间矢量算法实现SVGEN_DQ对象结构体定义typedefstruct{_iqUalpha;//输入:轴参考电压_iqUbeta;//输入:轴参考电压_iqTa;//输出:参考相位a开关函数_iqTb;//输出:参考相位b开关函数_iqTc;//输出:参考相位c开关函数void(*calc)();//函数指针}SVGENDQ;typedefSVGENDQ*SVGENDQ_handle;SVGEN_DQ模块调用方法:main(){}voidinterruptperiodic_interrupt_isr(){svgen_dq1.Ualpha=Ualpha1;//提供输入参数:svgen_dq1svgen_dq1.Ubeta=Ubeta1;//提供输入参数:svgen_dq1svgen_dq2.Ualpha=Ualpha2;//提供输入参数:vgen_dq2svgen_dq2.Ubeta=Ubeta2;//提供输入参数:svgen_dq2svgen_dq1.calc(&svgen_dq1);//调用函数模块svgen_dq1svgen_dq2.calc(&svgen_dq2);//调用函数模块svgen_dq2Ta1=svgen_dq1.Ta;//访问运算结果svgen_dq1Tb1=svgen_dq1.Tb;//访问运算结果svgen_dq1Tc1=svgen_dq1.Tc;//访问运算结果svgen_dq1Ta2=svgen_dq2.Ta;//访问运算结果svgen_dq2Tb2=svgen_dq2.Tb;//访问运算结果svgen_dq2Tc2=svgen_dq2.Tc;//访问运算结果svgen_dq2}为进一步了解空间矢量算法的基本原理,下面给出空间矢量模块的源代码:voidsvgendq_calc(SVGENDQ*v){_iqVa,Vb,Vc,t1,t2;_iqsector=0;/*设相位置(sector)等于Q0*//*逆clarke变换*/Va=v->Ubeta;Vb=_IQmpy(_IQ(-0.5),v->Ubeta)+_IQmpy(_IQ(0.8660254),v->Ualfa);/*0.8660254=sqrt(3)/2*/Vc=_IQmpy(_IQ(-0.5),v->Ubeta)-_IQmpy(_IQ(0.8660254),v->Ualfa);/*0.8660254=sqrt(3)/2*//*60度sector的确定*/if(Va>_IQ(0))sector=1;if(Vb>_IQ(0))sector=sector+2;if(Vc>_IQ(0))sector=sector+4;/*X,Y,Z(Va,Vb,Vc)的计算*/Va=v->Ubeta;/*X=Va*/Vb=_IQmpy(_IQ(0.5),v->Ubeta)+_IQmpy(_IQ(0.8660254),v->Ualfa);/*Y=Vb*/Vc=_IQmpy(_IQ(0.5),v->Ubeta)-_IQmpy(_IQ(0.8660254),v->Ualfa);/*Z=Vc*/if(sector==1)/*sector1:t1=Zandt2=Y(abc--->Tb,Ta,Tc)*/{t1=Vc;t2=Vb;v->Tb=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));/*tbon=(1-t1-t2)/2*/v->Ta=v->Tb+t1;/*taon=tbon+t1*/v->Tc=v->Ta+t2;/*tcon=taon+t2*/}elseif(sector==2)/*sector2:t1=Yandt2=-X(abc--->Ta,Tc,Tb)*/{t1=Vb;t2=-Va;v->Ta=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));/*taon=(1-t1-t2)/2*/v->Tc=v->Ta+t1;/*tcon=taon+t1*/v->Tb=v->Tc+t2;/*tbon=tcon+t2*/}elseif(sector==3)/*sector3:t1=-Zandt2=X(abc--->Ta,Tb,Tc)*/{t1=-Vc;t2=Va;v->Ta=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));/*taon=(1-t1-t2)/2*/v->Tb=v->Ta+t1;/*tbon=taon+t1*/v->Tc=v->Tb+t2;/*tcon=tbon+t2*/}elseif(sector==4)/*sector4:t1=-Xandt2=Z(abc--->Tc,Tb,Ta)*/{t1=-Va;t2=Vc;v->Tc=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));/*tcon=(1-t1-t2)/2*/v->Tb=v->Tc+t1;/*tbon=tcon+t1*/v->Ta=v->Tb+t2;/*taon=tbon+t2*/}elseif(sector==5)/*sector5:t1=Xandt2=-Y(abc--->Tb,Tc,Ta)*/{t1=Va;t2=-Vb;v->Tb=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));/*tbon=(1-t1-t2)/2*/v->Tc=v->Tb+t1;/*tcon=tbon+t1*/v->Ta=v->Tc+t2;/*taon=tcon+t2*/}elseif(sector==6)/*sector6:t1=-Yandt2=-Z(abc--->Tc,Ta,Tb)*/{t1=-Vb;t2=-Vc;v->Tc=_IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));/*tcon=(1-t1-t2)/2*/v->Ta=v->Tc+t1;/*taon=tcon+t1*/v->Tb=v->Ta+t2;/*tbon=taon+t2*/}v->Ta=_IQmpy(_IQ(2),(v->Ta-_IQ(0.5)));v->Tb=_IQmpy(_IQ(2),(v->Tb-_IQ(0.5)));v->Tc=_IQmpy(_IQ(2),(v->Tc-_IQ(0.5)));}在相位置(sector)3中的一个矢量的例子:T0/4T6/2T6/2T0/4T0/4T6/4T4/4T0/4V0V6V4V7V7V6V4V0TtttPWM1PWM3PWM5tCMPR1CMPR3CMPR2tcontbontaon图相位置(sector)PWM实例及其占空比例2、事件管理器配置EvaRegs.T1PR=p->n_period;/*SYSTEM_FREQUENCY*1000000*T/2*//*初始化Timer1周期寄存器*//*预定标器X1(T1),ISR周期=Tx1*/EvaRegs.T1CON.all=PWM_INIT_STATE;/*对称操作模式*/EvaRegs.DBTCONA.all=DBTCON_INIT_STATE;EvaRegs.ACTRA.all=ACTR_INIT_STATE;EvaRegs.COMCONA.all=0xA200;EvaRegs.CMPR1=p->n_period;EvaRegs.CMPR2=p->n_period;EvaRegs.CMPR3=p->n_pe...