ADS1118 做爲經常使用溫度測量芯片被愈來愈多的開發者熟知,TI官方給出的是基於 MSP430 的驅動測試程序,因爲 STM32 的普及,閒暇中移植了 MSP430 的 ADS1118 驅動程序到 STM32F103 平臺下,並進行了測試,特在此記錄,以饗讀者。函數
使用 STM32F103 的 SPI2 接口鏈接 ADS1118 的通訊接口:測試
STM32F103|ADS1118
—|—|—|
PB12|CS
PB13|SCLK
PB14|DOUT
PB15|DINui
ADS1118 手冊建議數據線之間接一個50歐電阻,實際測試可不接。ADS1118 電源接3.3V並加濾波電容。spa
ADS1118 接口的時序要求如圖:設計
DIN 接口接收控制器送過來的配置數據,而且在 SCLK 的降低沿將數據鎖存讀入 ADS1118 內部,而且在 SCLK 的上升沿中將數據送出到 DOUT。基於此將 STM32F103 的 SPI 接口作以下配置,CPOL=0,CPHA = 1;
3d
1 |
void SPI_config(void){ |
對應 GPIO 的配置:
code
1 |
void SPI_GPIO_Configuration(void) |
另外記得使能端口時鐘:
blog
1 |
void (void){ |
ADS1118 在發送寄存器配置的同時會傳輸轉換結果,手冊中提到既支持16bits 模式也支持32bits模式。接口
16bits模式:ip
32bits模式:
DIN 接口接收寄存器配置的同時DOUT接口輸出轉換結果,在32bits模式下發送完寄存器配置後第二次能夠發送數據0,具體可參考手冊。基於此設計數據發送讀取函數:
1 |
//讀寫寄存器16bits模式 |
獲取 ADS1118 的片內溫度須要將 ADS1118 的寄存器的第4bit修改成1,啓動單次轉換將第15bit寫1便可:
1 |
float ads1118_get_temperature(void) |
ADS1118默認開啓ADC模式,經過配置寄存器的12-14bit能夠選擇開啓哪一個通道,具體可參考手冊。另外關於片內溫度模式時,使用的是14bit左對齊模式。並且ADS1118的轉換結果中,負數使用二進制補碼格式,所以須要作一個轉換,每一個值表明0.03125℃,測試中的SPI通訊數據:
ADS1118 可使用差分方式鏈接兩路熱電偶溫度傳感器,本篇也是參考了TI官方文檔 使用ADS1118進行精密熱電偶測量。冷端溫度讀取片內溫度便可,將片內溫度轉換成熱電偶對應的電壓,而後加上熱端獲取的電壓值,反向查表便可獲取熱電偶溫度值。實際測試時使用的是K型熱電偶,從網上查到K型熱電偶的溫度電壓對應表,進行查表:
1 |
type_k_thermo_lookup_table type_k_thermo_lookup[16] = { |
測試時冷端溫度通常高於室內溫度2攝氏度左右,由於芯片內部發熱所致,獲取差分輸入的代碼設置以下:
1 |
uint16_t ads1118_get_differential_0_1(uint8_t PGA) |
實際測試時,溫度精度在2攝氏度左右,並無達到TI官方公佈的精度,在硬件電路方面有待進一步提升。所有源碼後續會放出。