SVPWM程序 CMPA输出为0有可能是什么原因

[复制链接]
 楼主| 598835484 发表于 2018-5-15 19:50 | 显示全部楼层 |阅读模式
本帖最后由 598835484 于 2018-5-15 20:00 编辑
  1. float temp;
  2. float X,Y,Z, t1,t2;
  3. Uint16 A,B,C,N,Sector;
  4. float Ta, Tb, Tc;
  5. float K=1.73205081;//sqrt(3)


  6. X= K*p->Ubeta/p->Vdc*p->T;
  7. Y=(K*p->Ubeta+3*p->Ualpha)/(2*p->Vdc)*p->T;
  8. Z=(K*p->Ubeta-3*p->Ualpha)/(2*p->Vdc)*p->T;
  9. //
  10. if(p->Ubeta>0)
  11.    {A=1;}
  12. else
  13.    {A=0;}

  14. if( (K*p->Ualpha-p->Ubeta)>0 )
  15.    {B=1;}
  16. else
  17.    {B=0;}

  18. if((-K*p->Ualpha-p->Ubeta)>0)
  19.    {C=1;}
  20. else
  21.    {C=0;}

  22. N=A+2*B+4*C;
  23. //
  24. switch(N)
  25. {
  26. case 1:{Sector=2;break;}
  27. case 2:{Sector=6;break;}
  28. case 3:{Sector=1;break;}
  29. case 4:{Sector=4;break;}
  30. case 5:{Sector=3;break;}
  31. case 6:{Sector=5;break;}
  32. default:{;}
  33. }
  34. //
  35. switch(Sector)
  36. {
  37. case 1: {t1=-Z; t2= X;break;}
  38. case 2: {t1= Z; t2= Y;break;}
  39. case 3: {t1= X; t2=-Y;break;}
  40. case 4: {t1=-X; t2= Z;break;}
  41. case 5: {t1=-Y; t2=-Z;break;}
  42. case 6: {t1= Y; t2=-X;break;}
  43.   default:{;}
  44. }

  45. if((t1+t2)>p->T)//对过调制情况进行调整
  46. {
  47.   temp=t1+t2;
  48.   t1=t1*p->T/temp;
  49.   t2=t2*p->T/temp;
  50. }

  51. //
  52. Ta=(p->T-t1-t2)/4;//作用时间分配
  53. Tb=Ta+(t1/2);
  54. Tc=Tb+(t2/2);

  55. switch(Sector)
  56.   {
  57.         case 1: {p->Tcmpa=Ta; p->Tcmpb=Tb; p->Tcmpc=Tc; break;}
  58.         case 2: {p->Tcmpa=Tb; p->Tcmpb=Ta; p->Tcmpc=Tc; break;}
  59.         case 3: {p->Tcmpa=Tc; p->Tcmpb=Ta; p->Tcmpc=Tb; break;}
  60.         case 4: {p->Tcmpa=Tc; p->Tcmpb=Tb; p->Tcmpc=Ta; break;}
  61.         case 5: {p->Tcmpa=Tb; p->Tcmpb=Tc; p->Tcmpc=Ta; break;}
  62.         case 6: {p->Tcmpa=Ta; p->Tcmpb=Tc; p->Tcmpc=Tb; break;}
  63.     default:{;}

  64.   }
其中 Udc给定为540,Ts为中断时间0.000125s,Ualpha和Ubeta都有输入但是CMPA一直输出都是0,请问是代码有问题吗?
 楼主| 598835484 发表于 2018-5-15 20:01 | 显示全部楼层
EPwm1Regs.CMPA.half.CMPA = (int)(2.0*p->PeriodMax*p->Tcmpa);
EPwm2Regs.CMPA.half.CMPA = (int)(2.0*p->PeriodMax*p->Tcmpb);
EPwm3Regs.CMPA.half.CMPA = (int)(2.0*p->PeriodMax*p->Tcmpc);
zhangmangui 发表于 2018-5-15 22:40 | 显示全部楼层
先把捕获中断打开   看看能不能触发进入中断
 楼主| 598835484 发表于 2018-5-16 08:29 | 显示全部楼层
zhangmangui 发表于 2018-5-15 22:40
先把捕获中断打开   看看能不能触发进入中断

中断可以的,中间变量值都有编号就是值非常小
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

118

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部

30

主题

118

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部