基于TLC5615芯片的DDS信号发生器(FPGA)
基于TLC5615芯片的DDS信号发生器(FPGA)
1. 前言
前面在我的博客中已经写过关于TLC5615的FPGA程序驱动以及DDS的原理和代码实现,这里便不多做介绍,这一次主要是把这两部分合并起来利用DA芯片实现正弦波输出,并且用示波器观察信号的频率。
2. 模块示意图
TLC5615是一款SPI接口的10位高精度DA转换芯片,因此将DDS模块整个封装成SPI接口。ROM根据FPGA提供的地址,将查找表中的数据输出到CTRL,由DIN输入到DA芯片TLC5615中。在Quartus中生成的RTL视图如下所示。
3. 代码部分
前面的博客中已经由DDS模块和TLC5615驱动模块的代码,这里就不在贴上,有需要的朋友可以查看我前面的博客中的代码。这里只给出例化这两个模块的顶层文件代码,如下。
module DDS_TLC5615(input sys_clk,input rst,output cs,output tlc5615_clk,output tlc5615_data);wire [9:0] DA;TLC5615_CTRL TLC5615_CTRL(.sys_clk(sys_clk),.rst(rst),.conv_en(1'b1), .conv_data({DA,2'b00}), .cs(cs),.conv_end(), .tlc5615_clk(tlc5615_clk),.tlc5615_data(tlc5615_data)
);DDS u_DDS(.clk (sys_clk),.rst_n(rst),.fword(85910),.pword(256),.DA (DA)
);endmodule
4. ROM初始化mif文件生成
mif文件的生成有多种方式,可以用matlab方法生成,也可以用人家做好的波形数据生成器一键自动生成,只是没有matlab方式可以有多种设置和选择,包括添加直流分量等等。matlab代码如下所示。
depth =1024;%采样深度,即采样个数
widths =10 ;%采样数据位宽
N=0:depth-1 ;%采样时刻
s= sin(2*pi*N/1024);%信号生成fidc = fopen('D:\Quartus\sinx.mif','wt') %创建mif文件
%写入mif文件的开头
fprintf(fidc,'depth=%d\n',depth);
fprintf(fidc,'width=%d\n',widths);
fprintf(fidc,'address_radix=UNS;\n');%地址格式,UNS表示保持现有格式
fprintf(fidc,'data_radix=UNS;\n');%数据格式
fprintf(fidc,'content begin\n');
%采样数据的输出
for(x =1:depth)fprintf(fidc,'%d:%d;\n',x-1,round(31*sin(2*pi*(x-1)/32)+32));
end;%round(A)将A中的元素按最近的整数取整,即四舍五入;
fprintf(fidc,'end;');
fclose(fidc);
L=31*sin(2*pi*(N-1)/32)+32;
plot(L);
数据深度为1024,位宽为10位(跟DA芯片保持一致);如果要修改,只需要根据需求修改前面四行代码即可。注意:应用于ROM时,sinx.mif文件里的第一和第二行后面要加“;” 分号。
在这里我采用的是用波形数据生成器,如下图所示。
生成的数据部分如下所示。
5.验证总结
连接好TLC5615模块各个引脚,将程序全编译后把sof文件下载到开发板上,然后将输出信号接入示波器观察,得到下图。
前面我设置的频率控制字为85910,系统时钟为50M,根据计算得到输出信号频率f=85910*50_000_000/2^32=1000Hz=1KHz,我们可以看到示波器测量显示的频率为1KHz,由此证明实验验证成功。
基于TLC5615芯片的DDS信号发生器(FPGA)相关推荐
- 基于STC89C52RC芯片 高频DDS信号发生器AD9851信号源方波正弦波系统设计
[01]设计大致思路 一开始是使用按键进行频率输出数值的增加或者减少,后改进成使用EC11调节输出数值,使数值的输出更加顺滑流畅. [02]参考资料 链接:https://pan.baidu.com/ ...
- dds信号发生器 fpga实现
目录 原理 实现 原理 dds信号发生器:以rom为核心,外围控制输出地址,达到输出不同频率和相位或者幅度的结构.(这里不考虑ad转换和滤波) 这里以正弦信号为例,用专用软件或者matlab生成一组正 ...
- STM32单片机可变频率幅度DDS信号发生器正弦波三角波方波AD9833
实践制作DIY- GC0094-DDS信号发生器 一.功能说明: 基于STM32单片机设计-DDS信号发生器 功能介绍: 硬件组成:STM32F103C系列最小系统板 +LCD1602显示器+AD98 ...
- 基于FPGA的简易DDS信号发生器的设计(一)
写这篇文章的本意不是为了探讨AD9767怎么使用,因为9767的控制实在是太简单了,准备好数据直接输出即可,和网上大多数的并行DA输出基本上一模一样,更麻烦的反而是硬件方面.发文的原因是最近一位很细心 ...
- CASE_05 基于FPGA的DDS信号发生器
该系类博客序言和资源简介可浏览该博客:PREFACE FPGA经典案例序言 快速了解该系列博客的内容与可用 资源. 目录 1 简介 2 DDS原理与方案 2.1 方案一:基于CORD ...
- 基于FPGA的简易DDS信号发生器的设计与验证
基于FPGA的简易DDS信号发生器的设计与验证 一,理论介绍 补充:举例理解 二,代码实现 1,实验目标 2,MATLAB代码 3,verilog代码及实现思路 一,理论介绍 DDS 是直接数字式频率 ...
- 基于FPGA的DDS信号发生器
基于FPGA的DDS信号发生器 两个礼拜前就像写这个文档了,但是一直鸽到现在,主要是人摆了.还有个技术上的原因是,我想用串口屏显示波形,在串口调试助手上返回的数据是对的,但是发到串口屏上啥反应 ...
- 【FPGA实例】基于FPGA的DDS信号发生器设计
原文链接来源:www.runoob.com 基于FPGA的DDS信号发生器设计 DDS 原理 ------DDS(直接频率合成) 技术是根据奈奎斯特抽样定理及数字处理技术,把一系列的模拟信号进行不失真 ...
- 基于 FPGA 的便携式 DDS 信号发生器与示波器
基于 FPGA 的便携式 DDS 信号发生器与示波器 项目来源:2019年第三届全国大学生FPGA创新设计竞赛 一.设计概述 1.1 设计目的 利用赛灵思公司 A7 系列板卡 EG01.AD9226 ...
- 【小梅哥FPGA进阶教程】第十一章 四通道幅频相可调DDS信号发生器
十一.四通道幅频相可调DDS信号发生器 本文由山东大学研友袁卓贡献,特此感谢 实验目标 实现多通道可调信号发生器 实验平台 芯航线FPGA核心板.ADDA模块 实验现象 实现基于FPGA的多通道可调信 ...
最新文章
- ajax content download,关于ajax的content-download时间过慢问题的解决方案与思考
- 公有云和私有云,哪种是大势所趋?
- python3 __import__ 简介
- 【视频块文件系统不得不说的故事】VBFS文件系统简介
- 微信支付PKIX path building failed
- 代码测试:简单用户注册信息验证
- 如何去除Android应用中的广告
- 物联网大变局:LoRa 正式获批!
- C++箴言:多态基类中将析构函数声明为虚拟zz
- 一些经久不衰的linux 视频教程列表
- vb2008如何连接mysql_VB如何连接ACCESS数据库详解
- Java面向对象三大特性
- sqlite3 查询表结构信息
- 有没有可以干一辈子的工作?
- 人类一败涂地做图教程_人类一败涂地皮肤怎么弄 人类一败涂地皮肤制作教程...
- CANoe 入门 _CAPL编程
- 湘湘学习之旅 越努力 越幸运
- Real-SR算法,实现真实图像超高分辨率处理
- 第一人称控制器-自己写哒=3= 噗噗~~
- 采集时如何有效地防止被网站屏蔽IP
热门文章
- vue项目打包部署到与后台同一服务器上
- 软件验收测试合格的标准
- 台式计算机没有声音怎么办,台式机没有声音怎么办_台式机声音修复方法-太平洋IT百科...
- cp: omitting directory
- thinkphp 运行机制和优缺点
- maxima得到简化行阶梯矩阵(RREF)
- IJCAI‘22 推荐系统论文梳理
- 名字里有计算机里没有的字体大小,公安13000字的庞大字库打不出这些字 五市民名字让电脑“犯晕”...
- matlab神经网络 股票预测模型,如何用MATLAB的BP神经网络做股票预测
- StrandHogg漏洞修复