-1

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

但从上面的代码我正在生成正弦波。如果我输入频率,那么波形频率也会完全改变,但我试图改变相位,那么这就是问题所在。如果我进入相位为 90,那么它会改变 10 度,它不会改变 90。我不知道它为什么会这样产生以及我犯了什么错误?我错过了什么吗?仅相位问题。

提前致谢。

如果我想输入相位的浮点值,例如 2.5 度,我必须改变什么。在函数中将“无符号整数阶段”转换为“浮点阶段”。如果我这样尝试,“<<”与浮点数不兼容。如果我想以 35.8 度进入相位,我必须做什么。请建议我。

提前致谢。

4

1 回答 1

1

从数据表第 15 页:

该信号相移 2π/4096 × PHASEREG

如果要使用度数,请在发送之前按如下方式修改相位(uint32_t 可能需要包含 stdint.h 文件):

phase = (uint32_t)phase * 4096 / 360;

如果您不是特别关心精度,您可以执行以下操作,使用 16 位除法而不是 32 位除法:

phase = phase * (4096 / 360);
于 2012-10-02T23:19:14.307 回答