主流A/D转换芯片学习详解(1):美信MAX197
扫描二维码
随时随地手机看文章
在数据采集系统中,A/D转换的速度和精度又决定了采集系统的速度和精度。MAX197是Maxim公司推出的具有12位测量精度的高速A/D转换芯片,只需单一电源供电,且转换时间很短(6us),具有8路输入通道,还提供了标准的并行接口——8位三态数据I/O口,可以和大部分单片机直接接口,使用十分方便。
MAX197简介
MAX197芯片是多量程(±10V,±5V,0~10V,0~5V)、8通道、12位高精度的A/D转换器。它采用逐次逼近工作方式,有标准的微机接口。三态数据I/O口用做8位数据总线,数据总线的时序与绝大多数通用的微处理器兼容。全部逻辑输入和输出与TTL/CMOS电平兼容。新型A/D转换器芯片MAX197与一般A/D转换器芯片相比,具有极好的性能价格比,仅需单一+5V供电,且外围电路简单,可简化电路设计。
1、特性
(1)12位分辨率,1/2LSB线形度;
(2)单+5V供电;
(3)软件可编程选择输入量程: 10V, 5V,0~+5V,0~+10V;
(4)输入多路选择器保护: 16.5V
(5)8路模拟输入通道;
(6)6us转换时间,100kSPS采样速度;
(7)内/外部采集控制;
(8)内部4.096V或外部参考电压;
(9)两种掉电模式;
(10)内部或外部时钟。
MAX197转换的基本原理
MAX197无需外接元器件就可独立完成A/D转换功能。它可分为内部采样模式和外部采样模式,采样模式由控制寄存器的D5位决定。在内部采样控制模式(控制位置0)中,由写脉冲启动采样间隔,经过瞬间的采样间隔(芯片时钟为2MHz时,为3ms),即开始A/D转换。在外部采样模式(D5=1)中,由两个写脉冲分别控制采样和A/D转换。在第一个写脉冲出现时,写入ACQMOD为1,开始采样间隔。在第二个写脉冲出现时,写入控制字ACQMOD为0,MAX197停止采样,开始A/D转换。这两个写脉冲之间的时间间隔为一次采样时间。当一次转换结束后,MAX197相应的INT引脚置低电平,通知处理器可以读取转换结果。内部采样模式的数据转换时序对于模拟到数字量的转换,时序要求非常严格,由于MAX197的数字信号输出引脚是复用的,要正确读出转换结果,时序要求尤其重要。在一次采样开始前,可以通过单片机的8位数据线把这些控制字写入MAX197来初始化相应的参数。然后按照一定的时序进行采样和转换。
图1 MAX197引脚定义视图
引脚功能介绍
MAX197具有四种不同的封装:DIP28,宽SO,SSOP和陶瓷SB封装。
1脚(CLK):时钟输入。外部时钟输入时,由此引脚输入电平与TTL或CMOS兼容的时钟。内部时钟模式时,该脚与地之间接一电容,以确定内部时钟频率,当f=1.56MHz时,外接电容的典型值CCLK=100PF。
2脚( ):片选线,低电平有效。
3脚( ):当 为低电平时,在内部采集模式下, 的上升沿将锁存数据,并启动一次采集和一次转换周期;在外部采集模式下, 的第一个上升沿启动采集,第二个上升沿结束采集,并启动转换周期。
4脚( )当 为低电平时, 得下降沿将允许读取数据总线上的数据。
5脚(HBEN)用于切换12位转换结果。此脚为高电平时数据总线上的数据为高4位,此脚为低电平时数据总上的数据为低8位。
m
m
对于学max197的人来说是一个很好的机会,这个程序不难,绝对可以看懂它:
以下两个是。H文件的,你们另外保存一下就行了
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#include"delay.h"
#include"chuankou.h"
sbit MAX197_CS=P0^0;
sbit MAX197_WR=P0^1;
sbit MAX197_RD=P0^2;
sbit MAX197_HBEN=P0^3;
uchar premp,temp1;
void MAX197_Write(char temp)
{
MAX197_CS=1;
MAX197_WR=1;
delays(1);
MAX197_CS=0;
_nop_();
_nop_();
MAX197_WR=0;
_nop_();
_nop_();
_nop_();
_nop_();
P1=temp;
_nop_();
_nop_();
_nop_();
_nop_();
MAX197_WR=1;
_nop_();
MAX197_CS=1;
delayl(5);
}
long int MAX197_Read()
{
long int premp;
uint TempL,TempH;
delayl(2);
MAX197_HBEN=0;
_nop_();
MAX197_CS=0;
MAX197_RD=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TempL=P1;
delayl(600);
MAX197_HBEN=1;
delayl(600);
_nop_();
_nop_();
_nop_();
_nop_();
TempH=P1;
delays(1);
MAX197_RD=1;
MAX197_CS=1;
premp=TempH*256|TempL;
return premp;
}
void Init_MAX197()
{
P1=0x00;
MAX197_Write(0x40);
}
void main()
{
long int frag,i;
uint j;
init_uart();
while(1)
{
Init_MAX197();
frag=MAX197_Read();
i=frag*500000/4096;
send_dat(i/100000);
send_char('.');
send_dat(i/10000%10);
send_dat(i/1000%10);
send_dat(i/100%10);
send_dat(i/10%10);
send_dat(i%10);
send_char('v');
send_char('r');
send_char('n');
}
}
#ifndef chuankou
#define chuankou
void init_uart()
{
TMOD = 0X20;
TH1 = 0XFA;
TL1 = 0XFA;
SCON = 0X40;
PCON = 0X80;
TR1 = 1;
REN = 1;
}
void send_dat(uint dat1)
{
SBUF = (dat1+'0');
while(TI==0);
TI = 0;
}
void send_char(uchar dat)
{
SBUF = dat;
while(TI==0);
TI=0;
}
void printstr(uchar *p)
{
while((*p)!=' ')
{
send_dat(*p);
p++;
}
}
#endif
#ifndef delay
#define delay
delayl(uint n)
{
uint i,j;
for(i=n;i>0;i--)
for(j=114;j>0;j--);
}
delays(uint i)
{
while(i--);
}
#endif
一、MAX197在多通道数据采集中的应用
内部采样模式的数据转换时序
对于模拟到数字量的转换,时序要求非常严格,由于MAX197的数字信号输出引脚是复用的,要正确读出转换结果,时序要求尤其重要。在一次采样开始前,可以通过单片机的8位数据线把这些控制字写入MAX197来初始化相应的参数。然后按照一定的时序进行采样和转换。
HBEN为12位数据高4位或低8位有效控制位,当此位为高时,高4位数据有效,为低时低8位数据有效。可以通过控制这个引脚来读取12位的转换结果。
MAX197与单片机硬件接口设计
MAX197是一种通用A/D芯片,可以和多种微机接口,在此选用AT89C52单片机作为主处理器。通过AT89C52的P0.0~P0.7与MAX197的D0~D7相连,既用于输入MAX197的初始化控制字,也用于读取转换结果数据。 用AT89C52单片机的P2.7作片选信号,则MAX197的高位地址为7FH。选择MAX197为软件设置低功耗工作方式,所以置SHDN脚为高电平。本文采用外部基准电压,所以REFDJ接高电平,而REF则接外部输入参考电压。AT89C52单片机的P1.1脚用做判读高、低位数据的选择线,直接与HBEN脚相连。MAX197的INT脚可与AT89C52的INT0相连,以便实现中断,读取转换结果。
在电路中,AGND和DGND应相互独立,各种电源与模拟地之间都用0.1mF电容来消除电源的纹波。MAX197的硬件电路设计如图2所示。
软件设计
MAX197与其它A/D芯片不同之处在于它的很多硬件功能都是利用内部控制字来实现的,如通道选择、模拟信号量程、极性等。MAX197的输出数据采用无符号二进制模式(单极性输入方式)或二进制补码形式(双极性输入方式)。当CS和RD都有效时,HBEN为低电平,低8位数据被读出,HBEN为高电平,复用的高4位被读出,另外4位保持低电平(在单极性方式下),或另外4位为符号位(在双极性方式下)。
由以上可知,正确进行采集转换并读取数据的前提是必须正确设置控制字以及MAX197的各种控制信号。本设计中,进行数据采集转换前都对MAX197进行初始化,以便确定其采集转换的通道、量程和极性等。
程序的编写可以采用查询和中断两种方式,其中查询方式是在查询相应的标志成立时,执行读取;而中断则通过把MAX197的INT引脚连接到单片机的外部中断引脚来实现。本设计的软件是利用MCS-51汇编指令进行编写的,利用中断进行数据的转换和读取等操作。综上,一个典型A/D转换的控制与读取程序流程如图3所示。
结语
此设计表明,以MAX197为核心的数据采集A/D转换电路具有外围电路简单、与处理器并口兼容性好、时序控制简单易懂的特点,其变换时间短(6ms),可靠性和性价比高,并且编程简单,比较适合实时性要求较高的大数据量数据采集与高速A/D转换使用。
二、基于MAX197的多通道压力数据采集系统
本文介绍了一种基于AT89C51和MAX197的压力数据采集系统,系统与PC利用RS232通信,在PC端软件接收。系统在前级留出4~20mA的模拟信号接口,只要符合标准的信号都可接入,大大提高了系统的通用性
水利工程中常常需要对某些重要区段配置压力测量系统,比如管道进出口、直线段、局部转折、局部转弯处等,用来测定诸如管道沿程阻力系数和不同类型管道局部阻力系数等对工程影响较大的参数。水文测量中单点的测量基本上是没有意义的,必须通过合理的阵列测量才能进行频谱分析等工作。
多通道采集系统处理方案
根据系统要求,系统前端配置多路传感器以探测液压信号,实际系统中使用了32路。传感器采回的信号为电流信号,在A/D变换前要变为电压信号。A/D变换中采用的是Maxim生产的MAX197对32个通道进行循环采集。采集结果送入单片机中进行预处理,单片机选用Atmel公司的产品AT89C51,使用RS232通信接口与PC端连接并发送数据。PC端将收到的数据在数据处理软件中进行结果处理、显示。系统流程如图1所示。
图1 多通道采集系统流程图
传感器及过压保护
传感器采用AST4410型号的液压传感器,其性能参数如图2所示。
长度:60mm
直径:17mm
测量范围:表压 0~40MPa 绝压0~10kPa
精度等级:0.2级或 0.5级1~5Vdc
输出信号:4~20mAdc
工作电压:12~36Vdc
过程接口:1/4NPT螺纹
引线方式:电缆线
实际电路中供电电压使用24V,这对于后级的A/D以及单片机电路来说是相当危险的值,因此需要设置高电压保护电路。
图2 高电压保护电路
A/D采样及MAX197应用
MAX197的内部核心部分是一个采用逐次逼近方式的DAC,前端包括一个用来切换模拟输入通道的多路复用器以及输入信号调理和过压保护电路。其内部还建有一个2.5V的能隙基准电压源,管脚如图3所示。
图3 MAX197引脚定义视图
MAX197既可以使用内部参考电压源,也可以使用外部参考电压源。当使用内部参考源时,芯片内部的2.5V基准源经放大后向REF提供4.096V参考电平。这时应在REF与AGND之间接入一个4.7μF电容,在REFADJ与AGND之间接入一个0.01μF电容。当使用外部参考源时,接至REF的外部参考源必须能够提供400μA的直流工作电流,且输出电阻小于10Ω。如果参考源噪声较大,应在REF端与模拟信号地之间接一个4.7μF电容。模拟量输入通道拥有±16.5V的过电压保护,即使在关断状态下,保护也有效。
通过将控制寄存器的ACQMOD位置0可选择内部采集控制模式。在内部采集控制模式下,写信号脉冲将开始一个由内部定时控制长度的采集间隔。在6个时钟周期长度的采集间隔结束时,将启动下一个转换。
在内部采集控制模式下,MAX197的模拟信号输入电路拥有5MHz的信号带宽,当使用内部采集控制模式并使用外接2MHz时钟时,可达到100kSa/s的通过速率。
通过将控制寄存器的ACQMOD位置1可选择外部采集控制模式。采用外部采集控制模式是为了精确控制采样孔径或独立控制采集和转换时间。由用户分别通过两个写信号脉冲控制采集间隔和开始转换时间,第一个写信号脉冲时将控制寄存器的ACQMOD位置1,开始一个采集间隔。第二个写信号脉冲时将控制寄存器的ACQMOD位置0,结束采集间隔并开始转换。然而,如果在第二个写信号脉冲时将控制寄存器的ACQMOD位置1,则将开始又一个采集间隔。
在第一个写信号脉冲和第二个写信号脉冲时,控制寄存器中的模拟通道选择位必须置相同的值。电源关断模式控制位可以置不同的值。
选用AT89C51单片机作为主处理器。通过P0.0~P0.7与MAX197的D0~D7相连,既用于输入MAX197的初始化控制字,也用于读取转换结果数据。 用AT89C51单片机的P2.7作片选信号,则MAX197的高位地址为7FH。选择MAX197为软件设置低功耗工作方式,所以置SHDN脚为高电平。本文采用外部基准电压,所以REFDJ接高电平,而REF则接外部输入参考电压。AT89C51单片机的P1.1脚用做判读高、低位数据的选择线,直接与HBEN脚相连。MAX197的INT脚可与AT89C51的INT0相连,以便实现中断,读取转换结果。MAX197只有8个通道,一共要采32路压力值,用8片4选1的模拟开关实现。
在电路中,AGND和DGND应相互独立,各种电源与模拟地之间都用0.1mF电容来消除电源的纹波。
AX197的硬件电路设计如图4所示。
图4 MAX197连接原理图
单片机数据采集程序设计如下:
void scan(uchar channel){ //channel为通道数
uchar conword,low8,high4,i; //定义变量
for(i=0;i《8;i++){
if(i》0)channel=channel》》1;
if(channel&1){
conword=0x50+i;
P12=1;
XBYTE[0xE000]=conword; //读取数据
while(P32==1){}
//P12=0;
P13=0;
low8=XBYTE[0xE000]; //低位处理
P13=1;
high4=XBYTE[0xE000]&0x0F; //高位处理
SUMX[i]=high4*256+low8; //数据整合
}
}
}
根据系统的要求以及芯片的性能,选择10ms为采样的最小间隔。后面在PC端的程序可调整设定发送间隔,如果发送间隔大于采样间隔,则将采样得到的完整数据取均值后再发送,可以起到滤波的作用。
if(FREQ》=10){ //INTERVAL 设定采样间隔为10ms
FREQ=0;
scanall();
NUM1++;
P16=0;
P17=0;
}
if(NUM1》=INTERVAL){ //interval 即为PC端发送的指令
for(i=0;i《32;i++){ //如果大于10ms则取平均值
if(SUM[i]!=0){
union{
ulong usum;
uchar ustr[4];
} nua;
uchar a;
transfer(i);
SUM[i]=SUM[i]/NUM1;
nua.usum=SUM[i];
a=nua.ustr[2];
transfer(a);
a=nua.ustr[3];
transfer(a);
SUM[i]=0;
}
}
NUM1=0;
NUM2++;
}
串行通信部分
图5 MAX232通信连接原理图
采用MAX232芯片与PC机通信,电路连接如图5所示。
总结
将系统进行实际测试,连续运行14小时正常。该系统已用于水库模型测量实验中,运行良好。将前端传感器更换后,后级系统可以应用于多种场合,另外加入保护电路后更可用于恶劣条件下。系统前级提供4~20mA的电流模拟信号,后级即可工作并将信号输出,通用性较强。