当前位置: 首页 > news >正文

运动控制 PID算法

文章目录

  • 一、自动控制简介
    • 1.1 开环控制系统
    • 1.2 闭环控制系统
    • 1.3 电机速度闭环控制系统
  • 二、PID算法
    • 2.1 比例
      • 2.1.1 静态误差
    • 2.2 积分
    • 2.3 微分环节
    • 2.4 位置式PID
    • 2.5 增量式PID

一、自动控制简介

自动控制系统是使用自动控制装置对关键控制参数进行自动控制,使它在收到外界干扰偏离正常状态时,能够自动的调节到目标范围内。

1.1 开环控制系统

输出只受到输入控制,没有反馈回路,控制精度和抗干扰能力差,例如家用风扇。

1.2 闭环控制系统

在开环控制系统的基础上引入反馈回路,利用输出和输入值的偏差进行控制,避免偏离预定目标,例如温室大棚。

1.3 电机速度闭环控制系统

二、PID算法

PID是Propotional、Integral、Differential 的首字母缩写,它是结合比例,积分,微分的一种自动控制算法。
本质是根据比例,积分,微分的函数关系进行计算,运算结果用于输出控制。
在这里插入图片描述

2.1 比例

u k = K p ⋅ e k u_k = K_p \cdot e_k uk=Kpek

  • uk 输出
  • Kp 比例系数
  • ek 偏差
  • Kp 越大,系统响应越快,越快到达目标值。
  • Kp 过大会使系统产生过大的超调和震荡,导致系统的稳定性变差。
  • 仅有比例环节无法消除静态误差
    在这里插入图片描述

成比例的反应控制系统的偏差信号,uk与输入偏差ek成正比,用来减小系统的偏差。

2.1.1 静态误差

系统趋于稳定时,实际和目标之间的偏差。产生原因是输出被外界干扰抵消。

假设温室大棚的目标温度设定为30°C,但由于某些外部因素(如天气变化、设备老化等)导致大棚内的实际温度偏离了目标温度。此时,温度控制系统启动比例控制来尝试将温度调整回目标值。

  1. 初始状态:
    • 目标温度(setpoint):30°C
    • 实际温度(initial state):25°C
    • 静态误差(error):30°C - 25°C = 5°C
  2. 比例控制作用:
    • 假设比例系数(Kp)为0.5(这只是一个示例值,实际应用中会根据系统特性进行调整)。
    • 控制输出(u)为比例系数乘以静态误差,即u = 0.5 * 5°C = 2.5°C。
  3. 系统响应:
    • 控制输出作用于系统,尝试将温度提升2.5°C。然而,由于系统本身的惯性和外部干扰的存在,实际温度可能不会立即上升到27.5°C(25°C + 2.5°C),而是会上升到一个略低于这个值的温度,比如27°C。
  4. 静态误差仍然存在:
    • 在这个新的稳态下,静态误差变为30°C - 27°C = 3°C,虽然比初始的5°C有所减小,但仍然存在。

这个例子清楚地展示了比例控制无法消除静态误差的原因:

  • 比例控制只根据当前的静态误差来调整控制输出,而没有考虑误差的历史积累或未来的变化趋势。
  • 因此,当系统受到持续的外部干扰或存在内部惯性时,比例控制可能无法将系统精确地调整到目标状态,而是会在一个接近目标值但略有偏差的状态下稳定下来。

2.2 积分

u k = K p ⋅ e k + K i ∑ j = 0 k e j u_k = K_p \cdot e_k + K_i \sum_{j=0}^{k} e_j uk=Kpek+Kij=0kej

  • uk 输出
  • Ki 积分系数
  • Kp 比例系数
  • ek k时刻的误差
  • Σe 误差的积分

积分环节实际上是对误差进行累加的过程。当系统存在持续误差时,积分项会累积这些误差,并通过调整输出逐渐减小误差,直到偏差为零。这种机制使得系统能够更精确地达到并维持设定值。

以温度控制系统为例,假设目标温度设定为50℃。在只有比例控制的情况下,如果系统因为外部干扰(如热量散失)导致温度偏离目标值,比例控制只能根据当前的误差来调整加热功率,但无法完全消除由于外部干扰造成的误差累积。而引入积分环节后,控制系统会对历次误差进行累加,并根据累加的误差值来逐步调整加热功率,从而消除由于外部干扰造成的误差累积,使系统更精确地稳定在目标温度。

对于惯性较大的系统,系统的响应速度相对较慢,无法立即跟上积分环节的快速调整,从而导致系统输出超出预期,产生超调震荡。

积分系数Ki的影响:

  • Ki过大:当Ki设置得过大时,积分作用会相对较弱。这意味着系统对误差的累积速度较慢,虽然可以更快地消除静差,但也可能导致系统对误差的敏感度降低,响应速度变慢。在某些情况下,过大的Ki还可能导致系统出现振荡现象。
  • Ki过小:当Ki设置得过小时,积分作用会相对较强。这会导致系统对误差的累积速度较快,虽然可以更有效地消除静差,但也可能使系统响应过度,产生不必要的振荡。此外,过小的Ki还可能导致系统无法稳定地维持在设定值附近。

2.3 微分环节

u k = K p ⋅ e k + K i ∑ j = 0 k e j + K d ( e k − e k − 1 ) u_k = K_p \cdot e_k + K_i \sum_{j=0}^{k} e_j + K_d(e_k - e_{k-1}) uk=Kpek+Kij=0kej+Kd(ekek1)

微分环节的作用是根据偏差的变化率来进行控制,它能够预测偏差的未来趋势。微分作用有助于提高系统的动态性能,具体表现为:

  • 加快系统的响应速度:微分项能够预测误差的变化趋势,提前作出调整,从而加快系统的响应速度。
  • 减小超调和振荡:通过预测误差的变化,微分项可以在误差达到峰值之前进行调整,从而有效减小超调和振荡。
  • 增加系统稳定性:微分项还有助于减小高频噪声对系统的影响,提高系统的稳定性。然而,需要注意的是,过大的微分作用可能导致系统对噪声过于敏感,产生不必要的调整。

以温度控制系统为例,假设我们希望将房间的温度保持在设定值。当房间的实际温度低于设定值时,控制系统会启动加热器来升温。如果仅使用比例(P)和积分(I)环节进行控制,系统可能会出现超调和振荡现象,即温度超过设定值后再回落,如此反复。

此时,如果我们引入微分(D)环节,系统就能够预测温度的变化趋势。当系统检测到温度正在迅速上升时,微分项会立即产生一个控制作用,减小加热器的输出功率,从而避免温度超过设定值。这样,系统就能够更平稳地过渡到稳态,提高控制精度和稳定性。

2.4 位置式PID

u k = K p ⋅ e k + K i ∑ j = 0 k e j + K d ( e k − e k − 1 ) u_k = K_p \cdot e_k + K_i \sum_{j=0}^{k} e_j + K_d(e_k - e_{k-1}) uk=Kpek+Kij=0kej+Kd(ekek1)

位置式PID 特点:

  • uk 直接对应输出(例如位置),如果计算出现异常,对结果影响非常大。
  • 全量计算,需要对偏差进行累加,计算量较大。
  • 在不带积分部件中效果很好,例如电机伺服阀,温控系统等。

2.5 增量式PID

  • 先写出位置式PID公式
    u k = K p ⋅ e k + K i ∑ j = 0 k e j + K d ⋅ ( e k − e k − 1 ) u_k = K_p \cdot e_k + K_i \sum_{j=0}^{k} e_j + K_d \cdot(e_k - e_{k-1}) uk=Kpek+Kij=0kej+Kd(ekek1)
  • 把K-1带入上述公式中,得到如下公式
    u k − 1 = K p ⋅ e k − 1 + K i ∑ j = 0 k − 1 e j + K d ⋅ ( e k − 1 − e k − 2 ) u_{k-1} = K_p \cdot e_{k-1} + K_i \sum_{j=0}^{k-1} e_j + K_d \cdot(e_{k-1} - e_{k-2}) uk1=Kpek1+Kij=0k1ej+Kd(ek1ek2)
  • 使用第一个公式减去第二个公式得到∆u
    ∆ u k = K p ⋅ ( e k − e k − 1 ) + K i ⋅ e k + K d ⋅ ( e k − 2 ⋅ e k − 1 + e k − 2 ) ∆u_k = K_p \cdot (e_k - e_{k-1}) + K_i \cdot e_k + K_d \cdot (e_k - 2 \cdot e_{k-1} + e_{k-2}) uk=Kp(ekek1)+Kiek+Kd(ek2ek1+ek2)

增量式PID特点:

  • 增量式PID计算的是相对于上一次输出等增量,即: u k = u k − 1 + ∆ u k u_k = u_{k-1} + ∆u_k uk=uk1+uk
  • 只与最近三次的偏差有关,计算出错对系统影响较小。
  • 计算量小,实时性好。

http://www.mrgr.cn/news/67315.html

相关文章:

  • 山东布谷科技:关于直播源码|语音源码|一对一直播源码提交App Store的流程及重构建议
  • sls日志服务采集json格式日志
  • Docker在CentOS上的安装与配置
  • OBOO鸥柏丨连锁餐饮广告屏信息发布系统让电子餐牌数据化
  • 【微服务】Spring AI 使用详解
  • Day95 Docker
  • 掌握 PyQt5:从零开始的桌面应用开发
  • Kubernetes 服务发现:Service、DNS 深度解析
  • 迷你版VFB,极简的Freebasic开发IDE-VB7-vb6编程开发
  • Java——异常
  • 【709】基于SSM+vue的“萌宠小知识”网站设计与实现
  • 3254. 长度为 K 的子数组的能量值 I
  • STM32F103 单片机
  • 初识Mysql数据库
  • Appium环境搭建/使用教程(图文超详细)
  • 高并发内存池扩展 -- 处理大内存,优化释放时需要传入空间大小,加入定长内存池,存放映射关系的容器的锁机制,优化性能(基数树,优势,优化前后对比)
  • Cesium中granularity关键字引起的连锁知识
  • 【系统架构设计师】高分论文:论企业集成平合的技术与应用
  • C语言-详细讲解-洛谷P1075 [NOIP2012 普及组] 质因数分解
  • Cookie技术详解:互联网中的“记忆”使者
  • Jenkins应用详解(Detailed Explanation of Jenkins Application)
  • 使用Golang实现开发中常用的【实例设计模式】
  • 秒杀系统设计:原则、关键技术与注意事项
  • ROS2humble版本使用colcon构建包
  • 二叉树的遍历和线索二叉树
  • 高频面试题(含笔试高频算法整理)基本总结回顾33