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

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

  MAX197簡介

MAX197芯片是多量程(±10V,±5V,0~10V,0~5V)、8通道、12位高精度的A/D轉換器。它采用逐次逼近工作方式,有標準的微機接口。三態(tài)數(shù)據(jù)I/O口用做8位數(shù)據(jù)總線,數(shù)據(jù)總線的時序與絕大多數(shù)通用的微處理器兼容。全部邏輯輸入和輸出與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)中,由寫脈沖啟動采樣間隔,經(jīng)過瞬間的采樣間隔(芯片時鐘為2MHz時,為3ms),即開始A/D轉換。在外部采樣模式(D5=1)中,由兩個寫脈沖分別控制采樣和A/D轉換。在第一個寫脈沖出現(xiàn)時,寫入ACQMOD為1,開始采樣間隔。在第二個寫脈沖出現(xiàn)時,寫入控制字ACQMOD為0,MAX197停止采樣,開始A/D轉換。這兩個寫脈沖之間的時間間隔為一次采樣時間。當一次轉換結束后,MAX197相應的INT引腳置低電平,通知處理器可以讀取轉換結果。內部采樣模式的數(shù)據(jù)轉換時序對于模擬到數(shù)字量的轉換,時序要求非常嚴格,由于MAX197的數(shù)字信號輸出引腳是復用的,要正確讀出轉換結果,時序要求尤其重要。在一次采樣開始前,可以通過單片機的8位數(shù)據(jù)線把這些控制字寫入MAX197來初始化相應的參數(shù)。然后按照一定的時序進行采樣和轉換。
 

  

  圖1 MAX197引腳定義視圖
 

引腳功能介紹

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

 

 

max197典型#e#
max197 c
對于學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)!='