研究了几天基于DDS技术的函数信号发生器,断断续续获得了一些收获。
DDS--
Direct Digital Frequency Synthesis(直接数字频率合成技术)
至于利用DDS制作函数信号发生器的优点我就不说了,百度一下,一切皆了然。这里介绍一下利用Verilog语言编写DDS的思想。当然网上也有很多参考资料,都介绍得不错,也有用单片机做的,不过我觉得利用单片机来做对于低频来说完全没问题,但是对于高频来说就完全没有效果了。
首先介绍一下DDS的整体思想:
整个DDS的模拟框图如下:
![clip_image002 clip_image002](http://image51.360doc.com/DownloadImg/2012/04/1212/23129822_2)
其核心就是频率控制,相位控制和相位累加。主要参数有:频率步进精度、相位步进精度、DAC的位数以及滤波器的设计。那么怎么去确定这些参数呢,我个人理解如下:
1.频率步进精度就决定了程序中相位累加器的位数(一般介绍都是取24-32位,但是具体怎么取没有明确给出),同时也要取决于FPGA的时钟(这里以50MHz为例)
也就是说采用30位的相位累加器可以达到0.046Hz。根据不同的位数和系统的时钟就可以确定频率的精度了。
2.相位步进:相位步进主要是调解输出波形的相位。这里就还涉及到采样深度(也就是对正弦波的采样点数,这里以4096为例)
根据不同的相位精度,求出X即得到相位控制字。如:相位步进5度,那么计算出来X=56.88888。
3.DAC的选取:根据要求的输出幅度的精度和输出频率。如:选择8位的DAC,其电压精度为
,而选择电流型DA和选择电压型DA则得根据输出频率要求而定。电流型DAC转换速度不如电流型DAC。
4.滤波器的设计:滤波器在整个设计过程中起到非常重要的作用。前面DAC转换后会携带很多噪声和杂波,通过频率响应较好的滤波器则可以充分的将杂波和噪声滤除掉,从而得到较好的波形。
5.涉及的主要计算公式:
1).
即M为频率控制字,改变M的值即可改变输出频率。
N为相位累加器的位数,Fc为系统的时钟频率。
例:Fc=50MHz,N=30;Fout=1KHz,则相位累加器每次累加的数(频率控制字)M=21474.83648(取21475)
注意:1.由取样定理,所产生的信号频率不能超过时钟频率的一半,在实际运用中,为了保证信号的输出质量,输出频率不要高于时钟频率的33%,以避免混叠或谐波落入有用输出频带内。
2.相位累加器输出位并不全部加到查询表,而要截断。相位截断减小了查询表长度,但并不影响频率分辨率,对最终输出仅增加一个很小的相位噪声。DAC分辨率一般比查询表长度小2~4位。
2).相位控制字:![image image](http://image51.360doc.com/DownloadImg/2012/04/1212/23129822_7)
X为rom表的采样点数,p为相位,a为相位控制字。
即按照要求输出的相位,计算出a的值,将a累加给相位累加器,即可输出该相位上的的波形。