用FPGA+DAC输出“心”形波

news2024/10/7 8:27:02

1.前言

  之前在做信号处理的时候整了一下活,用FPGA+DAC(数模转换器),输出了一个爱心形状的波形,今天整理资料的时候偶然发现了他,现在把他分享出来。当时将DAC的输出接在示波器上显示如下图所示:

2.原理

  爱心波形的函数表达式如下:
f ( x ) = x 2 3 + 1 3 e ( π − x 2 ) 1 2 sin ⁡ ( a π x ) f(x)=x^\frac{2}{3} + \frac{1}{3}e(\pi-x^2)^\frac{1}{2}\sin(a\pi x) f(x)=x32+31e(πx2)21sin(x)
  其中,e为自然对数,a为参数 π \pi π为圆周率。首先在Matlab当中,画出上述函数的波形,不断调整a的值,使其更逼近我们想要的“爱心”形状。经过试验,作者觉得 a = 10 a=10 a=10时比较像,图像如下:


  然后将图像进行采样和量化,存为coe文件,导入到FPGA的ROM中:
  (1)打开IP Catalog:

  (2)IP核选择Block Memory Generator:

  (3)选择Single Port ROM,即单口ROM:

  (4)修改位宽和深度与coe文件保持一致,选择端口始终使能:

  (5)添加coe文件:

  IP配置核配置完成点击确定即可。仿真效果如下:

3.DAC

  当时我使用的是ADI的AD9122进行输出,下面讲一下AD9122的电路设计:

3.1电源

  单板的供电方式是通过一个DC-DC的电源接头输入一个5.0V的直流电压,经过一个大电容滤波后,再分别由相应的电源芯片降压,产生AVDD33(3.3V)、DVDD18((1.8V)、CVDD18(1.8V)、LOVDD(1.8V),这些电源在经过滤波后给相应部件供电。

电源设计原理图

3.2低通滤波器

  为了保证输出波形更平滑,需要在输出端口接一个低通滤波器。这里采用五阶巴特沃斯低通滤波器,其转折频率为300MHz。

低通滤波器原理图

3.3 AD9122

AD9122外围电路原理图

AD9122 PCB布局

AD9122硬件实物图

3.4 通过串行端口SPI配置AD9122功能寄存器

3.4.1 SPI协议简述

  SPI端口由三个引脚组成:串行时钟引脚(SCLK)、串行数据输入/输出引脚(SDIO)和片选引脚(CSB),这被称为三线模式。一些芯片把串行数据输出引脚(SDO)作为可选引脚,如果包含它,它仅用于从设备读取数据,一般地,为了减少引脚数量,大多数芯片都省略了这个引脚。

SPI通信三线模式单设备控制

  (1)串行时钟(SCLK):SCLK用于同步串行接口读取和写入。输入数据记录在该时钟的上升沿,输出数据传输记录在下降沿。

  (2)串行数据输入/输出(SDIO):SDIO引脚是一个双重用途的引脚。这个引脚可作为是输入或输出,具体取决于发送的指令(读或写)在时序帧中的相对位置(指令或数据相位)。在写或读的第一阶段,这个引脚作为输入传递信息到内部状态机。如果确定该命令为读命令,状态机将此引脚(SDIO)更改为输出,然后将数据传回控制器。如果设备包含一个SDO引脚,并且配置寄存器使能,那么SDO将变为串行数据输出端口,而SDIO只作为串行数据输入端口。

  (3)片选信号(CSB):CSB是一个有效的低电平控制,用于控制读写周期。当该线路为低电平时,将选择该设备,并处理SCLK和SDIO线路上的信息。如果此引脚为高电平,器件会忽略SCLK和SDIO线路上的任何信息。通过这种方式,多个设备可以连接到SPI端口。如果只连接了一个器件,可以选择将CSB线拉低,使该器件永久有效。

3.4.2 AD9122串行端口操作

  当CS引脚上的电平由逻辑高电平到逻辑低电平,串行端口时序将复位至指令周期的初始状态。从这个状态开始,接下来的前八个SCLK上升沿代表当前输入输出操作的指令位,后八个SCLK上升沿进行数据的传输。也就是说,控制器与AD9122的通信周期分为两个阶段:阶段1是指令周期(将指令字节写入器件),与前八个SCLK上升沿一致,指令字节定义了即将到来的数据传输是读还是写,以及数据传输第一个字节的起始寄存器地址;通信周期的第2阶段是指令字节向串行端口控制器提供有关数据传输周期的信息,向寄存器写入数据,改变寄存器的值,来配置自己所需要的功能,或者对寄存器的值进行访问,以判断器件此刻的工作状态。

串行端口接口时序

  指令字节的第7位,决定了在指令字节写入后是进行读数据传输还是写数据传输。逻辑1表示读操作,逻辑0表示写操作。A6至A0是指令字节的位6至位0,决定在通信周期的数据传输部分访问的寄存器的地址。

串行端口指令字节

  ADI的数模转换器(DAC)和模数转换器(ADC)使用起来都差别不大,基本都可以使用SPI去读写其寄存器。我这里用的是AD9122,你搞明白了,只要会看datasheet也能很快上手。

代码

获取代码和工程请点此链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1637795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黄金投资新手指南:投资现货黄金怎样开户?

在金融市场中,黄金一直是备受关注的投资品种。近年来,随着全球经济的波动和不确定性增加,越来越多的投资者开始关注现货黄金投资。对于黄金投资新手来说,如何开户进行现货黄金投资是一个非常重要的问题。 让我们明确一下什么是现货…

cnPuTTY 0.81.0.1—PuTTY Release 0.81中文版本简单说明~~

2024-04-15 官方发布PuTTY 0.81本次发布主要修复了使用521位ECDSA密钥时的一个严重漏洞(CVE-2024-31497)。 如果您使用521位ECDSA私钥与任何早期版本的PuTTY组合,请考虑私钥已泄露的问题。强烈建议从相关文件中删除公钥,并使用新版本程序重新生成密钥对。…

鸿蒙launcher浅析

鸿蒙launcher浅析 鸿蒙launcher源码下载鸿蒙launcher模块launcher和普通的应用ui展示的区别 鸿蒙launcher源码下载 下载地址如下: https://gitee.com/openharmony/applications_launcher 鸿蒙launcher模块 下载页面已经有相关文件结构的介绍了 使用鸿蒙编辑器D…

3.电源模块趋旺盛,铁路最需可靠性

电源模块趋旺盛,铁路最需可靠性 电源设计需要很高的专业技能。越来越多的电子设备制造商开始采用电源模块来加快设计周期。通信、铁路、电力和军工领域,对电源模块需求越来越旺盛。 通信网络基建设备市场潜力巨大。应市场要求,现代的通信系…

基于Linux C++多线程服务器 + Qt上位机开发 + STM32 + 8266WIFI的智慧无人超市

前言 针对传统超市购物车结账排队时间长、付款效率低的问题,提出了一种更符合现代社会人们购物方式-基于RFID的自助收银系统。习惯了快节奏生活的人们都会选择自助收银机结账,理由显而易见:自助收银机结账很方便,几乎不用排队&am…

【java9】java9新特性之改进进程管理API

Java9在改进进程管理API方面,主要的更新在于引入了ProcessHandle接口,该接口代表了一个本地进程,并提供了许多与进程相关的信息和操作。 通过ProcessHandle接口,开发者可以获取进程的ID、父进程、子进程、进程命令行参数、进程状…

QT——简易计算机(从0开始)

目录 一、题目描述: 二、创建工程: 三、UI界面设计: 四、程序编写: 五、总程序: 六、windows可执行文件 七、实现效果 一、题目描述: 创建一个简单的图形用户界面(GUI),包括一个文本框用于显示计算结…

ctfshow-web入门-102

这个题我想记录一下,主要是这个方法属实是有点惊艳到我了。故而进行记录,也为了方便大家阅读理解。 看题目,根据题目我写一下我的分析: $_POST传入一个v1,$_GET传入一个v2,一个v3。 赋值符号 优先级高于…

谷粒商城实战(021 业务-订单模块-页面设计)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第262p-第p266的内容 介绍 所需的页面 设计页面 新增域名 路径带/static的都到/usr/share/nginx/html文件夹下去找 其他动态请求的都负载…

2024年第二十一届 五一杯 (C题)大学生数学建模挑战赛 | 多目标优化问题,深度学习分析 | 数学建模完整代码解析

DeepVisionary 每日深度学习前沿科技推送&顶会论文&数学建模与科技信息前沿资讯分享,与你一起了解前沿科技知识! 本次DeepVisionary带来的是五一杯的详细解读: 完整内容可以在文章末尾全文免费领取&阅读! 首先&…

Mac M2 本地下载 Xinference

想要在Mac M2 上部署一个本地的模型。看到了Xinference 这个工具 一、Xorbits Inference 是什么 Xorbits Inference(Xinference)是一个性能强大且功能全面的分布式推理框架。可用于大语言模型(LLM),语音识别模型&…

【已解决】pandas读excel中长数字变成科学计数法的问题

pandas 读excel中的长数字时,即使excel中已经设置为文本,读进df后也会自动变成科学计数法。 在日常的数据分析和处理工作中,Excel和pandas是数据分析师们不可或缺的得力助手。然而,在使用pandas读取Excel文件时,我们有…

基于残差神经网络的汉字识别系统+pyqt前段界面设计

研究内容: 中文汉字识别是一项具有挑战性的任务,涉及到对中文字符的准确分类。在这个项目中,目标是构建一个能够准确识别中文汉字的系统。这个任务涉及到数据集的收集、预处理、模型训练和评估等步骤。尝试了使用残差神经网络(ResNet&#x…

Rust Rocket创建第一个hello world的Web程序 Rust Rocket开发常用网址和Rust常用命令

一、Rust Rocket简介 Rust Rocket 是一个用 Rust 语言编写的 Web 应用框架,它结合了 Rust 的安全性和性能优势,以及 Web 开发的便利性。以下是 Rust Rocket 框架的一些优点: 安全性:Rust 是一种注重安全性的编程语言,…

【前端探索者:从零到精通的Web前端实战专栏】

🚀 在这个代码编织梦想的时代,Web前端作为互联网的颜值担当,正以日新月异的速度重塑数字世界。想要在前端江湖里游刃有余,你需要的不仅仅是一把锋利的剑,更是一套完整的武功秘籍!今天,我们就为你揭开【Web前端】专栏的神秘面纱,带你从菜鸟到大神,一飞冲天! 📚 专栏…

Text-to-SQL小白入门(12)Awesome-Text2SQL开源项目star破1000

项目介绍 项目地址 23年9月份刚开源这个项目,大半年过去了,star数终于破1000啦,决定在知乎更新一下内容,看看内容变化,知乎有上当时项目介绍的链接:追光者:Text-to-SQL小白入门(六&…

【Qt QML】Frame组件

Frame(框架)包含在: import QtQuick.Controls继承自Pane控件。用于在可视框架内布局一组逻辑控件。简单来说就是用来包裹和突出显示其他可视元素。Frame不提供自己的布局,但需要自己对元素位置进行设置和定位,例如通过…

Spring Boot Admin

概述 Spirng Boot Admin 登录页面 Spring Boot Admin是一个用于管理Spring Boot应用的监控工具,它允许你查看和管理多个Spring Boot应用实例。用于应用信息进行界面化的展示,常常辅助我们开发人员快速查看服务运行状态在微服务架构中,Spring Boot Admin通…

【linux】进程(深入理解linux进程状态)

开始之前先说一个与本文无关的小知识,chdir命令可以更改当前进程的工作目录哦。 目录 linux具体进程状态:R && S:T && t:D:僵尸进程 && 孤儿进程: OS的理论线:运行&…

JMeter性能压测脚本录制

第一步:电脑打开控制面板设置代理服务器 第二步:jmeter的测试计划添加一个HTTP(S)脚本记录器 在脚本记录器里配置好信息,然后保存为脚本文件(.*表示限定) 此方框内容为项目地址(可改…