news 2026/11/5 6:27:04

基于ADS122U04与STM32L151的工业级PT100测温方案设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于ADS122U04与STM32L151的工业级PT100测温方案设计

1. 工业测温项目的整体设计思路

1.1 为什么选ADS122U04IPWR这颗24位ADC

工业现场和HVAC系统里测温度,绕不开一个核心矛盾:传感器输出的信号极其微弱,而环境里的电磁干扰又特别脏。PT100在0摄氏度时只有100欧姆,温度每变化1摄氏度,阻值变化大约0.385欧姆。折算到整个测量范围,比如0到400摄氏度,满量程阻值变化也就154欧姆左右。如果激励电流用1毫安,满量程电压只有154毫伏,而每摄氏度对应的电压变化仅0.385毫伏。这个量级下,用STM32L151ZD自带的12位ADC去采,分辨率根本不够看。

ADS122U04IPWR是一颗24位、4通道、带PGA的低功耗ΔΣ型ADC,内置两个匹配的IDAC电流源,专门为RTD和热电偶这类传感器设计。它的有效分辨率在增益为1、20SPS数据率下能到21位以上,换算成PT100的测温分辨率,轻松做到0.01摄氏度级别。更关键的是,它内部集成了激励电流源,省掉了外部恒流源电路,这对空间紧张的工业变送器来说非常友好。

选这颗芯片还有一个隐性理由:它支持UART接口,和STM32L151ZD的通信非常直接。SPI接口的ADC在工业现场需要额外考虑片选和时钟线的隔离,而UART只需要两根线,配合数字隔离器就能把模拟侧和数字侧彻底隔开,这在HVAC这种电机、继电器频繁动作的环境里,是保证测量稳定性的关键。

1.2 STM32L151ZD在系统中的角色定位

STM32L151ZD是ST的Cortex-M3低功耗系列,最高32MHz主频,带192KB Flash和20KB RAM,对于温度变送器这种应用绰绰有余。选它主要看中三点:低功耗、外设够用、工业温度范围。

低功耗这点在HVAC的无线传感器节点或者环路供电变送器里特别重要。STM32L151ZD在低功耗运行模式下电流可以压到10微安级别,配合ADS122U04IPWR的单次转换模式,整个系统可以做到间歇工作,平均功耗控制在毫安级以下。环路供电的4-20mA变送器,整个系统预算只有3.5毫安左右,每一微安都要抠。

外设方面,它有两个UART,一个用来和ADS122U04IPWR通信,另一个可以接RS485收发器做Modbus通信。还有硬件I2C可以接EEPROM存校准系数,有DAC可以输出模拟量,资源刚好卡在够用不浪费的线上。

1.3 三线制PT100的接线逻辑与优势

PT100的接线方式有兩线制、三线制和四线制。两线制最简单,但导线电阻直接串在测量回路里,每米铜线大约0.02欧姆,几十米线缆下来误差就好几度。四线制最准,但多两根线,成本和接线复杂度都上去了。

三线制是工业和HVAC应用里的甜点区。它假设三根线的材质、长度、走线路径完全一致,那么导线电阻在两次测量中相互抵消。具体来说,ADS122U04IPWR的两个IDAC分别从PT100的两端注入电流,ADC测量其中一端到第三根线之间的电压,通过内部多路复用器切换测量通道,把导线电阻从结果里消掉。

这个方案的前提是三根线要等长、同批次、同走向。实际施工时,我习惯用三芯屏蔽电缆,屏蔽层单端接地,在传感器端把屏蔽层悬空。如果现场电磁环境特别恶劣,比如变频器旁边,那还是老老实实上四线制,多花两根线的钱换安心。

2. 核心硬件电路与关键参数计算

2.1 模拟前端电路设计要点

ADS122U04IPWR的模拟输入是差分输入,PT100接在AIN0和AIN1之间,第三根线接AIN2作为参考点。IDAC1从AIN0注入,IDAC2从AIN1注入,两个电流源各输出500微安,在PT100上叠加1毫安的激励电流。

这里有个细节:IDAC的电流精度直接影响测量精度。ADS122U04IPWR的IDAC初始精度是正负0.5%,温漂是50ppm每摄氏度。如果要求0.1摄氏度的测量精度,这个电流源的精度是不够的,必须做比率式测量。所谓比率式,就是用同一个电流源产生的电压作为ADC的参考电压。具体做法是在IDAC回路里串一个精密电阻,比如4.02千欧姆的0.1%电阻,IDAC电流流过它产生参考电压,同时这个电流也流过PT100。这样电流源的漂移同时影响测量和参考,在ADC的转换结果里被抵消掉。

参考电阻的选值要算一下。IDAC输出500微安,4.02千欧姆上产生2.01伏。ADS122U04IPWR的参考电压输入范围是0.75伏到VDD,2.01伏在3.3伏供电下是合适的。PT100在400摄氏度时阻值约247欧姆,1毫安激励下电压约247毫伏,经过PGA放大8倍后是1.976伏,刚好接近参考电压2.01伏,充分利用了ADC的满量程范围。

2.2 参考电阻与激励电流的匹配计算

参考电阻的精度和温漂是系统精度的天花板。我用的是Vishay的PTF系列或者VPG的VFCP系列,初始精度0.05%,温漂2ppm每摄氏度。这个电阻的价格可能比ADC还贵,但它决定了整个系统的长期稳定性,省不得。

计算过程是这样的:假设测量范围0到400摄氏度,PT100阻值范围100到247.09欧姆。激励电流1毫安,PT100上电压范围100到247.09毫伏。PGA增益选8,ADC输入范围是0.8到1.976伏。参考电压需要大于等于1.976伏,取2.01伏。参考电阻等于2.01伏除以1毫安,等于2.01千欧姆。但IDAC是两路各500微安,在参考电阻上汇合,所以实际流过参考电阻的电流是1毫安。等等,这里要仔细看数据手册。

ADS122U04IPWR的两个IDAC可以独立配置。常见做法是IDAC1和IDAC2都输出500微安,分别从PT100两端注入,两路电流在PT100上汇合后流向参考电阻,所以参考电阻上的电流是1毫安。参考电阻值等于2.01伏除以1毫安,等于2.01千欧姆。但标准阻值里2.01千欧姆不好找,可以用2千欧姆的0.05%电阻,参考电压变成2.0伏,PT100满量程电压1.976伏,仍然在范围内,只是浪费了一点点量程。

2.3 数字隔离与电源设计

工业现场的数字隔离是必须的。ADS122U04IPWR的UART接口和STM32L151ZD之间要加数字隔离器,我用的是ADI的ADuM1201或者TI的ISO7221。隔离器的选型看三个参数:数据率、隔离电压、功耗。UART波特率用9600或者19200就够了,隔离器数据率选1Mbps的绰绰有余。隔离电压根据现场情况,一般2500Vrms起步,如果传感器在户外或者接长线,建议上5000Vrms。

电源方面,模拟侧和数字侧要分开供电。模拟侧用低噪声LDO,比如TI的TPS7A4901,输出3.3伏给ADS122U04IPWR的AVDD。数字侧可以用开关电源,但要在LDO前面加π型滤波。两个电源的地通过隔离器的隔离带分开,模拟地和数字地只在ADC下方单点连接。

注意:ADS122U04IPWR的AVDD和DVDD虽然都是3.3伏,但必须分别去耦。每个电源引脚旁边放一个100nF的X7R电容和一个1微法的钽电容,位置尽量靠近引脚。我见过有人省掉1微法电容,结果ADC的噪声大了好几倍。

3. 固件实现与寄存器配置实操

3.1 ADS122U04IPWR的初始化流程

ADS122U04IPWR上电后需要一系列配置才能开始转换。我一般按这个顺序来:复位、配置寄存器、校准、启动转换。

复位用发送0x06命令,或者拉低RESET引脚至少两个时钟周期。复位后所有寄存器回到默认值,此时ADC处于掉电状态。接下来配置寄存器0到寄存器3。

寄存器0控制多路复用器和增益。我要测量AIN0和AIN1之间的差分电压,增益选8,所以寄存器0写0x08。这里有个坑:ADS122U04IPWR的PGA在增益大于1时,输入共模电压范围会受限。PT100两端的共模电压大约是激励电流乘以PT100阻值的一半,加上参考电阻上的电压。算下来在1.5伏左右,3.3伏供电下PGA的共模范围是0.2伏到AVDD减0.2伏,1.5伏在范围内,没问题。

寄存器1控制数据率和转换模式。工业测温不需要太快,20SPS就够了,对应寄存器1写0x00。转换模式选单次转换,每次需要读数时发一个启动命令,转换完成后ADS122U04IPWR会拉低DRDY引脚,STM32L151ZD用外部中断检测这个下降沿。

寄存器2控制IDAC电流和参考电压选择。IDAC电流选500微安,参考电压选外部参考,也就是REF0和REF1之间的电压。寄存器2写0x10。

寄存器3控制IDAC的通道映射。IDAC1连到AIN0,IDAC2连到AIN1,寄存器3写0x05。

3.2 STM32L151ZD的UART通信与数据读取

STM32L151ZD和ADS122U04IPWR之间的UART通信,我习惯用DMA加空闲中断的方式。ADS122U04IPWR的UART是双向的,STM32发命令,ADS122U04IPWR回数据。命令长度是1到5个字节,数据长度是3个字节,对应24位转换结果。

初始化时,STM32的UART配置成9600波特率、8位数据、无校验、1位停止位。ADS122U04IPWR的UART模式需要先发一个同步字0x55,然后发命令。我一般把命令封装成函数,比如写寄存器函数、读寄存器函数、启动转换函数、读数据函数。

读数据的时候要注意时序。ADS122U04IPWR在DRDY拉低后,数据在DOUT线上有效。STM32检测到DRDY下降沿后,先发一个0x10命令(读数据命令),然后接收3个字节。第一个字节是MSB,第三个字节是LSB。把三个字节拼成24位有符号整数,再转换成电压值。

// 读取ADS122U04IPWR转换结果的示例代码 int32_t ADS122U04_ReadData(void) { uint8_t rx_buf[3]; uint8_t cmd = 0x10; // 读数据命令 HAL_UART_Transmit(&huart1, &cmd, 1, 100); HAL_UART_Receive(&huart1, rx_buf, 3, 100); int32_t raw = ((int32_t)rx_buf[0] << 16) | ((int32_t)rx_buf[1] << 8) | rx_buf[2]; if (raw & 0x800000) { raw |= 0xFF000000; // 符号扩展 } return raw; }

3.3 PT100阻值到温度的换算方法

拿到ADC的原始码值后,先算PT100的阻值。比率式测量下,PT100阻值等于参考电阻乘以ADC码值除以满量程码值。满量程码值是2的23次方减1,也就是8388607。参考电阻2千欧姆,所以PT100阻值等于2000乘以raw除以8388607。

得到阻值后,用Callendar-Van Dusen方程换算温度。0到850摄氏度范围内,方程是:

R(t) = R0 * (1 + At + Bt^2)

其中R0是0摄氏度时的阻值,PT100是100欧姆。A等于3.9083e-3,B等于-5.775e-7。反解t需要解一元二次方程:

t = (-A + sqrt(A^2 - 4B(1 - R/R0))) / (2*B)

这个公式在STM32L151ZD上算一次大概几十微秒,20SPS的数据率下完全来得及。如果嫌浮点运算慢,可以查表加线性插值,但STM32L151ZD有硬件浮点单元吗?没有,Cortex-M3没有FPU。不过软件浮点也够用,或者用定点数运算。

// PT100阻值转温度(0-850摄氏度) float PT100_ResistanceToTemp(float resistance) { const float R0 = 100.0f; const float A = 3.9083e-3f; const float B = -5.775e-7f; float ratio = resistance / R0; float discriminant = A * A - 4.0f * B * (1.0f - ratio); if (discriminant < 0) return -999.0f; // 错误 float temp = (-A + sqrtf(discriminant)) / (2.0f * B); return temp; }

4. 校准、补偿与现场问题排查

4.1 系统校准的两种实用方法

任何高精度测量系统都离不开校准。我用两种方法:单点校准和两点校准。

单点校准适合现场快速修正。把一个已知精度的温度计和PT100放在同一个恒温槽里,等温度稳定后,读取ADC码值,算出当前测量温度,和标准温度比较,得到一个偏移量,存到EEPROM里。以后每次测量都加上这个偏移量。这种方法简单,但只在一个温度点准确,其他温度点可能有残差。

两点校准更严谨。用两个温度点,比如0摄氏度和100摄氏度,分别记录ADC码值和标准温度,算出增益误差和偏移误差。增益误差等于标准温差除以测量温差,偏移误差等于标准温度减去测量温度乘以增益。这两个系数存到EEPROM,测量时先乘增益再加偏移。

我一般建议客户做三点校准:0度、50度、100度。用最小二乘法拟合一条直线,得到增益和偏移。如果非线性明显,比如用PT100测负温度,那就需要分段校准或者用更高阶的拟合。

4.2 自热效应与激励电流的权衡

PT100是有自热效应的。激励电流流过PT100会产生焦耳热,导致传感器温度略高于环境温度。自热误差等于激励电流的平方乘以PT100阻值乘以热阻。PT100在空气中的热阻大约是0.2到0.5摄氏度每毫瓦。1毫安激励下,PT100在100摄氏度时功耗是0.385毫瓦,自热误差约0.08到0.19摄氏度。这个误差在0.1摄氏度精度要求下已经不可忽略了。

降低自热误差有两个办法:减小激励电流,或者用脉冲激励。减小电流到100微安,自热误差降到0.001到0.002摄氏度,但信号也小了10倍,对ADC的噪声要求更高。ADS122U04IPWR在增益128、20SPS下等效输入噪声约100纳伏,100微安激励下PT100的电压变化是38.5微伏每摄氏度,信噪比仍然足够。

我一般用500微安激励,自热误差约0.02到0.05摄氏度,在大多数工业应用里可以接受。如果客户要求0.01摄氏度精度,那就用100微安,同时把PGA增益提到32或64。

4.3 常见问题速查与排查思路

现场调试时遇到的问题五花八门,我整理了一个速查表:

现象可能原因排查方法解决措施
读数跳变超过0.5度电源噪声或地环路用示波器看AVDD纹波加LC滤波,检查单点接地
读数恒定不变UART通信失败检查DRDY引脚有无脉冲确认波特率、同步字、接线
读数随环境温度漂移参考电阻温漂大测量参考电阻阻值换2ppm温漂的精密电阻
高温段误差大PGA共模范围超限计算共模电压降低增益或调整IDAC接线
低温段读数负偏导线电阻未抵消测量三根线电阻确保三线等长同材质
上电后无响应复位时序不对检查RESET引脚波形延长复位低电平时间

提示:ADS122U04IPWR的DRDY引脚是开漏输出,必须接上拉电阻,典型值10千欧姆。我遇到过有人忘了接上拉,结果STM32永远检测不到下降沿,卡在等待数据的状态。

还有一个隐蔽的坑:ADS122U04IPWR的内部振荡器需要时间稳定。上电后不要立刻发命令,等至少100微秒。我一般延时1毫秒再开始初始化,稳一点。

4.4 工业现场的抗干扰实战经验

HVAC现场最大的干扰源是变频器和接触器。变频器的载波频率通常在2到16千赫兹,谐波会窜到信号线上。我的做法是:PT100的信号线用双绞屏蔽线,屏蔽层在变送器端接模拟地,传感器端悬空。信号线远离动力线至少20厘米,如果必须交叉,走90度垂直交叉。

ADS122U04IPWR的输入端加RC滤波,截止频率设在1千赫兹左右。差分输入之间加100纳法电容,每个输入端对模拟地加10纳法电容。电阻用1千欧姆,和电容组成低通。注意电容要用C0G或者NP0材质,X7R的压电效应会引入噪声。

如果现场干扰特别严重,比如电焊机旁边,那就上隔离放大器或者用四线制加屏蔽层双端接地。我做过一个钢铁厂的案子,三线制怎么都稳不住,换成四线制加ADuM5401隔离电源,读数立刻稳在0.05度以内。

5. 低功耗优化与系统扩展

5.1 间歇工作模式下的功耗控制

环路供电的变送器,整个系统要从4-20毫安环路里取电,可用电流不能超过3.5毫安。STM32L151ZD和ADS122U04IPWR都要工作在间歇模式。

我的策略是:STM32L151ZD平时在Stop模式,RTC定时唤醒,比如每秒唤醒一次。唤醒后给ADS122U04IPWR上电,等1毫秒稳定,启动一次转换,等20毫秒转换完成,读数据,算温度,更新DAC输出或者UART发送,然后给ADS122U04IPWR断电,自己再回Stop模式。

算一下平均功耗:STM32L151ZD在Stop模式约1微安,运行模式32MHz下约10毫安,运行时间约25毫秒,平均电流约0.25毫安。ADS122U04IPWR在正常模式约1.5毫安,断电模式0.1微安,平均电流约0.04毫安。加上LDO和参考电阻的静态电流,整个系统平均约0.5毫安,远低于3.5毫安预算。

5.2 多通道温度测量的扩展方案

ADS122U04IPWR有4个模拟输入通道,可以接两路差分PT100,或者四路单端热电偶。如果要测更多通道,可以用外部多路复用器,比如ADG708或者CD4051,用STM32的GPIO控制通道切换。

多通道切换时要注意建立时间。多路复用器的导通电阻和ADC输入电容形成RC时间常数,切换通道后要等至少10倍时间常数再启动转换。ADG708的导通电阻约4欧姆,ADC输入电容约10皮法,时间常数40纳秒,等1微秒就够了。但PT100的激励电流切换后,传感器上的电压建立需要更长时间,我一般等10毫秒。

5.3 从温度测量到完整变送器的演进

测出温度只是第一步,工业现场要的是4-20毫安或者Modbus输出。STM32L151ZD有DAC,可以输出0到3.3伏,再经过电压电流转换电路变成4-20毫安。也可以用PWM加滤波,但DAC更直接。

Modbus RTU用UART加RS485收发器,比如MAX3485或者SP3485。STM32L151ZD的UART支持硬件流控,但Modbus RTU不需要,用普通UART加GPIO控制收发方向就行。协议栈可以用开源的FreeModbus,移植到STM32L151ZD上大概半天工作量。

如果要做无线变送器,可以加一个LoRa模块或者NB-IoT模块,STM32L151ZD的UART和SPI都够用。但无线模块的功耗要单独算,LoRa发射时电流可能到100毫安,环路供电撑不住,得用电池或者太阳能。

我个人在实际操作中的体会是,ADS122U04IPWR加STM32L151ZD这个组合,硬件设计占三分,固件和校准占七分。硬件只要按数据手册的参考设计来,一般不会有大问题。固件里的时序、校准算法、滤波策略才是决定最终精度的关键。我见过太多人硬件抄得一模一样,固件随便写写,结果精度差一个数量级。把校准做扎实,把滤波参数调好,这套方案在工业现场做到0.05摄氏度精度是稳稳的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/5 6:26:45

基于ADS122U04与R7FA2L2094CFM的工业温度采集方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 6:26:44

工业级温度测量:ADS122U04IPWR+STM32F427ZI高精度传感方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 6:26:44

基于ADS122U04与PIC18LF45K22的HVAC高精度温度采集系统设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 6:25:54

伺服压机采样周期怎么定?两个数算好避免力控震荡

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 6:25:02

ADS122U04+PIC32MX工业温度测量系统设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 6:25:02

工业温度测量精度设计:ADS122U04IPWR与PIC32MX协同方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华