2026/9/3 4:19:32

AD590温度传感器实战:从选型到标定的低成本高精度方案

AD590温度传感器实战:从选型到标定的低成本高精度方案 简介一套基于AD590温度传感器与STC12C5608AD51内核单片机的温度检测系统完整工程面向电子爱好者、嵌入式初学者以及需要完成课程设计的学生。压缩包共29个文件约1.11MB以C语言源码、头文件、Keil工程文件、hex烧录文件及A51启动文件为主并附带测试截图与一键清理脚本便于直接编译、烧录和验证。资源内提供“整版测试”“两路显示”“ad测试”等不同模块的工程版本代码涵盖AD590电流信号调理、ADC配置、温度换算、CH451显示驱动等关键环节可帮助读者理解从模拟信号采集到数字显示的全流程。目前已有661人学习下载适合用来学习单片机ADC应用、传感器接口设计以及C51编程技巧也可作为温度检测类课设的参考方案。 前阵子接了个小活儿给一套循环水监控做温度采集。现场有电机、有变频器温度探头到控制柜的距离差不多40米客户要求误差正负1℃以内测温范围0到100℃。翻了一晚上选型手册最后定了AD590——这枚1970年代的老器件搭一套温度检测系统成本不到百元。项目做完相当顺利我干脆把从选型、电路设计到标定、现场调试的整个过程完整记下来给想用模拟温度传感器做采集的朋友做个参考。1. 选型复盘为什么这个项目最终落在AD590上1.1 AD590的工作原理和电流型输出的优势AD590本质上是一个两端电流源输出电流与绝对温度成正比比例系数是1µA/K。在25℃也就是298.15K的时候输出电流是298.15µA。它内部利用PN结正向压降随温度变化的物理特性再经过补偿电路把温度线性映射成电流。注意它直接输出的不是电压而是电流这个区别非常关键。用电流表示温度的好处很直白电流在导线上传输时不会因为线路电阻的压降而损失信息。只要AD590两端供电电压在4V到30V之间输出电流几乎不受电源电压波动影响。这对40米长的信号线来说是天然优势。如果换成热电偶毫伏级信号走这么长的线早就衰减得不成样子换成PT100还要操心桥路激励电流和导线电阻的补偿问题。另外一个优点是完全免冷端补偿。热电偶测温必须知道冷端温度否则误差能到十几度。AD590测的是绝对温度读数减去273.15就是摄氏度不需要任何补偿电路。再加上它的线性度很好整个测量范围内非线性误差典型值只有正负0.3℃。对于中等精度、预算受限的项目这种模拟传感器的性价比非常高。1.2 跟热电偶、NTC、PT100和数字传感器的对比为了说清楚为什么没选别的方案我列了一张对比表方案输出类型线性度测温范围冷端补偿成本长线传输AD590电流1µA/K好-55~150℃不需要低好PT100电阻一般需查表-200~850℃不需要中差需三线/四线热电偶毫伏电压非线性严重-200~2000℃必须低差NTC电阻非线性严重-40~150℃不需要极低差DS18B20数字单总线一般-55~125℃不需要低一般从表里能看出来PT100和热电偶在宽范围和高温场景里表现优秀但在0到100℃这个区间AD590的线性和免补偿优势非常突出。NTC虽然便宜但电阻—温度曲线是指数型的要做分段逼近标定麻烦。DS18B20虽然是数字输出但没有AD590耐温范围宽单总线协议在强电磁干扰环境下也更容易通信失败再加上现场已有模拟采集通道用起来反而多一道转换。当然AD590也不是没有短板。它需要额外的ADC采样通道数据要自己做换算和标定。最重要的一点是出厂精度只有K档正负2.5℃、J档正负5℃不做标定直接用在正负1℃的工程要求下根本交不了差。这也是我把标定单独拿出来写一章的原因。2. 硬件调理链路电流源信号如何变成ADC能读的电压2.1 采样电阻阻值计算别一上来就选10kΩAD590输出的是电流单片机ADC只能读电压所以最直接的办法是让电流通过一个精密电阻转成电压。很多人习惯性选10kΩ因为10kΩ上每1µA对应10mV算起来方便10mV/K0℃时2.7315V100℃时3.7315V。问题恰恰出在这里。如果ADC参考电压只有3.3V100℃对应的3.7315V已经超出量程满量程只能测到56℃左右再往上全部削顶。我之前算过目标测温区间是0到100℃参考电压3.3V那采样电阻选8.2kΩ比较合适每K对应8.2mV0℃时输出约2.2398V100℃时约3.0604V两头都留了余量。这个阻值既兼顾了灵敏度又没让最高温电压贴到参考电压边缘。电阻选型还有一个容易忽略的点温漂。普通碳膜电阻温漂几百ppm现场温差一大标定好的数据就飘了。我选的是0.1%精度、25ppm/℃的金属膜电阻。按25ppm算温升20℃电阻变化0.05%折算成温度误差约0.05℃在可接受范围内。预算充裕的话用低温漂精密电阻会更稳。2.2 运放跟随、RC滤波和钳位保护采样点电压直接进ADC有一个隐患单片机ADC的采样电容在采保阶段会瞬间抽取电荷等效于在负载电阻上叠加了一个电流脉冲。AD590虽然输出阻抗高、恒流特性好但采样电容的电荷注入还是会让ADC读数来回跳尤其在多通道切换时更明显。解决办法有两个一是把ADC采样时间拉长二是在ADC前面加一级运放跟随器做缓冲。我实际用了LM358做跟随采样稳定性立刻改善。信号进ADC之前我还加了一阶RC低通滤波R取1kΩ、C取0.1µF截止频率约1.6kHz用来滤现场变频器谐波和高频噪声。钳位保护也必须有。前面提到传感器短路时采样点电压会直接接近供电电压如果供电是12V灌进ADC引脚就烧了。我在ADC输入引脚对地和对3.3V之间各接了一个肖特基二极管做的钳位网络把电压限制在-0.3V到3.6V之间成本几毛钱省了换单片机的大麻烦。2.3 供电电压选择与传输线的处理AD590的工作电压范围是4V到30V但注意这个4V是指AD590自身两端的压降。用了8.2kΩ采样电阻之后最高温时电阻上的压降约3.06V所以供电电压至少要7V以上。我一开始图省事用5V供电结果在0℃时传感器两端只有约2.76V根本无法正常工作。后来把供电提到12V传感器两端在0℃约9.76V、100℃约8.94V全程留足余量。供电电压高了自热功耗也会变大这一点在后面调试章节会详细说。传输线方面我用了双绞屏蔽线屏蔽层在控制柜端单端接地传感器端不接。双绞线能抵消一部分磁场耦合的差模干扰屏蔽层单端接地则避免形成地环路电流这是长线传输里很关键的做法。3. 两点标定法把出厂漂移拉回工程精度3.1 出厂精度到底差多少为什么必须标定AD590的K档出厂精度是正负2.5℃。对不少场景来说这个精度够用但要满足客户正负1℃的要求必须做标定。其实AD590的重复性很好同一颗器件在相同温度下反复测读数波动很小问题主要出在不同器件之间的输出曲线斜率和截距有差异。所以标定的本质是测出这一颗传感器实际曲线的斜率和截距然后在软件里补偿掉。还有一点特别容易忽略AD590的标定结果只在标定温度点附近有效。如果只在冰点标定然后拿去测80℃因为实际斜率跟理论值有偏差误差会被放大。所以两点标定的温度点要尽量覆盖实际工作区间。我是用0℃和100℃两个点标定工作区间正好落在中间外推误差很小。3.2 标定操作与数据处理过程标定操作我用了恒温水浴。没有恒温水浴的话用冰水混合物和沸腾纯净水代替也可以但沸水温度会受大气压影响有条件还是水浴更稳。操作步骤整理如下把AD590探头完全浸入0℃冰水混合物等读数稳定5分钟记录ADC原始码值记为ADC0。把探头转入100℃水浴同样稳定后记录ADC1。同时用一支计量过的标准温度计记录两个标定点的实际温度T0、T1。用两点式算出实际斜率和截距。因为软件里直接对ADC原始码做换算中间不需要经过电压公式是slope (T1 - T0) / (ADC1 - ADC0) offset T0 - slope * ADC0 T_measured slope * ADC_raw offset这里T的单位是℃ADC_raw是单片机读到的数字量。为什么不先转电压再算温度因为电压转换里要引入基准电压的精度而基准电压本身可能有偏差。直接用ADC码和温度做线性映射可以把基准电压偏差一并吸收进标定斜率和截距里省一个环节就少一项误差。3.3 标定结果与残余误差我当时标定了四颗AD590K。以其中一颗为例0℃时理论输出对应的ADC码约2779实际读数是2804差了约25个码。按照8.2kΩ采样电阻、3.3V参考电压、12位ADC来算25个码相当于约2.5℃刚好落在K档的出厂精度范围内。如果不标定这颗器件已经超了客户要求误差的两倍多。标定完之后把四颗传感器放回0℃和100℃水浴验证最大偏差从标定前的2.3℃降到了0.1℃以内。在50℃和75℃两个中间点用标准温度计对比最大误差0.25℃。这个残余误差主要来自恒温水浴的温场均匀性和ADC噪声传感器本身的线性度还是很扎实的。有一点提醒标定后的斜率和截距系数要存到非易失存储器里每颗传感器对应一份标定数据。批量生产时最好在产线上把标定参数和单片机唯一ID绑定这样后期维护替换时也能快速核对。4. 软件处理工程量换算、滤波与断线保护4.1 ADC码值到温度的换算细节标定完成后软件换算就是简单的线性插值。12位ADC配3.3V参考电压、8.2kΩ采样电阻1个LSB对应约0.1℃。如果觉得分辨率不够可以用过采样技术把分辨率提到0.03℃左右不过对这个场景来说12位原始分辨率已经够用。写代码时要注意整数运算的截断误差。用浮点运算当然最简单但低成本MCU很多没有硬件浮点单元每次换算都跑浮点会拖慢采样循环。我的做法是把标定参数放大100倍存成整数乘出来再除以100全程整型运算速度快误差也可以接受。如果MCU资源充裕直接浮点也没问题。4.2 滑动平均滤波的窗口选择现场有变频器和接触器采样值偶尔会出现尖峰。我用了两个滤波方法叠加中值滤波负责剔除毛刺窗口N5滑动平均负责平滑随机噪声窗口N16。中值滤波对尖峰干扰特别有效滑动平均对随机噪声更友好两者配合下来信号非常干净。但滤波是有代价的。中值加滑动的组合把响应时间拉长了实测温度阶跃响应从无滤波的大约1秒变成约3秒。对循环水这种缓慢变化的对象3秒延时完全能接受如果被测对象温度变化很快就得减小窗口或者改用加权滑动平均。滤波参数没有标准答案要跟着被控对象的动态特性走这是现场调试最容易忽略的经验。4.3 传感器故障检测和超量程判断模拟传感器系统最怕的是传感器坏了却还输出一个看似合理的温度值。AD590的故障模式比较清晰开路时采样点被电阻拉低电压接近0V短路时采样点直接接近供电电压超出正常量程。所以软件里做了两个门槛判断ADC值低于正常最低限对应约-10℃的码值判定为开路或断线。ADC值高于正常最高限对应约110℃的码值判定为短路或超量程。这两个门槛要留一定裕量避免工作在低温区间时误报。程序里还加了一个防抖逻辑连续3次采样都超限才报警防止偶发干扰触发误报。这样现场维护人员能直接通过面板看出是哪一路传感器出问题不用拿万用表挨个量。5. 现场调试记录自热、长线干扰和地噪声的真实影响5.1 自热效应探头散热和间歇供电才是关键第一次把传感器装到循环水管路上我发现读数比旁边水银温度计高了0.4℃左右而且探头在空气中比浸在水中偏高更明显。原因是自热AD590自身功耗让管芯温度高于被测介质温度散热条件越差偏高越多。处理办法有两个。第一把传感器供电从15V降到12V自热功耗降下来一些第二把探头装进铜套涂上导热硅脂再紧固到管壁让管芯热量快速传导到被测介质。两个措施本文还有配套的精品资源点击获取