天天看點

ADS1118調試指南和寄存器解析ADS1118基本功能ADS1118寄存器ADS1118讀寫時序分析ADS1118資料格式測試代碼

ADS1118基本功能

ADS1118是TI的16位ADC,内置1MHz晶振和參考電壓源,轉換速度8~860次每秒可調,量程±0.256V到±6.144V可調,可選單端輸入或差分輸入,内部內建溫度傳感器。

ADS1118寄存器

ADS1118的寄存器非常簡單,隻有2個16bit的寄存器。其中一個為隻讀寄存器,儲存ADC轉換後的值;另一個為配置寄存器,配置采集通道、正負量程、采集模式、采集速率、采集源(電壓或溫度)等。

ADS1118的轉換寄存器

ADS1118的轉換寄存器長度為16位,以補碼的形式編碼,用來儲存每次AD轉換後的結果。

ADS1118的配置寄存器

名字 讀寫類型 初始值 描述
15 SS 讀寫 0h 單次轉換開始,隻用于單次轉換模式,沒有轉換時寫入1表示開始轉換,寫入0沒有作用,正在轉換時寫入1也沒有作用,此位永遠讀取為0
14~12 MUX 讀寫 0h 選擇電壓的輸入通道: 000=Ain0+ Ain1-(差分);001=Ain0+ Ain3-(差分);010=Ain1+ Ain3-(差分);011=Ain2+ Ain3-(差分);100=Ain0+(單端);101=Ain1+(單端);110=Ain2+(單端);111=Ain3+(單端) 單端輸入負參考為GND
11~9 PGA 讀寫 2h 量程選擇:000=±6.144V;001=±4.096V;010=±2.048V;011=±1.024V;100=±0.512V;101=110=111=±0.256V;
8 MODE 讀寫 1h 選擇轉換模式,0=連續轉換模式,1=單次轉換模式(單次轉換完成後變為掉電狀态)
7~5 DR 讀寫 4h 轉換速率:000=8;001=16;010=32;011=31;100=128;101=250;110=475;111=860(次每秒)
4 TS_MODE 讀寫 0h 0=采集電壓;1=采集内部溫度傳感器
3 PULLUP_EN 讀寫 1h 控制是否使能DOUT/DRDY引腳的内部弱上拉:0=不上拉,1=上拉(推薦)
2~1 NOP 讀寫 1h 确定此次參數設定是否有效:01=設定生效,其他皆為使ADS1118忽略此次設定
保留 隻讀 1h 保留位,寫0或寫1沒有任何影響,讀取永遠為1

ADS1118讀寫時序分析

ADS1118共有兩種讀寫模式:32-Bit模式和16-Bit模式,兩種模式均為高位在前。32-Bit模式用于CS(片選)引腳始終為低的情況,16-Bit模式用于片選引腳由單片機IO控制的情況。

32-Bit模式

32-Bit模式下CS引腳可以一直保持為低,節省一個IO口。32-Bit模式可以細分為兩種,一種是把設定寄存器(16bit)寫入兩次,一種是寫入一次後第二次(後16bit)寫0。

ADS1118調試指南和寄存器解析ADS1118基本功能ADS1118寄存器ADS1118讀寫時序分析ADS1118資料格式測試代碼

讀取到的資料隻有一種格式,前16位為轉換寄存器中儲存的上次轉換的值,後16位為剛才寫入的寄存器設定。在每次完成32-Bit通信後,DOUT/DRDY引腳再次拉低時代表下一次AD采集已完成,可以讀取資料。

16-Bit模式

16-Bit模式要求在每兩次通信之間CS(片選)引腳要拉高一次。每次通信可寫入16bit的配置寄存器值和讀取到16bit的轉換寄存器值。

ADS1118調試指南和寄存器解析ADS1118基本功能ADS1118寄存器ADS1118讀寫時序分析ADS1118資料格式測試代碼

ADS1118資料格式

電壓采集資料格式

ADS1118采用補碼的資料格式,采集電壓時,讀取到的16bit資料可以直接賦給C語言中的short(有符号16bit整數)類型然後根據量程乘以比例系數得到電壓值。量程和比例系數表如下。

量程 比例系數
±6.144V 187.5μV
±4.096V 125μV
±2.048V 62.5μV
±1.024V 31.25μV
±0.512V 15.625μV
±0.256V 7.8125μV

溫度采集資料格式

ADS1118通信得到的16位溫度資料中隻有高14位有效(低兩位永遠為0),為一個14位有符号整數。在處理過程中可以将資料先按照無符号數向右位移(>>)2位,再判斷第14位是否為1(1則表示溫度為負),若為1則減一轉化為反碼,在将低13位按位取反得到原碼,再取負,就能将其轉化為16位有符号整數(short)直接進行下一步運算。參考C語言程式如下:

val = ((unsigned short)val) >> 2;//溫度資料高十四位有效
if(val & 0x2000){//溫度資料第十四位表明是否為負數
	unsigned short temp = ((unsigned short)val) ^ 0x2000;//第十四位清零
	temp = temp-1;//轉換為反碼
	temp = (~temp)&0x1FFF; //低十三位按位取反得原碼
	val = -temp; //重新取負轉換為十六位的補碼格式
}
           

測試代碼

包含ADS1118.c和ADS1118.h,封裝了4個通道單端采集函數和溫度采集函數,采用模拟全雙工SPI,STM32 HAL庫風格,移植的朋友需要改一下ADS1118_ReadWrite。