这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » ATMEG128做的正交脉冲发生器,请问如何保证A路一直超前B路90度呢?

共7条 1/1 1 跳转至

ATMEG128做的正交脉冲发生器,请问如何保证A路一直超前B路90度呢?

工程师
2021-09-14 22:06:13     打赏
需求:使用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,请教解决方法。





关键词: ATMEG128     脉冲     发生器     定时器     90度    

工程师
2021-09-14 22:45:49     打赏
2楼
只需要一个定时器,4倍于信号频率,在AB信号的4个边沿都有中断控制。



工程师
2021-09-14 22:52:50     打赏
3楼

不要工作在CTC模式下嘛,一个工作在快速PWM模式下,另一个工作在相位修正 PWM 模式,同时启动,选择合适的匹配值正好是正交的,并且能够保证相位。


工程师
2021-09-14 23:52:06     打赏
4楼

感谢分享


高工
2021-09-15 07:58:25     打赏
5楼

感谢分享


专家
2021-09-15 08:03:48     打赏
6楼

谢谢分享


高工
2021-09-15 08:16:14     打赏
7楼

nice


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]