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

  • 相关阅读:
    RocketMQ延迟消息的代码实战及原理分析
    如何做技术选型?Sentinel 还是 Hystrix?
    什么是服务熔断?
    降级-熔断-限流-傻傻分不清楚
    java-分布式-降级 熔断 限流
    java-分布式-分布式事务
    常用限流算法的应用场景和实现原理
    使用Redis作为分布式锁的一些注意点
    ansible {{}}引用变量,变量中嵌套变量如何表示
    shell获得java进程号跟进程对应的线程号
  • 原文地址:https://www.cnblogs.com/429512065qhq/p/10989444.html
Copyright © 2020-2023  润新知