基于ADS122U04与STM32L4的工业温度采集系统设计

发布时间:2026/11/5 6:24:47
基于ADS122U04与STM32L4的工业温度采集系统设计 做工业测控和HVAC系统的人迟早会面对一个看起来基础、实际上很缠人的问题温度到底测准没有。管道风道里的PT100信号拉到控制器时经常已经裹上一堆噪声热电偶输出只有几十微伏远一点就被变频器、接触器和电机干扰得没法看。所以在最近一个项目里我换了TI的ADS122U04IPWR加ST的STM32L4A6RG来做温度采集。ADS122U04IPWR是一颗24位Δ-Σ ADC自带PGA、基准源和可编程激励电流源最重要的是它直接用UART把转换结果送出来等于把模拟前端的全套工作放到传感器附近完成再用一根串口线把数字信号传到MCU。STM32L4A6RG是Cortex-M4F内核的低功耗MCU1MB Flash加320KB RAM串口、DMA、低功耗模式都很齐全。这套组合特别适合多通道风道温度监控、冷水机组进出口温度管理、热泵和压缩机保护这类工业和HVAC应用。文章不写空话把我选型时怎么想、硬件怎么接、底层怎么调、温度怎么算、现场怎么校准完整摊开讲一遍。1. 选型逻辑为什么是UART型24位ADC加STM32L4而不是SPI接口方案先说说ADS122U04的来路。它本质上是ADS1220的UART输出版本。ADS1220用的人很多SPI接口性能稳定但SPI在工程现场有一个先天烦恼它讲究时钟同步和时序线一长就不可靠而且每个从机都要一根片选线。ADS122U04把这个痛点点掉了内部照样是24位Δ-Σ转换核心照样带PGA、2.048V内部基准、两个IDAC电流源和内部温度传感器但转换结果通过UART按帧发出。UART是异步通信对时钟同步的要求低得多对线长的宽容度也高得多连三根线TX、RX、GND就能工作距离拉到两三米完全没压力。STM32L4A6RG这边选它不是冲着大厂稳妥去的而是四个实际的理由Cortex-M4F带FPU温度多项式计算、数字滤波这些活很轻松1MB Flash和320KB RAM放得下热电偶分度表、RTD查表数据还能存一段现场日志UART资源多用DMA收ADC数据几乎不占CPU低功耗模式完整HVAC控制器常年通电能在停止模式里跑定时唤醒省电效果很直接。1.1 传感器侧数字化工业现场最值钱的一种取舍让我下决心用ADC和MCU分离而不是把传感器模拟信号直接拉回控制器的是现场布线的长度和干扰。PT100在0℃时是100Ω温度每升1℃只增加0.385Ω用1mA激励电流温差1℃对应的电压变化只有0.385mV。这个量级的信号在工业现场走三五米旁边的变频器一启动信号基本就废了。把ADS122U04放在传感器箱子旁边模拟信号只走最短距离之后全走数字这是最干净的做法。STM32那边读到的已经是24位干净数据后面处理逻辑一下子简化了。1.2 同类型接口方案对比UART在这个场景下为什么更讨巧接口距离与抗干扰接线复杂度多设备扩展在HVAC场景的实用性SPI20cm以内可靠线长易丢数据需CLK/CS/MOSI/MISO4线起步每个从机一根片选适合板级近距离不适合跨箱体I2C地址有限速率低抗干扰一般2线但要处理上拉地址冲突要规划短距离板级还可以UART本方案数米无压力物理层还能升级RS4852~3线一主一从最简单温度采集点分散时非常实用单总线线少距离远但是时序敏感1线可挂多个但时序严苛高精度型号少在传感器散落在设备各处的HVAC场景UART的现实优势非常明显。而且如果觉得两三米还不够加个RS485收发器就能把距离推到百米级别上层代码基本不用动。这一点在我做后续扩展项目时省了不少事。2. 硬件连接与传感器前端RTD、热电偶、热敏电阻三套接线2.1 电源、地线和一个必须守的上电时序ADS122U04的供电范围比较宽3.3V下运行很正常。AVDD和DVDD都要就近放0.1µF陶瓷电容再并一个1µF左右的电容模拟地和数字地在芯片附近单点汇合避免数字电流串进模拟回路。一个重要注意事项MCU和ADC之间一定要保证同地UART的RX/TX虽然是数字信号但如果两端地电位差过大轻则误码重则烧接口。实际项目里我在两根UART线上各串联一个33Ω电阻对热插拔和静电都友好。上电时序同样容易被忽略。ADC需要先上电稳定之后才能接收配置命令。如果MCU复位比ADC快一上电就往ADC发配置第一帧很可能会丢。稳妥做法是MCU启动后先延时几十毫秒再发一条RESET命令最后才做寄存器配置。2.2 RTD四线制比值测量接线与消误差原理测PT100/PT1000最推荐四线制比值测量。典型接法是IDAC1从ADC芯片流出先经过RTD再经过一个精密参考电阻RREF最后回到GNDADC的两个差分输入脚跨接在RTD两端ADC的基准电压输入跨接在RREF两端。这样同一个激励电流I既流过RTD也流过RREFADC测量到的电压比就是ADC输出码正比于 V_RTD / V_REF而 V_RTD / V_REF (I × R_RTD) / (I × R_REF) R_RTD / R_REF。电流I在等式里约掉了这带来的好处很直接IDAC的精度、温漂、长期漂移全都不影响测量结果。整个测量链路里RREF的品质才是关键。这就是比值测量的精髓。RREF选型有讲究。温度系数建议25ppm/℃以下初始精度0.1%以内我一般选精密金属膜电阻或金属箔电阻。对PT100RREF常用100Ω或430Ω太小基准电压低会压缩有效范围太大RTD上的压降和自热功耗都会升高同时共模电压也被抬高。项目里我用过430Ω配250µA激励电流实测效果很好。两线制和三线制是成本和精度之间的折衷两线制会把导线电阻直接算进阻值PT100线阻10Ω能带来约26℃的误差几乎不可接受三线制可以用两个IDAC做补偿接线和配置复杂一点适合没有四线条件又想控制误差的场景。我在HVAC项目里只要空间允许就用四线。RTD和热电偶的接线端子最好加TVS或钳位二极管现场带电插拔不是没发生过输入级有保护会安心很多。2.3 热电偶的高增益接线与冷端补偿热电偶信号非常微弱K型热电偶大约40µV/℃所以PGA要设高增益一般取64或128。热电偶输出的是热端与冷端的温差电压冷端就是接线端子那里的温度必须做冷端补偿。ADS122U04内部自带温度传感器可以测芯片附近温度把接线端子靠近芯片安装用内部温度传感器读数做冷端温度再配合分度表就能算出真实温度。接线小细节热电偶线不能直接和铜线长时间拧在一起最好用专用端子或等温块。冷端温度变化是热电偶测量里最主要的误差来源要给接线端子加个遮风罩别让它被气流直吹。曾经遇到一个项目风道里的测温点读数跟着风机启停周期性波动查到最后就是冷端被风直吹导致的。2.4 NTC热敏电阻的另一套玩法NTC阻值大自热是主要矛盾。激励电流一般选100µA到250µA大了发热明显小了信噪比差。如果只是做管道温度趋势监测NTC性价比确实高要做高精度控制RTD更稳。用NTC配合IDAC做比值测量时同样可以把NTC串一个精密RREF让ADC测电压比再通过Steinhart-Hart公式反算温度。Steinhart-Hart公式里有三个系数需要三个温度点标定但一旦标定好线性度比简单查表平滑得多。3. 从原始码到温度ADS122U04输出数据的三步换算链路3.1 24位二进制补码的接收与符号扩展ADS122U04每次转换结果通过UART发出3个字节高位在前数据是有符号数因为差分输入下负电压也能表示。MCU收到3字节后要转成32位有符号整数uint8_t data[3]; int32_t raw, value; if (HAL_UART_Receive(huart1, data, 3, 100) HAL_OK) { raw (data[0] 16) | (data[1] 8) | data[2]; if (raw 0x800000) raw | 0xFF000000; // 24位符号扩展 value raw; }很多第一次写的人会漏掉符号扩展结果低温下读出来是几百万的怪异正数然后绕一大圈弯路。这个操作虽然只有一行但最容易出错。提示如果读到的数据在0℃附近反复横跳先检查符号扩展那一步再看后面公式里的比例系数。3.2 为什么RTD优先直接算阻值而不是先算电压在比值测量模式下如果基准电压来自与RTD串在同一电流路径上的RREF输出码其实和电压值、增益的关系都摊平了可以直接写R_RTD (raw / 2^23) × R_REF比如raw读出是2_000_000RREF430Ω那么R_RTD (2000000 / 8388608) × 430 ≈ 102.5Ω对应PT100大约6.6℃。这里用2^23而不是2^24是因为24位有符号数的正满量程对应VREF负满量程对应-VREF幅度轴是±2^23个LSB。工程上先用2^23做比例基准剩下的系统偏差交给校准环节修正。3.3 RTD温度反演Callendar-Van Dusen方程得到阻值之后PT100的阻温关系用Callendar-Van Dusen方程描述0℃到850℃区间R(t) R0(1 A·t B·t²)-200℃到0℃区间R(t) R0(1 A·t B·t² C·(t-100)·t³)其中R0100ΩA3.9083e-3B-5.775e-7C-4.183e-12。反算温度时因为方程里有t的二次和三次项直接解比较麻烦MCU里一般用牛顿迭代三五次就能收敛// 给定R_RTD解出温度t0℃以上简化版 double t (R_RTD / R0 - 1.0) / A; // 初值 for (int i 0; i 4; i) { double err R0 * (1 A*t B*t*t) - R_RTD; double dRdt R0 * (A 2*B*t); t t - err / dRdt; }如果不想用迭代也可以预先做一张-50℃到200℃的分度表线性插值。HVAC这种温区一张100点的表做到0.1℃分辨率很轻松。3.4 热电偶怎么从电压走到温度热电偶计算分两步第一步用内部温度传感器读到的冷端温度T_cold查分度表得到冷端对应的热电偶电压E_cold第二步把热端测到的电压E_hot加上E_cold得到相对于0℃冷端的等效电压再用分度表反查温度。K型热电偶在MCU里通常先存一个查找表几十个点插值计算速度快、代码简单。也可以用一元多次多项式拟合但K型在宽温区非线性很强单项式拟合阶数太高不如查表实用。4. STM32L4A6RG驱动落地UART帧读写、寄存器配置与状态检测4.1 UART与DMA的基础配置我习惯用USART1连ADS122U04波特率9600。有人会问为什么不拉高波特率ADS122U04的数据速率本身不高9600bps足够传完24位结果而且低波特率抗干扰更稳。初始化代码huart1.Instance USART1; huart1.Init.BaudRate 9600; huart1.Init.WordLength UART_WORDLENGTH_8B; huart1.Init.StopBits UART_STOPBITS_1; huart1.Init.Parity UART_PARITY_NONE; huart1.Init.Mode UART_MODE_TX_RX; HAL_UART_Init(huart1);如果想省CPU可以用DMA接收。DMA循环缓冲配合UART空闲中断把一帧3字节自动收进缓冲区CPU只在空闲中断里取走并处理。ADS122U04的帧很短这套方式跑起来非常舒服。4.2 配置寄存器的写入时序把寄存器配置全部写好再启动转换是稳定工作的前提。ADS122U04支持写寄存器命令WREG命令字节通常为0x40加上寄存器地址编码后面跟配置值。代码里可以这样抽象void ads122u04_write_reg(uint8_t reg, uint8_t val) { uint8_t buf[2]; buf[0] 0x40 | (reg 2); // WREG命令具体编码以数据手册为准 buf[1] val; HAL_UART_Transmit(huart1, buf, 2, 100); }以PT100四线比值测量为例配置里关键几项包括输入MUX选AIN0/AIN1差分PGA设1因为比值测量不需要放大基准电压选外部基准REF1跨接在RREF两端IDAC1开启并设置250µA激励电流路由到RTD回路。这些位分布在寄存器0到4具体的bit定义不同版本数据手册略有差异务必对着手册逐位核对。很多配置对了但读数不对的问题最后查下来都是某一位写反。4.3 连续转换模式下的数据读取我一般用连续转换模式启动后ADC自己按设定数据速率转换MCU随时发RDATA命令取最新结果。RDATA命令字节为0x10然后读3字节uint8_t cmd ADS122U04_CMD_RDATA; uint8_t raw[3]; int32_t value; HAL_UART_Transmit(huart1, cmd, 1, 50); HAL_UART_Receive(huart1, raw, 3, 50); value ((int32_t)raw[0] 16) | ((int32_t)raw[1] 8) | raw[2]; if (value 0x800000) value | 0xFF000000;如果ADS122U04封装上有数据就绪引脚可以把该引脚接到STM32L4的EXTI数据一准备好MCU立刻读取没有就用系统tick周期读。温度是慢变量1秒读一次都够。4.4 通信异常恢复与传感器断线判断实际运行中UART可能因为干扰丢一帧不能因为一帧失败就让整个系统傻掉。我的做法每次读取设超时连续5次读取失败就发RESET命令重新初始化ADC再不行就置故障标志等待人工处理。传感器开路和短路也有特征。RTD开路时激励电流无处可走ADC输入被拉向不可控位置输出往往打满或接近满量程RTD短路时差分输入接近0输出码接近0。代码里做一个上下限判断超出合理电阻范围的读数直接丢弃并报故障这比让错误值参与控制可靠得多。5. 现场精度实践校准方法、噪声抑制与HVAC部署注意点5.1 两点校准一套简单但有效的增益和偏移修正就算有24位ADC系统里还有参考电阻精度、运放偏置、导线电阻等误差两点校准是快速提升整体精度的办法。操作思路在标准温度源或冰水槽中放好传感器记录第一次换算后的温度读数T_raw1记下标准温度T1换一个准确的第二温度点记录T_raw2与T2计算修正系数a (T2 - T1) / (T_raw2 - T_raw1)b T1 - a × T_raw1之后系统温度 a × T_raw b。举个例子0℃点系统初步读成0.3℃50℃点系统初步读成49.8℃那么a 50 / (49.8 - 0.3) ≈ 1.0101b -0.303。这套线性修正在HVAC温区里完全够用。测RTD时我会把探头浸入0℃冰水混合物和100℃沸水做两点效果很直观。5.2 数字滤波滑动平均、中值与限幅的组合24位ADC分辨率高低位跳动是常态不加滤波直接上数据会很难看。工程上常用组合拳限幅滤波相邻两个合法采样差超过阈值就丢弃新值比如温度变化超过5℃/s就视为异常中值滤波取5个值排序取中间值抗脉冲干扰滑动平均对窗口内数据求平均平滑趋势。温度是慢变量窗口大一点也不怕。我在风道温度采集里用了32点滑动平均1秒输出一次温度曲线非常干净。需要注意如果数据速率本身较高要先做限幅和去界外值再平均否则一个尖峰能污染整个窗口。5.3 HVAC现场电磁干扰屏蔽、接地和布线三件事HVAC现场干扰源主要是变频器和继电器。几条经验传感器线用屏蔽双绞线屏蔽层一端接地通常在采集箱侧不要两端都接避免地环路UART信号线和强电电缆分开走线避免平行贴在一起如果现场电磁环境特别恶劣UART物理层可以换成RS485或加磁环ADC供电如果来自24V转3.3V模块注意纹波必要时加LC滤波。有一次现场数据周期性跳动查了一下午最后发现是UART线缆和一根220V电缆扎在同一个线槽里。把两者分开后问题立刻消失。这类事只有经历过才记得住。5.4 低功耗与长期运行策略HVAC控制器往往7x24小时通电低功耗不能只挂在嘴上。STM32L4A6RG的停止模式配合RTC唤醒可以让MCU大部分时间睡觉醒来读一次ADC处理完继续睡。ADS122U04这边如果不用连续转换可以配置成单次测量或者在不测量时进入睡眠模式电流能降到微安级。对温控应用一秒采集一次已经绰绰有余甚至5秒一次都够。采样率、功耗和电磁暴露是绑定的能慢则慢这是系统长期稳定的一大法宝。6. 试运行中的典型故障从现象到根因的排查记录6.1 读数一直在跳动怎么都压不下来这类问题我碰到过两次根源完全不一样。第一次是参考电阻用了普通贴片电阻温漂大空调一开、板子温度一变读数就跟着飘换成25ppm的精密电阻之后就好了。第二次是ADC参考电压脚上的滤波电容放得太远PCB走线拉出长线高频噪声耦合进基准给REFP/REFN脚就近放100nF电容后读数立刻稳定。数字端再怎么追求24位精度前端一个缺陷就能把结果毁掉。6.2 UART偶尔丢帧、初始化失败排查顺序别乱示波器看UART波形确认波特率误差在2%以内。STM32L4用HSE配9600通常没问题用内部RC可能会偏检查ADC和MCU是否真正共地UART的GND线不要借别处的回路检查开机时序MCU复位期间UART线如果有杂波可能把ADC的状态机搞乱。最直接的解法是初始化前先发RESET。6.3 温度整体偏高或者偏低先别怪ADC先检查MUX和增益配置。常见问题包括差分输入接反此时低温读数变负、高温变正严重不对称或者PGA增益没设成预期值满量程比例错了一位。其次看校准如果直接用理论公式但没加校准系数板级误差自然会表现为整体偏移。我一般先用精密电阻箱代替传感器做整链路自检把ADC、基准、软件全流程验证一遍再上真实探头这样能快速定位问题出在模拟前端还是传感器本身。6.4 传感器长时间运行后读数异常RTD探头老化、接线端子氧化、电缆接头进水这类软故障在HVAC现场很常见。软件上要给自己留一手定期自检给系统插一路精密电阻作为参考通道定期比对发现偏移超限就报维护开机自诊断检查是否有开路短路特征变更留痕记录每次校准参数便于回溯。我在这个项目里的最后一道工序是给每个温度通道板载了一路精密电阻作参考通道定期轮询比较。三个月运行下来数据基本都在设计范围内。以后回访调试先把参考通道读数调出来就能判断是探头老了还是链路漂了省了不少现场拆装时间。现象优先排查方向常见根因读数跳动基准脚电容、RREF温漂基准噪声、电阻温漂丢帧UART波形、共地情况波特率偏差、地电位差温度偏移MUX/增益配置输入接反、校准丢失长期漂移探头、端子、参考通道老化、氧化、进水

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询