STM32驱动模数转换芯片ADS1120(PT100铂电阻测温度)第2篇

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了。

posted @ 2019-06-07 22:45  429512065  阅读(5220)  评论(0编辑  收藏  举报