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