AD5676R是低功耗、8通道、16位缓冲电压输出数模转换器(DAC)。
它包括一个2.5 V、2 ppm/°C内部基准电压源(默认使能)和一个增益选择引脚,提供2.5 V(增益= 1)或5 V(增益= 2)的满量程输出。
功能框图
引脚
SYNC低电平有效控制输入。这是输入数据的帧同步信号。当同步开始时低,数据在接下来 24 个时钟的下降沿传输
SCLK串行时钟输入。数据在串行时钟输入的下降沿被记录到输入移位寄存器中。数据传输速率高达 50 MHz。
SDI串行数据输入。该器件有一个 24 位输入移位寄存器。数据被记录到寄存器上串行时钟输入的下降沿。
GAIN跨度设置销。当该引脚连接至 GND 时,所有八个 DAC 输出的跨度为 0 V 至 VREF。如果该引脚是与 VLOGIC 相连,所有八个 DAC 均输出范围为 0 V 至 2 × VREF。
RSTSEL上电复位引脚。将此引脚连接至 GND,将所有八个 DAC 通电至零电平。将此引脚连接至 VLOGIC将所有八个 DAC 通电至中档
LDAC加载 DAC。 LDAC 以异步和同步两种模式运行。将该引脚脉冲拉低允许任何或全部的DAC寄存器被更新,如果输入寄存器有新数据,这允许同时地更新所有 DAC 输出。该引脚也可以永久拉低
SDO串行数据输出。该引脚可用于将多个设备以菊花链方式连接在一起,也可用于回过头再读。串行数据在SCLK上升沿传输,下降沿有效
RESET异步复位输入。 RESET 输入对下降沿敏感。当RESET为低电平时,所有LDAC脉冲都是被忽略。当 RESET 被激活时,输入寄存器和 DAC 寄存器将更新为零刻度或中刻度,取决于 RSTSEL 引脚的状态。
时序
框架
AD5676R 实现分段串 DAC具有内部输出缓冲器的架构
写寄存器
AD5676R的输入移位寄存器为24位宽。数据首先装入MSB (DB23),前四位是命令位,C3到C0,其次是4位DAC地址位,A3到A0,最后是16位数据字。这些数据位被传输到SCLK的24个下降沿上的输入寄存器,并在SYNC的上升沿上更新。
命令
常用到的是0011,写入并更新寄存器
寄存器地址
DAC更新
AD5676R DAC具有双缓冲接口,由两组寄存器组成:输入寄存器和DAC寄存器。用户可以写入输入寄存器的任意组合。对DAC寄存器的更新由LDAC引脚控制。
当使用命令0001将数据时钟输入寄存器时,LDAC保持低电平。寻址输入寄存器和DAC寄存器都在同步的上升沿上更新,输出开始改变。
写命令和LDAC引脚真值表
下电模式
AD5676R包含两种独立的下电模式。命令0100被指定为下电功能。通过在输入移位寄存器中设置16位,位DB15到位DB0,这些断电模式是软件可编程的。每个DAC通道都有两个比特。下表显示了这两位的状态如何对应于设备的操作模式。
注:使用DAC之前要设置AD5676R的通道为Normal模式。
代码
.h文件
#ifndef AD5676R_H
#define AD5676R_H
#include <stdio.h>
#include "main.h"
/**********************************************************************************************************
*控制位
**********************************************************************************************************/
#define AD5676_CTRL_NOP 0
#define AD5676_CTRL_WRITE 1
#define AD5676_CTRL_UPDATE 2
#define AD5676_CTRL_WRITEUPDATE 3
#define AD5676_CTRL_PWR 4
#define AD5676_CTRL_LDAC_MASK 5
#define AD5676_CTRL_SWRESET 6
#define AD5676_CTRL_IREF_REG 7
#define AD5676_CTRL_DCEN 8
#define AD5676_CTRL_RB_REG 9
/**********************************************************************************************************
*关电操作模式掩码
**********************************************************************************************************/
#define AD5676_PWRM_NORMAL 0
#define AD5676_PWRM_1K 1
#define AD5676_PWRM_100K 2
#define AD5676_PWRM_THREESTATE 3
#define AD5676_PWRM_MASK 3
/* Enable/disable defines */
#define AD5676_INTREF_EN