DSP28335ÖÐÎÄ×ÊÁÏ - ͼÎÄ ÏÂÔØ±¾ÎÄ

DSP28335²âÊÔ×ܽá

void UpdatePwm3B(float32 pw,float32 f); void UpdatePwm4A(float32 pw,float32 f); void UpdatePwm4B(float32 pw,float32 f); void UpdatePwm5A(float32 pw,float32 f); void UpdatePwm5B(float32 pw,float32 f); void UpdatePwm6A(float32 pw,float32 f); void UpdatePwm6B(float32 pw,float32 f);

//³õʼ»¯PWMº¯Êý//

void InitPwm(int16 c,float32 f) {

switch(c) { case 0: InitPwm1AB(f); break; case 1: InitPwm1AB(f); break; case 2: InitPwm2AB(f); break; case 3: InitPwm2AB(f); break; case 4: InitPwm3AB(f); break; case 5: InitPwm3AB(f); break; case 6: InitPwm4AB(f); break; case 7: InitPwm4AB(f); break;

23

DSP28335²âÊÔ×ܽá

}

case 8: InitPwm5AB(f); break; case 9: InitPwm5AB(f); break; case 10: InitPwm6AB(f); break; case 11: InitPwm6AB(f); break; default: break; }

//PWMÐźŲúÉúº¯Êý//

void UpdatePwm(int16 c,float32 pw,float32 f)//Èë¿Ú²ÎÊý£ºÍ¨µÀ¡¢Õ¼¿Õ±È¡¢ÆµÂÊ { if(pw<=0.0001) pw=0.0001; else if(pw>99.9999) pw=99.9999; pw = pw/100.0; switch(c) { case 0: UpdatePwm1A(pw,f); break; case 1: UpdatePwm1B(pw,f); break; case 2: UpdatePwm2A(pw,f); break;

24

DSP28335²âÊÔ×ܽá

case 3:

UpdatePwm2B(pw,f); break; case 4:

UpdatePwm3A(pw,f); break; case 5:

UpdatePwm3B(pw,f); break; case 6:

UpdatePwm4A(pw,f); break; case 7:

UpdatePwm4B(pw,f); break; case 8:

UpdatePwm5A(pw,f); break; case 9:

UpdatePwm5B(pw,f); break; case 10:

UpdatePwm6A(pw,f); break; case 11:

UpdatePwm6B(pw,f); break;

default:break; }

}

//³õʼ»¯×Óº¯Êý£¬¶ÔµÚÒ»¸öº¯Êý×÷×¢ÊÍ// void InitPwm1AB(float32 f) {

Uint16 T= 2343750/f-1.0;//ϵͳʱÖÓSYSCLKOUT=150MHzTBCLK=6.6666667ns£¬ÔÚÁ¬ÐøÔö¼ÆÊýģʽÏ£¬f=150000000/(TBPDR+1) // T = 150 000 000 /CLKDIV/HSPCLKDIV/f - 1.0 EALLOW;

25

£¬DSP28335²âÊÔ×ܽá

//Ïȳõʼ»¯Í¨ÓÃÊäÈëÊä³ö¿Ú//

GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;

EPwm1Regs.TBPHS.half.TBPHS = 0; // ÔÚÏàλ¼Ä´æÆ÷ÖÐÉèÖüÆÊýÆ÷µÄÆðʼ¼ÆÊýλÖÃ

//ÏÂÃæÁ½ÌõÓï¾ä×éºÏ¶ÔPWMµÄʱÖÓ½øÐÐ·ÖÆµ EPwm1Regs.TBCTL.bit.CLKDIV = 6; EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;

EPwm1Regs.TBPRD = T; //ÔÚÖÜÆÚ¼Ä´æÆ÷ÖÐÉèÖüÆÊýÆ÷µÄ¼ÆÊýÖÜÆÚ

//TBCTLΪ¶¨Ê±Æ÷¿ØÖƼĴæÆ÷

EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; //ÉèÖüÆÊýģʽλΪÁ¬ÐøÔö¼ÆÊýģʽ£¬²úÉú¶Ô³Æ·½²¨

EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // ½«¶¨Ê±Æ÷ÏàλʹÄÜλ¹Ø±Õ EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;//Ó³Éä¼Ä´æÆ÷SHADOWʹÄܲ¢ÅäÖÃÓ³Éä¼Ä´æÆ÷Ϊ×Ô¶¯¶Áд

EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // ¶¨Ê±Æ÷ʱÖÓÔ´Ñ¡Ôñ£¬Ò»¹²ÓÐËÄÖÖʱÖÓÔ´

EPwm1Regs.CMPA.half.CMPA= 0.0001*T;// ÉèÖÃEPWM1A±È½ÏÖµ¼Ä´æÆ÷µÄ±È½ÏÖµ£¬¼´ÌåÏÖEPWM1AµÄÕ¼¿Õ±È EPwm1Regs.CMPB= 0.0001*T;

EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;//AÄ£¿é±È½Ïģʽ EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;//BÄ£¿é±È½Ïģʽ EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // AÄ£¿é±È½ÏʹÄÜ,ͨ¹ýд0À´Çå³ýSHDWAMODEλÀ´Ê¹ÄÜload on CTR=Zero

EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // BÄ£¿é±È½ÏʹÄÜ£¬Í¨¹ýд0À´Çå³ýSHDWBMODEλÀ´Ê¹ÄÜload on CTR=Zero

//AQCTLAΪÊä³öA±È½Ï·½Ê½¿ØÖƼĴæÆ÷

EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // TBCTR£¨¼ÆÊýÆ÷£©¼Æµ½ÁãʱʹÊä³öΪ·´Ïò

EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;//TBCTR£¨¼ÆÊýÆ÷£©ÓëCMPAÔÚup¼ÆÊýʱÏàµÈʹÊä³öΪhigh£¬Õâ¹ØÏµµÄÊä³öµÄÕ¼¿Õ±È EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;

26