我现在在用atmega16(mega8也可以)产生三路频率和振幅相同的余弦波,且此3路的余弦波要求相互之间的相位差可调.
单片机的T/C1,T/C2全部投入使用,选用快速PWM模式,计数器的TOP值选择固定的8位.程序的设计思路很简单,在此就不多废话:就是当计数器计数值和OCR1A(OCR1B/OCR2)比较匹配时发生中断.
问题来了: 1.当OCR1A(OCR1B/OCR2)三者的值相等或者非常接近时,三个比较匹配中断几乎同时发生.此时就有先后处理的问题,程序第一时间仅能处理其中的一个,其结果就会使另外两个中断处理得不及时,从而导致另外两个相应的匹配寄存器得不到及时的更新,换句话说,可能丢失了>=1次以上的匹配. 例如,我的本意是让三路输出相位差为0的余弦波,结果却不是这样,如附件中的图1,产生了相位差.且波形也稍稍的被干扰.图2是相互相位差要求为120度,但是还是因为有同时中断的存在,所以还是有偏差.而且随着时间的推移,这样产生的误差是越来越大. 2.所以请教高手帮忙解决,欢迎提建议.
相关链接:https://bbs.21ic.com/upfiles/img/20076/2007627103222375.rar |