出现的问题:
当我利用ROM存储正弦波的值实现每当我用DAC输出完上一个值的时候,利用地址加一输出下一个ROM的值,这种情况理论上我的DA(tlv5618)输出频率为1.25M,即:
同样,当时利用DDS产生的不同频率不同相位的波形,我仿真了不少的信号调制,都发现没有问题,而当我直接把DDS的输出放到我的DA的输入端口,一番调试,发现DA的转换速度远远慢于DDS数据的生成速度,这就导致我DA实际输出的值不是我想输出的。
对DDS的重新理解
经过研究DDS发现,当时钟频率为50Mhz,输入位宽为16位,输出则是12位,因为我的DA是12位的数据输入和4位的功能选择位。
因为DDS的性质,每个时钟周期都会更新他的值,即1/50 ns更新一次数据,按照我的理解,间隔时间为dt,DDS必须输出一个值,如果我们需要50M的信号,DDS只会输出一个相同的值,如果我们需要25M的信号,DDS只能输出2个不同的值,如果我们想要波形好看一点,假设我们一个正弦波周期用50个点来表示,则在这种情况下,DDS能输出最大的正弦波周期为1Mhz。
DDS与DA的速度配合:
在理想情况下,DDS产生更新数据的时间只能比DA转换的时间长,如果相反,则DA输出不正确的DDS数据。所以在理想情况下,我们DDS数据更新的时间为1/1.25 = 0.8 ns,即为1.25Mhz的驱动时钟来驱动DDS使其更新数据。如果需要生成比较好的波形最低得25个点,则我们DA能输出最大的信号频率为50Khz。
但是,实测,在完成DA数据转换的完整时间周期为1.32us,此时间为CS拉低到CS拉高中间的时间,实际上,不可能拉高CS后瞬间拉低,时间还会增加,但此时我们计算理想情况。1/1.32us= 757.5Khz(此时间要设置为DDS的驱动时钟保证DDS数据更新的时间),同样假设完好波形为25个点,则生成正弦波的最高频率为30.3Khz.
实际应用:
实际上,我将DDS更新数据的周期设置为2us,此时DDS的驱动时钟为500Khz,按照25个点的想法,正弦波的最高频率为20Khz