|
本帖最后由 chinalll 于 2017-8-27 21:54 編輯
只要一使能PWM1,串口的的輸出端就出現2.5us寬的脈沖,頻率好像和pwm設置的有關系。
而且pwm波的波形不是很正常,不是正常的方波,一個周期里會有兩次低電平,下面圖即為波形,不知道問題在哪里。哪位大俠做過的uart接收的數據控制pwm波占空比的
PWM2通道是正常的
PWM波設置是否有問題
這是pwm波的初始化程序
void init_PWM()
{
P1TPER = 2404; /* P1TPER = ((1 / 400kHz) / 1.04ns) = 2404, where 400kHz //決定PWM波的工作頻率
is the desired switching frequency and 1.04ns is PWM resolution. */
//2404----7khz
//1204----11.76k
/*~~~~~~~~~~~~~~~~~~~~~~~ PWM1 Configuration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
P1TCONbits.PTMOD = 0b00; //邊沿對起
P1TCONbits.PTCKPS= 0b00; //預分頻1:1
P1TCONbits.PTOPS = 0b00; //后分頻1:1
PWM1CON1bits.PEN1H = 1; //使能PWM1H腳
PWM1CON1bits.PEN1L = 0; //使能PWM1L腳
PWM1CON1bits.PEN2H = 1; //使能PWM2H腳
PWM1CON1bits.PEN2L = 0; //使能PWM2L腳
PWM1CON1bits.PEN3H = 1; //使能PWM3H腳
PWM1CON1bits.PEN3L = 0; //使能PWM3L腳
PWM1CON1bits.PMOD1=1; //PWM腳處于獨立輸出模式,0為互補
PWM1CON1bits.PMOD2=1; //PWM腳處于獨立輸出模式,0為互補
PWM1CON1bits.PMOD3=1; //PWM腳處于獨立輸出模式,0為互補
PWM1CON2bits.SEVOPS = 0; //特殊事件后分頻為1:1
PWM1CON2bits.IUE = 1; //立即更新P1DCX
PWM1CON2bits.OSYNC = 1; //強制輸出在下一tcy邊沿發生
PWM1CON2bits.UDIS = 0; //0:允許從占空比和周期緩沖寄存器更新
P1DC1 = 0; /*占空比設置,P1DC1=P1TPER,50%*/
P1DC2 = 0; /*占空比設置,P1DC2=P1TPER,50%*/
P1DC3 = 0; /*占空比設置,P1DC3=P1TPER,50%*/
_PWM1IE = 1; //允許PWM中斷
_PWM1IP = 5; //中斷優先級5
P1TCONbits.PTEN = 1; /* Enable the PWM Module */
///////////////////////////
P2TCONbits.PTMOD = 0b00; //邊沿對起
P2TCONbits.PTCKPS= 0b00; //預分頻1:1
P2TCONbits.PTOPS = 0b00; //后分頻1:1
PWM2CON1bits.PEN1H = 1; //使能PWM1H腳
PWM2CON1bits.PEN1L = 0; //使能PWM1L腳
PWM2CON1bits.PMOD1=1; //PWM腳處于獨立輸出模式,0為互補
PWM2CON2bits.SEVOPS = 0; //特殊事件后分頻為1:1
PWM2CON2bits.IUE = 1; //立即更新P1DCX
PWM2CON2bits.OSYNC = 1; //強制輸出在下一tcy邊沿發生
PWM2CON2bits.UDIS = 0; //0:允許從占空比和周期緩沖寄存器更新
P2DC1 = 0; /*占空比設置,P1DC1=P1TPER,50%*/
_PWM2IE = 1; //允許PWM中斷
_PWM2IP = 5; //中斷優先級5
// P2TCONbits.PTEN = 1; /* Enable the PWM Module */
}
|
|