瑞萨单片机论坛
直播中

jf_69121293

4年用户 114经验值
擅长:处理器/DSP
私信 关注
[讨论]

【RA-Eco-RA4M2开发板评测】2.907电烙铁加入PID调节

VID_20250514_124020[1]

PID原理

PID 控制器以各种形式使用,广泛应用在机械设备、气动设备 和电子设备.在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法

PID 实指“比例 proportional”、“积分 integral”、“微分 derivative”,这三项构 成 PID 基本要素。每一项完成不同任务,对系统功能产生不同的影响。它的结构简单,参数易 于调整,是控制系统中经常采用的控制算法。其核心思想是通过 误差的实时反馈 ,结合过去误差的积累和未来误差的预测,实现系统的精准控制。

一、PID的三大核心组件

想象在用燃气灶烧一锅水,想让水温保持在80℃,PID控制相当于一个智能厨师:
fbf1be46dea917b81c4c800b2a77324b_139328-20230719085118704-79655076.png
PID控制公式

其中:

  • u(t)为控制器输出的控制量;(输出)
  • e(t)为偏差信号,它等于给定量与输出量之差;(输入)
  • KP 为比例系数;(对应参数 P)
  • TI 为积分时间常数;(对应参数I)
  • TD 为微分时间常数。(对应参数 D)

1. 比例项(Proportional) - 当前误差的直觉反应

  • 作用 :根据当前水温与目标值的差距,立即调整火力
  • 公式P = Kp × (当前温度误差)
  • 特点
    • 误差越大,调节力度越强
    • 但单纯比例控制会导致 稳态误差 (水温永远到不了80℃)

2. 积分项(Integral) - 历史误差的积累修正

  • 作用 :持续修正 长期存在的微小误差 (如散热导致的温度流失)
  • 公式I = Ki × ∫(历史误差)dt
  • 特点
    • 消除比例控制无法解决的稳态误差
    • 但过度积分会导致 超调振荡 (水温上下波动)

3. 微分项(Derivative) - 未来趋势的预判刹车

  • 作用 :预测温度变化趋势, 提前抑制过冲 (如即将到达80℃时主动减小火力)
  • 公式D = Kd × d(误差)/dt
  • 特点
    • 相当于"提前踩刹车"
    • 对传感器噪声敏感(需滤波处理)

二、PID协同工作原理

输出 = Kp×误差 + Ki×∫误差·dt + Kd×d(误差)/dt

以烧水为例:

  1. 初期低温阶段 (水温60℃)
    • P项:全力加热(误差大)
    • I项:持续积累加热量
    • D项:无作用(温度在上升)
  2. 接近目标时 (水温78℃)
    • P项:降低加热力度
    • I项:继续微调补偿
    • D项:检测到升温速度过快,主动减少火力
  3. 稳定阶段 (水温80℃)
    • P项:维持基本火力
    • I项:抵消自然散热
    • D项:监测环境扰动

PID计算代码


// 带滤波和抗饱和的PID计算
float PID_Compute(PID_Controller *pid, float input, float dt) {
float error = pid->setpoint - input;

// 积分项处理(带限幅防饱和)
pid->integral += error * dt;
pid->integral = fminf(fmaxf(pid->integral, -pid->output_max*2), pid->output_max*2);

// 微分项滤波(一阶低通滤波)
float derivative = (error - pid->prev_error) / dt;
derivative = 0.6 * pid->prev_derivative + 0.4 * derivative; // 滤波系数可调
pid->prev_derivative = derivative;

// PID输出计算
float output = pid->Kp * error 
             + pid->Ki * pid->integral 
             + pid->Kd * derivative;

// 输出限幅
output = fminf(fmaxf(output, pid->output_min), pid->output_max);

// 抗积分饱和处理
if(output >= pid->output_max || output <= pid->output_min){
    pid->integral -= error * dt; // 回退积分
}

pid->prev_error = error;
return output;

}


程序的的优化

在之前的代码中为了方便显示温度,我们直接将传感器中读到的参数进行了去尾取证,精度有所损失。
在PID控制时,为了精准的控制温度,我们将原始精度保留。另外PWM部分的精度也可以改用硬件原始数据。
从视频可以看到相比之前的只有P调节的代码,我们已经可以做到温度稳定到设定的目标,并且波动较小。

PID的局限性及改进

场景 传统PID问题 改进方案
大滞后系统(如工业锅炉) 响应延迟导致超调 Smith预估控制
非线性系统(如机械臂) 参数难以整定 模糊PID
强干扰环境 常规PID波动大 加入前馈控制

对于电烙铁这种存在热传导延迟的系统,微分项的滤波处理动态调整积分限幅是保证控制精度的关键。

更多回帖

发帖
×
20
完善资料,
赚取积分