拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

K型热电偶采集方案:从运放选型到ADC配置实战指南

K型热电偶采集方案:从运放选型到ADC配置实战指南

把手边这套K型热电偶采集方案从头到尾梳理一遍,内容从运放选型一路到ADC配置,整个过程里踩过的坑、纠正过的错误判断,我都会写出来,希望能给正准备做热电偶测温产品或者做设备采集卡硬件设计的同学一个可落地的参考。

1. 从热电偶输出特性开始:先搞懂信号源再谈电路

1.1 K型热电偶到底输出了多大的信号

很多刚接触热电偶的同学第一反应是找个运放把信号放大,然后在软件里配个查表就完事。但实际上,热电偶的输出特性决定了整个信号链路的复杂度,不是“放大”两个字就能解决的。

K型热电偶由镍铬和镍硅两种合金材料组成,基于塞贝克效应产生热电动势。它的灵敏度大约是41μV/°C,也就是说温度每变化1°C,输出才变化四十几个微伏。全温区0到1000°C范围内,对应的热电势大约是0到41.276mV。这个量级有多小,做个对比:普通STM32的12位ADC,在3.3V参考电压下,一个LSB是0.806mV,只相当于热电偶约20°C的变化。换句话说,如果你直接把热电偶接到单片机的ADC引脚上,温度变化小于20°C时连一个编码都跳不动。

还有一点很容易被忽略:热电偶测量的是“温差电动势”,输出值由测量端温度和冷端温度共同决定。比如测量端800°C、冷端25°C时,实际输出并不是800°C对应的分度表电压33.277mV,还要减去冷端25°C对应的1.000mV,最终只有32.277mV。所以“接上热电偶就能测温度”只是一个美好的想象,冷端补偿必须做。

1.2 信号链路设计的三个核心难点

第一个难点是小信号。热端温度变化1°C对应41μV,如果你希望仪表能显示0.1°C的分辨率,链路至少要能辨识4.1μV的电压变化。这已经逼近甚至低于很多通用运放的失调电压。

第二个难点是冷端补偿。补偿精度直接取决于冷端温度的测量,冷端温度测错了1°C,最终测温结果就跟着偏1°C。冷端温度传感器还必须放在正确的位置,否则补偿就是自欺欺人。

第三个难点是干扰。毫伏级信号在工业环境里非常脆弱,50Hz工频干扰、开关电源的高频噪声、电机启停时产生的共模噪声,都会叠加到信号上。如果不做滤波和屏蔽,放大100倍之后,噪声可能比信号还大。我之前遇到过一种情况:热电偶引线离继电器控制线30厘米,继电器每吸合一次,ADC读数就跳两三度。后来加了双绞屏蔽和差分滤波电容才解决。

搞清楚了信号源和干扰来源,后面做运放选型和ADC配置才有的放矢,否则就是盲人摸象。

2. 运放选型:先盯这些指标,再谈型号

2.1 失调电压和温漂:决定测量精度的第一道闸门

运放选型时,很多人习惯先看带宽、压摆率、共模抑制比,但在热电偶这种直流毫伏级信号场景里,最高的优先级应该是失调电压Vos和失调电压温漂。

失调电压是放大器输入端存在的固有电压误差,它会直接叠加在信号里。普通运放比如LM358,典型失调电压在2mV左右。2mV折合成温度是多少?2000μV除以41μV/°C,大约是48.8°C。也就是说,你拿LM358放大热电偶信号,如果软件不做任何零点校准,测100°C的东西可能会显示148°C,这误差大到完全不能用。

更麻烦的是温漂。即使你在25°C环境里做了一次零点校准,把2mV失调减掉了,但温度一变,失调电压也跟着漂移。LM358的失调电压温漂大约是7μV/°C,等效温度漂移0.17°C/°C。环境温度从25°C变到45°C,单是这一项就能引入约3.4°C的误差。

热电偶放大电路必须使用零漂移运放(斩波稳零结构)。这类运放通过不断采样并抵消自身失调电压,把Vos做到微伏级,温漂做到纳伏级。下面这几个型号是我实际用过的:

型号Vos(最大)温漂0.1-10Hz噪声适用场景
ADA45285μV0.015μV/°C0.5μVpp对精度要求很高的仪表前端
OPA218825μV0.05μV/°C1μVpp通用热电偶放大,性价比均衡
SGM855110μV0.05μV/°C1.2μVpp成本敏感的量产产品
AD86285μV0.02μV/°C1μVpp低功耗场景

2.2 噪声、偏置电流和输出摆幅不能只看失调

失调电压只是第一关。输入噪声密度和偏置电流同样影响最终精度。

斩波稳零运放的低频噪声通常做得很好,但是宽带噪声不一定低。好在热电偶信号本身变化很慢,输出端可以加RC低通把带宽压到几赫兹甚至更低,这样宽带噪声被大大滤除。我常用的做法是第一级输出接一个RC低通,截止频率设在10Hz左右,实测噪声改善非常明显。

偏置电流的影响取决于信号源内阻。如果热电偶引脚上串联了1kΩ的滤波电阻,1nA偏置电流就会产生1μV误差,折合0.024°C,看起来不大。但如果用大阻值滤波电阻,比如100kΩ,同样的偏置电流会产生100μV误差,直接变成2.4°C。所以热电偶输入端的串联电阻不宜太大,或者选择偏置电流极低的运放。大多数零漂移运放偏置电流在几十到几百皮安级别,配合10kΩ以内电阻是没问题的。

输出摆幅也很关键。单电源5V供电时,很多运放输出没法真正靠近电源轨。如果ADC输入范围是0到3.3V,而运放输出低电平只能到0.1V,虽然只损失一点动态范围,但在低温端换算温度时就会多出2.4°C的零点抬升。建议选择轨到轨输出的运放,并让放大后的信号范围在ADC输入范围的90%以内,留出余量。

2.3 仪表放大器还是普通运放加差动电路

很多人第一反应是热电偶是差分信号,那就用仪表放大器。仪表放大器确实有高共模抑制比的优点,但也要看具体型号。

INA128是比较经典的仪表放大器,增益公式是G=1+50kΩ/Rg,CMRR在增益100时能达到120dB。但它的局限性同样明显:失调电压典型值50μV,温漂0.5μV/°C,用来做0.5°C级别的测温还可以,要做到0.1°C级别就很吃力了。

相比之下,新一代的零漂移仪表放大器比如INA188,失调电压能做到25μV以内,温漂0.05μV/°C,更合适。不过价格也上去了。

我自己更常用的是零漂移运算放大器加三运放差动结构,其实就是在输入端用两个运放做缓冲和第一级放大,再用第三个运放做差分转单端。这么做的好处有三个:

  • 可以完全掌控每一级的增益和带宽,把滤波分配给每一级;
  • 零漂移运放的选择余地大,成本也好控制;
  • 可以根据需要的偏置电压自由设计,不局限于仪表放大器的参考引脚。

如果你是做小型化产品,不想用太多外围分立元件,直接用零漂移仪表放大器是最省事的。如果对成本和灵活性更敏感,三运放结构更合适。

2.4 单电源下别忘了加偏置

热电偶信号在正负方向都有可能出现。比如测量端温度低于冷端时,输出热电势是负的。使用单电源放大器时,负电压根本没法放大。解决办法是在输入端加一个直流偏置,把整个信号垫到正电压区间的中间位置。

常见做法是用电阻分压器产生Vref/2的直流电位,然后通过电阻接到运放的参考端或同相输入端。比如ADC参考电压是3.3V,就把信号偏置到1.65V。这样即使热电势是负值,放大后的电压也不会低于0V,ADC也能正常采样。这个细节很多教程不强调,但实际调试时很容易踩坑——信号一旦变负,放大器输出直接砸到地,读数就卡死在0°C附近。

3. 放大与冷端补偿电路搭建:增益分配和补偿策略

3.1 总增益和分级的取舍

设计放大倍数时,要结合测温范围、ADC输入电压范围以及放大器输出摆幅一起来看。

以0到1000°C的K型热电偶为例,满量程热电势约41.276mV。假设ADC满量程3.3V,则理想总增益G=3.3V/41.276mV≈80。为了留一点余量,实际取82倍比较常见。

那这82倍要不要一级放完?我的建议是不要。一级放大80倍,意味着输入信号、失调和噪声全部被放大到同样量级,而高倍放大对运放的增益带宽积、稳定性和噪声抑制都提出了更高要求。更重要的是,两级放大可以优化噪声分配:第一级先放大10倍,第二级再放大8.2倍。由于噪声是平方叠加,第一级贡献的噪声占主导,第二级噪声除以第一级增益后才折算到输入端,影响会小很多。

具体分配我通常这样安排:

  • 第一级:两个零漂移运放做同相缓冲并放大10倍,带宽做小,兼任差分转单端的前置。
  • 第二级:差分放大8.2倍,把信号拉到ADC合适的输入范围。
  • 每级后面都跟RC低通,截止频率从几十赫兹到十几赫兹逐级压低。

这样做的好处是抗干扰能力明显增强,我实测过两级滤波比单级滤波在50Hz工频环境下读数稳定得多。

3.2 冷端补偿的几种实现方式

冷端补偿是整个热电偶采集电路里最容易被低估的环节。一样的放大链路、一样的ADC,冷端传感器贴的位置不同,实测温度能差3°C以上。

方式一是硬件补偿,代表方案是ADI的AD8495。这个芯片内部集成了仪表放大器和冷端温度检测,输出信号直接与温度对应,5mV/°C,单片机读ADC后乘以200就是摄氏温度。这个方案确实简单,适合快速出原型。不过它有局限:只针对K型热电偶,增益和失调在出厂时已校准,灵活性较低。

方式二是外部温度传感器加软件补偿。用NTC热敏电阻、DS18B20或TMP117等传感器测量冷端温度,软件根据其等效热电势进行补偿。公式是:

Thot = E⁻¹( Vmeasured ÷ Gain + E(Tcold) )

其中E⁻¹表示查分度表反向求温度。这种方式灵活,可以适配不同热电偶类型,也是我做产品时的首选。

方式三是全查表法。先测得冷端温度Tc,查找冷端热电势E(Tc),再用ADC读到的电压除以增益得到总热电势,加上E(Tc),最后查分度表反推热端温度。这个方式完全避开了放大电路的零点漂移,只需要保证放大增益稳定。

不管用哪种方式,冷端温度传感器必须放置在热电偶接线端子旁边,尽量与被测金属端子保持良好的热接触。NTC和接线端子之间不要隔太多铜箔和空气,两者之间温度不一致,补偿就会出错。另外传感器要远离运放、LDO、MCU这些发热源,理论上这些器件的发热会让冷端温度读数虚高几度,最终反映到显示值偏高。

3.3 输入端的滤波和保护:容易被忽视的可靠性设计

热电偶引线在工业现场往往很长,增益又高,所以输入端的滤波和保护电路不是可选项,而是必选项。

我的常规做法是在每一根热电偶引线上先串一个1kΩ电阻,电阻后面再对地并联一个100nF电容到模拟地,两个输入之间再并联一个10nF电容。RC组成的截止频率大约是1/(2π×1kΩ×110nF)≈1.4kHz,不高不低,配合放大器内部的噪声整形已经够用。如果你的产品主要在工业现场使用,把截止频率再压低到100Hz左右更好,比如把电容加大到1μF。

保护方面,热电偶可能接触到静电或者工业设备漏出来的高电压,所以每一根引线上都要加钳位二极管。我用的结构是:每个输入端对电源和地各接一个二极管(可以用BAT54S或者ESD保护阵列),防止电压超出运放输入范围。注意二极管的反向漏电流要小,否则漏电流流经1kΩ电阻后会产生直流误差。

这里有个踩坑经验:输入端保护二极管不要选结电容太大的型号,否则高频共模干扰容易通过结电容耦合到运放输入端,反而不利于抑制干扰。ESD低压保护阵列是更稳的选择。

3.4 输出级到ADC的缓冲与抗混叠

运放输出到ADC之间,也不能直接拿一根线连过去就完事。SAR型ADC在采样瞬间会产生电荷注入,如果运放输出阻抗较高,采样值会被拉偏。Sigma-Delta ADC对源阻抗相对不敏感,但最好也加一级RC滤波。

我一般在运放输出端串联100Ω电阻,再接一个100nF电容到模拟地,构成约16kHz的低通滤波。这个电路的作用是隔离ADC采样瞬态,同时进一步衰减高频噪声。如果用的是SAR ADC,建议在ADC输入引脚直接并联一个1nF到10nF的电容,起电荷保持作用。

4. ADC配置:从分辨率预算到Sigma-Delta选型

4.1 分辨率预算是怎么算出来的

ADC位数选择,先要明确你想要的温度分辨率。

假设系统总增益82倍,K型热电偶灵敏度41μV/°C,那么0.1°C的温度变化,经过放大会产生约336μV的电压变化。如果ADC满量程3.3V,各位数对应的电压步进是:

ADC位数理想LSB(mV)折合温度分辨率(°C)
12位0.8060.24
16位0.0500.015
18位0.0130.004
24位0.0002忽略不计

从表格能直观看到,12位ADC的理论分辨率只有0.24°C,显示层面能分辨0.1°C都做不到。16位ADC理想情况足够,但实际的有效位数ENOB通常只有14位左右,对应LSB约0.2mV,折合0.15°C,也只能说是勉强够用。

所以我通常给客户或朋友的建议是:如果你对精度要求只有1°C,12位ADC加精密放大链路是没问题的;如果想显示分辨率到0.1°C,最少16位,更稳妥的是用带PGA的24位Sigma-Delta ADC。

还要强调一点,分辨率和精度完全不是一回事。分辨率决定你能否“分辨”0.1°C的变化,精度决定你的读数距离真实温度有多近。运放失调、冷端补偿误差、非线性、基准电压误差,这些都会让精度远差于分辨率。

4.2 单片机内置ADC和外置Sigma-Delta ADC怎么选

单片机内置ADC最常见的是12位SAR型。用在热电偶方案里,建议在满足1°C精度目标时再考虑,否则你会花大量时间在软件校准和滤波上,效果还不一定好。

内置ADC的主要问题不在位数,而在于参考电压和PCB噪声。很多单片机的VREF是从3.3V电源直接取的,而3.3V电源往往来自DC-DC,纹波能到几十毫伏。这个纹波会直接被ADC量化,最终在温度显示上表现为无规律的跳动。

因此我在经过几轮项目验证后,推荐外部Sigma-Delta ADC方案。它们内置数字滤波器和PGA,非常适合低频小信号场景。几个常见选型:

  • ADS1220:24位Sigma-Delta,内置PGA增益1到128倍,内置两个匹配的电流源可以用来做冷端二极管测温,还自带热电偶开路检测。K型热电偶方案里很实用。
  • ADS1115:16位,I2C接口,PGA最高16倍,走简单小系统足够,就是性能比ADS1220弱一些。
  • MCP3421:18位Sigma-Delta,I2C接口,封装小,适合对空间要求高的场合。
  • ADS1262:如果后续要扩展多路热电偶或RTD,这个通道数和性能更强。

用ADS1220时,我一般把PGA增益设为16倍,因为前置放大后信号已经到了几百毫伏级别,不需要再放很大。采样率设为20SPS,其内部数字滤波器在50Hz处有陷波,能抑制工频干扰。

4.3 参考电压的设计:比例式测量最稳妥

ADC的参考电压看起来是一个细节,但对最终精度影响非常大。

如果直接用3.3V电源做参考电压,电源的纹波和温漂都会进入测量结果。更麻烦的是,电源电压降低时,ADC的参考电压也降低,同一个模拟输入电压会被读成更大的数字码,温度读数随之偏高。这正好对应了很多人遇到过的“温度越测越高”的问题之一。

我的做法是:用一块独立的基准源芯片给ADC和放大电路偏置供电。常用型号有REF5025(2.5V)、REF3030(3.0V)、ADR3425等。这样放大电路的偏置和ADC参考电压来自同一个基准源,形成“比例式测量”。即使基准源本身有微小漂移,放大和ADC是同步变化的,误差可以相互抵消。实测下来,这种结构比直接用电源轨做参考,温度读数稳定性至少提升一个数量级。

4.4 采样率、数字滤波和线性化处理

热电偶温度变化属于缓变信号,采样率不需要很高。选20SPS已经足够。采样率太高反而会把噪声采进来。

Sigma-Delta ADC内置数字滤波器,只要采样率设置为电网频率的整数除法关系,就能对50Hz工频产生陷波。以ADS1220为例,20SPS和45SPS都是推荐的抗工频干扰档位。

软件上我习惯再叠加一个滑动平均滤波或一阶低通滤波,窗口长度根据期望的响应速度调节。但注意滤波太深会让温度响应变得迟钝。我之前做过一个实验,把ADC采样率设成20SPS,软件再取64次平均,温度响应时间超过了10秒,手捏住热电偶半天读数才慢慢上来,这种设计拿到现场会被客户骂。水温检测、烤箱控制这类场景对响应速度要求极高,滤波窗口不要超过8到16次。

线性化是另一个绕不开的环节。K型热电偶的分度表虽然在0到1000°C区间内接近线性,但直接用固定的40μV/°C换算,在500°C附近会引入3到4°C的偏差。所以必须用分度表查表加插值,或者用多项式拟合。查表加线性插值实现起来很简单:

// K型热电偶分度表(节选),单位uV,冷端0°C static const int16_t tp_table[] = { 0, // 0°C 41, // 10°C 81, // 20°C ... }; float lookup_temp(uint16_t voltage_uv) { uint8_t i; for (i = 0; i < TABLE_SIZE - 1; i++) { if (voltage_uv <= tp_table[i + 1]) { break; } } // 线性插值 float ratio = (float)(voltage_uv - tp_table[i]) / (tp_table[i + 1] - tp_table[i]); return i * 10 + ratio * 10; }

这个代码示例只是为了说明思路,实际分度表通常用1°C间隔,查表后还要处理冷端补偿。把补偿和线性化都写对,温度精度才能闭环。

5. 实录:温度偏高问题的排查链路与校准

5.1 “单片机K型热电偶温度高了怎么解决”:先按顺序排查

这个问题我在各个技术社区看到过很多次,也是实测中最常见的现象。遇到温度读数偏高,不要急着改软件滤波,先按下面顺序排查。

第一步,确认冷端温度传感器是否读高了。这是最高频的原因。冷端传感器如果离功率电阻、运放、MCU太近,测出来的冷端温度会高于实际,软件补充分度表时会把多的温度补进去,显示值自然偏高。解决方法是把传感器贴到热电偶接线端子处,同时远离热源。我曾经做过对比,传感器离运放3cm时,显示温度偏高1.2°C;离运放1cm时,偏高3.8°C。

第二步,检查运放失调电压和零点。上电后把热电偶输入端短接,ADC读数应该是偏置电压。如果读数明显偏离,软件里减去这个零点即可。这个操作对应的是失调校准,简单有效。

第三步,测量ADC参考电压是否偏低。用万用表实测基准电压,如果标称3.3V实际只有3.2V,ADC读数会整体偏大约3%。1000°C量程下就是30°C误差。换高精度基准芯片,或者在软件里用实测参考电压修正。

第四步,排查共模干扰。热电偶引线较长时,如果屏蔽层没有单点接地,或者信号线与电源线平行走线,共模干扰会被放大为差模误差。检查差分滤波电容和屏蔽层处理。

第五步,回头看补偿逻辑。有些代码里冷端补偿的符号写反了,冷端25°C的分度电压被减去而不是加上,温度会偏差接近50°C。用已知温度的水浴锅或干体炉做一次对比,就能暴露逻辑问题。

5.2 完整校准流程:把增益误差和失调误差分开处理

校准时先把放大链路和ADC链路分开对待。

零位校准方法是:把放大器的两个输入端用导线短接,读取ADC值,记为Voffset。这个值包含了运放失调和ADC偏置误差,软件里统一扣除。

增益校准方法是:用精密电压源从热电偶接入端注入一个已知电压,比如20mV,读取ADC值。利用已知输入电压和读到的代码值计算实际增益系数,替代理论增益值。这个步骤能消化掉电阻公差引入的增益误差。

冷端校准方法是:把热电偶探头放到冰水混合物(0°C)中,稳定后读取系统显示温度,此时的偏差主要来自冷端补偿和分度表。记录校正值。

实际生产时,可以做一个两点校准:0°C和100°C。0°C用冰点槽,100°C用沸水或者干体炉。校准完成后将增益系数和零点偏移写入EEPROM,每次上电加载。这个方法能让批量产品的一致性明显提升。

5.3 布局布线里的实测经验和几个小教训

独立的模拟地和数字地,最终在电源输入端单点汇合。热电偶信号走线尽量短而粗,并与所有数字信号线保持距离。

热电偶如果是外接线,尽量用屏蔽双绞线,屏蔽层在电路板端单点接到模拟地。屏蔽层如果两端都接地,反而会形成地环路,引来更大干扰。

输入端那1kΩ电阻和滤波电容要尽量靠近运放输入引脚放置,不要经过太长的走线。这条规则在微弱信号放大里非常关键,走线长了就相当于天线。

另外,板上如果有继电器、加热丝驱动电路,它们的大电流回路要和模拟电路分开走。我吃过一次亏:前一个版本把继电器驱动管放在了热电偶放大电路正下方,共模干扰直接耦合到输入端,温度显示忽高忽低。后来把驱动部分挪到板边,加了一个46°C的小隔断,问题消失。

5.4 实测小技巧:先用电压源模拟热电偶信号

我个人调试时有个固定习惯:硬件焊接完毕,先不接热电偶,用精密电压源模拟热电偶输出,注入一个已知直流电压,比如0mV、10mV、20mV、41.276mV,分别记录ADC读数,验证整个链路在理论上的线性度。这一步能快速确认放大增益和ADC配置是否正确。确认无误后,再接上真实热电偶做温度校准。

这样做的好处是,如果后续温度读数异常,可以快速判断问题是在前端传感器/冷端补偿,还是在电路链路上。先分离变量,再定位问题。

这个习惯帮我节省了无数排查时间,强烈建议你也试试。

返回列表