lzlym182 发表于 2007-6-27 10:41:24

有谁做过3路PWM输出--------同时中断产生的困扰

我现在在用atmega16(mega8也可以)产生三路频率和振幅相同的余弦波,且此3路的余弦波要求相互之间的相位差可调.



单片机的T/C1,T/C2全部投入使用,选用快速PWM模式,计数器的TOP值选择固定的8位.程序的设计思路很简单,在此就不多废话:就是当计数器计数值和OCR1A(OCR1B/OCR2)比较匹配时发生中断.



问题来了:

   1.当OCR1A(OCR1B/OCR2)三者的值相等或者非常接近时,三个比较匹配中断几乎同时发生.此时就有先后处理的问题,程序第一时间仅能处理其中的一个,其结果就会使另外两个中断处理得不及时,从而导致另外两个相应的匹配寄存器得不到及时的更新,换句话说,可能丢失了>=1次以上的匹配.

   例如,我的本意是让三路输出相位差为0的余弦波,结果却不是这样,如附件中的图1,产生了相位差.且波形也稍稍的被干扰.图2是相互相位差要求为120度,但是还是因为有同时中断的存在,所以还是有偏差.而且随着时间的推移,这样产生的误差是越来越大.

    2.所以请教高手帮忙解决,欢迎提建议.

lzlym182 发表于 2007-6-27 10:44:55

点击此处下载armok01159521.rar

machao 发表于 2007-6-30 01:19:01

1。当3个中断同时产生,CPU当然只能一个一个的处理,所以误差不能消除。只能采用提高系统的时钟频率(会影响PWM的频率)和采用汇编尽量减少中断服务程序的执行时间来减少误差。



2。如果相位的改变是同时的,可以考虑只使用一个中断,在中断中将3个PWM的输出同时改变。
页: [1]
查看完整版本: 有谁做过3路PWM输出--------同时中断产生的困扰