高手帮忙解决msp430f1132单片机PWM可变占空比问题
我用msp430f1132 编了个程序,主要功能是用TimerA产生PWM波,周期由CCR0决定,CCR1定占空比。AD一直开着根据采到的值来定占空比。等于说我的占空比是实时变的。 CCR1 = D;这语句我放在AD中断中试过,也放在TimerA的中断中试过。都始终有个问题,就是PWM的脉冲偶然的一下会变全高,或者是PWM电平变低后又马上变高了。见附图。程序我也附上。点击此处下载 ourdev_722925OK9D40.zip(文件大小:25K) (原文件名:all in one.zip)
http://cache.amobbs.com/bbs_upload782111/files_52/ourdev_722926X8WO6S.PNG
(原文件名:test-2.PNG)
http://cache.amobbs.com/bbs_upload782111/files_52/ourdev_722927Q160LN.PNG
(原文件名:test3.PNG) 正在工作的时候,改变值, 应该会影响输出。
常规的做法时先停止,再设置。 是不是想输出类似SPWM的波?我也曾遇到过这现象,仔细看看比较匹配的值有没有想互跨越 回复【楼主位】lzloong
-----------------------------------------------------------------------
在全局变量D声明前加volatile试试 回复【3楼】hdd961140543阿逸
-----------------------------------------------------------------------
D前加了volatile还是原来那样。 回复【1楼】KongQuan
-----------------------------------------------------------------------
这方法我曾经试过,在TimerA的中断中将 TimerA暂停,赋值后继续计数。但问题依旧存在。 回复【2楼】huhandong
-----------------------------------------------------------------------
能否具体说明下?我有个疑问就是,产生TimerA中断的时候,进入中断可能需要好几个clk,这个过程中TimerA却依旧工作的,不知道这是不是一个问题? 另外如果我不用TimerA的中断,在AD采集的中断中赋值为什么还是有问题?谢谢~ CCR1没有影子寄存器,如果新赋的值比当前的计数值小,该周期无法产生PWM比较匹配,PWM电平就无法翻转,只能维持高电平直到下一周期产生比较匹配。
相反地,如果该周期已经发生比较匹配(当前计数值大于旧的CCR1值),而新赋的CCR1值比当前的计数值大,还会发生重复比较,即同一周期内出现两次脉冲。
目前想不到好的解决方案。 回复【7楼】mitchell
-----------------------------------------------------------------------
那请问下,这个问题是大部分单片机都有的,还是430有? PIC或瑞萨的有嘛?我觉得实时改变 脉宽是个很常规的问题,碰到这种都用DSP28**? 我只知道好像28系列的有影子寄存器,上课的时候好像听老师说过。 回复【8楼】lzloong
-----------------------------------------------------------------------
大部分都有这个问题,部分专门PWM用途没有问题:AVR的90PWM系列没有问题,TI的DSP没有问题,ST7也没有问题。 哈,我也遇到同样的问题了,看了是通病啊! 能不能发你的msp430f1132的电路图我看看,我是学生,刚申请几个片子,不知道怎么用,想想打出来电路图。谢谢哈,645008699@qq.com
页:
[1]