芯片是dsPIC30f4011,我用它的PWM发生器做个100K的PWM波,但是程序执行后这个波为18.3K,请问是什么原因。还有我用的是自由模式工作,为什么时基周期寄存器和占空比寄存器是相同值时输出占空比为50%的方波,我看它的资料上不应该是占空比寄存器的值是时基周期寄存器的一半时才对应50%的吗?<br /><br />#include "p30f4011.h"<br /><br />#define Fcy 40000000.0<br />#define Fpwm 100000.0<br />main()<br />{<br /> PWM_INI();<br /> while (1)<br /> {<br /> Nop();}<br />}<br /><br />void PWM_INI(void)<br />{<br /> <br /> SRbits.IPL=7; //关中断<br /> PTCON=0x8000; // PWM时基控制寄存器<br /> PTMR=0x0000; //PWM时基寄存器<br /> PTPER=Fcy/(Fpwm*4)-1; //PWM时基周期寄存器<br /> PWMCON1=0x0011; //PWM控制寄存器1,PWM1H:PWM1L为互补输出<br /> PDC1=Fcy/(Fpwm*4); //PWM占空比寄存器<br /> IFS2bits.PWMIF=0; //PWM中断标志清0<br /> IEC2bits.PWMIE=1; //允许PWM中断<br /> IPC9bits.PWMIP=7; //PWM中断优先级为7<br /> SRbits.IPL=0; //开中断<br /> <br />}<br /><br />void __attribute__((__interrupt__)) _PWMInterrupt(void)<br />{<br /> IFS2bits.PWMIF=0; //PWM中断标志清0<br /> <br />} |
|