PID算法是什么?它是如何实现的?
PID控制算法是结合比例、积分和微分三种环节于一体的控制算法,它是连续系统中技术最为成熟、应心最为广泛的一种控制算法。
好的,我们来详细解释一下 PID 算法及其实现。
1. PID 算法是什么?
PID 控制器(Proportional-Integral-Derivative Controller)是工业控制系统中应用最广泛的一种反馈控制算法。
- 核心思想: 它通过测量系统的“误差”(Error)—— 系统期望达到的目标值(设定点,Setpoint)与实际当前值(过程变量,Process Variable)之间的差距——来计算出一个“控制量”(Control Output)。这个控制量被施加到被控系统(如电机、加热器、阀门等),目的是尽可能快速、准确、稳定地消除误差,使实际值达到设定值。
- “PID”的含义: 名字中的 P、I、D 分别代表控制器输出的三个组成部分:
- P - 比例项: 与当前误差成比例。误差越大,输出越强。作用: 快速响应,主要驱动力。但单独用比例控制会产生静差(系统稳定后,实际值与设定值之间仍有微小残余误差)或振荡。
- I - 积分项: 与误差随时间的累积量成比例(积分本质是求和)。它考虑了过去的误差历史。作用: 消除静差。只要误差存在(即使很小),积分项就会持续增长,推动控制器持续输出,直到误差完全消除。但过强的积分作用可能导致系统响应变慢、超调过大甚至振荡。
- D - 微分项: 与误差变化的速率(即误差对时间的导数)成比例。它预测未来误差的趋势。作用: 提供阻尼效应,抑制系统响应的超调和振荡,使系统更快趋于稳定。但微分项对测量噪声非常敏感,放大噪声,需要谨慎处理。
- 数学表达式(位置式):
Output = Kp * Error + Ki * ∫(Error) dt + Kd * d(Error)/dtOutput:计算得到的控制输出量。Error:误差 = 设定点 - 当前测量值(或当前测量值 - 设定点,取决于惯例,需一致)。Kp:比例增益系数,调节比例项的影响大小。Ki:积分增益系数(或Ki = Kp / Ti,Ti是积分时间常数)。Kd:微分增益系数(或Kd = Kp * Td,Td是微分时间常数)。∫(Error) dt:误差从时间 0 到当前时间t的积分(累积和)。d(Error)/dt:误差在t时刻的变化率(导数)。
- 核心目标: 最小化误差,通过三个环节的协同作用(P:现在,I:过去,D:未来趋势),实现系统稳定、快速、精确的控制。
2. PID 算法如何实现(基本步骤 - 离散化)
由于计算机或微控制器是数字系统,需要在离散时间点(固定采样周期 T)进行 PID 计算,我们需要将连续的 PID 公式离散化。最常见的是位置式 PID 和增量式 PID。这里以最直观的位置式 PID 为例讲解实现步骤:
基本步骤:
-
参数初始化:
- 设定
Kp,Ki,Kd(通常需要预先整定好的值)。 - 设定目标值
Setpoint。 - 初始化误差累积(积分项)
integral= 0。 - 初始化上一次的误差
prev_error= 0 (用于计算微分)。 - 设定采样周期
T(控制循环的执行间隔时间)。 - (可选)设置输出限幅
OutputMin和OutputMax。 - (可选)设置积分项限幅
IntegralMin和IntegralMax(处理积分饱和)。
- 设定
-
进入主控制循环:
- 读取当前测量值: 获取系统的当前实际值
ProcessVariable(PV)。 - 计算当前误差:
Error = Setpoint - PV(或其他惯例,保持一致)。 - 计算比例项:
P_out = Kp * Error - 更新积分项:
integral = integral + (Error * T)(对误差在时间上求和)。- (关键:积分抗饱和)非常重要! 如果输出限幅生效(输出达到最大值或最小值),且
Error的符号表明积分项还在持续增加(这将导致“积分饱和”,使系统超调和恢复变慢),则应冻结积分项或对其进行限幅 (integral = clamp(integral, IntegralMin, IntegralMax))。
- 计算积分项输出:
I_out = Ki * integral(或I_out = Kp * (integral / Ti)) - 计算微分项:
derivative = (Error - prev_error) / T(近似计算误差的变化率)。- (关键:低通滤波)实际应用中,微分项对高频测量噪声很敏感。通常会对计算出的
derivative进行低通滤波处理(例如一阶惯性滤波)filtered_derivative = a * derivative + (1-a) * prev_filtered_derivative(a是滤波系数) 或用Kd与一个一阶低通滤波器串联(sTd / (1 + sN*Td),N是滤波系数,常取 3-20),然后在代码中实现该低通模型。 - 记下当前
derivative或filtered_derivative用于下次计算的prev_derivative。
- 计算微分项输出:
D_out = Kd * derivative(或D_out = Kd * filtered_derivative) (或D_out = Kp * Td * derivative)。 - 计算总控制输出:
Output = P_out + I_out + D_out - 输出限幅:
Output = clamp(Output, OutputMin, OutputMax)(确保输出在物理设备可接受的范围内)。 - 应用控制输出: 将最终的
Output值传递给执行器(如设置 PWM 占空比、发送控制信号到阀门开度、设定电流/电压等)。 - 更新历史值:
prev_error = Error(为下一次的微分计算保存当前误差)。- (可选)保存其他滤波器的历史状态。
- 等待下一个采样周期: 休眠,等待时间
T,然后回到步骤 2.1。
- 读取当前测量值: 获取系统的当前实际值
关键点与注意事项:
- 采样周期
T的选择: 需要根据被控对象的动态特性选择。通常为系统主要时间常数的 1/10 到 1/5 以下。太慢会导致响应迟滞,太快可能增加计算负担且无显著收益。 - 积分抗饱和(Anti-Windup): 这是实际实现中至关重要的一步!当系统因物理限制(如执行器已达到最大/最小动作能力)而无法继续按控制器要求输出时,如果积分项还在不断累加(因为误差可能还在),一旦系统需要反向调节(例如从饱和状态恢复时),这个巨大的积分值会严重拖延响应,导致明显的超调和振荡。常用的抗饱和方法有:
- 积分限幅 (Clamping): 最简单有效。当输出达到限幅值,且误差符号与输出方向一致(即积分仍在“作恶”)时,冻结(停止累加)积分项或将其限制在一个合理范围内 (
IntegralMin/Max)。 - 反馈抗饱和 (Back Calculation): 更复杂但效果更好。当输出限幅时,计算一个“本该输出但未输出”的量,将其乘上一个系数
Kt后反向叠加到积分器上(integral -= (Output - OutputClipped) * Kt)。
- 积分限幅 (Clamping): 最简单有效。当输出达到限幅值,且误差符号与输出方向一致(即积分仍在“作恶”)时,冻结(停止累加)积分项或将其限制在一个合理范围内 (
- 微分噪声处理: 微分项会放大测量信号中的高频噪声,导致控制输出抖动甚至损害设备(如电机频繁启停)。低通滤波器是必须的。选择合适的滤波参数 (
N,a) 需要权衡噪声抑制效果与微分响应的速度。 - 参数整定:
Kp,Ki(或Ti),Kd(或Td)需要根据被控对象模型或通过实验(如 Ziegler-Nichols 方法)进行调整。整定是 PID 应用成功的关键和难点。 - 增量式 PID: 另一种常用形式,它计算的是本次输出的变化量
ΔOutput = Output_current - Output_previous。公式为ΔOutput = Kp * (Error - prev_error) + Ki * (Error * T) + Kd * ((Error - 2*prev_error + prev_prev_error) / T)。它的优势:- 不直接依赖历史积分累积,天然抗积分饱和。
- 系统断电或手动/自动切换时无冲击。
- 只输出增量,执行器具有积分特性(如步进电机)时使用方便。
- 但需要控制器内部或执行器外部累积
Output(如Output_current = Output_previous + ΔOutput)。
- 位置式 vs 增量式: 选择哪种取决于被控对象的特性和执行机构类型。位置式更直观,增量式在某些场合更方便。
形象比喻理解 PID:
想象一下你开车保持与前面车的恒定距离(设定点):
- P 比例: 你看到当前距离差很大(误差大),会立刻大力踩油门/刹车(输出强)。差小了,力度就小了。
- I 积分: 如果你一直看到距离差有一点点(比如一直在目标距离后面一小段),P 项力度太小没完全消除,你就会持续地轻踩油门(积分作用累积),直到这个微小的差距完全消除。这消除了持续的偏差。
- D 微分: 当你看到前面的车刹车灯亮起(误差开始快速增大),尽管当前距离差还不大,但你立刻就能感觉到距离在迅速缩短(误差变化率为负且很大),你会提前大力踩刹车(阻尼作用),防止快速追尾(抑制超调)或剧烈晃车(抑制振荡)。
总之,PID 算法通过三个环节(现在、过去、变化趋势)的协同计算,产生控制量来精确地调节系统状态。虽然概念看似简单,但其高效、稳定的实现离不开谨慎处理离散化、抗积分饱和、微分滤波和参数整定等关键细节。
FPGA实现PID控制算法
相信大家对于PID控制算法,都不感到陌生了,平衡车就是靠它平衡起来的,还有飞控的平衡算法也是它,以及FOC中的闭环控制中也是用的它,它不仅简单,
2023-05-19 16:40:23
使用单片机和Arduino实现增量式PID位置式PID算法和PID库免费下载
本文档的主要内容详细介绍的是使用单片机和Arduino实现增量式PID位置式PID算法
资料下载
佚名
2020-05-28 16:30:07
如何使用免疫粒子群优化算法实现增量式的PID控制
基于粒子群优化算法的收敛速度快简单易实现的特点和免疫算法的免疫记忆、免疫自我调节和多峰值收敛的特点,本文设计出免疫粒子群
资料下载
佚名
2019-11-01 15:41:00
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 芯片的工作原理是什么?
- ssd是什么意思
- 什么是蓝牙?它的主要作用是什么?
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- dtmb信号覆盖城市查询
- 怎样挑选路由器?
- 华为芯片为什么受制于美国?
- 元宇宙概念股龙头一览
- type-c四根线接法图解
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- BLDC电机技术分析
- 复位电路的原理及作用
- dsp是什么意思?有什么作用?
- iphone13promax电池容量是多少毫安
- 苹果无线充电器怎么使用?
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 传感器常见类型有哪些?
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机