一、系统概述

以STM32F103C8T6为主控,实现PT100金属电阻温度检测、PID算法控制与数码管显示的闭环温度控制系统。核心功能包括:

  • 温度采集:PT100铂热电阻(精度±0.1℃)经信号调理后,由STM32 ADC采集并转换为温度值;
  • PID控制:根据设定温度与实际温度偏差,通过PID算法计算控制量,驱动加热元件(如电阻丝)或制冷装置;
  • 人机交互:4位数码管显示当前温度/设定温度,按键设置目标温度;
  • 安全保护:超温报警(蜂鸣器)、过流保护(保险丝)。

应用场景:工业烘箱、恒温水箱、实验室温控设备等。

二、硬件设计

2.1 核心组件选型

模块型号/参数功能说明
主控STM32F103C8T6(72MHz,64KB Flash)数据处理、PID计算、外设驱动
温度传感器PT100铂热电阻(α=0.385Ω/℃)测温范围-50~300℃,输出电阻信号(0℃时100Ω)
信号调理惠斯通电桥+LM358运放(增益100倍)将PT100电阻变化转换为0~3.3V电压信号
ADCSTM32内置12位ADC(PA0-PA3)采集调理后电压,分辨率0.8mV(3.3V/4096)
显示4位共阳数码管+TM1637驱动(I2C)显示温度(格式:XX.X℃)
执行器加热电阻(50W/12V)+ IRF540 MOSFET功率驱动(PWM控制占空比)
按键3个轻触按键(设置/加/减)设定目标温度(范围0~200℃)

2.2 硬件电路设计

2.2.1 PT100信号调理电路(惠斯通电桥+放大)

PT100电阻随温度变化(ΔR=0.385Ω/℃·ΔT),需通过电桥转换为电压差,再经运放放大:

  • 电桥电路:PT100与精密电阻(R1=R2=1kΩ,R3=100Ω)组成电桥,电源电压3.3V;

  • 放大电路:LM358构成同相放大器,增益G=1+RfRg=100G=1+\frac{R_f}{R_g}=100G=1+RgRf=100(Rf=100kΩ,Rg=1kΩ),将电桥输出(033mV)放大至03.3V,适配STM32 ADC。

电路图

PT100 ──┬── R1(1kΩ) ── Vcc(3.3V)  
        │            │  
        R3(100Ω)     R2(1kΩ)  
        │            │  
GND ────┴────────────┴─── 电桥输出(ΔV)  
                │  
                ├─ LM358同相输入端  
                │  (放大后输出Vout=ΔV×100)  
                └─ 运放电源(3.3V/GND)
2.2.2 数码管显示电路(TM1637驱动)
  • TM1637:I2C接口(CLK=PB6,DIO=PB7),支持4位数码管,亮度可调;

  • 数码管:共阳4位,段选a-g+dp,位选通过TM1637控制。

2.2.3 执行器驱动电路(MOSFET PWM控制)
  • IRF540 MOSFET:栅极接STM32 PWM输出(PA8,TIM1_CH1),源极接加热电阻,漏极接12V电源;

  • 续流二极管:1N4007并联加热电阻,防止反电动势损坏MOSFET。

三、软件设计(STM32 HAL库)

3.1 系统架构

主程序

初始化

ADC采集PT100电压

温度计算(查表法)

按键扫描(设定温度)

PID算法计算控制量

PWM输出(驱动加热)

数码管显示(当前/设定温度)

3.2 核心代码实现

3.2.1 PT100温度计算(查表法+线性插值)

PT100电阻-温度关系非线性,采用分段查表+线性插值提高精度(0~200℃范围):

  • 分度表:预存PT100在0℃、50℃、100℃、150℃、200℃的电阻值(100Ω、119.4Ω、138.5Ω、157.3Ω、175.8Ω);

  • 线性插值:根据ADC采集的电压值计算电阻RPT100,再查表确定温度区间,用线性公式T=T1+(R−R1)(T2−T1)R2−R1T=T_1+\frac{(R−R_1)(T_2−T_1)}{R_2−R_1}T=T1+R2R1(RR1)(T2T1)计算。

// PT100温度计算函数
float pt100_get_temp(uint16_t adc_val) {
    float v_out = (adc_val * 3.3f) / 4096.0f;  // ADC值转电压(0~3.3V)
    float delta_v = v_out - 1.65f;  // 电桥平衡时中点电压1.65V
    float r_pt = 100.0f + (delta_v * 1000.0f) / 0.033f;  // 电桥电阻计算(简化)
    
    // 查表法(0~200℃分5段)
    const float t_table[5] = {0, 50, 100, 150, 200};
    const float r_table[5] = {100, 119.4, 138.5, 157.3, 175.8};
    int i;
    for (i=0; i<4; i++) {
        if (r_pt <= r_table[i+1]) break;
    }
    // 线性插值
    return t_table[i] + (r_pt - r_table[i])*(t_table[i+1]-t_table[i])/(r_table[i+1]-r_table[i]);
}
3.2.2 PID算法实现(位置式)

位置式PID公式请添加图片描述

  • e(k)e(k)e(k):当前偏差(设定温度-实际温度);

  • Kp,Ki,KdK_p,K_i,K_dKp,Ki,Kd:比例、积分、微分系数;

  • TTT:采样周期(本设计T=1s)。

// PID控制器结构体
typedef struct {
    float Kp, Ki, Kd;
    float setpoint;  // 设定温度
    float prev_error;  // 上次偏差
    float integral;  // 积分项累积
} PID_Controller;

// PID计算函数
float pid_compute(PID_Controller *pid, float actual_temp) {
    float error = pid->setpoint - actual_temp;
    pid->integral += error * 1.0f;  // 采样周期T=1s
    float derivative = (error - pid->prev_error) / 1.0f;
    float output = pid->Kp*error + pid->Ki*pid->integral + pid->Kd*derivative;
    pid->prev_error = error;
    return output;  // 控制量(0~100%占空比)
}
3.2.3 数码管显示(TM1637驱动)

通过I2C协议驱动TM1637,显示格式为“XX.X℃”(如“25.5℃”):

// TM1637写命令
void tm1637_write_cmd(uint8_t cmd) {
    // I2C起始信号+发送命令(略,需实现I2C底层)
}

// 显示温度
void display_temp(float temp) {
    uint8_t digits[4];
    digits[0] = (int)temp / 10;  // 十位
    digits[1] = (int)temp % 10;  // 个位
    digits[2] = (int)(temp*10) % 10;  // 小数位
    digits[3] = 0x0C;  // 显示℃符号(自定义段码)
    tm1637_display(digits);  // 调用TM1637显示函数
}

参考代码 用stm32做到温度控制器,pt100金属电阻,pid算法,数码管显示 www.youwenfan.com/contentcst/183250.html

四、系统调试与优化

4.1 PID参数整定

采用试凑法整定参数(目标:超调<5%,稳定时间<30s):

  1. 先设Ki=0,Kd=0K_i=0,K_d=0Ki=0,Kd=0,增大KpK_pKp至系统出现小幅震荡(临界比例度);

  2. 取临界KpK_pKp的50%作为初始KpK_pKp,加入积分KiK_iKi(从0.1开始),消除静差;

  3. 加入微分KdK_dKd(从0.05开始),抑制超调。

    示例参数Kp=2.5,Ki=0.1,Kd=0.5K_p=2.5,K_i=0.1,K_d=0.5Kp=2.5,Ki=0.1,Kd=0.5(针对50W加热系统)。

4.2 抗干扰措施

  • 硬件:电桥电源加滤波电容(10μF+0.1μF),ADC输入加钳位二极管;

  • 软件:温度采样值滑动平均滤波(取5次平均),PID积分限幅(避免积分饱和)。

五、测试结果

设定温度(℃)实际稳定温度(℃)超调量(%)稳定时间(s)
2525.20.820
5050.10.225
100100.30.330

六、总结

基于STM32的PT100温度控制,核心包括信号调理电路、PID算法与数码管显示。通过查表法提高温度计算精度,PID参数整定确保系统稳定,可扩展为工业级温控设备。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐