|
使用MSP430产生PWM波形,抖动问题如何解决?
[复制链接]
请教版主:
我使用MSP149芯片做控制,其中使用TIMEB定时器功能在引脚p4.1 p4.2 输出PWM波形,。目前存在的问题是产生波形的抖动问题,做了各种定时器的配置改变也无法解决,请教版主给看看程序,是那个地方出了问题,多谢!
主程序:
void main()
{
WDTCTL = WDTPW + WDTHOLD ; //关闭看门狗
_DINT(); //关闭中断
MSP430_Initial();
TimeAInit();
Varia××e_Initial();
TimeBInit();
_EINT(); //打开全局中断控制,若不打开,屏蔽本句
loop:
KeyScan();//使用TimeA中断检测按键。
goto loop;
}
定时器B的初始化程序:
void TimeBInit(void)
{
P4DIR |= (BIT2 + BIT1 + BIT0); //选择P4.0 P4.1 P4.2引脚为输出
P4SEL |= (BIT2 + BIT1+ BIT0); //选择输出端口的第二功能(PWM)
TBCTL = TBSSEL_2 + TBCLR + MC_3 ; //选择SMCLK 清除TBR 定时器溢出中断允许
TBCCTL0 = CCIE;// + CLLD1 + CLLD0;
TBCCTL1 = OUTMOD_2 ;//+ CLLD1 + CLLD0 ;// + CCIE; //CLLD0、1 =11 当TBR计数到TBCL0时 数据装载
TBCCTL2 = OUTMOD_2 ;//+ CLLD1 + CLLD0 ;//+ CCIE;
TBCCR0 = 80000 ; //PWM周期
}
定时器B的中断处理程序:
#pragma vector = TIMERB0_VECTOR
__interrupt void ISP_TimerB0 (void)
{
TBCCR1 = iTakeValue1[PwmFlag]; //改变占空比值 MODE2
TBCCR2 = iTakeValue2[PwmFlag];
PwmFlag++;
if(PwmFlag>=bNvalue)
{
PwmFlag = 0;
}
}
在定时器B的每次中断过程中,更新TBCCRx 以得到不同脉宽的PWM。
|
|