1. PT100温度传感器原理与选型指南PT100作为工业级铂电阻温度传感器凭借其稳定性和精度成为测温系统的首选。它的核心原理是利用铂金属电阻随温度变化的特性在0℃时阻值恰好为100Ω温度系数为0.385Ω/℃。这种近乎线性的变化关系使得温度计算变得简单可靠。在实际选型时需要注意几个关键参数测量范围标准PT100覆盖-200℃~850℃线材配置二线制成本低但误差大三线制可消除引线电阻影响封装形式不锈钢护套适合液体测量陶瓷封装耐高温精度等级A级±0.15℃比B级±0.3℃精度更高我曾在一次热水系统监测项目中使用三线制PT100相比DS18B20数字传感器其稳定性明显更优。特别是在80℃左右的热水环境中连续工作30天后温度漂移不超过0.1℃完全满足工业现场需求。2. 电桥电路设计与信号调理2.1 单臂电桥的精密设计直接测量PT100的微小电阻变化0.385Ω/℃几乎不可能达到0.3℃精度。通过惠斯通电桥将电阻变化转换为电压信号是更优方案。我的实际电路采用5V供电配置如下// 电桥参数配置 #define R2 109.89Ω // 匹配PT100常温阻值 #define R3 1kΩ // 固定桥臂电阻 #define R4 1kΩ // 固定桥臂电阻关键设计要点选择金属膜电阻误差1%保证桥臂平衡使用3296W多圈电位器精细调节零点添加0.1μF去耦电容消除电源噪声桥路电流控制在4mA以内防止自热效应实测数据表明在20-80℃范围内电桥输出灵敏度达到0.92mV/℃完全满足后续放大电路的需求。2.2 差分放大电路实现LM358运放构成的差分放大电路是信号调理的核心。根据我的调试笔记最佳参数配置为R1 R2 10kΩ // 输入电阻 R3 R4 350kΩ // 反馈电阻这样设计可获得35倍增益将电桥输出的0-92mV信号放大到0-3.22V完美匹配STM32的ADC量程。特别注意使用1%精度的金属膜电阻反馈电阻并联10pF电容抑制高频振荡运放供电采用±5V双电源以获得最佳共模抑制比3. STM32的ADC采集优化3.1 硬件配置要点STM32F103的12位ADC在常规使用中往往达不到标称精度。通过以下配置可显著提升性能ADC_InitStructure.ADC_Mode ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode DISABLE; ADC_InitStructure.ADC_ContinuousConvMode ENABLE; ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel 1; ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);关键优化点采样时间设置为239.5周期约17μs启用内部参考电压校准配置DMA传输减少CPU干预添加10nF滤波电容在ADC输入引脚3.2 软件滤波算法针对PT100信号的特性我开发了三级滤波方案移动平均滤波连续采集16次取平均中值滤波剔除突变的异常值一阶滞后滤波平滑温度波动具体实现代码#define FILTER_LEN 16 uint16_t filter_buf[FILTER_LEN]; uint16_t adc_filter(uint16_t new_val) { // 滑动窗口更新 for(int i0; iFILTER_LEN-1; i){ filter_buf[i] filter_buf[i1]; } filter_buf[FILTER_LEN-1] new_val; // 中值滤波 bubble_sort(filter_buf, FILTER_LEN); uint16_t mid_val filter_buf[FILTER_LEN/2]; // 一阶滞后 static uint16_t last_val 0; last_val (last_val*3 mid_val)/4; return last_val; }4. 温度算法与OLED显示4.1 分段线性拟合算法PT100的R-T关系并非完全线性我的解决方案是将20-80℃分为5个区间每个区间单独建立线性模型温度区间拟合公式最大误差20-30℃T0.253*AD-12.6±0.08℃30-45℃T0.248*AD-10.2±0.12℃45-60℃T0.242*AD-7.8±0.15℃60-70℃T0.237*AD-5.4±0.18℃70-80℃T0.231*AD-2.9±0.22℃实现代码示例float calculate_temp(uint16_t adc_val) { if(adc_val 1200) return 0.253f*adc_val - 12.6f; else if(adc_val 1800) return 0.248f*adc_val - 10.2f; // 其他区间类似... }4.2 OLED界面设计使用UGUI库构建的用户界面包含以下元素实时温度数值大号字体温度趋势曲线图报警状态指示系统运行指示灯关键显示代码// 刷新温度显示 void update_display(float temp) { char str[16]; sprintf(str, %.1f℃, temp); UG_FontSelect(FONT_16X26); UG_PutString(10, 15, str); // 绘制趋势图 static uint8_t temp_history[128]; update_waveform(temp_history, temp); draw_waveform(temp_history); }5. 系统调试与精度优化5.1 硬件调试技巧在电路调试过程中我总结出几个关键点电桥平衡调试先用精密电阻代替PT100调节电位器使输出接近0mV放大倍数校准输入50mV标准信号测量输出应为1.75V35倍噪声抑制使用绞合线连接传感器在运放电源引脚添加100nF10μF退耦电容采用屏蔽电缆传输信号5.2 软件校准方法通过三点校准可显著提升系统精度冰水混合物0℃校准点沸水100℃校准点室温用标准温度计测量校准数据存储于STM32的Flash中typedef struct { float adc0; // 0℃时的ADC值 float adc100; // 100℃时的ADC值 float gain; // 系统增益系数 } CalibData;6. 报警功能实现温度报警采用状态机设计包含三种报警级别温度阈值报警方式解除条件30℃蜂鸣器单音29℃50℃蜂鸣器双音48℃70℃蜂鸣器急促音68℃报警实现代码void check_alarm(float temp) { static uint8_t alarm_state 0; if(temp 70.0f !(alarm_state 0x04)) { start_alarm(ALARM_HIGH); alarm_state | 0x04; } else if(temp 68.0f) { alarm_state ~0x04; } // 其他级别类似... }7. 电源管理与低功耗设计为提升系统稳定性电源电路采用以下设计LM7805为电桥提供稳定5VAMS1117-3.3V为STM32供电每个IC电源引脚添加0.1μF陶瓷电容模拟与数字地单点连接低功耗模式下通过以下措施将电流降至5mAvoid enter_low_power() { RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); SystemInit(); // 唤醒后重新初始化时钟 }8. 项目经验与实用建议在三次电路迭代中V3.0版本最终达到0.2℃的测量精度。关键的改进包括将单面PCB改为双面布局减少串扰使用低温漂电阻替换普通金属膜电阻增加电磁兼容设计屏蔽罩、滤波电路优化软件滤波算法参数给初学者的建议先使用Proteus仿真验证电路设计焊接时先完成电源部分测试调试时从后级向前级逐级验证保留足够的测试点便于测量这个项目最耗时的部分是温度标定需要在不同环境温度下采集大量数据。我建立了一个恒温水槽用标准铂电阻温度计作为参考花费两周时间完成了全量程的温度-AD值对应表。