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。
讀取到的資料隻有一種格式,前16位為轉換寄存器中儲存的上次轉換的值,後16位為剛才寫入的寄存器設定。在每次完成32-Bit通信後,DOUT/DRDY引腳再次拉低時代表下一次AD采集已完成,可以讀取資料。
16-Bit模式
16-Bit模式要求在每兩次通信之間CS(片選)引腳要拉高一次。每次通信可寫入16bit的配置寄存器值和讀取到16bit的轉換寄存器值。
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。