3. 简易DDS信号发生器的设计与验证

您所在的位置:网站首页 数字信号发生器的工作原理是 3. 简易DDS信号发生器的设计与验证

3. 简易DDS信号发生器的设计与验证

2024-07-11 12:36| 来源: 网络整理| 查看: 265

3.2.3. 程序设计¶

学习了DDS的相关知识,了解了硬件资源,根据要求进行实验工程的程序设计,接下来我们会先对实验工程进行整体说明,随后对相关子功能模块做系统讲解。

3.2.3.1. 整体说明¶

由理论知识小节可知,要实现DDS信号发生器需要4部分,D/A转换器交由外部挂载的高速AD/DA板卡处理,其他3部分,相位累加器、相位调制器、波形数据表ROM由FPGA负责。所以我们要建立一个单独的模块对DDS部分进行处理;实验目标还提到要使用按键实现4种波形的切换,按键消抖模块必不可少;同时也要声明 一个按键控制模块对4个输入按键进行控制,子功能模块已经足够了,最后再加一个顶层模块。

综上所述,得到实验工程整体框图如图 32‑6所示。

图 32‑6 实验工程整体框图

时钟、复位和代表波形选择的4个按键信号通过顶层传入按键控制模块(key_control),按键控制模块内部实例化4个按键消抖模块,对输入的4路按键信号分别进行消抖处理;消抖处理后的4路按键信号组成波形选择信号输入dds模块(dds), dds模块中实例化一个ROM IP核,按顺序存入了一个完整周期的 正弦波、方波、三角波、锯齿波的信号波形,根据输入波形选择信号对rom中对应信号波形进行读取,将读出波形的幅度数字值输出,传入外部挂载的高速AD/DA板卡的DA端,板卡根据输入的数字信号生成对应波形的模拟信号。其中,输出信号的频率和相位的调节可在dds模块中通过修改参数实现。

3.2.3.2. ROM内波形数据写入¶

我们设计的DDS简易信号发生器想要实现正弦波、方波、三角波和锯齿波4种波形的输出,需要事先在波形数据表ROM中存入4种波形信号各自的完整周期波形数据。ROM作为只读存储器,在进行IP核设置时需要指定初始化文件,我们将波形数据作为初始化文件写入其中,文件格式为MIF文件。

使用MatLab绘制4种信号波形,对波形进行等间隔采样,以采样次数作为ROM存储地址,将采集的波形幅值数据做为存储数据写入存储地址对应的存储空间。在本次实验中我们对4种信号波形进行分别采样,采样次数为212 = 4096次,采集的波形幅值数据位宽为8bit,将采集数据保存为MIF文件。

各波形采样参考代码如下。

代码清单 32‑1 正弦信号波形采集参考代码(sin_wave.m)

01 clc; %清除命令行命令

02 clear all; %清除工作区变量,释放内存空间

03 F1=1; %信号频率

04 Fs=2^12; %采样频率

05 P1=0; %信号初始相位

06 N=2^12; %采样点数

07 t=[0:1/Fs:(N-1)/Fs]; %采样时刻

08 ADC=2^7 - 1; %直流分量

09 A=2^7; %信号幅度

10 %生成正弦信号

11 s=A*sin(2*pi*F1*t + pi*P1/180) + ADC;

12 plot(s); %绘制图形

13 %创建mif文件

14 fild = fopen(‘sin_wave_4096x8.mif’,’wt’);

15 %写入mif文件头

16 fprintf(fild, ‘%sn’,’WIDTH=8;’); %位宽

17 fprintf(fild, ‘%snn’,’DEPTH=4096;’); %深度

18 fprintf(fild, ‘%sn’,’ADDRESS_RADIX=UNS;’); %地址格式

19 fprintf(fild, ‘%snn’,’DATA_RADIX=UNS;’); %数据格式

20 fprintf(fild, ‘%st’,’CONTENT’); %地址

21 fprintf(fild, ‘%sn’,’BEGIN’); %开始

22 for i = 1:N

23 s0(i) = round(s(i)); %对小数四舍五入以取整

24 if s0(i) = CNT_1MS && tb_cnt = CNT_41MS && tb_cnt = CNT_1MS && tb_cnt = CNT_41MS && tb_cnt



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3