TI中文支持网
TI专业的中文技术问题搜集分享网站

关于通过更新MSP430G2553计数器TIMER_A实现更新PWM造成输出值跳变的猜测

int main(void)

{

        CSL_init();

        Timer0_PWM(0xFFFF,0x0000,0x0000);

        while(1)

        {

                OUTPUT_PWM = GetValue();                                     //计算过程返回值,此处略

                while(!(TA0CTL & TAIFG));                                          //判断计时器到时

                Timer0_PWM(0xFFFF,OUTPUT_PWM,0x0000);    //更新输出结果

        }

}

———————————————————————————————————-

void Timer0_PWM(unsigned int PWM,unsigned int PWM1,unsigned int PWM2)

{

        TA0CCR0 = PWM;

        //TA0CCTL1 = CM_0 + CCIS_0 + OUTMOD_6;

        //TA0CCR1 = PWM2;

        TA0CCTL2 = CM_0 + CCIS_0 + OUTMOD_6;

        TA0CCR2 = PWM1;

        TA0CTL = TASSEL_2 + ID_0 + MC_1 + TAIE;

}

———————————————————————————————————-

———————————————————————————————————-

1、我用通过计算的结果,更新PWM,以期实现输出随着输入值的变化而变化,但是输出会出现跳变。

2、稳定的输出,最长可持续48小时

3、稳定的输出,最短可持续12小时

4、信号源、计算过程均没有问题

我猜测是因为不断刷新PWM得志造成的。

———————————————————————————————————-

———————————————————————————————————-

问题一:TIMER_A的PWM是不是只用于定值输出?

问题二:不断的刷新PWM是不是会对输出的准确造成影响?

问题三:我上述代码有没有问题?

问题四:如果要用PWM来实现不断变化的输出,是不是有更好的办法,能否介绍一下?

问题五:如果我做精度比较高的信号输出,用Timer_A的PWM来实现,是否合适?

问题六:用MSP430G2553的TIMER_A进行PWM输出,能实现多高的精度?

Fuchong Wang:

输出会出现跳变

是指什么具体现象?

问题现在解决了么?

HaiTao Li:

回复 Fuchong Wang:

        问题如上所述,没有解决,现象一直存在。我怀疑是我的供电设备有问题,如果不是的话,那就真的是PWM输出本身的问题了……..不知道你有什么思路没有

Hardy Zhou:

Timer_A做PWM输出控制时,PWM_Value的更新没有双缓冲的功能,是立即执行的,所以

while(!(TA0CTL & TAIFG));

 Timer0_PWM(0xFFFF,OUTPUT_PWM,0x0000);    

再来更新PWM的值,这段时间如果大于更新的PWM_Value需要的时间,那么就没有问题,如果是小于,那么比较翻转就不会执行,这时候就会导致占空比的跳变。

解决的办法是:根据你当前代码的执行时间来设定最小占空比

                             另外你的代码可以改进下,因为你只是希望改动PWM_Value,并不需要再设置寄存器,可以改成

while(!(TA0CTL & TAIFG));

TA0CCR2 = PWM1; //这可以降低你的PWM最小占空比要求

或者更合理就是判断下PWM1是否有变化,如果无变化,就不需要更新。

 

HaiTao Li:

回复 Hardy Zhou:

        谢谢,我先测试一下

Xutong Han2:

回复 HaiTao Li:

PWM的占空比只有在需要改的时候才去修改CCRx的值,当配置好定时器PWM模式时,修改CCRx的值就可以改变PWM的占空比~

paul1:

楼主,你好!

     你的问题解决了么?我现在也遇到这样的问题,我现在也是通过传感器采集值而改变PWM输出占空比,刷新率大概在100ms,现在发现会间隔一定时间出现跳变的问题。不知道你遇到的问题解决了没?

赞(0)
未经允许不得转载:TI中文支持网 » 关于通过更新MSP430G2553计数器TIMER_A实现更新PWM造成输出值跳变的猜测
分享到: 更多 (0)