[求助] 哪位大神帮我解读下这个程序,万分感谢

nada123   2014-10-27 10:04 楼主
#include "DSP28_Device.h"
#include "stdio.h"
#include "math.h"
#include "float.h"
#define NX 404
#define PI 3.1415925
float M=0.8;
int k0,h1,h2;
double a[NX];
extern int  tp = 1250;

void zkb();
interrupt void eva_T1UFINT_ISR(void);

void main(void){   

    k0 = 0;
    h1 = 0;
    h2 = 0;
    InitSysCtrl();
    DINT;   //禁止全局中断
    IER=0;
    IFR=0;   
    EALLOW;
    // Enable PWM pins
    GpioMuxRegs.GPAMUX.all = 0x00FF; // EVA PWM 1-6  pins
    // GpioMuxRegs.GPBMUX.all = 0x00FF; // EVB PWM 7-12 pins
    EDIS;   
    InitPieCtrl();
    InitPieVectTable();   
    EALLOW;
    PieVectTable.T1UFINT=&eva_T1UFINT_ISR;
    EDIS;   
    IER|=M_INT2;
    PieCtrl.PIEIER2.bit.INTx6=1;   
    InitEv();
    zkb();           
    EvaRegs.T1CON.all=EvaRegs.T1CON.all|0x0040;  //启动定时器1
    EINT;
    while(1)
     {
        asm("NOP");
     }
       }       
void zkb()
{
  unsigned int n=0;        
  float q,l,j;
  while (n<=NX)         
  {
    q=(n+0.75);    //为消除偶次偕波,减少谐波角度出发,选择从A相3/4周期进行采样
    q=q*2*PI;      
    q/=405;
    j=sin(q);      
    l=0.5*tp*(1+M*j);//M为调制比     //计算占空比表达式   
/* l=1875*(1+M*j);//M为调制比     //计算占空比表达式
    if(l>=375&&l<=3375)
       a[n]=l;  
     else
        {
       if(l>3375)
         a[n]=3375;
       else
       a[n]=375;
       }  
     
     n=n+1;
*/
     if((l>=(tp*0.1))&&(l<=(tp*0.9)))
      a[n]=l;
       else
        {
       if(l>(tp*0.9))
         a[n]=tp*0.9;
       else
       a[n]=tp*0.1;
       }  
     
     n=n+1;
       }
}
interrupt void eva_T1UFINT_ISR(void)    // EV-A
{
  int h2;
  int flag;
  flag=(EvaRegs.EVAIFRA.all) & 0x0200;  //T1UFINT中下益中断标志位置1
        if(flag!=0x0200)
            {
           EINT;
           return;
             }
        else
         {
           if(k0<=NX)
          {
           h1=k0+135;      //B相表达式
            if(h1>=404)
              h1=h1-404;
              h2=k0+270;   //C相表达式
             if(h2>=404)
              h2=h2-404;
           EvaRegs.CMPR1=a[k0];
           EvaRegs.CMPR2=a[h1];                                                                                                                                                                           
           EvaRegs.CMPR3=a[h2];
           k0=k0+1;
           }
          else      
           {
             k0=0;
           }
          }
  
    EvaRegs.EVAIMRA.bit.T1UFINT=1;
    EvaRegs.EVAIFRA.bit.T1UFINT=1;
    PieCtrl.PIEACK.all=0x0002;
    EINT;                       //开全局中断

   
}

回复评论 (7)

这是一个三相pwm程序i,占空比那块是怎么计算的
点赞  2014-10-27 10:06
唉,读的时候最不喜欢读的就是这种程序,可是写程序的时候又总是习惯写这种程序,不好,不好!!!!!!!!!!!!!!
我在想 我知道什么
点赞  2014-10-27 10:25

4楼 Sur 

让你们写程序不给函数写说明,让你们写程序用拼音,现在自己都不懂了吧
点赞  2014-10-27 10:48
引用: Sur 发表于 2014-10-27 10:48
让你们写程序不给函数写说明,让你们写程序用拼音,现在自己都不懂了吧

哎  要是有说明我就不来这问了  真心有点不知道呀  求解答啊  亲
点赞  2014-10-27 11:15
引用: zmsxhy 发表于 2014-10-27 10:25
唉,读的时候最不喜欢读的就是这种程序,可是写程序的时候又总是习惯写这种程序,不好,不好!!!!!!! ...

占空比那块是怎么回事  拜托了
点赞  2014-10-27 11:18

7楼 cqr 

引用: zmsxhy 发表于 2014-10-27 10:25
唉,读的时候最不喜欢读的就是这种程序,可是写程序的时候又总是习惯写这种程序,不好,不好!!!!!!! ...

哈哈,这回答,得急死楼主!
本人不懂,友情帮顶吧
把复杂的问题变简单需要智慧
点赞  2014-10-28 23:55
我这回答这么容易让人误解?没有用过DSP啊,不太懂,只是觉得这程序写的太不规范,自己写程序也是这样读起来没有点头绪!!!
我在想 我知道什么
点赞  2014-10-29 13:11
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复