news 2026/6/15 16:49:32

SPI接口 DAC控制器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SPI接口 DAC控制器

关于频率与时间的关系:

一个 100 MHz 的时钟信号,其周期T = 1 / (100 × 10⁶) = 10 × 10⁻⁹ 秒 = 10 ns

一个 1 GHz(1000 MHz)的时钟信号,其周期T = 1 / (1 × 10⁹) = 1 ns

频率 (MHz) 和 周期时间 (ns) 在数值上大致互为“倒数”。

快速换算公式:
周期 (ns) ≈ 1000 / 频率 (MHz)

例如:100 MHz -> 周期 ≈ 1000 / 100 = 10 ns。

例如:250 MHz -> 周期 ≈ 1000 / 250 = 4 ns。

例如:2 GHz (2000 MHz) -> 周期 ≈ 1000 / 2000 = 0.5 ns。

DAC芯片型号为AD5324;属于慢速DAC 转换芯片,其转换速率 < 1Mhz;

DAC的作用是将输入的二进制数字信号转换成模拟信号,以电压或电流的形式输出。

AD5324可以将输入的二进制数字信号转换成对应的电压值,并将电压输入到其中一个寄存器中,一共有4个寄存器;

FPGA与AD5324芯片通信接口:DIN、SCLK、SYNC;

DIN:输入数据,目的将16位二进制数字组成的数字串输入到DAC 的移位寄存器;

SCLK:同步时钟信号,数据在SCLK 的下降沿时锁存到DAC 的移位寄存器;

SYNC:同步信号,低有效;

接口时序:

规定SCLK 周期最小为 40ns,把SCLK的周期设置为140ns,上电时,保持SYNC为高电平,需要传输数据时,把SCLK拉高,先保持SYNC高电平时间至少80ns,设置保持一个SCLK周期的时间为高电平后,再把SYNC信号拉低,同时SCLK开始震荡计数,然后在16个SCLK的下降沿对应DIN上每个16位数据的中心位置,16个SCLK周期过后,SYNC和SCLK同时拉高并保持。

寄存器的位宽为16位(4个控制位和12位数据位),在时钟SCLK控制下,数据以16位字的形式输入到设备,最高位优先;

由最高两位(A1、A0)决定存入哪个寄存器(A\B\C\D 四个寄存器),

寄存器(A\B\C\D)各自对应二进制为00、01、10、11;

另外,PD位决定部件处于正常或下电模式,0为下电模式,1为正常模式。LDAC位控制何时更新DAC寄存器和输出,0表示更新所有寄存器的数据,1表示只更新寻址寄存器的数据,DAC寄存器的内容没有变化。

由PD 和 LDAC共同决定DAC 的工作模式;

其中,sync_cnt计数是为了SYNC高电平时间至少满足80ns;之后控制sclk开始震荡计数;

在16个sclk周期后,SYNC和SCLK同时拉高保持;

由串口助手下发三个字节的指令,控制DAC 产生对应数值的电压;

第一字节为AA,帧头,使得DAC进入准备状态,防止串口产生的意外数据进行干扰;

第二字节为选择寄存器指令,A1和A0;PD和LDAC固定为1和0,以及DAC值的高4bit;

第二字节的低4bit和第三字节的全部位组成12位的DAC 数据位;

UART帧协议规范:

帧字节编号

0

帧头 0xAA

1

{A1,A0,PD,LDAC,DAC[11:8]}

A1A0:通道选择 第7:6两位;

PD:断电设置 第5位

LDAC:更新DAC值 第4位

DAC[11:8] DAC数据 第3:0位

2

DAC[7:0]

输出的电压VOUT与输入的12位数据位的数据D公式:

VOUT = VREF * D / 2^N

VREF:参考电压;2.5v;

N:DAC分辨率,AD5324的分辨率为12位;

因为由 A1和A0两位可以分别选择四个通道的其中一个;

假如:在A 通道产生一个1.6V的电压,那么A1和A0 设置为00;PD和LDAC固定为1,0;

12位的数据位根据公式:1.6 = 2.5 * D /2^12; 计算可得 D = 2621.44 ≈2621;

转换为二进制1010_0011_1101

那么,串口发送第一个字节为AA指令;

第二个字节高4位为0010;对应A1,A0,PD,LDAC;

第二个字节低4位为1010;对应数据位的最高4位;

第三字节为0011_1101;

将3个字节转换为十六进制:AA,2A,3D;

工程实现架构:

整个实现先接收串口下发的单比特数据,转换为8比特并行数据,同时根据UART协议找到帧头0xAA,对齐帧头后,将控制比特和数据比特进行拼接为16位数据,再根据SPI 接口的时序,将16位数据转换为单比特数据输出给ADC芯片;

串口顺序下发指令,每接收到一个串口数据有效标志就按照功能描述把串口输出的有效数据拼接到一个16位的移位寄存器中,当三个字节指令帧发送完成后,产生一个结束标志。之后把这个16位的寄存器值赋值给 Chn_data,同步产生Chn_valid标志,给到 Dac_ctrl;

设计串口接收模块:

根据串口协议:

空闲位(1到0跳变)+ 8位数据位 + 停止位

串口接收模块:

对接收到的串口数据进行打拍,消除亚稳态;

并通过找寻下降沿,找到串口传输的起始位;

该 rx_flga标志了串口的8位数据位的有效标志;

在串口数据有效阶段,循环计数cnt_baud,并在计数值的中间进行比特累加,

同时进行接收数据的移位操作;

通过串口,每输入8位,进行拼接, 拼接成 8 比特的并行数据进行一次输出;

每移位8次,输出一个完整的8比特数据;

串口命令解析模块:

假如:在A 通道产生一个1.6V的电压,那么A1和A0 设置为00;PD和LDAC固定为1,0;

12位的数据位根据公式:1.6 = 2.5 * D /2^12; 计算可得 D = 2621.44 ≈2621;

转换为二进制1010_0011_1101

那么,串口发送第一个字节为AA指令;

第二个字节高4位为0010;对应A1,A0,PD,LDAC;

第二个字节低4位为1010;对应数据位的最高4位;

第三字节为0011_1101;

将3个字节转换为十六进制:AA,2A,3D;

根据以上,一共发送3个字节,第一字节为AA,通过cnt 计数,0~2,对应帧字节编号;

根据串口的帧协议:

帧字节编号

0

帧头 0xAA

1

{A1,A0,PD,LDAC,DAC[11:8]}

A1A0:通道选择 第7:6两位;

PD:断电设置 第5位

LDAC:更新DAC值 第4位

DAC[11:8] DAC数据 第3:0位

2

DAC[7:0]

将控制数据和有效数据进行拼接:

同时产生结束标志:

DAC控制模块:

由串口接收数据,最终通过spi 接口发送给AD5324,控制该ADC芯片将数据转换为模拟信号输出;

设计状态机,IDLE为初始态、SYNC为等待SYNC信号拉高一定周期后再拉低;

SYNC_SHIFT:移位寄存器输出,并行转串行输出;

计满一个 SCK 时钟周期,之后跳转下一状态:

后续根据 div_cnt 和 sync_shift_cnt 产生 SPI接口的控制时序;

产生SPI接口的SCK时钟信号:

产生SPI接口的片选信号,低有效:

产生SPI 接口的sdi 单比特数据输出:

仿真激励:

给rx赋值,查看SPI接口的控制信号;

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:57:34

Java计算机毕设之基于SpringBoot+Web的影视资源管理系统设计与实现基于Web的影视资源管理系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/13 23:47:19

揭秘Open-AutoGLM云主机底层架构:GPU利用率提升3倍的秘密

第一章&#xff1a;揭秘Open-AutoGLM云主机底层架构&#xff1a;GPU利用率提升3倍的秘密Open-AutoGLM云主机通过重构底层计算调度架构&#xff0c;实现了GPU资源利用率相较传统部署模式提升近3倍。其核心在于动态负载感知与异构内存管理的深度融合&#xff0c;打破了以往GPU空转…

作者头像 李华
网站建设 2026/6/15 14:03:03

如何用TensorFlow优化定价精算模型?

如何用TensorFlow优化定价精算模型&#xff1f; 在金融、保险和零售等行业&#xff0c;一个看似简单的数字——价格&#xff0c;背后往往隐藏着复杂的博弈。它不仅要覆盖成本、应对竞争&#xff0c;还要精准捕捉客户心理与市场波动。传统定价依赖经验公式和线性回归模型&#x…

作者头像 李华
网站建设 2026/6/10 3:33:58

Docker企业级应用-生产级 MySQL8 多实例(3306/3307)全生命周期管理手册

文章目录 生产级MySQL8多实例(3306/3307)全生命周期管理手册 文档概述 1.1 文档目的 1.2 适用场景 1.3 核心设计原则 1 部署规划(生产级标准) 1.1 资源规划 1.2 部署文件结构 2 部署实施 2.1 核心配置编写 2.1.1 docker-compose.yml(生产级完整版) 2.1.2 自定义配置文件(…

作者头像 李华
网站建设 2026/6/15 11:46:15

TensorFlow在新闻摘要自动生成中的准确率评测

TensorFlow在新闻摘要自动生成中的准确率评测 在信息洪流席卷每一个数字终端的今天&#xff0c;用户每天面对成千上万条新闻推送。如何从一篇长达数千字的报道中快速提炼出核心事实&#xff1f;这不仅是读者的需求&#xff0c;更是媒体平台提升内容分发效率的关键挑战。自动摘…

作者头像 李华
网站建设 2026/6/15 11:51:09

如何用TensorFlow优化产品描述文案?

如何用 TensorFlow 优化产品描述文案&#xff1f; 在电商内容运营的日常中&#xff0c;一个看似不起眼却影响巨大的环节正悄然发生变革&#xff1a;产品描述的撰写。过去&#xff0c;一支文案团队可能需要数小时甚至数天来打磨一款新手机或家电的宣传语&#xff1b;而今天&…

作者头像 李华