news 2026/4/23 16:43:25

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/4/23 10:50:19

【专家级教程】将Open-AutoGLM部署到手机本地的6种方案对比与最优选择

第一章&#xff1a;智谱Open-AutoGLM手机本地部署概述智谱AI推出的Open-AutoGLM是一款面向自动化任务的大语言模型&#xff0c;支持在移动端完成推理与轻量化运行。通过本地化部署&#xff0c;用户可在无网络依赖的环境下使用模型进行文本生成、指令解析和智能问答等操作&#…

作者头像 李华
网站建设 2026/4/23 10:47:32

如何用TensorFlow分析MOOC课程学习行为?

如何用TensorFlow分析MOOC课程学习行为&#xff1f; 在在线教育平台日均产生数亿条用户行为日志的今天&#xff0c;一个看似简单的“播放视频”或“提交测验”动作背后&#xff0c;可能隐藏着学生即将放弃课程的关键信号。如何从这些纷繁复杂的数据流中捕捉学习者的心理轨迹和行…

作者头像 李华
网站建设 2026/4/23 12:20:50

基于模型预测控制的无人艇分布式编队协同控制;无人船/艇编队协同控制;多智能体;保证仿真程序可运行

基于模型预测控制的无人艇分布式编队协同控制&#xff1b;无人船/艇编队协同控制&#xff1b;多智能体&#xff1b;保证仿真程序可运行&#xff1b;凌晨三点的水槽里漂浮着半杯冷掉的咖啡&#xff0c;屏幕上跳动的MATLAB代码突然卡在了第47行。我盯着那个报错的QP求解器&#x…

作者头像 李华
网站建设 2026/4/23 12:25:38

如何用TensorFlow发现潜在KOL?

如何用 TensorFlow 发现潜在 KOL&#xff1f; 在内容爆炸的时代&#xff0c;每天都有成千上万的新创作者涌入社交媒体平台。品牌方不再满足于只与头部网红合作——他们更想提前锁定那些“即将爆红”的潜力股。但问题是&#xff1a;你怎么知道一个粉丝刚过万的博主&#xff0c;三…

作者头像 李华
网站建设 2026/4/23 12:21:57

从零搭建到高并发支撑,Open-AutoGLM云主机全链路解析,开发者必看

第一章&#xff1a;Open-AutoGLM云主机概述Open-AutoGLM云主机是一种面向大语言模型推理与自动化任务的高性能云计算实例&#xff0c;专为运行AutoGLM系列开源模型优化设计。该云主机集成了GPU加速、高效内存管理与弹性扩展能力&#xff0c;适用于自然语言处理、智能对话系统及…

作者头像 李华
网站建设 2026/4/23 12:21:57

如何用TensorFlow提升内容创作效率?

如何用TensorFlow提升内容创作效率&#xff1f; 在新闻编辑部、短视频工厂和电商文案团队中&#xff0c;每天都有成千上万的内容需要生成、分类与优化。人工处理不仅成本高昂&#xff0c;还难以应对实时性和个性化需求。于是越来越多企业开始将AI引入内容生产流程——但问题随之…

作者头像 李华