PID温度控制算法实战:从参数整定到嵌入式脉冲调制实现

从位置式 PID 公式到七阶段自整定流程,再到脉冲发生器 PWM 输出与采样时间设计,给出可在 STM32 上直接落地的温度控制方案

2026-08-26
PID控制温度控制自整定PWM脉冲调制嵌入式

温度是工业自动控制中最常见的被控量,PID算法以结构简单、鲁棒性强成为温度控制的事实标准。核心公式为位置式算法:LMN(t) = GAIN × ER(0) × [1 + (1/TI)×t + D_F × e^(−t/(TD/D_F))],其中 GAIN 为比例增益、TI 为积分时间、TD 为微分时间、D_F 为微分因子。采样时间须满足 CYCLE ≤ TI/10,脉冲重复周期须满足 PER_TM ≤ TI/5。本文基于西门子《PID 温度控制》手册(A5E00447393),梳理 PID 算法结构、七阶段自整定流程、脉冲发生器 PWM 输出与死区/控制带设计,并给出**STM32** 嵌入式 C 代码实现,供**嵌入式**开发与**物联网**终端温控场景直接参考。

为什么温度控制首选 PID

温度过程通常具有大滞后、单向升降温不对称、非线性等特征。纯比例控制存在稳态误差,纯积分控制响应过慢且易振荡,纯微分控制对噪声敏感且无法独立工作。PID 将三者并行组合:比例环节快速消除偏差、积分环节消除稳态误差、微分环节抑制过调。在典型温度过程中,PID 可将被控量从冷态稳定过渡到工作点,过调量控制在设定值阶跃变化的 10%~40%。

西门子手册将温度过程分为三类,其特征参数为滞后时间 TU 与过程时间常数 TA 的比值:

过程类型TU/TA 比值特征描述典型应用
类型 I< 0.1一个主要时间常数,滞后小电加热炉、热风枪(理想温度过程)
类型 II≈ 0.1两个大致等价的时间常数挤压机中间区域、反应釜中段
类型 III> 0.1多个时间常数,大滞后高阶热处理炉、大型烘箱

PID 自整定算法针对类型 I 设计,但也可用于类型 II 和 III。对于 TU/TA 远大于 0.1 的大滞后过程,需要额外引入控制带(Control Zone)或改用步进控制器(FB59 TCONT_S)。

第一步:PID 算法结构与位置式公式

PID 算法采用位置式形式运行,P、I、D 三个作用并行连接,可单独激活或取消激活,从而组态 P、PI、PD、PID 四种控制器模式。当 TI 和 TD 均设为 0.0 时,退化为纯比例控制器。

偏差信号的形成

偏差 ER = SP_INT − PV,其中 SP_INT 为设定值(浮点数格式),PV 为过程值。设定值和过程值必须具有相同的单位。为抑制因可调节变量量化引起的小幅恒定振荡,可设置死区 DEADB_W:当偏差绝对值小于 DEADB_W 时,输出保持不变。死区对使用 PWM 脉冲输出的场景尤为重要。

PID 作用公式

设定值阶跃变化时,控制器输出的时间响应为:

LMN_Sum(t) = GAIN × ER(0) × [1 + (1/TI) × t + D_F × e^(−t / (TD/D_F))]

其中各参数含义如下:

参数含义作用取消条件
GAIN控制器增益决定比例作用强度,GAIN 越大响应越快但易振荡
TI积分时间(秒)消除稳态误差,TI 越小积分作用越强TI = 0.0
TD微分时间(秒)抑制过调,TD 越大微分作用越强TD = 0.0
D_F微分因子调节微分作用的增益系数
PFAC_SP设定值变化比例因子0.0~1.0,弱化阶跃变化时的比例冲击设为 1.0 不弱化

积分作用在可调节变量达到上下限值时自动停止,防止积分饱和。当偏差使积分作用回到可调节变量范围内时,积分作用重新启用。这一机制是 PID 温度控制避免过调的关键工程细节。

设定值阶跃弱化(PFAC_SP)

温度过程的设定值阶跃变化常导致 10%~40% 的过调。通过 PFAC_SP 参数(0.0~1.0)可弱化比例作用:PFAC_SP = 0.0 时设定值变化不产生比例冲击,通过积分作用缓慢逼近;PFAC_SP = 1.0 时比例作用全量输出。典型温度控制建议设为 0.3~0.5。

第二步:控制带与可调节变量限制

控制带(Control Zone)是 PID 温度控制的一项特色功能:当过程值 PV 与设定值 SP_INT 的偏差超出控制带宽度 CON_ZONE 时,控制器直接输出最大或最小可调节变量(受控闭环回路),使过程值快速进入控制带范围;进入控制带后切换为正常 PID 控制(自动闭环回路)。

控制带的工作逻辑:

从受控闭环切换到自动闭环时,引入 20% 控制带宽度的滞后,防止在边界处频繁切换。控制带配合微分作用效果最佳:当过程值进入控制带时,微分作用可快速减小可调节变量,避免过调。

第三步:脉冲发生器与 PWM 输出

在**MCU**温控场景中,执行器通常是继电器、固态继电器(SSR)或 MOSFET 开关,无法接受模拟量信号。脉冲发生器(PULSEGEN)将 PID 算法输出的模拟量可调节变量(0%~100%)转换为周期为 PER_TM 的 PWM 脉冲信号。

脉宽计算

脉宽 = PER_TM × LmnN / 100

例如 PER_TM = 10 秒,LmnN = 30% 时,输出高电平持续 3 秒、低电平持续 7 秒。脉冲发生器的采样时间 CYCLE_P 越小(相对 PER_TM),PWM 分辨率越高。

采样时间经验法则

参数经验法则工程含义
CYCLE(控制器采样时间)≤ TI / 10保证积分项计算精度
CYCLE_P(脉冲采样时间)≤ PER_TM / 50PWM 分辨率 ≤ 2%
PER_TM(脉冲重复周期)≤ TI / 5脉冲频率不影响控制稳定性
P_B_TM(最小脉冲/断开时间)≤ 0.1 × PER_TM保护执行器寿命

以 TI = 100 秒的温度过程为例:CYCLE ≤ 10 秒,PER_TM ≤ 20 秒,CYCLE_P ≤ 0.2 秒。若要求 1% 的 PWM 精度(G = 1%),则 CYCLE_P = PER_TM × G = 0.2 秒,需要单独的周期性中断处理脉冲输出。

最小脉冲时间

频繁的开关动作会缩短继电器和执行器寿命。设置最小脉冲时间 P_B_TM 后,脉宽短于 P_B_TM 的输出被抑制,脉宽长于 PER_TM − P_B_TM 的输出被钳位为 100%。建议 P_B_TM ≤ 0.1 × PER_TM。

第四步:七阶段自整定流程

PID 参数整定是温度控制最耗时的环节。西门子 PID 控制器内置自整定功能,通过施加可调节变量阶跃变化、检测过程响应拐点、计算过程参数 TU 和 TA,自动生成 PI 或 PID 参数。整个流程分为 7 个阶段:

阶段状态描述关键操作
0无整定,自动或手动模式正常运行状态
1准备整定检查参数、测量采样时间、计算噪声 NOISE_PV 和初始上升 PVDT0
2实际整定施加驱动脉冲 TUN_DLMN,搜索过程响应拐点
3过程参数计算由拐点计算 TU 和 TA,保存整定前参数
4控制器设计根据 TU/TA 比值生成 PI 和 PID 参数
5切换新参数控制器切换到自动模式,使用新参数
7检查过程类型验证整定结果适用性

整定启动方式

两种启动方式:

  1. 设定值阶跃整定:从冷态(环境温度)设定目标工作点,控制器自动施加驱动脉冲 TUN_DLMN 并逼近工作点。适用于首次开机或更换产品型号后的整定。
  2. 工作点整定:通过 TUN_ST = TRUE 在当前工作点上施加扰动,检测过程响应。适用于已稳定运行后的参数优化。

整定期间 MAN_ON(手动模式)参数无效,可调节变量由整定功能控制。如需中止整定,须先设置 TUN_ON = FALSE 恢复手动控制。整定结束后,PI 和 PID 参数分别保存到 PI_CON 和 PID_CON 结构中,可通过 LOAD_PID 在手动模式下切换。

第五步:嵌入式 C 代码实现

以下代码在 STM32 HAL 库基础上实现位置式 PID 温度控制器,含死区、积分饱和防止、PWM 脉冲输出功能,可直接用于**物联网**终端的加热/制冷控制场景。

/* PID 温度控制器结构体 */
typedef struct {
    float setpoint;       /* 设定值 SP_INT (°C) */
    float pv;             /* 过程值 PV (°C) */
    float gain;           /* 比例增益 GAIN */
    float ti;             /* 积分时间 TI (s) */
    float td;             /* 微分时间 TD (s) */
    float d_f;            /* 微分因子 D_F */
    float pfac_sp;        /* 设定值变化比例因子 0.0~1.0 */
    float deadb_w;        /* 死区宽度 */
    float lmn_hlm;       /* 输出上限 (%) */
    float lmn_llm;       /* 输出下限 (%) */
    float cycle;          /* 控制器采样时间 (s) */
    /* 内部状态 */
    float integral;       /* 积分累积项 */
    float prev_er;       /* 上次偏差 */
    float prev_pv;       /* 上次过程值 */
    float prev_sp;       /* 上次设定值 */
} pid_temp_t;

/* PID 计算(位置式算法) */
float pid_calc(pid_temp_t *pid) {
    float er = pid->setpoint - pid->pv;

    /* 死区处理 */
    if (fabsf(er) < pid->deadb_w) er = 0.0f;

    /* 设定值变化时弱化比例作用 */
    float sp_delta = pid->setpoint - pid->prev_sp;
    float er_p = er;
    if (fabsf(sp_delta) > 0.01f && pid->pfac_sp < 1.0f) {
        er_p = er * pid->pfac_sp + (pid->setpoint - pid->prev_pv) * (1.0f - pid->pfac_sp);
    }

    /* 比例项 */
    float lmn_p = pid->gain * er_p;

    /* 积分项(含抗饱和) */
    float lmn_sum = lmn_p + pid->integral;
    if (lmn_sum < pid->lmn_hlm && lmn_sum > pid->lmn_llm) {
        pid->integral += pid->gain * er * pid->cycle / pid->ti;
    }

    /* 微分项(对过程值微分,避免设定值阶跃尖峰) */
    float d_pv = pid->pv - pid->prev_pv;
    float lmn_d = -pid->gain * pid->td * pid->d_f * d_pv / pid->cycle;

    /* 合成输出并限幅 */
    float lmn = lmn_p + pid->integral + lmn_d;
    if (lmn > pid->lmn_hlm) lmn = pid->lmn_hlm;
    if (lmn < pid->lmn_llm) lmn = pid->lmn_llm;

    /* 保存状态 */
    pid->prev_er = er;
    pid->prev_pv = pid->pv;
    pid->prev_sp = pid->setpoint;

    return lmn;  /* 0~100% */
}

/* PWM 脉冲输出(配合定时器中断) */
typedef struct {
    float per_tm;      /* 脉冲重复周期 (s) */
    float p_b_tm;     /* 最小脉冲时间 (s) */
    float cycle_p;    /* 脉冲采样时间 (s) */
    uint32_t tick;    /* 已运行 tick 数 */
} pulse_gen_t;

/* 在定时器中断中调用(周期 = cycle_p) */
uint8_t pulse_gen_update(pulse_gen_t *pg, float lmn) {
    float pulse_width = pg->per_tm * lmn / 100.0f;
    float elapsed = pg->tick * pg->cycle_p;

    /* 最小脉冲时间抑制 */
    if (pulse_width > 0 && pulse_width < pg->p_b_tm) pulse_width = 0;
    if (pulse_width > pg->per_tm - pg->p_b_tm) pulse_width = pg->per_tm;

    float phase = fmodf(elapsed, pg->per_tm);
    return (phase < pulse_width) ? 1 : 0;
}

使用时将 pid_calc() 放在 1 秒定时器中断中调用,pulse_gen_update() 放在 100 毫秒定时器中断中调用。PID 输出 lmn(0~100%)传给脉冲发生器,脉冲发生器输出 0/1 驱动 GPIO 控制继电器或 SSR。

温度控制场景选型参考

应用场景过程类型推荐控制器典型 TI典型 PER_TM
3D 打印机加热块IPID + PWM5~15s1~2s
回流焊炉温区I~IIPID + SSR30~60s5~10s
注塑机料筒IIPID + 控制带60~120s10~20s
工业烘箱(大腔体)III步进控制器120~300s20~60s
冷藏库温度IIPI(反向 GAIN)60~180s10~30s

冷藏库等冷却场景需将 GAIN 设为负数,使温度上升时可调节变量增大(制冷增强),实现反向控制。大滞后过程(类型 III)建议改用步进控制器,通过二进制输出驱动定位电机执行器,无需定位反馈信号。

结语

PID 温度控制的核心在于位置式算法的参数配合与脉冲调制输出的时序设计。GAIN 决定响应速度、TI 消除稳态误差、TD 抑制过调,三者需根据过程类型(TU/TA 比值)合理整定。采样时间须满足 CYCLE ≤ TI/10、PER_TM ≤ TI/5、CYCLE_P ≤ PER_TM/50 三条经验法则,否则控制质量恶化。控制带配合微分作用可实现快速且无过调的温度过渡。本文基于西门子《PID 温度控制》手册(A5E00447393)整理优化,所附 C 代码可直接移植到 STM32 等**MCU**平台,与站内传感器数字滤波算法Pt100 测温电路设计配合使用,构成完整的嵌入式温度测量与控制闭环。

需要定制开发?

沧州艾诺威电子 — 国家高新技术企业,20+项国家专利
嵌入式系统开发 · 物联网方案 · AI智能硬件 · 一站式交付

立即微信咨询

电话:13930711029 | 邮箱:tech@czinv.com | 24小时内响应