基于ADS122U04与STM32L452RE的工业级温度测量方案设计
1. 工业温度测量方案的整体设计思路
1.1 为什么工业与HVAC场景对温度测量如此苛刻
工业和HVAC场景下的温度测量,跟我们在实验室里用个热敏电阻随便测测完全是两码事。工业现场往往伴随着强电磁干扰、长距离信号传输、宽温区变化以及长期无人值守的运行需求。HVAC系统里,温度传感器可能安装在风管深处、冷冻水管表面或者锅炉房高温区域,信号线动辄拉十几米甚至几十米,周围还有变频器、接触器、大功率电机这些干扰源在持续工作。这种环境下,如果测量前端的分辨率不够、抗干扰能力不强,读数就会跳来跳去,控制系统拿到这种数据根本没法做精准调节。
我在实际项目中遇到过不少案例,用普通MCU内置的12位ADC直接采集PT100或热电偶信号,结果在变频器启动的瞬间,温度读数能跳十几度。这不是传感器的问题,而是整个信号链的共模抑制、滤波和参考电压稳定性都不到位。所以,选一套靠谱的测量方案,核心不是看MCU主频多高,而是看模拟前端能不能把微弱的温度信号从噪声里干净地“捞”出来。
ADS122U04IPWR这颗24位Δ-Σ ADC就是专门干这个的。它内置PGA、双匹配电流源、振荡器和参考电压,几乎把高精度温度测量需要的模拟前端全部集成进去了。搭配STM32L452RE这颗低功耗ARM Cortex-M4 MCU,整个方案在精度、功耗和成本之间找到了一个很实用的平衡点。这套组合特别适合工业变送器、HVAC温控器、冷库监测、锅炉温度采集这类场景。
1.2 方案选型的核心逻辑:为什么是ADS122U04加STM32L452RE
先说说为什么选ADS122U04IPWR而不是其他ADC。这颗芯片有几个特性对温度测量特别友好:第一,它支持两路差分输入或四路单端输入,配合内部的双匹配电流源,可以直接驱动RTD(比如PT100、PT1000),不需要额外的恒流源电路。第二,它的PGA增益从1到128可调,对于热电偶那种输出只有几十微伏每摄氏度的信号,可以把增益拉高,把信号放大到ADC最舒服的输入范围。第三,它内置了50/60Hz同步抑制滤波器,在工频干扰严重的工业现场,这个功能能省掉很多外部滤波设计。
再说STM32L452RE。这颗MCU是STM32L4系列里的中坚力量,Cortex-M4内核带FPU,跑温度补偿算法、线性化查表、数字滤波都绰绰有余。它的低功耗特性也很关键,很多HVAC传感器是电池供电或者靠环路取电,系统平均功耗必须压到毫安级甚至微安级。L452RE在低功耗模式下可以做到几百纳安,配合ADS122U04的单次转换模式,整个系统可以做到“测一次、睡一会”的节奏,电池寿命轻松拉到几年。
两者之间的通信走SPI,ADS122U04的SPI接口最高支持到几MHz,STM32L452RE的SPI外设完全跟得上。而且ADS122U04的封装是TSSOP-16,引脚间距够大,手工焊接或者小批量生产都不至于太难搞。相比那些QFN封装的ADC,TSSOP在工业类产品里更受欢迎,因为维修和返修都方便。
1.3 系统架构的拆解:从传感器到数字输出的完整链路
整个测量链路可以分成四个部分来看。第一部分是传感器接口,根据测量对象不同,可能是两线制RTD、三线制RTD、四线制RTD,也可能是K型热电偶或者热敏电阻。第二部分是模拟前端调理,ADS122U04负责激励电流输出、信号放大、抗混叠滤波和模数转换。第三部分是数字通信与控制,STM32L452RE通过SPI读取ADC数据,运行温度计算和补偿算法。第四部分是系统接口,包括UART、I2C或者无线模块,把温度数据送到上位机或控制器。
这里有个设计细节值得展开说。ADS122U04的内部电流源有两路,匹配精度很高,温漂很低。对于三线制RTD,两路电流源分别流过RTD和补偿导线,可以抵消导线电阻带来的误差。对于四线制RTD,用一路电流源就够了,另外两根线专门做电压检测,完全消除导线电阻影响。热电偶的话,需要用到ADS122U04的内部温度传感器做冷端补偿,或者外挂一颗高精度温度芯片比如TMP117来做冷端参考。
STM32L452RE在这套架构里的角色不只是读数据。它还要做很多事情:比如对ADC原始码值做滑动平均滤波,对RTD做Callendar-Van Dusen方程线性化,对热电偶做多项式拟合或者查表插值,还要监测传感器断线、短路等故障状态。这些计算量对于M4内核来说不算大,但代码写得好不好,直接影响测量速度和功耗。
2. 核心细节解析与实操要点
2.1 ADS122U04IPWR的关键寄存器配置与参数计算
ADS122U04的寄存器不多,但每一个都影响测量结果。主要用到四个寄存器:配置寄存器0到3。配置寄存器0管输入多路复用器、增益、数据速率和转换模式。配置寄存器1管数据速率、工作模式、转换模式、温度传感器选择和烧毁电流源。配置寄存器2管参考电压选择、50/60Hz抑制、IDAC电流大小和IDAC路由。配置寄存器3管IDAC路由、DRDY模式、CRC校验和GPIO控制。
先看输入多路复用器。ADS122U04支持四种测量模式:两路差分、一路差分加两路单端、四路单端。对于RTD测量,通常用两路差分,一路接RTD,一路接参考电阻。参考电阻的作用是提供比例式测量,这样IDAC的温漂和长期漂移会被抵消掉。参考电阻的阻值选择有讲究:如果RTD是PT100,在0摄氏度时是100欧姆,在最高测量温度比如400摄氏度时大约是247欧姆。参考电阻一般选和RTD最大阻值接近的值,比如250欧姆或者300欧姆,这样在满量程时参考电压和RTD电压接近,ADC的动态范围利用最充分。
PGA增益的选择要看信号幅度。ADS122U04的满量程输入范围是正负VREF除以增益。假设参考电压是2.048V,增益设为8,那么满量程就是正负256mV。PT100在400摄氏度时压降大约是247欧姆乘以IDAC电流。如果IDAC设为500微安,压降就是123.5mV,在正负256mV范围内,增益8是合适的。如果IDAC设为1毫安,压降就是247mV,接近满量程,增益8也勉强可以,但留的余量不多。所以IDAC电流和增益要配合着算。
数据速率的选择要权衡速度和噪声。ADS122U04支持最高2000SPS,但速率越高噪声越大。对于温度测量,通常不需要那么快,20SPS到100SPS就够了。在20SPS时,50/60Hz抑制滤波器自动生效,对工频干扰抑制效果很好。如果现场干扰特别严重,可以降到5SPS,噪声会更低。我一般建议客户从20SPS开始调,如果读数还是跳,再往下降。
2.2 STM32L452RE的SPI通信与数据读取时序
STM32L452RE和ADS122U04之间的SPI通信,模式要设成CPOL=0、CPHA=1,也就是模式1。数据位是8位,MSB先行。ADS122U04的SPI接口支持全双工,但实际用的时候主要是读操作。读寄存器的命令是0x20加上寄存器地址,读数据的命令是0x10。写寄存器的命令是0x40加上寄存器地址。
DRDY引脚是关键。ADS122U04在转换完成后会把DRDY拉低,STM32L452RE可以用外部中断来捕获这个下降沿,然后在中断服务程序里启动SPI读取。也可以用轮询方式,但轮询会浪费CPU时间,低功耗场景下不划算。用外部中断的话,STM32L452RE可以进入STOP模式,等DRDY中断唤醒,读完数据再继续睡。
SPI时钟频率不能太高。ADS122U04在3.3V供电时,SPI最高时钟大约是4MHz,但实际用的时候建议降到1MHz到2MHz,走线长的时候更要降。因为工业现场SPI走线可能经过连接器、排线,信号完整性不如板内短线。我一般设成1MHz,稳定可靠,读取一次24位数据加上命令字节也就几十微秒,对整体功耗影响很小。
读取24位数据的时候要注意,ADS122U04输出的是二进制补码格式。正温度对应正码值,负温度对应负码值。STM32L452RE读回来三个字节后,要拼成一个32位有符号整数,然后右移8位或者根据PGA设置做相应处理。如果启用了CRC校验,还要多读一个字节做校验。CRC校验在工业环境里强烈建议打开,因为SPI通信受干扰后可能读到错误数据,没有校验的话错误数据会直接被当成温度值用,后果很严重。
2.3 温度传感器类型与匹配电路的设计细节
RTD和热电偶的接口电路差别很大。先说RTD。两线制RTD最简单,但导线电阻会直接加到测量结果里。PT100每摄氏度变化大约0.385欧姆,如果导线电阻有1欧姆,就相当于2.6摄氏度的误差。所以两线制只适合导线很短、精度要求不高的场合。三线制RTD用两根线分别走电流和检测电压,可以抵消大部分导线电阻影响,是工业里最常用的接法。四线制RTD精度最高,但接线多一根,成本也高一些,适合实验室或者高精度计量场合。
ADS122U04驱动三线制RTD的时候,两路IDAC分别接到RTD的两根引线上,第三根引线接到ADC的负输入端。这样两根引线上的导线电阻产生的压降会被ADC的差分输入抵消掉。但前提是两根引线的电阻要匹配,所以三线制RTD的三根线最好用同一批次、同一长度的线缆。
热电偶的接口更麻烦一些。热电偶输出的是微伏级信号,K型热电偶在室温附近大约41微伏每摄氏度。这个信号非常微弱,容易受到噪声干扰。ADS122U04的PGA可以设到128倍,把41微伏放大到5.2毫伏左右,再送给ADC。但PGA在高增益时输入阻抗会下降,热电偶的内阻如果比较大,就会形成分压,导致增益误差。所以热电偶的引线不能太长太细,最好用屏蔽双绞线,屏蔽层单点接地。
冷端补偿是热电偶测量的另一个关键点。热电偶测量的是热端和冷端之间的温差,要知道热端绝对温度,必须知道冷端温度。ADS122U04内部有一个温度传感器,精度大约正负0.5摄氏度,对于一般工业测量够用了。如果要求更高,可以外挂TMP117或者DS18B20做冷端参考,精度能到正负0.1摄氏度。冷端补偿的算法很简单:热端温度等于热电偶测得温差加上冷端温度。但要注意,冷端温度传感器要尽量靠近热电偶的接线端子,否则测到的不是真正的冷端温度。
3. 实操过程与核心环节实现
3.1 硬件电路设计与关键元器件选型
先画原理图。ADS122U04的供电是2.3V到5.5V,STM32L452RE是1.71V到3.6V,所以整个系统可以用3.3V单电源供电。ADS122U04的模拟电源和数字电源最好分开走线,中间用磁珠或者0欧姆电阻连接,模拟电源引脚旁边放1微法和100纳法电容各一颗。参考电压如果用内部2.048V,REF引脚接100纳法和1微法电容。如果用外部参考,比如REF5025,那就把内部参考关掉,外部参考接到REF引脚。
IDAC的输出引脚是AIN0到AIN3,具体哪两个引脚输出电流,由配置寄存器决定。RTD的激励电流走线要尽量短,尽量粗,减少寄生电阻。ADC的差分输入走线要等长、靠近,最好包地处理。SPI走线如果超过10厘米,建议加33欧姆串联电阻做阻抗匹配,减少过冲和振铃。
STM32L452RE的外围电路比较简单。晶振用8MHz无源晶振加两个22皮法电容,或者直接用内部HSI也行,但SPI时钟精度要求不高的话内部RC够用了。调试接口留SWD,方便下载和调试。电源部分用一颗LDO从5V或者12V降到3.3V,比如TPS7A4901,噪声低,适合给模拟电路供电。
传感器接口部分,如果是RTD,接线端子用可插拔的螺钉端子,方便现场接线。如果是热电偶,接线端子要用铜材质,因为热电偶的冷端就在端子处,端子材料如果和热电偶材料不同,会产生额外的热电势。最好用和热电偶材料匹配的端子,或者把冷端温度传感器紧贴在端子旁边。
3.2 固件开发:从初始化到温度计算的完整流程
固件开发分几个步骤。第一步是STM32L452RE的时钟和外设初始化。系统时钟设到80MHz,SPI1设成模式1、1MHz、8位数据。GPIO配置DRDY为外部中断下降沿触发,CS为普通推挽输出。第二步是ADS122U04的寄存器初始化。先发复位命令0x06,等1毫秒,然后依次写配置寄存器0到3。配置寄存器0设成AIN0和AIN1差分输入、增益8、20SPS、连续转换模式。配置寄存器1设成温度传感器关闭、烧毁电流源关闭、IDAC电流500微安。配置寄存器2设成内部2.048V参考、50/60Hz抑制开启、IDAC1路由到AIN0、IDAC2路由到AIN1。配置寄存器3设成CRC校验开启、DRDY专用引脚模式。
第三步是数据读取。DRDY中断触发后,拉低CS,发读数据命令0x10,然后读三个字节数据加一个字节CRC。拼成32位有符号数后,先做CRC校验,校验通过再继续处理。第四步是温度计算。对于RTD,先算RTD电阻:RRTD等于码值乘以参考电阻再除以满量程码值。然后根据Callendar-Van Dusen方程反推温度。对于PT100,0到850摄氏度范围内,温度等于负A加上根号下A平方减去4B乘以1减去RRTD除以R0,再除以2B。其中A等于3.9083e-3,B等于负5.775e-7,R0等于100。
对于热电偶,先算热电势:Vthermocouple等于码值乘以参考电压再除以增益再除以满量程码值。然后查K型热电偶分度表或者用多项式拟合,把热电势转成温差。最后加上冷端温度得到热端绝对温度。多项式拟合的系数可以从NIST数据库里找到,用五阶或者七阶多项式,精度能到0.1摄氏度以内。
第五步是数字滤波。我一般用滑动平均滤波,窗口大小取8或者16。窗口太大会导致响应变慢,太小则滤波效果不够。对于温度这种慢变量,窗口16在20SPS下相当于0.8秒的响应时间,大多数HVAC应用都能接受。如果要求更快响应,可以改用一阶IIR滤波,时间常数设0.5秒左右。
3.3 校准与精度验证的实操记录
校准是保证精度的最后一步。我一般用三点校准:冰水混合物0摄氏度、沸水100摄氏度(注意当地大气压修正)、或者用高精度干体炉在50摄氏度和200摄氏度两个点校准。校准的时候,把标准温度计的读数和系统读数记录下来,算出差值,然后在固件里做偏移补偿或者增益补偿。
对于RTD,如果误差是线性的,做增益和偏移两点校准就够了。如果误差是非线性的,比如在中间温度段偏差大,那就需要多点校准加分段线性插值。我实测过一批PT100,用ADS122U04加500微安IDAC,在0到200摄氏度范围内,不校准的情况下误差大约正负0.3摄氏度,两点校准后能压到正负0.05摄氏度以内。
热电偶的校准更复杂一些,因为冷端补偿本身有误差。我一般用补偿导线把热电偶延长到恒温槽里,恒温槽设成0摄氏度或者25摄氏度,然后用标准热电偶比对。实测下来,K型热电偶加ADS122U04内部冷端补偿,在0到400摄氏度范围内,误差大约正负1.5摄氏度。如果外挂TMP117做冷端补偿,误差能压到正负0.5摄氏度以内。
噪声测试也很重要。我把输入端短接,采集1000个点,算峰峰值噪声和RMS噪声。在增益8、20SPS、内部参考2.048V条件下,峰峰值噪声大约3微伏,RMS噪声大约0.5微伏。折算到温度,PT100在500微安激励下,0.5微伏对应大约0.0026摄氏度,完全满足工业级精度要求。
4. 常见问题与排查技巧实录
4.1 读数跳动大、噪声高的排查思路
读数跳动是最常见的问题。先查电源。ADS122U04的模拟电源如果纹波大,参考电压就会抖,读数自然跳。用示波器看AVDD引脚,纹波应该小于1毫伏。如果纹波大,检查LDO输出电容够不够,或者换低噪声LDO。再查参考电压。内部参考虽然方便,但温漂和噪声比外部好参考差一些。如果精度要求高,换REF5025或者ADR4525,噪声能低一个数量级。
然后查输入滤波。ADS122U04的输入端如果没有任何滤波,高频噪声会混进来。在AIN0和AIN1之间加一颗100纳法电容,在AIN0对地和AIN1对地各加一颗10纳法电容,组成差分和共模滤波。截止频率大概在几十kHz,对工频和开关噪声都有抑制。但电容不能太大,太大会影响建立时间,导致增益误差。
再查IDAC走线。IDAC输出是电流源,走线如果和SPI或者数字信号平行走,会耦合噪声。IDAC走线要远离数字走线,最好用地线隔开。如果实在避不开,用屏蔽线或者双绞线。
最后查数据速率和滤波。20SPS如果还跳,降到5SPS试试。软件滤波窗口从8加到32,看跳动是否减小。如果加了滤波还跳,那基本是硬件问题,不是软件能解决的。
4.2 SPI通信失败与DRDY异常的解决方法
SPI通信失败通常有几个原因。第一,CS时序不对。ADS122U04要求CS拉低后才能发命令,命令发完才能拉高。如果CS拉高太早,命令可能没被识别。第二,SPI模式不对。必须是模式1,CPOL等于0,CPHA等于1。如果设成模式0,数据采样边沿错了,读回来全是0或者全是1。第三,时钟太快。降到500kHz试试,如果通了就是时钟太快导致建立时间不够。
DRDY异常一般是配置问题。如果DRDY一直高,说明转换没启动。检查配置寄存器0的转换模式位,连续转换模式下DRDY会周期性拉低。如果DRDY一直低,说明转换一直在进行但数据没被读走,可能是SPI读取失败导致DRDY没复位。读数据后DRDY会自动拉高,如果没拉高,检查读命令是否正确。
还有一种情况是DRDY抖动。这通常是电源或者参考不稳定导致的。在DRDY引脚上加一颗100纳法电容到地,可以滤掉毛刺。如果还抖,检查ADS122U04的模拟电源和参考电压是否稳定。
4.3 温度计算偏差大的原因分析与修正
温度计算偏差大,先查参考电阻。参考电阻的精度直接影响测量结果。如果用1%精度的电阻,温度误差可能到好几度。必须用0.1%或者更高精度的电阻,温漂要小于25ppm每摄氏度。我一般用Vishay的PTF系列或者VPG的箔电阻,贵是贵点,但精度有保证。
再查IDAC电流匹配。两路IDAC如果不匹配,三线制RTD的导线电阻补偿就会失效。ADS122U04的IDAC匹配度典型值是0.1%,最大0.5%。如果匹配度不够,可以在固件里做补偿,但比较麻烦。简单办法是降低IDAC电流,匹配度会好一些。
再查冷端补偿。热电偶测量如果冷端补偿不准,整体偏差就大。用冰水混合物校验冷端传感器,看读数是不是0摄氏度。如果不是,做偏移校准。冷端传感器要远离发热元件,比如LDO和MCU,否则测到的不是环境温度。
最后查线性化算法。RTD的Callendar-Van Dusen方程在负温度段和正温度段系数不同,如果搞混了,负温度会算错。热电偶的分度表如果查错类型,比如K型查成J型,偏差会非常大。确认传感器类型和算法匹配。
4.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 读数跳动大 | 电源纹波大 | 示波器看AVDD | 换低噪声LDO,加滤波电容 |
| 读数跳动大 | 参考电压不稳 | 万用表测REF引脚 | 换外部高精度参考 |
| 读数跳动大 | 输入无滤波 | 检查AIN引脚电容 | 加差分和共模滤波电容 |
| SPI读回全0 | SPI模式错误 | 检查CPOL和CPHA | 设为模式1 |
| SPI读回全0 | CS时序错误 | 逻辑分析仪抓波形 | 确保CS在命令期间保持低 |
| DRDY不触发 | 转换模式错误 | 读配置寄存器0 | 设为连续转换模式 |
| DRDY不触发 | 芯片未复位 | 发复位命令 | 上电后先发0x06复位 |
| 温度偏差大 | 参考电阻精度低 | 测参考电阻阻值 | 换0.1%精度电阻 |
| 温度偏差大 | IDAC不匹配 | 测两路IDAC电流 | 降低IDAC电流或做补偿 |
| 温度偏差大 | 冷端补偿不准 | 冰水混合物校验 | 校准冷端传感器偏移 |
| 温度偏差大 | 线性化算法错误 | 核对传感器类型 | 确认方程和系数匹配 |
| 通信CRC错误 | 走线受干扰 | 示波器看SPI波形 | 加串联电阻,缩短走线 |
4.5 低功耗设计的实操心得
低功耗是电池供电HVAC传感器的核心需求。STM32L452RE在STOP模式下电流大约1微安,ADS122U04在单次转换模式下电流大约200微安,转换完成后自动进入休眠,电流降到几微安。整个系统平均电流可以做到几十微安,用一颗2000毫安时的锂亚电池,理论寿命超过5年。
实现低功耗的关键是让MCU和ADC都尽量睡觉。具体做法是:STM32L452RE配置DRDY中断唤醒,平时进STOP模式。ADS122U04配置成单次转换模式,MCU需要测量的时候发启动命令,然后进STOP等DRDY中断。DRDY中断来了,读数据,算温度,通过UART或者无线发出去,然后继续睡。测量间隔可以根据应用需求设,比如HVAC温度变化慢,30秒测一次就够了。
有个坑要注意:ADS122U04从休眠唤醒后,第一次转换需要等内部振荡器稳定,大概需要几十微秒。如果启动命令发完立刻读数据,会读到无效值。正确做法是发启动命令后等至少100微秒再读,或者用DRDY中断,等DRDY拉低再读。另外,IDAC从关闭到稳定也需要时间,如果每次测量都开关IDAC,建立时间会影响精度。建议IDAC保持常开,虽然多耗一点电,但省去了建立时间,整体功耗可能反而更低。
5. 方案扩展与场景适配建议
5.1 多通道温度测量的扩展方法
单颗ADS122U04只有一路差分输入,如果要测多点温度,有几种扩展方式。第一种是用多路复用器,比如TMUX1108或者ADG708,把多路传感器信号轮流切到ADS122U04的输入端。这种方式成本低,但切换后需要等信号建立,测量速度会慢一些。第二种是用多颗ADS122U04,每颗负责一路或者两路,通过SPI片选分别访问。这种方式速度快,但成本高,PCB面积也大。第三种是用ADS122U04的四路单端模式,配合外部多路复用器,可以测更多点。
我一般推荐第一种方案,用一颗8通道多路复用器加一颗ADS122U04,可以测8路RTD或者热电偶。多路复用器的导通电阻要小,漏电流要低,否则会影响精度。TMUX1108的导通电阻大约2欧姆,漏电流几十皮安,对测量影响很小。切换通道后,等1毫秒让信号建立,再启动ADC转换。
5.2 工业现场抗干扰的硬件与软件措施
工业现场抗干扰是系统工程。硬件方面,电源入口加TVS和共模电感,信号线加RC滤波和TVS,PCB布局模拟区和数字区分开,地平面完整。ADS122U04的模拟输入走线要远离时钟线和PWM线,如果实在避不开,垂直交叉走,不要平行。
软件方面,开启ADS122U04的50/60Hz抑制滤波器,数据速率选20SPS或者更低。STM32L452RE的SPI通信加CRC校验,数据读取做超时检测,如果超时就重新初始化ADS122U04。温度数据做限幅滤波,如果两次测量差值超过合理范围,比如5摄氏度,就丢弃这次数据,用上次的值代替。还可以做中值滤波,连续测三次取中间值,能有效滤掉脉冲干扰。
5.3 不同HVAC场景下的参数调整策略
HVAC场景很多,参数要跟着调。冷冻水温度测量,范围一般是0到20摄氏度,精度要求正负0.5摄氏度,用PT1000加500微安IDAC,增益8,20SPS就够了。热水温度测量,范围20到90摄氏度,精度正负1摄氏度,PT100加500微安IDAC,增益4或者8。蒸汽温度测量,范围100到200摄氏度,精度正负2摄氏度,PT100加1毫安IDAC,增益4。
风管温度测量要注意响应时间。风管里风速可能很快,传感器如果响应慢,测到的温度滞后于实际温度。这时候要选细径的RTD或者热电偶,减少热容。ADS122U04的数据速率可以提高到100SPS,软件滤波窗口减小到4,响应时间能压到0.5秒以内。
室外温度测量要考虑宽温区。冬天可能零下30摄氏度,夏天可能50摄氏度。PT100在零下30摄氏度时阻值大约88欧姆,在50摄氏度时大约119欧姆。参考电阻选150欧姆,增益8,IDAC 500微安,整个范围都能覆盖。冷端补偿如果用内部传感器,要注意内部传感器在零下温度时的精度会下降,最好外挂一颗宽温区温度芯片。
5.4 从原型到量产的关键注意事项
原型阶段用模块和杜邦线搭电路没问题,但量产必须重新设计PCB。ADS122U04的模拟部分要单独铺地,和数字地单点连接。参考电阻要用高精度低温漂的,封装选0805或者1206,减少焊接应力影响。IDAC走线要加粗,减少压降。SPI走线要等长,如果超过10厘米加串联电阻。
量产测试要覆盖高低温。至少做0摄氏度、25摄氏度、50摄氏度三个温度点的校准和验证。每个产品都要做,不能抽检,因为传感器和电阻的个体差异会导致偏差。校准数据存在STM32L452RE的Flash里,每台产品独立校准。
长期稳定性也要考虑。ADS122U04的参考电压温漂典型值是5ppm每摄氏度,在零下40到85摄氏度范围内,参考电压变化大约0.06%,对应温度误差大约0.15摄氏度。如果要求更高,用外部参考,温漂能压到2ppm每摄氏度以内。电阻的长期漂移也要看,箔电阻年漂移小于25ppm,薄膜电阻可能到100ppm,选型的时候要看清楚。
6. 写在最后的一些实操体会
这套方案我在好几个工业温度变送器项目里用过,整体表现很稳。ADS122U04的集成度确实高,省了不少外围电路,PCB面积能控制在30毫米乘40毫米以内。STM32L452RE的功耗和性能平衡得很好,跑温度补偿算法和通信协议都不吃力。
踩过的坑主要是两个。一个是IDAC走线没注意,和SPI线平行走了几厘米,结果读数在通信的时候会跳。后来把IDAC走线改到板子另一层,中间用地平面隔开,问题就解决了。另一个是冷端补偿传感器放得太靠近LDO,LDO发热导致冷端温度偏高,热电偶读数整体偏低。后来把冷端传感器移到板子边缘,远离发热源,偏差就消了。
如果你也在做类似的项目,我的建议是先把ADS122U04的评估板买回来,用STM32L452RE的Nucleo板搭个最小系统,把SPI通信和寄存器配置跑通。然后再画自己的板子,这样风险最小。寄存器配置不要照抄网上的代码,一定要对着数据手册逐位确认,因为不同批次的芯片默认值可能不一样。校准的时候多花点时间,把高低温都覆盖到,量产的时候会省很多事。