ADC 将正弦波检测为几个点簇

电器工程 ADC
2022-01-30 03:57:50

我正在使用以125MSPS运行的 ADC ( ADS4129 )。我将 100kHz 正弦波应用于低通滤波器(fc=15MHz)。ADC 正按预期以差分方式驱动。当用示波器探测输入信号时,我看到了一个不错的正弦曲线。

我的问题是看着 ADC 输出我得到这个:

在此处输入图像描述

频率是正确的,但点在特定点中以簇的形式出现。目前我缺少几个所需的 10nF 去耦电容器(我正在等待它们)。这些电容器可能是导致此问题的原因吗?对我来说这似乎很奇怪,这出现在特定的点上。

另一方面,在频域中分析输入似乎只是表明 ADC 性能不佳,这在不需要去耦的情况下是有意义的。

在此处输入图像描述

编辑:

ADC 位于夹层板中。我正在使用 FPGA 与之交互。FPGA 需要一个 LVDS 输入信号,它正在转换来自 ADC 格式的数据(DDR,交替偶数位和奇数位)。这是在测试台上测试的。FPGA 输入根据 ADC 设置和保持时间进行约束,并留有余量以考虑可能的走线长度不匹配。

编辑2:

过渡:

0b111000011 451,

0b111111111 511,

0b111000001 449,

0b111111111 511,

0b111111101 509,

0b111111100 508

在此处输入图像描述

2个回答

从最后一张图片中,我们看到多个电压映射到同一个离散值,这意味着一些比特不会被传输/丢失。似乎我们总是有四个重复可以再次“拉开”以形成一条漂亮的连续曲线:这告诉我们必须有两个连续的位丢失。经过一些试验和错误后,我注意到你不能仅仅将它们归零,因为这些大“步骤”在零上的均匀分布:如果我们改为在丢失的位上植入前两个有效位,我们会得到准确的我们正在寻找什么:

所以基本上我会说DAC输出是

[d1, d2, d3, d4, d5, d6,...]

(其中dn代表第n-th 最重要的位),但是您的程序以某种方式读取

[d1, d2, d1, d2, d5, d6,...]

实际上它也可能被某些d(n),d(n+1)人覆盖,因为我不知道我在你的情节中看到的是什么分辨率。d1, d2n

我做了一个快速绘图来模拟这种行为,我们可以看到几乎完全相同的结果:

在此处输入图像描述

这是为此图编写的 MATLAB 代码:

bits = 9;
x = 0:1e-2:2*pi;
y = round((sin(x)*0.85 + 1.15)/2 * (2^bits-1));
yd = nan(size(y));
perm = [1,2,1,2,5,6,7,8,9];
for i = 1:numel(x);
    bin = dec2bin(y(i), bits);
    bin = bin(perm);
    yd(i) = bin2dec(bin);
end
plot(x, yd,'.-b');

我怀疑您以某种方式错误地重建了位的顺序。这可能只是 ADC 和 FPGA 之间的接线错误,或者您可能已经对 DDR 数据进行了反向排序,或者 FPGA 代码对位有某种排序错误。