工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->基础电路图->数字电路图->单片机与AD1555/AD1556的接口和软件设计

单片机与AD1555/AD1556的接口和软件设计

作者:Lamborghini时间:2009-09-27

摘要:介绍模数转换芯片AD1555/AD1556的各自功能,并给出AD1555/AD1556和单片机之间的接口实现,以及与单片机接口的软件编程。AD1555/AD1556是高精度的模数转换芯片,用来完成微弱信号的检测。

    关键词:模数转换 接口电路 AD1555/AD1556

AD1555/AD1556芯片组是高动态、高精度∑-δ模数转换器件。它内部的可编程增益放大器可实现五种放大倍数,从而实现五种不同的输入范围1.6V、636mV、187mV、47mV、12.4mV。调制器工作在采样频率256kHz上,它的输出正比于输入电压。

1 AD1555/AD1556内部构成

AD1555是AD公司24位∑-δ模数转换器件,内部集成有可编程的增益放大器,是为低频、高动态场合而设计的。它输出的串行数据和输入的模拟信号成正比。它和数字滤波器AD1556配合使用,可实现工业上最高性能1kHz的模/数转换。它的连续模拟信号调理器输入结构,可以在设计电路中不使用外部的抗混叠滤波器。它的可编程增益放大器,可减化电路的设计,扩展动态范围,减小电路板的面积。它的低功率和等待模式使它也适合远程电池供电的数据测量系统。

AD1555主要由多路选择器电路、可编程增益放大器电路、模/数转换电路、振荡电路、控制逻辑电路组成。AD1556主要由输入多路选择器电路、数字滤波器电路、数据寄存器、输出多路选择电路、可编程增益放大器控制电路、配置寄存器电路、可编程增益放大器控制电路、配置寄存器电路、数据输入移位寄存器电路、分频电路等组成。图1为AD1555/AD1556连接示意图。

图1 AD1555/AD1556连接示意图 点击放大


2 AD1555引脚功能

AGND:模拟信号地。

PGAOUT:内部可编程增益放大器电路的输出,它和AD1555的MODIN直接相连。

+VA:-VA:模拟正负5V电源。

AIN+、AIN-:模拟信号输入。它是多路选择器电路一个输入信号。

TIN+:TIN-:测试信号输入。它是多路选择器电路一个输入信号。

NC:厂家保留,通常用户不连。

CB0~CB4:调制器控制。它来控制多路选择器,可编程增益设置和输入选择,如表1、2所列(其它模式略)。AD1555和AD1556共同使用时,它和AD1556的CB0~CB4直接相连。

表1 增益选择

CB2 0 0 0 0 1
CB1 0 0 1 1 0
CB0 0 1 0 1 0
增益 1 2.5 8.5 34 128

表2 输入选择

CB4 0 0 1
CB3 0 1 0
输入 内部接地输入 TIN输入 AIN输入

MFLAG:调制器错误。如果输入信号超出AD1556的量程,它会发出一个高电平脉冲,它和AD1556的MFLAG直接相连。

VL、DGND:数字电源,通常为5V。

DMATA:调制器输出。它是调制器产生模数转换数据输出端,和AD1556的MDATA相连。

MCLK:调制器时钟输入,通常是256kHz,提供给∑-δ模数转换调制器所需的时钟。它和AD1556相连,由AD1556提供时钟。

REFCAP1:模数转换器滤波器。它和AGND3之间可以连接一个22μF的钽电容来实现对模数转换器参考电源输入的滤波。

REFCAP2:参考电压滤波器。

REFIN:参考电压输入,输入3V的电压提供给内部的∑-δ模数转换电路。

AGND2:模拟地。

MODIN:∑-δ模数转换电路输入端,通常直接和PGAOUT相连。

3 AD1556引脚功能

PGA0~PGA4:可编程增益放大器和多路选择器控制输入端。它在复位期间或硬件选择条件下设置AD1556相应的配置寄存器。

BW0~BW2:输出速率控制输入端。它在复位期间或硬件选择条件下设置AD1556相应的配置寄存器,其相应的含义如表3所列。

表3 速率选择

BW2 BW1 BW0 输出速率/ms
0 0 0 4
0 0 1 2
0 1 0 1
0 1 1 1/2
1 0 0 1/4
1 0 1 1/8
1 1 0 1/16
1 1 1 保留

HS:硬件/软件方式选择,当它为高时,配置寄存器由PGA0~PGA4、BW0~BW2来设置相应的位;当它接地时,由软件写入配置寄存器。

VL、DGND:数字电源,3.3V或5V。

SCLK:串行数据时钟,数据写入与读出的时钟信号。

DOUT:串行数据输出。当RSEL为有效时,它输出状态寄存器的内容;否则,它输出模数转换的结果。

DRDY:数据准备好,当输出为高电平时,它指示输出寄存器数据准备好,可以访问。

CS:片选信号,在数据访问期间,必须保持低电平。

R/W:读写信号,读时保持高电平,写时保持低电平,并使DOUT保持高阻状态。

RSEL:寄存器选择信号。当它设为高时,访问数据寄存器;当它设为低时,访问状态寄存器。

DIN:串行数据输入,高位在前,低位在后,SCLK下降沿数据有效。

ERROR:出错信号。当模数转换或数字滤波出错时,输出低电平,并且状态寄存器相应的ERROE会为1(见表5)。

RESET:滤波器复位信号。当它为高电平时,清除状态寄存器的错误位,并且把寄存器配置成相应的硬件引脚设置成的状态。

PWRDN:硬件掉电控制。

CSEL:滤波器输入选择。当把它设为高时,滤波器选择TDATA输入;当把它设为低时,滤波器选择MDATA输入。

TDATA:测试数据,用户输入数据至滤波器来测试滤波器。

SYNC:同步输入信号。当把它置为高电平时,在CLKIN的第一个上升沿,清除AD1556滤波器。

CLKIN:时钟输入,给AD1556提供所需的时钟,并经过四分频后,从MCLK口输入到AD1555。

MCLK:调制器时钟,给AD1555提供时钟信号。

DMATA:调制器数据,接收AD1555提供的位流数据。

MFLAG:调制器错误,当输入模拟信号超出AD1555的量程时,AD1555的MFLG变为高电平,AD1556会在第一个CLKIN上升沿检测到这个信号,并且会使ERROR信号变低,把状态寄存器的BIT24设为高。

CB0~CB4:调制器控制,用来设置AD1555的状态。

4 AD1556的配置寄存器和状态寄存器

配置寄存器,如表4所列,是通过外部控制器写入的。当HS为低时,CB0~CB4用来设置AD1556可编程增益放大器的输入和放大倍数。

表4 配置寄存器

0 1 2 3 4 5 6 7
CB0 CB1 CB2 CB3 CB4 DRDYBUF BW0 BW1
8 9 10 11 12 13 14 15
BW2 X CSEL PWRDN X X X X

CB4、CB3:决定可编程增益放大的输入,如表1所列。(当都为1时例外)。

此时,CB2~CB0决定可编程放大器的倍数。

DRDYBUF:决定DRDY输出引脚的方式。当给RDYBUF位写入0时,DRDY为CMOS通常的推拉方式;当给DRDYBUF位写1时,DRDY为漏式的PMOS方式。这种方式在多个AD1556情况下使用。

BW2~BW0:滤波器的带宽选择,如表3所列。

CSEL:TDATA选择输入,当给TDATA位写入1时,选择TDATA输入。

PWRDN:掉电选择,当给PWRDN位写入1时,进入掉电状态。

5 状态寄存器

状态寄存器是一个24位寄存器,当有错误发生时,相应的位就会被置位。它还保存着芯片的配置状态,各个位的相应含义如表5所列。

表5 状态寄存器

0 1 2 3 4 5 6 7
CB0 CB1 CB2 CB3 CB4 X BW0 BW1
8 9 10 11 12 13 14 15
BW2 X CSEL PWRDN X X X X
16 17 18 19 20 21 22 23
DRNG FLSTL DRDY ACC X MFLG OVWR ERROR

CB0~CB5含义见表1、2。

BW0~BW2含义见表3。

6 AD1555/AD1556硬件接口电路

传感器的输出接到AD1555的AIN+、AIN-输入端。增益放大器的输出PGAOUT直接连到∑-δ模数转换电路输入引脚MODIN,+3V通过REFIN输入引脚提供给AD1555的参考电压。AD1555的可编程增益放大器的放大倍数和输入选择控制引脚CB0~CB4和AD1556的CB0~CB4直接相连,由AD1556来配置。AD1556的CLKIN外接一个1.024MHz的时钟信号,HS接地,CSEL接地,CS、R/W、RSEL、SCLK、DIN、DOUT、DRDY、ERROR、SYNC分别与单片机AD89C51的P1口相连(AD1556和单片机的电路接口略)。

7 接口软件

下面只介绍AD1556和AD89C51单片机接口软件的读写程序。(以下程序在μVision 2 v2.12调试通过)

(1)AD1555/AD1556的初始化和写入程序

假设AD1555的可编程增益放大器的放大倍数为1,采样频率为250Hz,则AD1556的配置寄存器为80H。

#include<reg51.h>

#define HIGH1

#define LOW0

#define FALSE0

#define TRUE~FALSE

sbit CS=0x80;

sbit RW=0x81;

sbit RSEL=0x82;

sbit SCLK=0x83;

sbit DOUT=0x84;

bit DIN=0x85;

sbit DRDY=0x86;

sbit ERROR=0x87;

/*延时子程序*/

void delay(void){

int i;

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

}

/*模拟向AD1556写入一个数据位*/

void W_bit(bit wbit){

DIN=wbit;

SCLK=HIGH;

delay();

SCLK=LOW; //wbit写入芯片

delay();}

void W_word(unsigned int wdata){

char i;

bit temp; //选通芯片

RW=LOW; //写操作

/*16位数据由高到低写入芯片*/

for(i=1;i<=16;i++){

temp=(bit)(wdata&0x80);

W_bit(temp);

wdata=wdata<<1;}}

在主程序中直接调用上面子程序可实现对配置寄存器的写。

W_word(0x8);

(2)AD1556的读出程序

/*模拟从AD1556读出一个数据位*/

bit R_bit(void){

bit rbit;

SCLK=HIGH;

delay();

SCLK=LOW;

rbit=DOUT;

delay();

return(rbit);

}

unsigned long R_word(bit is){

unsigned long rdata=0;

char j;

bit rtemp;

if(is) //判断是否读配置寄存器

RSEL=HIGH; //是,RSEL设为高电平

Else

RSEL=LOW; //否,读数据,设为低电平

RW=HIGH; //发出读信号

CS=LOW; //选通AD1555

SCLK=HIGH;

while(DRDY){

for(j=1;j<=24;j++){

rdata=rdata *2;

rtemp=R_bit();

rdata=rdata+(int)rtemp;

}

delay();

}

CS=HIGH;

Return rdata;

}

读状态寄存器和数据都是用上面子程序R_word(is)来实现的。要读状态寄存器,则传递给is的值为1;要读数据,则传递给is的值为0。



评论

技术专区