tag 标签: 空间向量pwm(svpwm)

相关博文
  • 热度 20
    2012-10-1 20:15
    2676 次阅读|
    5 个评论
         Ø 空间向量PWM(SVPWM)是指一个三相功率变换器中六个功率三极管的一种功率开关电路,是变频技术的关键核心技术之一,应用非常广泛。三相交流电动机绕组产生的电流的谐波失真最小。它还提供了比正弦波调制方式更有效的供电电压的使用。目前SVPWM量控制方法是交流伺服电机和UPS电源应用最广泛的控制方法。本应用程序实例将为网友提供一个无刷直流马达SVPWM程序实例,希望起到抛砖引玉效应,可以充分了解如何使用事件管理器来实现SVPWM的应用方法。 实际量产产品应用对于 SVPWM 算法的推导、开关向量的选择也是是非常至关重要的关键。    Ø 无刷直流马达三相功率反相换流器原理结果图: 图中A1、B1、和C1是提供给电动机绕组的电压。六个功率三极管由DTPHx和我DTPHx_(x﹦a、b和c)控制。当上部的三极管导通时(DTPHx﹦1),下部的三极管关断(DTPHx﹦0)。这样通过上部三极管的开关状态(Q1和Q5)或者等效地说,DTPHx(x﹦a、b和c)的状态,就可以算出提供给电动机的电压Uout。    //文件名: DSP281xSVPwm.c // //DSP281x SVPWM波形产生程序,使用事件管理器A // //        该程序设置EVA定时器(TIMER1,TIMER2,TIMER13 and TIMER4) //        实现了SVPWM波形输出 #include 〝DSP281x_Device.h 〞            //DSP281x_Headerfile include file #include 〝DSP281x_examples.h 〞          //DSP281x_examples include file #include 〝stdio.h 〞 #include 〝math.h 〞 #include 〝float.h 〞 #define NX 404 #define PI 3.1415925 //全局变量 float M﹦0.8; int k0﹦0,h1﹦0; unsigned int n﹦0; float q,l,j; //在本例程中使用函数类型陈述 void zkb(); void int_eva(vold); interrupt void eva_T1UFINT_ISR(void); void main(void) { //系统初始化  initsysctrl(); //初始化GPAMUX   EALLOW;   // 使能PWM引脚   gpiomuxregs.GPAMUX.all ﹦0x00FF;    // EVA PWM 1-6 引脚   EDIS; //禁止全局CPU中断 DINT; //初始化PIE控制寄存器 initpiectrl(); //初始化PIE控制向量表 initpievecttable(); eallow;                                             //使能定时器1下益中断 pievecttable.T1UFINF﹦eva_T1UFINT_ISR; EDIS IER|﹦M_INT2;                                       //开中断2 pievctr1regs.PIEIER2.bit.INTx6﹦1;                  //开下益中断 while  (n﹦NX)   {     q﹦(n:+0.75)          //为消除偶次谐波,减少谐波角度出发,选择从A相3/4周期进行采样     q﹦q*2*PI;     q/﹦405;     j﹦sin(q);     1﹦1875*(1+M*j);     //M为调制比    if(1﹦3751﹦3375   //计算占空比表达式       a ﹦1;      else      {      if(1﹦3375);      a ﹦375;      }  n﹦n+1; } //初始化外设EVA init_eva(); //用户代码 Evaregs.T1CON.all﹦evaregs.T1CON.all|0x0040; //启动定时器1 for(;;) } vold init_eva() { ///初始化EVA evaregs.ACTRA.all﹦0x0666; evaregs.DBTCONA.all﹦0x0000;  //禁止死区 evaregs.COMCONA.all﹦0xa600; //使能比较操作 //EVAIMRA(EVA的中断屏蔽寄存器A).T1UIINT(通用定时器1的下溢中断使能) evaregs.EVAIFRA.all﹦0x0200; evaregs.EVAIFRA.all﹦0x0000; evaregs.EVAIFRA.all﹦0x0000; //EVAIMRA(EVA的中断屏蔽寄存器.T1UIINT(通用定时器1的下溢中断使能) evaregs.EVAIFRA.all﹦0xffff; evaregs.EVAIFRB.all﹦0xffff; evaregs.EVAIFRC.all﹦0xffff; evaregs.CMPR1﹦0; evaregs.CMPR2﹦0; evaregs.CMPR3﹦0;  evaregs.GPTCONA.all﹦0x0041; //周期必须大于最大的正弦表格值 evaregs.T1PR﹦3750;          //timer1 period PWM 载波周期为65536个定标的定时器时钟周期 evaregs.T1CNT﹦937;          //timer1计数器 evaregs.T1CON.all﹦0x0b4e;   //选择模式产生PWM波10 EINT; return; } interrupt void eva_T1UFINT_ISR(void)          //EVA下溢中断 {   int h2;   int flag;   flag﹦(evaregs.EVAIFRA.all)0x0200;     //T1UFINT中断标志位置1     if(flag!﹦0x0200)        {         EINT;         return;         }        else         {          if(k0﹦NK)         {          h1﹦k0+135;                      //B相标表达式          if(h1﹦404)h1﹦h1-404;          h2﹦k0+270;                      //C相标表达式          if(h2﹦404)h2﹦h2-404;          evaregs.CMPR1﹦a ;          evaregs.CMPR2﹦a ;          //更新比较寄存器2的值          evaregs.CMPR3﹦a ;          //更新比较寄存器3的值          k0﹦k0+1;          }         else          {         }         evaregs.EVAIMRA.bit,T1UFINT﹦1     //清除中断屏蔽标志         evaregs.EVAIMRA.bit,T1UFINT﹦1     //清除中断使能标志         piectrlregs.PIEACK.all﹦0x0002;    //响应同组中断         EINI;                               //开全局中断 } //﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦ //end //﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦         更多精彩请点击下载附件【PWM波形空间向量图表】。。。