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

共1条 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度    

共1条 1/1 1 跳转至

回复

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