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