请教:使用ATMEG128生成正交脉冲,如何保证A一直超前B90度?
需求:使用AVR生成正交脉冲,脉冲频率变化。思路:1、A脉冲由定时器1生成,B脉冲由定时器3生成。定时器1和定时器3工作在CTC模式下。
2、频率变化时,计算出定时器1的TCCR1B和OCR1A,如果计算出的OCR1A或者TCCR1B和上一次有变化,则开启定时器1的匹配中断A;TIMSK|=BIT(4)
3、开启定时器1的匹配中断A,在中断程序中运行以下指令:
TIMSK&=~BIT(4);
TCNT1=ocr1atemp>>1;
TCCR1A=tccr1atemp;
TCCR1B=tccr1btemp;
OCR1A=ocr1atemp;
TCNT3=0;
TCCR3A=tccr1atemp;
TCCR3B=tccr1btemp;
OCR3A=ocr1atemp;
先关闭中断;
将定时器1的TCNT1设置为计算出的OCR1A的一半,定时器3的TCNT3设置为0,然后定时器1和定时器3的OCR1A和OCR3A相同。
此时定时器1将会先遭遇匹配中断,自动改变输出引脚电平;定时器3后遭遇匹配中断,自动改变电平;
问题:按以上方式,发现频率变化时有时候A超前B,有时候B超前A,但我需要A一直超前B,请教解决方法。
总结:需要A一直超前B,请教解决方法。 只需要一个定时器,4倍于信号频率,在AB信号的4个边沿都有中断控制。 qtechzdh 发表于 2021-5-18 03:35
只需要一个定时器,4倍于信号频率,在AB信号的4个边沿都有中断控制。
我也这样想过,这个单片机还有其他工作,想找个不怎么占用资源的方法,确实不行也只能这么做,不过还得测试看下情况,谢谢。 huangxiaolpbany 发表于 2021-5-18 06:31
我也这样想过,这个单片机还有其他工作,想找个不怎么占用资源的方法,确实不行也只能这么做,不过还得测 ...
外加一片74HC74呗... 不要工作在CTC模式下嘛,一个工作在快速PWM模式下,另一个工作在相位修正 PWM 模式,同时启动,选择合适的匹配值正好是正交的,并且能够保证相位。 在车上想了下,画了个图。
最上面是正常模式,
第二是定时器1匹配中断中判断是上升沿处理,
第三种定时器1匹配中断中判断是下降沿处理,但结果一样,一旦在定时器1匹配中断后会造成脉冲b超前A。
第四是定时器1匹配中断中判断是上升沿处理,但首先将定时器3控制的脉冲b强制为高电平,
第五种定时器1匹配中断中判断是下降沿处理,
但首先将定时器3控制的脉冲b强制为低电平
结果看来是可以的。
实际是不是可行,要试下才知道。 takashiki 发表于 2021-5-18 10:56
不要工作在CTC模式下嘛,一个工作在快速PWM模式下,另一个工作在相位修正 PWM 模式,同时启动,选择合适的 ...
谢谢,我也是猜相位修正应该可行,但没想明白,准备按您的说法再试试,谢谢 找出解决办法了,进T1中断后,判断PB5和PE3状态,如果为高,就是要TCCR1C的强制指令,将AB脉冲均设置为0,然后重新设定计时器就可以了。 huangxiaolpbany 发表于 2021-5-18 21:29
找出解决办法了,进T1中断后,判断PB5和PE3状态,如果为高,就是要TCCR1C的强制指令,将AB脉冲均设置为0, ...
貌似你们研究的比较透彻哟,
页:
[1]