基于FPGA的DDS信号发生器设计(频率、幅度、波形可调) |
您所在的位置:网站首页 › labview生成正弦波数据制作查找表 › 基于FPGA的DDS信号发生器设计(频率、幅度、波形可调) |
目录
一、DDS原理 二、整体系统设计 1、现有条件 2、实验性能分析 3、系统模块设计 (1)频率设置模块(f_word_set.v) (2)波形设置模块(wave_set.v) (3)幅度设置模块(amplitude_set.v) (4)DDS模块(DDS.v) (5)顶层模块(DDS_top.v) 4、仿真验证 三、总结 工程下载地址:https://download.csdn.net/download/qq_33231534/12848911 一、DDS原理DDS全称为直接数字频率合成(Direct Digital Synthesis),其基本原理是在一个周期波形数据下,通过选取其中全部数据或抽样部分数据组成新的波形,由奈奎斯特采样定理可知,最低两个采样点就可以组成一个波形,但实际上最少需要4个点。其原理框图如下: 其主要由相位控制字、频率控制字、相位累加器、波形存储器几部分组成。 波形存储器:存储一个周期波形的离散信号; 频率控制字:用以控制生成的波形频率。 相位累加器:用来控制波形的相位累加,组成完整的波形显示。 相位控制字:用以控制波形起始位置。 二、整体系统设计 1、现有条件本实验平台是小梅哥的AC620开发板,板载12位采样精度的DAC芯片TLV5618,输出电压范围为0V~4.096V,其最高时钟频率为20MHz。 2、实验性能分析由于板载的DAC芯片最高采样频率为20MHz,为了设计余量,同时只是为了验证设计的正确性,这里将DAC采样频率设定为10MHz,同时TLV5618的DAC芯片采用的是SPI借口通信,传输一次数据需要差不多16个时钟周期,这里将其看成20个时钟周期,因此接收数据的最高频率为10/20=0.5MHz。因此本实验信号发生器最高生成的频率设置为0.5MHz。 3、系统模块设计这里没有做DAC驱动模块,在我前面的博客数据采集系统中有用到DAC驱动模块,由于我身边没有示波器,无法测波形,只能通过仿真软件测试设计的正确性,因此这里不做DAC驱动模块。下边将对各个模块分别讲解: (1)频率设置模块(f_word_set.v)这里通过按键依次对频率进行改变,这里设置可支持的频率包括 1Hz、10Hz、100Hz、500Hz、1KHz、5KHz、10KHz、50KHz、100KHz、200KHz、500KHz 共11种不同的选择,按键按下依次切换。 这里对不同频率波形的频率控制字进行计算。为了获取1Hz、10Hz等低频信号,在对其进行相位累加的时候,需要进行其他的计数,这里选取20位宽供其累加,还有12位供波形数据累加,共32位数据进行累加操作,例如fre_acc[31:0],其中低20位数据作为补充累加,高12位作为波形数据累加。对于要生成1Hz波形来说,假设每次需要加x个时钟周期,1Hz周期为T=1/f(此处周期用ns表示),在Tns后32位数据加满,采用50MHz系统时钟,1系统时钟周期20ns,因此有:(T/20)*x=2^32,因此频率控制字计算公式为: x = (2^32)*20/T = (2^32)*20*f(hz)/1000000000 ; 最后得出的各个频率的控制字数据为: 1Hz~86;10Hz~859;100Hz~8590;500Hz~42950;1000Hz~85899;5000Hz~429497;10KHz~858993;50KHz~4294967;100KHz~8589935;200KHz~17179869;500KHz~42949673。 代码如下,其中里边按键消抖模块采用前面博客写的按键消抖模块。 // Company : // Engineer : // ----------------------------------------------------------------------------- // https://blog.csdn.net/qq_33231534 PHF's CSDN blog // ----------------------------------------------------------------------------- // Create Date : 2020-09-04 15:25:53 // Revise Data : 2020-09-04 17:06:45 // File Name : F_word_set.v // Target Devices : XC7Z015-CLG485-2 // Tool Versions : Vivado 2019.2 // Revision : V1.1 // Editor : sublime text3, tab size (4) // Description : 频率控制字的生成 module F_word_set( input clk , input rst_n , input key1_in , output reg [25:0] f_word ); wire key_flag ; wire key_state ; reg [3:0] cnt ; key_filter fword_key ( .clk (clk), .rst_n (rst_n), .key_in (key1_in), .key_flag (key_flag), .key_state (key_state) ); always @(posedge clk or negedge rst_n) begin if (!rst_n) begin cnt |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |