1. 先看下原理圖,原理圖是電流從IDAC1流出,提供驅動,然后R(REF)這個電阻上的電壓作為參考,讀取AIN0和AIN1的電壓,那么可以測量出來電阻值。
2. 上圖是官方給出的參考,下圖是我實際用的原理圖,其中PT100的是在0攝氏度的時候,是100歐姆,上升1攝氏度,電阻增加0.385歐姆
3. 那么代碼部分是,初始化,下面代碼用的是TI官網下載的函數庫,修改成自己的配置即可
Setup_ADS1120 (ADS1120_MUX_AIN1_AIN0, ADS1120_OP_MODE_NORMAL, ADS1120_CONVERSION_CONTINUOUS, ADS1120_DATA_RATE_20SPS, ADS1120_GAIN_8, ADS1120_USE_PGA, ADS1120_IDAC1_AIN3, ADS1120_IDAC2_DISABLED, ADS1120_IDAC_CURRENT_1000_UA); //¿ªÊ¼×ª»»
ADS1120_Start();
參考的地方
4. PGA放大了8倍,參考電阻是1.2K歐姆,那么計算當前溫度值的計算公式如下
if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_4) == GPIO_PIN_RESET)//ADS1120
{ ADS1120_Get_Conversion_Data((unsigned char *)tempData); temp = ((int)tempData[0] << 8) + tempData[1]; temp = ((temp-8) *1200 * 125/32767 - 100000)/ 385; }
5. 第一個溫度,ADS1120是12位的ADC,實際測試,滿刻度是 0X7FFF,不是0XFFFF,我估計是可以測試正負值。
6. 曾經試過把R17修改成150歐姆,PGA=1倍,但是效果很差,偏差很大,實際測試,R17值越大,效果越好,怎么去評測這個效果呢?就是把PT100拆掉,短接PT100的兩根線,測試在此下,temp的值,越接近0,那么說明偏差越小。
7. 關於校准問題,就是把PT100拆掉,短接PT100的兩根線,測試在此下,temp的值,越接近0,那么說明偏差越小。官方的做法是記錄下這個偏差值,以后每次測量出的temp減去這個偏差值。我用1.2K歐姆電阻的時候,這個偏差值是8,所以我就減去8了。