AD7888是美国模拟器件AD公司推出的一款高速低功耗12位模数转换器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AD7888的特点

AD7888是美国模拟器件AD公司推出的一款高速低功耗12位模数转换器,可以在+2.7~+5.25V单电源模式下工作,见图2。其最大转换速率可达到125k SPS。AD7888的输入采样/保持电路在500ns内获取一个信号,采用单端采样模式,包含8个单端模拟输入,从AIN1到AIN8,模拟输入电压从0~VREF。AD7888内部具有用做A/D转换的换的2.5V基准电压源,REFIN/REFOUT管脚允许用户访问这个基准。另外,该管脚也可以使用外部基准电压,范围从1.2V到VDD。CMOS的制造工艺确保了低功率消耗,正常工作时为2mW,掉电状态下为3μW。该器件采用16脚SOIC和TSSOP外形封装。可以选择多种电源管理模式(包括数据转换后自动处于掉电模式),与多种串行接口兼容,如

SPI/QSPI/MICOWIRE/DSP。AD7888引脚功能及符号说明见图3、表1、表2。

图2 AD7888模数转换器

图3 控制器位功能描述

表1 AD7888模数转换器管脚

表2 引脚符号及说明

在AD7888中,控制寄存器是8位的只写寄存器。数据在时钟周期信号的上升沿从AD7888的DIN引脚载入,在此同时获取外部模拟量转换的结果。每次数据的传输需要准备16个连续时钟信号。数据只能在片选信号下降沿之后的前8个时钟脉冲的上升沿装入控制寄存器。

串行接口:

在图4中显示了详细的串行接口时序图,串行时钟提供了转换时序,且控制AD7888转换信息的输入输出。

CS初始化数据传送和转换处理。在其下降沿之后的1.5个时钟周期开始采样输入信号,这段时间表示为tACQ(获取时间)。这是从DIN输出到控制寄存器的MSB位为DONTC一个原因。在自动关断模式下获取时间必须要虑及5μs的唤醒时间。整个转换过程还需要14.5个时钟周期来完成。上升沿之后,总线返回高阻状态。如果继续保持低电平,则准备新一轮的转换。

进行采样的输入通道的选择是提前写入控制寄存器的,因此在转换时,用户必须提前写入以备通道的转换。也就是说,在进行当前转换时,用户就必须提前写入通道的地址以备下次转换使用。设计中初始化时,先做一次写控制寄存器的操作,将需要转换的通道信息写入控制寄存器中。

写信息到控制寄存器应该在数据传送的前8个SCLK上升沿进行。控制寄存器经常在数据传送发生时进行写操作。从器件中读数据时用户必须经常仔细地在PIN线上设置正确的信息。

接口与驱动

串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口。SPI总线是一种三线同步总线,因其硬件功能很强,所以其实现软件就相当简单。AD7888

与多种串行接口兼容,可以根据使用的控制芯片在设计中灵活的使用,从经济的角度出发选择普通的MCU芯片AT89S52,使用程序可方便地实现对SPI总线的控制。

图4 串行接口时序图

AD7888与MCU之间的接口关系如图5所示。为了能够获得稳定的数据,AD7888与MCU之间加入光隔离器。光隔离器件采用的是隔离电压高、速度快、共模抑制性强的6N137。由于6N137的速度快,编程中不需要进行延时就能满足光隔离器的电平建立时间。试验表明通过光隔离器,获得的稳定数据能够增加3~4位(二进制位)。AD7888的CS接地,使AD888始终工作在SPI接口模式。对每个接口模块的控制是通过74LSl25的三态允许端来实现的。对其中一个SPI接口操作时,使其74LSl25处于选通状态,而其他SPI接口的74LSl25处于高阻状态。这样可实现微处理器单独对一个接口进行操作,而不影响其他接口。CPU通过对三态缓冲器

74LSl25控制,可实现多个接口共用相同的数据线。AD7888所采样的七路电压信号经过分压以后电压都在2.5V以内,所以这里可以

直接使用芯片内置的+2.5V参考电压,在程序中必须将控制器的REF位置清为“0”。

图5 AD7888与MCU连接图

子程序入口参数Adcaddres通过设置控制寄存器来修改采样通道和工作模式

unsigned int get_ad(unsigned char Adcaddres)

//写入控制字和读出转换数据

{

unsigned char i,j;

unsigned char Strdatah,Strdatal,Tempdata;

unsigned int Strdata;

Tempdata=0×0;

Strdatah=0×0;

Strdatal=0×0;

Strdata=0;

Ad_cs(0);

//使能AD7888片选有效

Ad_sclk=1;

for(i=0;i<8;i++)

//前8个时钟周期进行控制寄存器的写入

{

//和读出上次转换的高4位数据

Ad_din=(bit)( Adcaddres &(0×80>>i)); //先移出最高位

Ad_sclk=0;

for(j=0;j<2;j++);

Ad_sclk=1;

for(j=0;j<2;j++);

Strdatah=Ad_dout;

Strdatah=Strdatah<<(7-i);

Tempdata=Tempdata | Strdatah;

}

Strdatah=Tempdata;

Tempdata=0×0;

for(i=0;i<8;i++)

//从AD7888中读取低8位采样码

{

Ad_sclk=0;

for(j=0;j<2;j++);

Ad_sclk=1;

Strdatal=Ad_dout;

Strdatal=Strdatal<<(7-i);

Tempdata=Tempdata | Strdatal;

for(j=0;j<2;j++);

}

Strdatal=Tempdata;

Strdata=(Strdatah*256 +Strdatal)&0x0fff; //去除高四位的无效数据”0”,防止误码出现

Ad_cs(1);

//使能AD7888片选无效,降低功耗

相关文档
最新文档