STM32+PT100温度采集系统实战:三线制接线与ADC滤波详解

发布时间:2026/9/9 20:22:10
STM32+PT100温度采集系统实战:三线制接线与ADC滤波详解 简介面向基于STM32单片机的嵌入式开发与工业温度测量场景这套PT100铂电阻温度采集系统资料完整展示了从传感器前端到微控制器处理的实现链路重点围绕四线制连接消除线路电阻影响、内部ADC通道配置以及采用查找表或多项式拟合完成电阻-温度换算的软件算法。压缩包共包含277个文件大小约18.09MB主体为62个C源码文件与52个头文件同时提供Keil工程文件、原理图设计文件、PCB相关文件、PDF说明文档、PNG截图和文本资料便于对照代码理解硬件电路。目前已有2065人学习下载适用于电子类课程设计、毕业设计也可作为工业温度监测项目的前期参考。包内还集成了LCD显示驱动、定时器中断周期采集、文件系统读写、UART或I2C通信等模块代码并附有完整用户手册和工程备份设计者可直接基于STM32F10x平台移植或参照其电路原理图、布局思路与算法进行二次开发。 很多电子相关专业的朋友在准备毕业设计或者课程设计时大概率都见过“基于stm32单片机PT100铂电阻温度采集系统程序原理图全套资料.zip”这种压缩包。这类资源流传很广但说实话真正能一次点亮、温度读数靠谱的项目十套里未必有三套。我上半年帮人调试过好几套类似的板子和代码这里面最容易出问题的往往不是程序本身而是硬件链路里的信号调理和软件里的滤波处理。这篇文章就围绕STM32 PT100这套经典组合把温度采集系统从“拿到压缩包”到“跑出准确温度”的过程掰开揉碎讲清楚。内容适合正在做相关课题的学生也适合想自己动手做工业级测温小项目的工程师。重点讲清楚几个关键问题PT100信号为什么要处理、三线制接法到底怎么接、ADC采样和滤波怎么做才准以及最常见的几个坑怎么避开。1. 项目拆解这套资料包里到底有什么1.1 核心模块与功能定位一个标准的STM32 PT100温度采集系统通常包含这几个核心部分主控芯片STM32F103系列最常见尤其是F103C8T6小系统板和F103RCT6资源更多价格便宜、资料多、教程完善温度传感器PT100铂电阻0℃时阻值100Ω温度每升高1℃阻值大约增加0.385Ω信号调理电路PT100的阻值变化非常微弱必须通过电桥电路把电阻变化转为电压变化再经过运算放大器放大后送入STM32的ADC引脚显示与交互常见搭配是0.96寸OLED屏I2C接口或者1602液晶屏有的项目还会加按键设置报警阈值数据输出通过串口把温度值发送到上位机方便调试和后续扩展拿到压缩包之后第一步不是急着烧程序而是先看原理图确认硬件用的是哪种运放方案、哪个引脚接了ADC通道、三线制还是两线制。很多人在这一步跳过去后面烧了程序发现读数乱跳回头排查才发现电路和程序对不上。1.2 为什么用PT100而不用热敏电阻NTC热敏电阻虽然便宜但B值一致性差换一颗传感器就得重新校准而且温度高了之后线性度急剧下降。PT100铂电阻的优势在于线性度好在-200℃到850℃范围内阻值和温度的关系相对稳定工程上常用查表或线性近似处理互换性强同精度等级的PT100换上去不需要重新标定这对批量生产和维修特别重要稳定性高铂的化学性质稳定长期使用漂移很小工业现场大量采用这也是为什么PT100虽然成本高一些但在电机绕组测温、管道流体测温、环境温度监测这些需要长期可靠运行的场景里依然是主流选择。2. 环境准备与工程搭建2.1 开发环境选择与芯片包安装如果资料包里的代码是用标准外设库写的建议直接用Keil MDK5打开工程文件。如果是HAL库写的也同样是MDK5为主。个别新版本资源会基于STM32CubeMX生成那样就更省事直接重新生成初始化代码就行。Keil MDK5装好之后必须在包管理器里装好对应芯片的器件支持包STM32F1系列对应的是Keil.STM32F1xx_DFP。没装这个包工程打开后芯片型号是空的编译直接报错。装好后还有一个高频问题程序下载时提示“Error: No STM32 Target Found! If your product embeds debug authentication, please…”这类错误。绝大多数情况是ST-Link驱动没装好、连接线没接对、芯片供电不足或者Debug设置里没选对调试器类型。我自己调试时遇到过一种特殊情况手头的ST-Link是盗版克隆的固件版本太老连上芯片后总是掉线。后来换了新版驱动同时在MDK的Debug设置里把Reset and Run勾选上问题就解决了。如果是新买的开发板先确认板子上的供电跳帽、BOOT0跳线是否是默认的Flash启动模式这些细节不看很容易卡在下载这一步。2.2 工程模板与代码结构识别打开资料包的时候先看一眼目录结构通常会有这几个文件夹HARDWARE外设驱动比如OLED、ADC、按键CORE启动文件和内核相关代码SYSTEM延时、串口、中断优先级等基础功能USER主函数和中断处理主程序的核心逻辑并不复杂初始化系统时钟、配置ADC和DMA、初始化OLED然后进入一个while循环不断读取转换结果、做滤波运算、计算温度再送显示。这个流程可以说是所有STM32采集类项目的骨架搞清楚了任何传感器采集项目都能举一反三。3. 硬件电路设计PT100信号链路的核心逻辑3.1 PT100三种接法对比PT100的接线方式有讲究这个必须单独拉出来讲。两线制最简单一根线接电源正一根线接信号地但导线本身有电阻这个电阻会直接叠加到PT100的阻值上。假设导线电阻是1Ω换算成温度误差就是2.5℃左右这在很多场景下根本没法接受。三线制是工业测温最常用的方案。原理是在电桥电路中一根线接在电桥的电源端另外两根线分别接在电桥的两个桥臂上这样导线电阻在桥臂上产生的压降可以相互抵消。需要注意三根导线的长度和材质要尽量一致否则抵消效果会打折扣。四线制精度最高用开尔文接法两根线通恒流源两根线测电压电压采样回路几乎没有电流流过所以导线电阻完全不影响测量。但代价是多一根线成本高一些通常用于实验室级精密测量。资料包里如果原理图画的是三线制那说明设计者考虑了工业场景的实用性。如果画的是两线制你要心里有数这只能用在导线很短、精度要求不高的场合。3.2 电桥与运放参数计算PT100的阻值变化量很小0℃时100Ω100℃时才138.51Ω变化幅度只有38.51Ω。如果直接用电阻分压假设电桥输出开路电压每变化1℃只有零点几毫伏的变化STM32的ADC参考电压通常是3.3V12位分辨率是0.8mV/LSB这种级别的信号根本没法直接用。所以必须用仪表放大器或者运放把信号放大到ADC能分辨的区间。常见方案如下电桥三个固定电阻和PT100构成惠斯通电桥桥臂电阻通常取和PT100同量级的电阻比如100Ω或1kΩ运放LM358、OP07、AD620都很常见单电源供电就可以放大倍数根据电桥输出电压范围和ADC输入范围推算举个例子一个简单的恒流源方案虽然原理图里可能用恒流源替代电桥效果更好给PT100加1mA恒流源在0℃时输出100mV100℃时输出138.5mV变化38.5mV这个信号依然偏小需要放大到接近3.3V的满量程才能发挥12位ADC的精度。放大倍数取G (3.3 - 0.3) / 0.138 ≈ 21倍实际取20倍左右比较稳妥。我见过很多学生抄原理图时把运放的增益电阻焊错导致输出直接顶到电源轨ADC读出来永远是4095然后怀疑传感器坏了。其实只要拿万用表量一下运放输出引脚的对地电压就能立刻判断信号链路是否正常。4. 软件核心ADC采集、滤波与温度换算4.1 ADC采样与DMA配置STM32F103的ADC是12位逐次逼近型转换时间最快1us左右但对于温度采集这种慢变信号根本不需要开满速。实际工程中我用得最多的配置是ADC1的通道1采样时间设置为239.5周期启用扫描模式配合DMA自动搬运数据到内存避免CPU频繁进中断。// ADC1 初始化HAL库风格示例实际代码请以资料包为准 ADC_HandleTypeDef hadc1; DMA_HandleTypeDef hdma_adc1; void MX_ADC1_Init(void) { hadc1.Instance ADC1; hadc1.Init.ScanConvMode ENABLE; hadc1.Init.ContinuousConvMode ENABLE; hadc1.Init.DiscontinuousConvMode DISABLE; hadc1.Init.ExternalTrigConv ADC_SOFTWARE_START; hadc1.Init.DataAlign ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion 1; HAL_ADC_Init(hadc1); ADC_ChannelConfTypeDef sConfig {0}; sConfig.Channel ADC_CHANNEL_1; sConfig.Rank ADC_REGULAR_RANK_1; sConfig.SamplingTime ADC_SAMPLETIME_239CYCLES_5; HAL_ADC_ConfigChannel(hadc1, sConfig); }如果是标准外设库版本配置思路完全一样只是API名称不同。这里说一个关键点采样时间尽量设长。PT100信号本身是缓变信号不需要高采样率但要尽量降低ADC采样电容充电不充分带来的误差。较长的采样时间可以显著提高读数稳定性。4.2 温度换算是核心中的核心ADC读到的数字只是电压值要换算成温度必须先转换回电阻值再查PT100分度表或者用公式计算。计算公式法用的是Callendar-Van Dusen方程但实际工程中常用简化处理。在0~100℃范围内PT100的阻值和温度关系近似为Rt R0 * (1 A*t) 其中R0 100ΩA 0.00385/℃t为温度。所以只要知道当前电阻Rt温度约为t (Rt - 100) / 0.385但ADC输出到电阻的换算取决于电路结构。如果是恒流源方案R V_adc / I_fixed足够简单。如果是电桥运放方案需要先根据放大倍数反向推演电桥输出电压再求解电阻值这就麻烦得多。很多资料包里的代码写的是查表法直接用标准分度表数据配合线性插值计算中间值这种做法精度更高推荐优先使用。另外数字滤波一定要做。STM32的ADC内置采集有随机噪声直接读取原始值会看到温度跳动1℃甚至更多。最实用的方法是多次采样取平均#define SAMPLE_COUNT 32 uint32_t get_adc_average(void) { uint32_t sum 0; for (uint8_t i 0; i SAMPLE_COUNT; i) { sum read_adc_value(); HAL_Delay(10); } return sum / SAMPLE_COUNT; }32次采样取平均之后显示出来的温度基本能稳定在±0.1℃以内效果非常明显。有人喜欢用滑动滤波或者卡尔曼滤波但对这个项目来说均值滤波完全够用别过度设计。4.3 OLED显示与串口调试0.96寸OLED用I2C接口数据线走PB6和PB7I2C1软件模拟I2C或者硬件I2C都行。资料包里如果有OLED驱动直接包含头文件调用显示函数就行。实际调试的时候我习惯在代码里同时开启串口输出把原始ADC值、计算后的电阻值、最终温度值一起打印到串口助手。这样每改一次参数不用盯着屏幕看直接看串口数据流就能判断每个环节有没有问题。举例来说如果ADC原始值接近4095说明输入超量程要么运放饱和要么接线错如果原始值正常但计算温度离谱那就是换算公式或者电路参数没对应上。这种分步定位问题的方法比对着整个系统瞎猜高效得多。5. 常见问题与排查技巧实录这部分都是实操中真正会遇到的问题直接整理成表格方便对照排查。故障现象可能原因排查方法下载程序时报No STM32 Target FoundST-Link驱动异常、接线错误、芯片未供电查看设备管理器是否识别ST-Link确认SWDIO/SWCLK/GND三线连接检查板子供电跳帽OLED不显示任何内容I2C地址错误、GPIO复用冲突、模块供电不足用扫描程序查设备地址常见0x3C或0x3D核对代码中引脚和实际接线是否一致温度读数比实际值偏高或偏低三线制接错、固定电阻精度不足、PT100型号不匹配万用表量PT100阻值对照分度表估算温度查桥臂电阻是否与原理图标注一致确认用的是PT100不是PT1000温度读数跳变剧烈未滤波、电源纹波大、信号线受干扰加均值滤波ADC采样电容供电路径加0.1uF和10uF电容信号线远离电机等干扰源温度始终不变ADC通道配置错、传感器开路量PT100两端是否有电压检查传感器引脚是否虚焊上电后程序不运行BOOT0跳线不对、复位电路异常确认BOOT0接GNDFlash启动检查NRST引脚电压是否正常还有一个很典型的坑很多人用开发板上的3.3V给整个电路供电但板载稳压芯片给的驱动能力有限如果OLED、运放、ST-Link全挂在上面电压会被拉低到2.8V左右。这时ADC参考电压也跟着掉算出来的温度自然就不准。我通常会在调试时用万用表量一下3.3V引脚如果低于3.2V就该换独立供电或者加强电源模块了。很多人遇到“No STM32 Target Found”就直接怀疑芯片坏了其实大多数时候是调试器的驱动或者接线问题芯片反而比较耐用很少因为操作不当烧坏。如果SWD连不上可以给板子断电重新上电或者按住复位键再点击下载等出现烧录进度提示时松开复位键这个方法在极端情况下非常管用。6. 全套资料的验证与扩展6.1 拿到资料后的完整验证流程资源包下载下来之后不要急着烧程序按下面的顺序过一遍基本能避开90%的新手坑先看原理图记录PT100接入的是哪个ADC通道、运放型号、恒流源还是电桥方案核对代码里的引脚定义和原理图是否一致打开工程编译一遍确认没有报错和警告接好ST-Link和板子先烧一个LED翻转的最小程序确认调试链路通畅再烧录温度采集程序串口输出原始ADC值和计算温度用万用表量PT100两端确认传感器正常用手捏住PT100看温度能否明显上升用冰水混合物或者沸水做简单校准如果项目精度要求高这个过程其实就是把系统拆成“最小可验证单元”逐个确认而不是一把梭直接整体调试。很多人一上来就烧整个程序出了问题不知道是传感器的、运放的还是代码的最后只能干瞪眼。6.2 后续扩展方向如果项目做完之后还有余力这个系统可以往几个方向扩展用STM32的定时器PWM控制加热丝构成简单的闭环恒温系统加ESP8266模块把温度数据上传到云平台变成物联网测温节点用RS485总线挂多个PT100采集节点构成分布式测温网络适合大棚、仓库等场景增加按键和报警电路设置超限报警我个人在实际调试中的体会是PT100项目最大的价值不在于“采集温度”这件事本身而在于它串联了模拟电路设计、信号调理、ADC采集、数字滤波、通信协议、显示驱动这几个嵌入式开发的核心环节。把这套系统吃透了以后做其他传感器项目会顺畅很多。最后再分享一个小技巧调试时可以准备一个标准电阻箱或者精密的100Ω电阻代替PT100接入电路这样可以把“传感器误差”和“电路/软件误差”分开排查。如果程序配合100Ω电阻时显示0℃说明整个采集链路是准的温度不准的锅就甩给传感器本身了。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

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

尧图内容编辑团队

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

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

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

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

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

网站改版的5个关键决策

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

获取专属建站方案

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

立即免费咨询