使用微控制器改变信号的相位值

时间:2012-10-02 22:02:49

标签: c embedded avr avr-gcc

我正在尝试使用带有ATmega32-A微控制器的可编程波形发生器AD9833生成正弦波(MCLK = 8MHz时钟频率)。我正在使用USART通信,因此如果我在超级终端中改变频率或相位,则波形频率和相位必须改变。 我为此编写了一些小代码,如下所示。

但是从上面的代码我生成正弦波。如果我输入频率然后波形频率也完全改变但我试图改变相位然后这是问题。如果我输入相位为90然后它改变10度它没有改变90.我不知道它为什么会产生这样的错误以及我做了什么错误?我错过了什么?只有阶段的问题。

提前致谢。

如果我想输入阶段的浮动值,例如2.5度,我必须改变。要么“unsigned int phase”进入函数中的“float phase”。如果我尝试那样的“<<<与float不兼容。如果我想进入相位为35.8度,我必须这么做。请建议我。

提前致谢。

1 个答案:

答案 0 :(得分:1)

从数据表第15页开始:

  

该信号相移2π/ 4096×PHASEREG

如果你想使用度数,在发送之前修改阶段如下(uint32_t可能需要包含stdint.h文件):

phase = (uint32_t)phase * 4096 / 360;

如果您不是特别关注精度,可以使用16位除法而不是32位除法:

phase = phase * (4096 / 360);