一、特性參數
1、16位無失真AD轉換器
2、增益可調,在1,2,32,128可切換。
3、數字地和模擬地分開,可以減少噪聲。
4、具有較大的輸出電流,有比較好的帶載能力。
二、管腳排列
三、引腳功能
引腳名稱 | 功能 |
SCLK | 串行時鍾,施密特邏輯輸入。將一個外部的串行時鍾加於這一輸入端口,以訪問AD7715 的串行數據。和單片機傳輸數據時的控制時鍾 |
MCLKIN | 為轉換器提供主時鍾信號。能以晶體/諧振器或外部時鍾的形式提供。晶體/諧振器可以接在MCLKIN 和MCLKOUT 二引腳之間。此外,MCLKIN 也可用CMOS 兼容的時鍾驅動, 而MCLKOUT 不連接。時鍾頻率的范圍為500kHz~5MHz |
MCLKOUT | 當主時鍾為晶體/諧振器時,晶體/諧振器被接在MCLKIN 和MCLKOUT 之間。如果在MCLKIN 引腳處接上一個外部時鍾,MCLKOUT 將提供一個反相時鍾信號。這個時鍾可以用來為外部電路提供時鍾源,且可以驅動一個CMOS 負載。如果用戶不需要,MCLKOUT 可以通過時鍾寄存器中的CLKDIS位關掉。這樣,器件不會在MCLKOUT 腳上驅動電容負載而消耗不必要的功率 |
CS’ | 片選,低電平有效的邏輯輸入,選擇AD7715。將該引腳接為低電平,AD7715 能以三線接口模式運行(以SCLK、DIN 和DOUT 與器件接口)。在串行總線上帶有多個器件的系統中,可由CS’對這些器件作出選擇,或在與AD7715通信時,CS’可用作幀同步信號 |
RESET | 復位輸入。低電平有效的輸入,將器件的控制邏輯、接口邏輯、校准系數、數字濾波器和模擬調制器復位至上電狀態 |
AVDD | 模擬電源電壓,5V |
AVIN(+) | 差分模擬輸入的正輸入端 |
AVIN(-) | 差分模擬輸入的負輸入端 |
REFIN(+) | 基准輸入端,基准輸入是差分的,並規定REFIN(+)必須大於REFIN(-)。REFIN(+)可以取VDD 和GND 之間的任何值 |
REFIN(-) | 基准輸入端,REFIN(-)可以取VDD 和GND 之間的任何值,且滿足REFIN(+)大於REFIN(-) |
AGND | 模擬地 |
DRDY’ | 邏輯輸出。這個輸出端上的邏輯低電平表示可從AD7705/7706 的數據寄存器獲取新的輸出字。完成對一個完全的輸出字的讀操作后,DRDY’引腳立即回到高電平。如果在兩次輸出更新之間,不發生數據讀出,DRDY’將在下一次輸出更新前500×tCLKIN 時間返回高電平。當DRDY’處於高電平時,不能進行讀操作,以免數據寄存器中的數據正在被更新時進行讀操作。當數據被更新后,DRDY’又將返回低電平。DRDY’也用來指示何時AD7705/7706 已經完成片內的校准序列. |
DOUT | 串行數據輸出端 |
DIN | 串行數據輸入端 |
DVDD | 數字電源電壓,可以是+5V,也可以是3.3V |
DGND | 數字地 |
四、片內寄存器
1、概述
只有四個寄存器,分別是通信、設置、數據還有校准寄存器。一般來說只是用通信和設置以及數據寄存器。而且每次進行操作的時候是先對通信寄存器進行操作,之后再跳到所選的下一個寄存器進行讀寫。
2、通信寄存器
管腳名稱 | 功能 |
0/DRDY’ | 這意味必須寫“0”,否則不能繼續進行對寄存器的操作。 |
ZERO | 這一位必須寫“0”,否則芯片不一定能正常工作。 |
RS1– RS0 | 選擇下一個進行通訊的寄存器![]() |
STBY | “1”表示進入低功耗模式,功耗只有10uW,“0”則是正常工作,一般默認為“0”即可。 |
G1-G0 | 設置增益倍數![]() |
3、設置寄存器
4、數據寄存器
數據寄存器是一個16 位只讀寄存器,它包含了來自AD7715 最新的轉換結果。如果通信寄存器將器件設置成對該寄存器寫操作,則必定會實際上發生一次寫操作以使器件返回到准備對通信寄存器的寫操作,但是向器件寫入的16 位數字將被AD7715 忽略。
五、芯片外圍電路圖
六、STM32F103ZET驅動程序(以IO口模擬方式)
#ifndef __ADC7715_H #define __ADC7715_H #include "stm32f10x.h" #include "pbdata.h" #include "spi.h" //自編函數 #include "timer.h" #include "gpio.h" #include "baseFunc.h" #define SCLK Pin0 #define DIN Pin1 #define DOUT Pin2 #define DRDY Pin3 void WriteAD7715Data(u8 data); void delay_Ms(int time); u32 ReadAD7715Data(u8 byte); void InitAD7715(void); u32 GetAD7715Num(void); #endif
#include "adc7715.h" void delay_Ms(int time) { u32 i,j; for(i=time;i>0;i--) { for(j=0;j<512;j++) { } } } void WriteAD7715Data(u8 data) { u8 i; for(i=0;i<8;i++) { if( (data&0x80)!=0 ) { set_outH(GPIOA,DIN); } else { set_outL(GPIOA,DIN); } data=data<<1; delay_Ms(10); set_outH(GPIOA,SCLK); delay_Ms(10); set_outL(GPIOA,SCLK); delay_Ms(10); set_outH(GPIOA,SCLK); delay_Ms(10); } set_outH(GPIOA,DIN); delay_Ms(10); } u32 ReadAD7715Data(u8 byte) { u8 i; u32 data = 0; for(i=0;i<byte*8;i++) { set_outH(GPIOA,SCLK); delay_Ms(10); set_outL(GPIOA,SCLK); delay_Ms(20); data=data<<1; if(read_in(GPIOA,DOUT)==1) { data=data+1; } set_outH(GPIOA,SCLK); delay_Ms(10); } return data; } void InitAD7715(void) { set_out(GPIOA,SCLK|DIN); set_FIN(GPIOA,DOUT|DRDY); WriteAD7715Data(0x10); WriteAD7715Data(0x66); } u32 GetAD7715Num(void) { while(read_in(GPIOA,DRDY)==1); WriteAD7715Data(0x38); return ReadAD7715Data(2); }