當(dāng)前位置:首頁 > 通信技術(shù) > 通信技術(shù)
[導(dǎo)讀]在數(shù)據(jù)采集系統(tǒng)中,A/D轉(zhuǎn)換的速度和精度又決定了采集系統(tǒng)的速度和精度。MAX197是Maxim公司推出的具有12位測量精度的高速A/D轉(zhuǎn)換芯片,只需單一電源供電,且轉(zhuǎn)換時(shí)間很短(6us),具有8路輸入通道,還提供了標(biāo)準(zhǔn)的并行

在數(shù)據(jù)采集系統(tǒng)中,A/D轉(zhuǎn)換的速度和精度又決定了采集系統(tǒng)的速度和精度。MAX197是Maxim公司推出的具有12位測量精度的高速A/D轉(zhuǎn)換芯片,只需單一電源供電,且轉(zhuǎn)換時(shí)間很短(6us),具有8路輸入通道,還提供了標(biāo)準(zhǔn)的并行接口——8位三態(tài)數(shù)據(jù)I/O口,可以和大部分單片機(jī)直接接口,使用十分方便。
 

  MAX197簡介

MAX197芯片是多量程(±10V,±5V,0~10V,0~5V)、8通道、12位高精度的A/D轉(zhuǎn)換器。它采用逐次逼近工作方式,有標(biāo)準(zhǔn)的微機(jī)接口。三態(tài)數(shù)據(jù)I/O口用做8位數(shù)據(jù)總線,數(shù)據(jù)總線的時(shí)序與絕大多數(shù)通用的微處理器兼容。全部邏輯輸入和輸出與TTL/CMOS電平兼容。新型A/D轉(zhuǎn)換器芯片MAX197與一般A/D轉(zhuǎn)換器芯片相比,具有極好的性能價(jià)格比,僅需單一+5V供電,且外圍電路簡單,可簡化電路設(shè)計(jì)。
1、特性
(1)12位分辨率,1/2LSB線形度;
(2)單+5V供電;
(3)軟件可編程選擇輸入量程: 10V, 5V,0~+5V,0~+10V;
(4)輸入多路選擇器保護(hù): 16.5V
(5)8路模擬輸入通道;
(6)6us轉(zhuǎn)換時(shí)間,100kSPS采樣速度;
(7)內(nèi)/外部采集控制;
(8)內(nèi)部4.096V或外部參考電壓;
(9)兩種掉電模式;
(10)內(nèi)部或外部時(shí)鐘。

MAX197轉(zhuǎn)換的基本原理

  MAX197無需外接元器件就可獨(dú)立完成A/D轉(zhuǎn)換功能。它可分為內(nèi)部采樣模式和外部采樣模式,采樣模式由控制寄存器的D5位決定。在內(nèi)部采樣控制模式(控制位置0)中,由寫脈沖啟動(dòng)采樣間隔,經(jīng)過瞬間的采樣間隔(芯片時(shí)鐘為2MHz時(shí),為3ms),即開始A/D轉(zhuǎn)換。在外部采樣模式(D5=1)中,由兩個(gè)寫脈沖分別控制采樣和A/D轉(zhuǎn)換。在第一個(gè)寫脈沖出現(xiàn)時(shí),寫入ACQMOD為1,開始采樣間隔。在第二個(gè)寫脈沖出現(xiàn)時(shí),寫入控制字ACQMOD為0,MAX197停止采樣,開始A/D轉(zhuǎn)換。這兩個(gè)寫脈沖之間的時(shí)間間隔為一次采樣時(shí)間。當(dāng)一次轉(zhuǎn)換結(jié)束后,MAX197相應(yīng)的INT引腳置低電平,通知處理器可以讀取轉(zhuǎn)換結(jié)果。內(nèi)部采樣模式的數(shù)據(jù)轉(zhuǎn)換時(shí)序?qū)τ谀M到數(shù)字量的轉(zhuǎn)換,時(shí)序要求非常嚴(yán)格,由于MAX197的數(shù)字信號(hào)輸出引腳是復(fù)用的,要正確讀出轉(zhuǎn)換結(jié)果,時(shí)序要求尤其重要。在一次采樣開始前,可以通過單片機(jī)的8位數(shù)據(jù)線把這些控制字寫入MAX197來初始化相應(yīng)的參數(shù)。然后按照一定的時(shí)序進(jìn)行采樣和轉(zhuǎn)換。
 

  

  圖1 MAX197引腳定義視圖
 

引腳功能介紹

MAX197具有四種不同的封裝:DIP28,寬SO,SSOP和陶瓷SB封裝。
1腳(CLK):時(shí)鐘輸入。外部時(shí)鐘輸入時(shí),由此引腳輸入電平與TTL或CMOS兼容的時(shí)鐘。內(nèi)部時(shí)鐘模式時(shí),該腳與地之間接一電容,以確定內(nèi)部時(shí)鐘頻率,當(dāng)f=1.56MHz時(shí),外接電容的典型值CCLK=100PF。
2腳( ):片選線,低電平有效。
3腳( ):當(dāng) 為低電平時(shí),在內(nèi)部采集模式下, 的上升沿將鎖存數(shù)據(jù),并啟動(dòng)一次采集和一次轉(zhuǎn)換周期;在外部采集模式下, 的第一個(gè)上升沿啟動(dòng)采集,第二個(gè)上升沿結(jié)束采集,并啟動(dòng)轉(zhuǎn)換周期。
4腳( )當(dāng) 為低電平時(shí), 得下降沿將允許讀取數(shù)據(jù)總線上的數(shù)據(jù)。
5腳(HBEN)用于切換12位轉(zhuǎn)換結(jié)果。此腳為高電平時(shí)數(shù)據(jù)總線上的數(shù)據(jù)為高4位,此腳為低電平時(shí)數(shù)據(jù)總上的數(shù)據(jù)為低8位。

 

 

max197典型#e#
max197 c
對(duì)于學(xué)max197的人來說是一個(gè)很好的機(jī)會(huì),這個(gè)程序不難,絕對(duì)可以看懂它:
以下兩個(gè)是。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)!='