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

MSP430 TimerA的 PWM问题

你好,我想知道msp430f149的TimerA 用来产生PWM,CCR0定周期,CCR1和CCR2定D,如果在PWM的产生过程中,CCR1和CCR2是时刻根据AD才到的值变化的,PWM会不会出现问题?  我在另一个地方有个帖子www.ourdev.cn/…/bbs_content.jsp

这个问题困扰我很久了, 求助~

Fuchong Wang:

我使用过富士通的MB95200/300系列的8位单片机,这个系列的单片机的定时器里的比较器含临时存储锁存器,好像在比较器有比较结果的时候比较器才调入数据寄存器的数据,这样应该不存在楼主的问题了

我也关心这类类似的问题,只是现在没时间没情绪专注还有点急躁,脑袋可能也不是那么灵光吧,总是疑问多

不知道msp430的比较器是不是也是这样的

秋之初:

Hi Lawson:

你可以将问题一分为二,先确定PWM占空比按一定规律调节的程序正常工作,再将ADC的值送到调节占空比的变量中。来确定问题根源~

Fuchong Wang:

回复 Charles Wu:

请问Charles Wu:用计数器的中断还是用CCR的中断好呢?差一个计数时钟

这种设置在脉宽为零或者为1的时候要不要考虑呢?如果新附给的CCRX值为零,会有什么情况么?

Charles Wu:

回复 Fuchong Wang:

我个人会选择CCR0的中断,原因倒不是差一个时钟周期,而是CCR0的中断处理不需要通过TAIV判断中断向量,执行时间更短。而CCRx为0的情况当然还是要考虑,具体怎么写这段冗余代码,还是要根据实际应用的情况,比如MCLK的频率,Timer Clock频率以及PWM输出的占空比范围等。

Lawson lan1:

回复 Charles Wu:

你好,Charles     程序我是改过来了,将原来的中断处理放在了主函数中,  问题也暂时解决了。但我不知道 你说的时间冲突是什么概念。  是系统在处理AD中断的时候来了 TimerA的中断?  

后来,我在这次修改的基础上,在主函数中增加了些代码, 发现,同样的问题又出现了。 你能否具体讲下你所说的时间冲突是什么意思。

谢谢!

Charles Wu:

回复 Lawson lan1:

个人语言组织能力不太好,之前的解释的不是很清楚。

其实说到底,冲突是程序对CCRx数值的修改和TAR计数之间产生的冲突。举一个例子,假设CCR0为1000,CCRx为500,PWM为set/reset模式,则在TAR计数在400和500之间时,将CCRx的数值改为400,因TAR已经大于400了,则在这个Timer的周期内,PWM输出就会全是高电平。

之前说Timer和AD冲突,是因为你在ADC的中断处理函数中来修改CCRx,而不考虑当时TAR具体的数值,就会发生你所遇到的错误。

Charles Wu:

回复 Charles Wu:

所以建议你将对CCRx的修改放在TACCR0的中断处理函数中,此时TAR数值为CCR0。但若这样还是会出现这种情况,就需要考虑是否是CCRx设置的数值太小,毕竟中断处理函数也不能做到完全实时,若Timer的Clock较快,还是有可能会发生上述的情况。

Lawson lan1:

回复 Charles Wu:

明白~    谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » MSP430 TimerA的 PWM问题
分享到: 更多 (0)