MSP430F5435A: 请教PWM输出问题:偶发的少输出一次波形。

Part Number: MSP430F5435A

问题:
pwm输出,偶发的少输出一次高电平。问题出现频率一般为10分钟-1小时一次。问题不固定时间出现。


配置:
MSP4305435A芯片使用TA1.1输出PWM。
采用定时器输出模式的UP模式,输出3:set/reset,即CCR0为周期、CCR1为低电平时长。指定P8.6复用为PWM输出。
开启了ccr0计数中断。
pwm周期为10ms。低电平时长每隔1s在2.64ms和4.57ms之间切换(在CCR0中断中切换)。

图片说明:

正常波形的图片,包含若干波形,周期为10ms,低电平时常从4.57ms变换到2.64ms。

异常波形的图片,“波1”和“波3”正常。“波2”周期为20ms,其实应该是有个波少输出了一次高电平,导致低电平很长。

以下是CCR0中断,用于更新ccr1值,也就是占空比。

void TIMER_A1_0_ISR (void)
{
    //每10ms进入
    cnt++;
    if (cnt == 99)
    {
        cnt = 0;
        if (pwm == 1081)  // 低电平2.64ms
        {
            pwm = 1873;
            Timer_A_setCompareValue(TIMER_A1_BASE, TIMER_A_CAPTURECOMPARE_REGISTER_1, 1081);
        }
        else  // 低电平4.57ms
        {
            pwm = 1081;
            Timer_A_setCompareValue(TIMER_A1_BASE, TIMER_A_CAPTURECOMPARE_REGISTER_1, 1873);
        }   
    }
}

  • 项目中是否有任何其他中断? 更新CCR1时,请尝试禁用所有其他中断并再次测试,以查看它是否由其他中断引起。

  • 项目中一直在运行约7个中断(不算TA1 CCR0中断)。其中有周期10ms的TA0定时器中断和周期7.5ms的ADC中断,这两个是周期相对较短的中断。

    做过以下测试:

    测试1:关闭其余所有中断,项目仅运行PWM输出程序,仅有TA1 CCR0中断用于更新占空比。测试时间36小时,表现为:PWM输出正常。

    测试2:仅关闭周期10ms的TA0定时器中断和周期7.5ms的ADC中断。测试时间48小时,表现为:PWM输出有不正常,不正常出现约12次。

    测试3:项目正常运行,7个中断正常运行。测试时间48小时,表现为:PWM输出有不正常,不正常出现约50次。

     

            也就是目前来看,中断是会影响pwm输出。但根据手册,pwm输出是外设在输出,与cpu、中断等无关。即便有其他中断在运行,导致更新ccr1被延后,也只应该导致pwm占空比更新被延后一个波形,不应该导致一次高电平没被拉高。