My own programming

My own programming

Postby ling1995 » 24 Mar 2017, 10:00

Hello~all,
I’m a student majoring in electronics.Currently I’m involved in a project--realizing that driving full-bridge inverter circuit by sinusoidal wave through look-up table method of DSPIC30F2020 .This is the datasheet of DSPIC30F2020.
I myself wrote a program.However when I’m debugging the SIMULATOR,there always shows “PWM CLOCK FASTER THAN FOSC” .I don’t know why ? Could anyone help me out? This is my Code:
{l Code}: {l Select All Code}
#include <p30F2020.h>
_FOSCSEL(FRC_PLL); //使能PLL,FRC晶振
_FOSC(CSW_FSCM_OFF&FRC_HI_RANGE); //禁止时钟切换,高频模式
_FPOR(PWRT_128);//上电复位128MS
_FWDT(FWDTEN_OFF); //禁止看门狗定时器 
_FGS(CODE_PROT_OFF);//代码保护关闭

unsigned int const pwmtab[200] = {0,631,1262,1892,2522,3152,3781,4409,5035,5661,6285,6908,7528,8147,8764,9379,
9992,10602,11209,11814,12416,13015,13610,14202,14791,15376,15957,16534,17107,17676,18241,18801,
19356,19907,20453,20993,21529,22059,22584,23103,23617,24124,24626,25122,25611,26094,26571,27041,
27505,27961,28411,28854,29289,29718,30139,30553,30959,31357,31748,32131,32506,32873,33232,33582,
33925,34259,34584,34901,35210,35509,35800,36082,36355,36620,36875,37121,37358,37586,37804,38013,
38213,38403,38584,38755,38917,39069,39212,39345,39468,39581,39685,39779,39863,39937,40001,40056,
40100,40135,40160,40175,40180,40175,40160,40135,40100,40056,40001,39937,39863,39779,39685,39581,
39468,39345,39212,39069,38917,38755,38584,38403,38213,38013,37804,37586,37358,37121,36875,36620,
36355,36082,35800,35509,35210,34901,34584,34259,33925,33582,33232,32873,32506,32131,31748,31357,
30959,30553,30139,29718,29289,28854,28411,27961,27505,27041,26571,26094,25611,25122,24626,24124,
23617,23103,22584,22059,21529,20993,20453,19907,19356,18801,18241,17676,17107,16534,15957,15376,
14791,14202,13610,13015,12416,11814,11209,10602,9992,9379,8764,8147,7528,6908,6285,5661,
5035,4409,3781,3152,2522,1892,1262,631};
unsigned char num; //查表顺序寄存器
unsigned char sign; //正弦表输出标志
float  sin_l;
void PortInit()  
{  
   // LATE= 0x0000;  // E端口清零  
    TRISE = 0x0000; // E端口设为输出, 0: out, 1: in 
    TRISB = 0x0000; // E端口设为输出, 0: out, 1: in 
    PORTE = 0x0000;  
    PORTB = 0x0000;  
    
    OSCCONbits.TSEQEN=0;//OSCTUN 寄存器中的 TUN<3:0> 位调节 FRC 振荡器
    OSCTUNbits.TUN = 0111; /* FRC时钟为15M */ 
    
}  

void PWM_Config() 

   
FCLCON1=0X0003; //禁用电流限制和故障输入


IOCON1bits.PENH = 1; /* PWM1H PWM 模块将控制 PWM输出引脚 */ 

IOCON1bits.PENL = 1; /* PWM1L PWM 模块将控制 PWM输出引脚 */ 

IOCON1bits.PMOD = 00; /* 互补输出模式 */ 

IOCON1bits.POLH = 0; //PWMxH 引脚为高电平有效

IOCON1bits.POLL = 0; //PWMxL 引脚为高电平有效

/* Load PDTR1 and ALTDTR2 register with preset dead time value */ 
DTR1 = 64; /* 死区时间设置 */ 

ALTDTR1 = 64; /* 死区时间 */ 

/* PHASE1 register */ 
PHASE1 = 0; /* No phase shift */ 


/* PWM Time Base Control Register */ 
PTCONbits.PTEN = 1; // 使能PWM模块
PTCONbits.EIPU = 1; //立即更新有效周期寄存器 
PWMCON1bits.IUE = 1; //立即对有效的pdc寄存器进行更新

PWMCON1bits.MDCS = 0;//PDC提供占空比


    PTPER = 47620; //30mips为47620 ,周期=(PTPER+1)/120MHZ 
    PDC1 = 0; //占空比清零

     _PWM1IE=1;//允许中断请求
_PWM1IF=0;//中断标志清零
  _PWM1IP=6;    //中断优先级设为6
  _IPL=1;//CPU中断优先级为1



int main() 

    
    num = 0;        // 个变量初始化 
sign = 0; 
PortInit() ;
PWM_Config();
while(1);//一直循环等待中断
}

void __attribute__((interrupt, no_auto_psv)) _PWM1Interrupt(void)
{
      _PWM1IF=0;//中断标记位清零
    if (!num)        //如果num=0,意味着 每一次查表循环完毕标志取反,用以确定正负半周波形 
        sign = ~sign; //0变1
    ++num;        // 正弦表顺序取值 
  if (num>=200)        //200个点查完后清num 
num = 0; 
    sin_l= pwmtab[num];
    PDC1=(unsigned char)sin_l;//赋值
    if(sign)
                                          {PORTBbits.RB5=1;}//换向
                                  else 
                                      {PORTBbits.RB5=0;}//换向


Please give me you suggestions ! Thank you in advance!
ling1995
 
Posts: 2
Joined: 24 Mar 2017, 09:52

Re: My own programming

Postby imaZighen » 13 Oct 2017, 19:00

I think this post is more suitable in an electronic forum since here we are all game devs and the last of us doesn't even know what pulse width modulation is, so you have no luck posting around here, thanks :)
ⵉⵎⴰⵣⵉⵖⴻⵏ / imaZighen
User avatar
imaZighen
 
Posts: 8
Joined: 13 Oct 2017, 18:31
Location: Thamzgha / North Africa

Who is online

Users browsing this forum: No registered users and 1 guest

cron