DDS在极低频率下的精度问题

电器工程 dds
2022-01-08 05:36:14

我有生以来第一次使用这个DDS 芯片 (AD9850) 以所需的频率创建正弦波,我上传查找表代码和所需的频率。通过带有微控制器的命令。所以我目前的知识非常有限。

到目前为止,事情似乎还不错,但问题出在非常低的频率上。在 1Hz 甚至 0.5Hz 似乎都很好。但我还需要降低到 0.1Hz。

这是我通过微控制器将数字0.1发送到 DDS 时 DDS 的输出:

在此处输入图像描述

在我的代码中,我将命令从 PC 发送到 micro 作为字符串并将其转换为双精度。但为了简单起见并验证我使用此代码,对于 0.1Hz,我在循环中设置了 sendFrequency(0.1)

但正如您所见,0.1Hz 命令的周期约为 11.5 秒,而不是 10 秒。

我希望我能很好地解释这个问题。有没有办法校准或微调它,以便我得到更准确的结果?还是我应该接受准确性?顺便说一句,在数据表中可以参考这种相对不确定性?

2个回答

这不是一个准确的东西 - 它是分辨率。

数据表的前面指定调谐分辨率为 0.0291Hz,时钟为 125MHz。

0.0291125×106232Hz(因为相位累加器是 32 位)

所以这大约是您所需输出频率的 30%。这来自将调谐字的 LSB 添加到 125MHz 的相位累加器的结果——对于给定的时钟频率,它是芯片固有的,以及他们为相位累加器和调谐字选择的位数。

您可以尝试降低时钟频率 - 最小值为 1MHz,因此您应该能够将分辨率提高两个数量级以上,在 0.1Hz 时达到 +/-0.23% 左右。

0.23×1031×1062321MHz 时钟的 Hz 分辨率

不幸的是,为了获得最佳性能,必须更改其他内容(尤其是输出滤波器——通常是这些模块上的 7 阶椭圆 LC 滤波器)。

如果您永远不需要超过 1Hz,您可以简单地在现有输出上添加一个截止频率为 100Hz 的 RC 滤波器,这对于许多用途都是可以接受的。

您在数据表上寻找的是频率调谐分辨率。对于该芯片,125 MHz 参考时钟输入为 0.0291 Hz。您的频率将四舍五入为该数字的倍数。这个数字是基于芯片时钟输入的频率。

例如,0.1 Hz 将四舍五入为 0.0873 Hz (0.0291*3)。0.0873 Hz 的周期是 11.5 秒,这就是您所看到的。

较低的输入时钟频率将在较低频率下提供更高的精度。因此,如果您想在较低频率下获得更好的精度,请降低时钟频率。