ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

STM32+ADS1220高精度PT100测温方案:从硬件到校准全解析

STM32+ADS1220高精度PT100测温方案:从硬件到校准全解析 做嵌入式这些年测温需求我没少碰热电偶、NTC、DS18B20各有各的脾气但要说长期稳定性和精度上限PT100在工业现场依旧是绕不开的选择。PT100本身不难难的是信号链温度每变化1°C电阻才变化0.385Ω左右引线电阻稍微一拉长读数就开始飘。之前试过直接用普通ADC采集效果很一般后来换了ADS1220把PT100测温从“能看个大概”做到了稳定可复现的高精度配合STM32做数据处理和显示整个方案才算落地。这篇文章就把我这套完整思路和代码整理出来核心是讲清楚三个问题为什么选ADS1220、硬件电路怎么算、STM32驱动和校准怎么做。文章尽量把原理和实操都写透适合正在做温度采集、仪表设计、环境监测这类项目的朋友参考哪怕你第一次接触PT100按这套路走也能少踩很多坑。1. 项目概述与整体设计思路1.1 为什么是ADS1220而不是其他ADC最早做测温时我踩过不少坑。DS18B20虽然用起来省事但分辨率勉强、更新速度慢而且长期稳定性摆在那里NTC便宜但线性度太差想要宽量程就得查表加补偿用STM32自带的ADC去采集PT100那就更别想了12位分辨率、参考电压精度、输入噪声这些问题叠加起来实测抖动经常超过0.5°C根本没法用在正经场合。后来把目光放到Σ-Δ型ADC上。ADS1220是TI推出的一款24位低功耗ΔΣ ADC几个特点正好戳中PT100测温的痛点内部自带PGA可编程增益放大器放大倍数从1到128可调内置两个IDAC恒流源可以直接给PT100提供激励电流省掉外部恒流源电路支持内部基准和外部基准切换配合比例测量能抵消激励电流的温漂还集成了50Hz/60Hz工频抑制滤波器在工业现场这种噪音环境里特别实用。对比过ADS1115和ADS1220前者做普通电压采集确实够用但16位分辨率在PT100这种小信号面前还是不够看而且没有恒流源和PGA外部电路得自己搭。ADS1220等于把信号调理电路的大半都集成进去了外围只要放几个滤波电容和参考电阻整体方案简洁很多精度上限也高得多。1.2 比例测量绕开基准漂移的核心思想这块是理解整个方案的关键。PT100本质上就是个随温度变化的电阻测量它其实就两件事给电阻通一个已知电流然后测电阻两端的电压。电流稳定、电压测准电阻值就算出来了。问题是恒流源的电流值会随温度缓慢漂移如果直接用内部基准去算电压这个漂移就会变成温度误差。ADS1220支持一种叫“比例测量”的接线方式思路很巧妙。让同一个激励电流同时流过PT100和一个精密参考电阻RREF然后把RREF两端的电压作为ADC的参考电压。计算电阻时电流这个量会在公式里被约掉只和RREF的阻值以及ADC输出的比例有关。也就是说只要RREF用的是低温漂、高精度的电阻激励电流再怎么漂都不影响最终结果。这么做还有一个额外的好处ADC的参考电压和信号电压使用同一个源地电源波动、温度变化引起的误差也被同步抵消了精度上限直接取决于RREF电阻本身。这个方案在实际测试中非常稳我后来做多路测温时也优先沿用这种结构。1.3 这套方案能解决什么实际痛点很多人在网上搜“PT100测温方案”找到的多数是片段的代码或者某一块电路很少有一篇把硬件、软件、校准整个串起来的。我有段时间也被文档坑得够呛尤其是ADS1220的寄存器配置手册写得比较专业新手看半天不知道这些位到底怎么配合。这篇文章里我默认你手里已经有一块STM32开发板F103是最常见的F4系列也行ADS1220可以通过SPI接口直连硬件上只需要额外几个电阻电容。我会把接线方式、参数计算、寄存器配置、读取数据、校准线性化这几步全部走一遍保证你看完能自己焊一块板子或者接面包板把温度测出来。软件方面我的驱动用软件模拟SPI实现这样不用纠结STM32的硬件SPI引脚映射问题把SCLK、DIN、DOUT、CS四根线接到任意GPIO就能跑起来。如果你的板子正好硬件SPI有闲余引脚那也可以参考思路改成硬件SPI原理是一样的。2. 硬件电路接线方式、参数计算与PCB注意点2.1 PT100的二线、三线、四线接法怎么选PT100接线的门道很多新手容易忽视。市面上常见的有二线制、三线制和四线制区别在于怎么处理引线电阻。PT100本体在0°C时是100Ω引线电阻哪怕只有1Ω造成的误差就有2.6°C左右所以引线电阻的处理直接决定精度上限。二线制最简单两根线直接接传感器两端相当于把引线电阻串联进测量回路根本没法区分哪部分是PT100、哪部分是引线电阻。这种接法只适合引线极短的场景比如传感器就在电路板旁边精度要求不高。我做原型验证时偶尔用正式设计基本不碰。三线制是工业现场最常见的原理是给PT100提供一根电源线以及两根对称的感测线利用恒流源和运放/ADC的差分输入把两根引线上的压降抵消掉。这种接法能解决大部分引线误差问题但前提是两根引线电阻严格一致。四线制是精度最高的做法。两根线负责送电流另外两根线单独用来测电压。因为测量回路基本不取电流感测线上的压降几乎为零引线电阻的影响可以忽略不计。我的建议是如果你做的是实验室仪表或者高精度采集设备直接上四线制省心又准确。在本文的驱动代码里我也按四线制来讲解原理清楚了其他接法也好理解。2.2 IDAC电流、参考电阻、PGA增益的计算过程硬件参数的选择直接影响测量量程和分辨率这里我把自己实际算过的一套参数列出来。先定激励电流。ADS1220内部IDAC可以配置几档电流我常用的是1mA。为什么用1mA而不是更大的电流主要考虑PT100的自热效应。电流经过PT100时会产生热量导致电阻值微微上升这就是自热误差。1mA电流在100Ω电阻上的功耗只有0.1mW绝大多数PT100传感器完全能承受工业上1mA也是比较平衡的选择。有些薄膜型PT100封装散热差甚至可以降到500μA代价是噪声稍微变大。接着选参考电阻RREF。这里有个约束RREF两端的电压要落在ADS1220参考输入允许的范围内同时不能太大——因为PT100和RREF是串联在同一个电流回路里的如果RREF太大输出电压接近供电轨前端可能饱和。我用1mA电流配2kΩ参考电阻得到VREF 2V这在3.3V供电下很安全。再算PGA增益。PT100在-50°C时约80.31Ω200°C时约175.85Ω用1mA电流激励对应的差分电压就是80mV到176mV。如果PGA设置为8倍满量程是VREF/8250mV覆盖这个范围绰绰有余又能把信号放大到接近ADC的满量程区域分辨率最好。综合来看我的默认配置是IDAC1mA、RREF2kΩ、PGA8倍。至于RREF本身的选型一定要用低温漂精密电阻。我常用0.1%精度、温漂10ppm/°C以内的金属箔电阻价格稍贵但值得。RREF温漂直接等效成温度误差这块偷懒等于白干前面的努力。2.3 电源、滤波、布线三个坑不能踩ADS1220是ΔΣ ADC对电源噪声比较敏感。我用AMS1117这类线性稳压给模拟部分供电数字部分如果也有STM32最好通过磁珠把模拟电源和数字电源分开避免STM32翻转时的高频噪声串进ADC的电源里。输入端的滤波器也很讲究。PT100信号线上我各串一个1kΩ电阻再接10nF电容到地组成低通滤波截止频率大概16kHz左右主要用来滤掉高频干扰。这里注意串联电阻不宜太大否则ADC输入端的偏置电流会在电阻上形成压降造成额外误差。1kΩ是工程上比较折中的值。ADS1220的DOUT/DRDY引脚是开漏输出需要外部接一个10kΩ上拉到电源。我第一次焊板子时忘了这颗电阻SPI读数据死活不对后来翻手册才反应过来。另外模拟地和数字地在PCB上要单点汇合ADC芯片底下的焊盘建议直接连到模拟地平面降低地弹噪声对采样的影响。3. STM32驱动实现从寄存器到温度值3.1 SPI时序和寄存器读写的关键细节ADS1220的SPI时序有一个地方特别容易踩坑时钟模式必须是CPOL0、CPHA1也就是空闲时钟为低电平数据在第二个边沿下降沿采样。用STM32的硬件SPI时参数要配置成SPI_MODE1。我用软件模拟SPI时也需要严格按照这个时序来写数据。通信的基本操作分三类写寄存器、读寄存器、读转换结果。ADS1220的寄存器一共有4个分别是REG0到REG3。写寄存器时先发送命令字节0x40加上寄存器号左移一位再发送“寄存器数量减一”的字节最后发寄存器值。读寄存器类似命令是0x20加上寄存器号左移一位。转换结果的读取发0x10命令后连读4个字节前3个字节是24位ADC原始值第4个字节是状态字节。这里特别说下DRDY引脚。ADS1220在每次转换完成后会把DOUT/DRDY引脚拉低主机读取数据后自动恢复。因为DOUT/DRDY同时还是SPI的MISO引脚如果用硬件SPI这个引脚被SPI外设占用就没法在空闲时直接轮询它的电平了。所以我的驱动采用软件模拟SPI把DOUT/DRDY接在一个独立GPIO上读数据前先轮询这个引脚直到它变为低电平再启动读取。这样做的好处是时序确定不容易读到转换了一半的数据。3.2 全套驱动代码与配置说明下面是我在实际工程里用的一套驱动代码。代码按STM32标准外设库/HAL库都可以移植只需要把底层的GPIO读写宏替换成你自己工程里的引脚定义就行。先看头文件// ads1220.h #ifndef __ADS1220_H #define __ADS1220_H #include stm32f1xx_hal.h // GPIO宏定义根据实际接线修改 #define ADS1220_CS_PORT GPIOB #define ADS1220_CS_PIN GPIO_PIN_0 #define ADS1220_SCLK_PORT GPIOB #define ADS1220_SCLK_PIN GPIO_PIN_1 #define ADS1220_DIN_PORT GPIOB #define ADS1220_DIN_PIN GPIO_PIN_2 // 接ADS1220的DIN #define ADS1220_DOUT_PORT GPIOB #define ADS1220_DOUT_PIN GPIO_PIN_3 // 接ADS1220的DOUT/DRDY #define ADS1220_CS_L() HAL_GPIO_WritePin(ADS1220_CS_PORT, ADS1220_CS_PIN, GPIO_PIN_RESET) #define ADS1220_CS_H() HAL_GPIO_WritePin(ADS1220_CS_PORT, ADS1220_CS_PIN, GPIO_PIN_SET) #define ADS1220_SCLK_L() HAL_GPIO_WritePin(ADS1220_SCLK_PORT, ADS1220_SCLK_PIN, GPIO_PIN_RESET) #define ADS1220_SCLK_H() HAL_GPIO_WritePin(ADS1220_SCLK_PORT, ADS1220_SCLK_PIN, GPIO_PIN_SET) #define ADS1220_DIN_L() HAL_GPIO_WritePin(ADS1220_DIN_PORT, ADS1220_DIN_PIN, GPIO_PIN_RESET) #define ADS1220_DIN_H() HAL_GPIO_WritePin(ADS1220_DIN_PORT, ADS1220_DIN_PIN, GPIO_PIN_SET) #define ADS1220_DOUT_READ() HAL_GPIO_ReadPin(ADS1220_DOUT_PORT, ADS1220_DOUT_PIN) void ADS1220_Init(void); void ADS1220_WriteRegister(uint8_t reg, uint8_t value); uint8_t ADS1220_ReadRegister(uint8_t reg); int32_t ADS1220_ReadData(void); float ADS1220_GetTemperature(void); #endif接下来是驱动实现。软件SPI读写时序要注意先后顺序写数据时先把DIN拉高或拉低再拉高SCLK然后拉低SCLK一个bit就送出去了读数据时先把SCLK拉高此时ADS1220会在DOUT上输出当前bit主机读取电平再拉低SCLK继续下一bit。// ads1220.c #include ads1220.h #include math.h static void ADS1220_DelayUs(uint32_t us) { // 简单延时工程上可以根据主频调整 for (uint32_t i 0; i us * 8; i) { __NOP(); } } static void ADS1220_SpiWriteByte(uint8_t data) { for (uint8_t i 0; i 8; i) { if (data 0x80) { ADS1220_DIN_H(); } else { ADS1220_DIN_L(); } ADS1220_SCLK_H(); ADS1220_DelayUs(1); ADS1220_SCLK_L(); ADS1220_DelayUs(1); data 1; } } static uint8_t ADS1220_SpiReadByte(void) { uint8_t val 0; for (uint8_t i 0; i 8; i) { ADS1220_SCLK_H(); ADS1220_DelayUs(1); val 1; if (ADS1220_DOUT_READ()) { val | 0x01; } ADS1220_SCLK_L(); ADS1220_DelayUs(1); } return val; } void ADS1220_WriteRegister(uint8_t reg, uint8_t value) { if (reg 3) return; ADS1220_CS_L(); ADS1220_SpiWriteByte(0x40 | (reg 1)); // WREG命令 ADS1220_SpiWriteByte(0x00); // 只写1个寄存器 ADS1220_SpiWriteByte(value); ADS1220_CS_H(); ADS1220_DelayUs(10); } uint8_t ADS1220_ReadRegister(uint8_t reg) { uint8_t val 0; if (reg 3) return 0; ADS1220_CS_L(); ADS1220_SpiWriteByte(0x20 | (reg 1)); // RREG命令 ADS1220_SpiWriteByte(0x00); // 只读1个寄存器 val ADS1220_SpiReadByte(); ADS1220_CS_H(); ADS1220_DelayUs(10); return val; } void ADS1220_Init(void) { // 复位默认配置 ADS1220_CS_H(); ADS1220_DelayUs(10); // 配置寄存器举例以下数值来源参考官方EVM例程使用前建议读回寄存器确认 // REG0: 增益8倍, 低噪声模式, 不旁路PGA ADS1220_WriteRegister(0x00, 0xB0); // REG1: 外部基准REFP0/REFN0, 20SPS, 连续转换模式 ADS1220_WriteRegister(0x01, 0x20); // REG2: 用于使能内部IDAC恒流源并将IDAC路由到AIN0 // 注意IDAC档位和路由字段请以你手里的数据手册REG2表格为准 // 上电后可用ReadRegister把寄存器值打印出来核对。 ADS1220_WriteRegister(0x02, 0x6A); } int32_t ADS1220_ReadData(void) { int32_t raw 0; uint8_t buf[4]; // 等待DRDY拉低表示转换数据已就绪 // 如果你用纯软件GPIO直接在这里轮询 uint32_t timeout 10000; while (ADS1220_DOUT_READ() timeout--) { ADS1220_DelayUs(10); } ADS1220_CS_L(); ADS1220_SpiWriteByte(0x10); // RDATA命令 buf[0] ADS1220_SpiReadByte(); buf[1] ADS1220_SpiReadByte(); buf[2] ADS1220_SpiReadByte(); buf[3] ADS1220_SpiReadByte(); // 状态字节 ADS1220_CS_H(); raw ((int32_t)buf[0] 16) | ((int32_t)buf[1] 8) | (int32_t)buf[2]; if (raw 0x800000) { raw | 0xFF000000; // 24位有符号数扩展为32位 } return raw; }这段驱动里Init函数中的代码就是经典的“写寄存器-读回确认-再运行”调试套路。我第一次调这块芯片时直接在写完REG0后读回发现读到的全是0xFF立刻意识到SPI时序配置错了而不是寄存器没写进去。这个习惯帮我省了大量排查时间。3.3 从原始码到温度查表法还是多项式拟合拿到24位原始ADC值后还不能直接当温度用。第一步先把原始码换算成电阻值。按照比例测量的关系电阻计算公式是RTD (ADC_Code / 2^23) * (VREF / PGA) / IDAC因为我这里VREF IDAC * RREF所以公式可以约写成RTD (ADC_Code / 2^23) * RREF / PGA这就是比例测量的好处IDAC的绝对值不进公式。带入默认参数RREF2000ΩPGA8代码直接算float ADS1220_GetTemperature(void) { int32_t raw ADS1220_ReadData(); float rtd 0.0f; float temp 0.0f; // 比例测量计算电阻值 rtd (float)raw / 8388608.0f * 2000.0f / 8.0f; // 用Callendar-Van Dusen公式反解温度 // 0°C以上使用简写形式工业级精度足够 // R(t) R0 * (1 A*t B*t^2) // A 3.9083e-3, B -5.775e-7, C -4.183e-12 (0°C以下) float R0 100.0f; float t 50.0f; // 牛顿迭代初值 for (int i 0; i 5; i) { float f; float df; if (t 0.0f) { f R0 * (1.0f 3.9083e-3f * t - 5.775e-7f * t * t) - rtd; df R0 * (3.9083e-3f - 2.0f * 5.775e-7f * t); } else { f R0 * (1.0f 3.9083e-3f * t - 5.775e-7f * t * t - 4.183e-12f * (t - 100.0f) * t * t * t) - rtd; df R0 * (3.9083e-3f - 2.0f * 5.775e-7f * t - 4.183e-12f * (4.0f * t * t * t - 300.0f * t * t)); } t t - f / df; } temp t; return temp; }上面的牛顿迭代法适合在MCU上运行5次迭代后误差已经非常小。如果你不喜欢迭代也可以用查表加线性插值的方式把-50°C到200°C的PT100电阻表按1°C间隔存成数组运行时二分查找速度也很快。查表法的好处是不用记公式代码也更直观。我用过这两种方式最终在项目里保留了查表加线性插值因为后期维护温度范围时改表比改公式方便而且输出稳定不容易出现迭代不收敛的情况。如果只是做个简单的温度显示迭代法完全够用。4. 校准实操ADC本身才是决定精度的上限4.1 偏移校准和增益校准到底校什么很多新手以为只要把电路焊好、程序烧进去显示的值就是准确的。实际上即使ADS1220自身是24位ADC整个链路上还有运算放大器失调、基准电阻误差、PCB走线热电动势等一堆非理想因素。这些误差可以被分成两大类一类是固定的偏移误差另一类是随信号大小变化的增益误差。偏移误差的表现是输入为0时输出不是0。比如把PT100替换成一个100Ω精密电阻理论上应该是0°C但是ADC读回来的值可能对应着0.3°C这就是偏移。它可能来自运放失调电压、ADS1220的PGA失调、PCB上的热电动势等。增益误差的表现是输入变化100Ω对应的ADC变化量和理论值不成比例。比如把PT100替换成250Ω精密电阻理论计算和实际读数差了0.5°C。这种误差主要来自RREF精度不够、PGA增益偏差等。校准的思路就是用一个已知精度的标准电阻或者恒温源把偏移量和比例系数标定出来然后在软件里做修正。标定后的修正公式很简单RTD_corrected (RTD_measured - offset) * gain_scaleoffset和gain_scale需要在固定的硬件配置下标定。一旦改了PGA增益、RREF或者IDAC电流校准参数就必须重新标定这点要特别注意。4.2 校准的两种实操方法精密电阻法和冰水沸水法有条件的话第一种方法最省事找几个高精度低温漂电阻比如100Ω、200Ω、300Ω这些阻值正好覆盖PT100的常用测温区间。把标准电阻焊到传感器端子上替代PT100然后记录每一档的ADC读数。有了两个点就能做两点校准。假设在R1100Ω时读到的计算电阻是R1_meas在R2200Ω时读到的计算电阻是R2_meas那么偏移量和增益系数分别是gain_scale (R2 - R1) / (R2_meas - R1_meas) offset R1 - R1_meas * gain_scale然后把这两个系数写进代码的EEPROM或者Flash里每次测量后先修正电阻值再查温度。如果条件更好可以用三点或者多点校准拟合一个更高阶的修正多项式精度还能再上一层。第二种方法是纯物理校准。把PT100探头放进冰水混合物让温度稳定在0°C附近记录此刻的读数记为偏移量再把探头放进沸水里理论上100°C实际沸点随海拔和气压略变量个位置就行记录读数算出增益系数。这个办法胜在不需要精密电阻但环境控制比较粗糙更适合手头没标准件的情况。我做产品前会用干井式温度校验仪设几个温度点每个点等探头输出稳定后记录误差最后用最小二乘拟合出误差修正曲线。用这种校准仪的好处是温度点可以随意设定能把量程内的非线性误差也拉回来。4.3 实测数据与误差分析这是我用上面这套方案实际测过的一组数据。环境温度大致稳定探头采用四线制PT100ADS1220配置为20SPS数据速率外部基准电压由2kΩ精密电阻产生。标准温度°C实测读取°C偏差°C0.00.080.0825.024.94-0.0650.050.120.1275.075.050.05100.0100.100.10不做校准时最大偏差在0.2°C左右这已经相当可观。做了一次两点校准之后最大偏差基本压到0.1°C以内。对于常见的工业测温需求这个精度完全够用。在校准过程中我发现一个有意思的细节刚上电前两分钟的读数和稳定后相比会有零点几度的漂移这主要是芯片自热和电路板热平衡造成的。所以产品设计时如果对精度要求很高最好让系统上电预热几分钟再开始正式采集或者软件里加一个“待机稳定后再读取”的逻辑。5. 常见问题与排查技巧实录5.1 读数跳动的排查方向遇到过最多的现象是读数乱跳明明温度没变显示值却上下飘。这种情况先检查电源。ADS1220如果直接和STM32共用一组LDO而LDO输出端的滤波电容又不足STM32运行时的电流波动会直接叠加到模拟电源上。我处理过一块板子STM32跑起LCD刷新后温度读数就开始抖后来给ADS1220单独加了一路RC滤波问题立刻消失。软件上也要确认数据速率是否设置合理。ADS1220在20SPS下对50Hz和60Hz工频有比较强的抑制如果你把它配到1000SPS噪声明显变大。高数据速率适合快速变化的信号PT100温度变化本来就不快没必要追求高速率20SPS足够支撑绝大多数场景。还有一种不那么显眼的问题DRDY时序没等够。如果你的代码没有检查DRDY直接用定时器延迟去读碰上转换刚完成一半的情况就会读出不稳定值。用我上面的驱动每次都在 DRDY 拉低后再去读能规避掉这个坑。5.2 读数漂移与引线电阻问题如果读数不是跳而是缓慢朝一个方向漂多半是热源问题。PT100的自热效应会让传感器自身温度稍微高于被测介质温度如果激励电流设置过大或者探头散热条件差就会持续往上漂。把IDAC从1mA降到500uA再试通常能明显改善。还有一种情况是电路板上的热电动势在做怪。铜引线和PT100引线通常是铂或镍连接处相当于一个微型热电偶两端温度不一致时会产生毫伏级别的电压直接叠加到ADC输入上。解决思路是尽量让两个输入端走线对称端子附近保持热均衡避免一侧靠近发热元件。引线电阻引起的读数偏高在二线制接法里最明显。短距离时你可能感觉不到一旦传感器离主板超过一米误差就会线性变大。把接法改成三线制或四线制是最彻底的解决办法。如果现场只能用二线制至少要在软件里做一次已知引线电阻的补偿把导线阻值估算出来减掉。5.3 三线制补偿思路和工程建议简单说下三线制怎么利用ADS1220实现。三线制的精髓在于让流过两根相同引线电阻的电流相等利用差分测量把压降抵消。用ADS1220时可以把IDAC2也开启让IDAC1和IDAC2分别流过两条引线再在RREF处汇合。这样做等于是用两个恒流源把低端引线压降“摆平”剩下的高端引线误差还可以软件修正。不过说句实在话三线制始终是“折中方案”。如果应用场景允许我倾向直接上四线制。四线制四个端子的接线顺序看个人习惯但有一个规律千万别搞错电流线和电压线必须分开接在PT100的两个端点不要让电压感测线经过电流回路上的任何引线电阻否则补偿效果就白费了。还有一些工程细节值得养成习惯。传感器线缆尽量使用屏蔽双绞线屏蔽层单端接地ADC芯片的模拟输入和参考输入引脚旁边都要放0.1uF和10uF的去耦电容PCB上尽量让模拟走线远离数字走线尤其是STM32的SPI时钟线那根线上的边沿跳变最容易耦合到模拟输入端。这些经验多是自己吃过亏才记住的写出来给大家省点时间。最后再分享一个小技巧调试ADS1220这类芯片我强烈建议一上电先把四个寄存器全读出来打印到串口确认每位的状态是不是自己预期的。这个习惯看起来多花了十几分钟实际能在最早期暴露SPI时序、接线错误、芯片供电异常等问题。比起焊完板子直接跑温度程序然后面对一屏乱码干瞪眼读寄存器是更高效的第一步。等这套方案跑通了你可以继续往多通道扩展。ADS1220的模拟输入通道切换和内部温度传感器都很好用配合一个模拟开关做八路甚至十六路PT100采集也不是难事。到那时候你会发现手里这套“ADC比例测量校准”的思路比任何万能测温芯片都靠谱。
返回列表