高精度DAC功能板

12 篇文章 32 订阅
3 篇文章 0 订阅


前言

DAC8563是TI的低功耗、电压输出、双通道、16位数据转换器(DAC)。其包括一个2.5V,4ppm/℃内部基准,提供2.5V或者5V的满量程输出电压范围。内部基准具有 ±5mV 的初始精度,并且可以提供或吸收20 mA电流。这些器件是线性的,可提供出色的线性度并最大限度地减少不需要的代码间瞬态电压(毛刺)。它们使用以高达 50 MHz 的时钟速率运行的多功能三线串行接口。该接口与标准 SPI、QSPI、Microwire 和数字信号处理器 (DSP) 等接口兼容。 DAC8563 器件包含一个上电复位电路,可确保 DAC 输出上电并保持在零电平,直到向器件写入有效代码,具有断电功能,可将 5 V 时的典型电流消耗降低至 550 nA。低功耗、内部基准和小尺寸使这些器件成为便携式电池供电设备的理想选择。


1 DAC8563硬件设计

1.1 DAC8563主要参数

  1. 供电电压:2.7~5.5V;
  2. 分辨率:16bit,双通道;
  3. 通讯接口:3线SPI串行通讯,速率最高至50MHz,(有MOSI/CLK/SYNC)
  4. 内部自带2.5V参考电压。使用内部参考电压时,DAC通道输出电压根据增益设置的不同可输出0~ 2.5V(增益为1)或0~ 5V(增益为2,默认)

在这里插入图片描述

1.2 DAC8563引脚功能

DAC8563主要有两种封装:
在这里插入图片描述
各个引脚的功能说明如下:

  • AVDD:供电范围2.7-5.5V;
  • CLR:异步清除输入,下降沿有效,触发后,DAC8562输出最低电压值,DAC8563输出中间值。用户写入操作的的第24个时钟下降沿将退出清除模式,激活清除模式将终止写操作;
  • DIN:串行数据输入,每个时钟下降沿将24bit数据写到输入移位寄存器;
  • GND:接地端;
  • LDAC:同步模式下,数据更新发生在第24个SCLK周期的下降沿,之后伴随着SYNC的下降沿。 这种同步更新不需要LDAC,此时LDAC必须可靠接地,或者通过命令发送到设备使其保持低电平。异步模式下,LDAC是低电平触发,用于同步DAC更新,可以编写多个单通道命令进行设置,然后在LDAC引脚上产生一个下降沿将同步更新DAC输出寄存器;
  • SCLK:时钟输入端,最高支持50MHz;
  • SYNC (片选):低电平有效,当SYNC变为低电平时,它使能输入移位寄存器,并且数据采样在随后的时钟下降沿。 DAC输出在第24个时钟下降沿之后更新。 如果SYNC在第23个时钟沿之前变高,SYNC的上升沿将充当中断,此次的写入会被无效;
  • VoutA:模拟电压输出通道A;
  • VoutB:模拟电压输出通道B;
  • Vrefin/Vrefout:双向电压参考引脚,可以使用外部电压作为内部电压基准,也可以使用内部电压作为基准,此时该引脚是输出2.5V。

1.3 DAC8563输出电压计算公式

DAC856X的计算公式如下:
在这里插入图片描述

  • DIN:配置DAC856X数据输出寄存器的数值,范围0 到2^16 – 1,即0到65535;
  • 2^n:对于DAC8563来说,由于分辨率为16位,故n是16;
  • VREF:如果使用内部参考电压,那么此数值是2.5V,如果使用外部参考电压,由该引脚的电压决定,但是值得说明的是,最大的输出不应超过AVDD;
  • Gain:增益设置。禁止内部电压基准后,默认增益是1。如果使能内部电压基准后,默认增益是2。具体增益是1还是2,可以通过DAC8563的寄存器设置。

1.4 DAC8563时序图

DAC856X的时序图如下:

在这里插入图片描述
其中,必要的延迟时间如下:
在这里插入图片描述
值得注意的是上图中的两个参数尤其重要:

  • t4:每传输24bit数据后,SYNC要保持一段时间的高电平,DAC8563要求至少要80ns;
  • t5:SYNC低电平有效到SCLK第1个下降沿信号的时间,最小值13ns。;

1.5 DAC8563寄存器配置

在这里插入图片描述
整个写数据为24位,其中位23-22可以不用管,位21-16为主要的命令数据,低16位为具体的数据。

1.6 DAC8563后级调理电路

对于有些应用场合,0 ~ 5V的输出范围往往是不够用的,因此加入后级电路是有必要的。根据官方给的例子。可以使用一个高精度运放设计得到具有正负电压或者多量程输出的DAC功能板。
在这里插入图片描述
在这里插入图片描述

1.7 DAC8563硬件设计还需要注意的地方

在这里插入图片描述
由上图可以看到,Vout的输出电压范围为-0.3 ~ AVDD+0.3。因此,假如DAC8563的供电电压改变为3.3V,那么写入65535的数据,最多只能输出3.3V,但是输入32768,依旧能输出2.5V。
在这里插入图片描述
另外,控制信号的高电平与AVDD也有关系,也就是输入的高电平为0.7*AVDD。这对于绝大多数ARM以及DSP都是不友好的,因为引脚电平的输出电压往往只有3.3V,而AVDD通常使用要得到5V的满偏量程至少要3.5V的高电平。当然,设计者也可以使用内部增益为1,也就是量程为2.5V,这样是能得到线性的输出的。
由于笔者是在设计好后级电路之后才发现了这个问题,因此只能硬着头皮找方法。对于STM32这类芯片可以使用开漏输出,外部上拉到AVDD即可,但是如DSP类的芯片却没有这个功能。因此也可以使用SPI专用的电平转换器,但是转换器带来的响应延迟造成多大的影响也不可知。最终,在尝试的结果下,发现只要尽量减少信号线的距离就可以尽可能提高DAC信号端的电压值,保证3.3V的单片机高电平也是有效的。


2 DAC8563软件设计

SPI的使用一般有软件IO模拟时序,以及硬件SPI两种办法,前者在复杂的时序中具有简单,灵活的优势,不过在速度上要逊色硬件SPI不少。

2.1 SPI总线配置

spi总线配置通过如下函数实现:

    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;		//设置SPI工作模式:设置为主SPI
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;		//设置SPI的数据大小:SPI发送接收8位帧结构
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;		//串行同步时钟的空闲状态为高电平
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;	//串行同步时钟的第一个跳变沿(上升或下降)数据被采样
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;		//NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;		//定义波特率预分频的值:波特率预分频值为256
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;	//指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
    SPI_InitStructure.SPI_CRCPolynomial = 7;	//CRC值计算的多项式
    SPI_Init(SPI1, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器

    SPI_Cmd(SPI1, ENABLE); //使能SPI外设

    SPI1_ReadWriteByte(0xff);//启动传输

这里配置了一次发送的数据位为8个,这样只要发送三次8位数据就可以组成一个24位的数据。同时配置先发高位,即MSB。极性配置为高电平,并在第一个跳变沿采样数据,这也是根据DAC8563的时序得到的。

2.2 SPI发送配置

void Dac8563_reg_write(u8 cmd,u16 dat)   
{   
    DAC8563_CS=0;                        //使能器件
    delay_us(1);
	SPI1_ReadWriteByte(cmd);            //发送写取状态寄存器命令    
	SPI1_ReadWriteByte(dat>>8);                 //写入一个字节  
    SPI1_ReadWriteByte((dat) );
    delay_us(1);
	DAC8563_CS=1;                            //取消片选    	      
}

通过调用SPI1_ReadWriteByte读写函数,即可实现8位数据的发送,这里值得注意的是要发送的数据应该处于低八位。另外可以忽略SPI1_ReadWriteByte中的接收函数。第一个延时主要是为了保证低电平的时间与SPI的下降沿时间差,不过考虑到SPI的速度如果设置的比较慢,不是20M往上(估计),可以忽略,因为本身SPI的下降沿之间也有一段时间,这段时间与时钟的频率有关。第二个延时是为了保证SPI的数据发送结束的,因为SPI的数据虽然发送完,但是形成电平也需要时间,所以需要等待一会,同样,如果SPI的频率很高,那么这个延时时间也可以减小。

2.3 DAC8563初始化

void DAC8563_Init(void)
{
    SPI1_Init();		   			        //初始化SPI
	SPI1_SetSpeed(SPI_BaudRatePrescaler_8); //设置时钟频率
    DAC8563_CS=1; 
    delay_us(1);    
    Dac8563_reg_write(0x20,0x0003);         //上电 
	Dac8563_reg_write(0x30,0x0003);         //不使能LDAC
	DAC_OutAB(32687,32687);                 //设置输出中间电压
    Dac8563_reg_write(0x38,0x0001);         //配置内部参考电压,增益为2
}

可以看到DAC的初始化主要分为三个步骤,需要写入三次数据。另外值得说明的是,在初始化中对使能引脚置高是为了使得第一次写数据时高电平能够保持一定的时间,这也是时序中要求的。

2.4 DAC8563更新输出

void DAC_OutAB(u16 dat_a, u16 dat_b)
{
	Dac8563_reg_write(0x18, dat_a);
	Dac8563_reg_write(0x19, dat_b);
}

通过更新对应寄存器的数据可以更新输出。本设计没有使用CLR及LDAC功能。


3 成果展示

3.1 硬件

3.2 测试波形

上图为DAC输出0~5V的动态波形。可以看到满量程的动态响应时间仅7us左右。 这里黄色的波形使用的是OUTA,量程为0~10V,绿色波形为OUTB量程为-10 ~ 10V。可以看到满量程的动态响应时间经过运放后为27us。可以满足绝大多数的应用。

说在后面

这个小项目的设计资料我已上传至硬创社(项目链接),有需要的各位自取。

  • 0
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
在PLC和DCS系统中,模拟输出电流和电压提供关键的控制和驱动功能。Carmel (MAXREFDES18#)参考设计提供满足工业控制要求的灵活、可编程模拟输出。 16位精度模拟电流/电压输出系统实物展示: MAX5316 16位精度数/模转换器 (DAC)的带缓冲电压输出驱动MAX15500可编程模拟输出调理器的输入,后者提供各种错误报告。MAX6126超精度电压基准为DAC和输出调理器提供基准。MAX14850实现子系统和系统控制器之间数据通信的电隔离。子系统也可选择使用MAX13253变压器驱动器和MAX1659及MAX1735低压差(LDO)线性稳压器,从而集成隔离、稳压电源。 子系统具有全部典型的双极性电流和电压输出范围以及相应子集,总不可调误差(TUE)小于0.105%。电路也提供短路和过流保护、开路检测、掉电检测、过热保护,所有这些对工业应用都至关重要。灵活的上电选项使Carmel可理想用于强大的工业控制系统。 系统设计框图: 特性应用 可编程精度电流/电压输出 电流输出驱动0至1kΩ 电压输出驱动低至1kΩ的负载 齐全的错误报告 隔离电源和数据 小尺寸印刷电路(PCB) 器件驱动器 C语言源代码 Pmod:trade_mark:兼容规格 PLC DCS 分布式I/O 嵌入式系统 工业控制和自动化 工业传感器 附件内容截图: 16位精度模拟电流/电压输出 电路 PCB 截图: 更多详细资料说明:https://www.maximintegrated.com/cn/design/referenc... Carmel (MAXREFDES18#) LX9 Quick Start Guide Carmel (MAXREFDES18#) ZedBoard Quick Start Guide

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LEODWL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值