参考文献

本文介绍PID控制算法的工作原理,通过“水塔加水”的例子阐述 P比例、I积分 和 D微分 三部分的作用。

  • P(Proportion,比例): 控制解决 当前误差作出反应
  • I(Integration,积分): 控制解决 过去累积的误差
  • D(Differentiation,微分): 预测未来的误差, 平滑系统响应

PID最优参数的确定,才是重点,通常需要通过实验和调整。

PID(比例-积分-微分)控制是业内最常用的控制算法,在工业控制领域有很高的接受度。

PID控制器的广泛应用得益于其在多种操作条件下稳定的性能,以及易操作的特性。

工程师可以用简单直观的方式实现PID控制。

PID控制有三个基本要件:比例(proportional)、积分(integral)、微分(derivative)。

通过这三种不同的计算方法可获取最优化结果。

本文主要介绍主题:

  • 闭环系统、
  • PID经典理论、
  • 调整闭环控制系统的效果

LabVIEW的PID工具包和PID VI的易用性也在本文的讨论范围。

PID控制系统

PID控制器 可接收来自 传感器的输入数据、计算实际值 与 设定值 之间的差值,

并根据温度、流速、速度、压力和电压等控制变量调整输出。

该仪器通过三种机制实现这一点:

  • 比例控制,对当前误差作出反应;
  • 积分控制,解决过去累积的误差;
  • 微分控制,预测未来的误差。

PID控制器将这三个值相加来计算输出。

通过这种架构,PID控制器能够有效维持过程控制和系统稳定性。

开始定义PID控制器的参数之前,要先了解闭环系统及其相关术语。

闭环系统

PID控制 在 闭环系统 或 PID循环 运行,这是一种读取传感器以提供恒定反馈的控制机制,以固定间隔(称为固定循环速率)计算所需的 激励器输出。

  • 在一个典型的PID控制系统,
  • 过程变量需要被控制的 系统变量。例如,温度(ºC)、压强(psi)、流速(升/分钟)。

    传感器用于测量过程变量,并对控制系统做出反馈。
  • 设定值过程变量期望值必须达到的值

    例如,在一个温控系统,设定温度值为100摄氏度。
  • 补偿器(控制系统算法), 任意时间点,使用 过程变量 和 设定值 的差值, 得到期望的 激励器输出驱动系统(设备)。

    例如,测量得温度(过程变量)为100 ºC, 期望的温度设定值为120 ºC, 控制器算法的激励器输出将指示打开加热器。

    驱动激励器打开加热器,整个系统就逐渐变热,温度过程变量测得的结果也会增加。
  • 不响应期: 改变过程变量观测到该改变 之间的时间延迟
  • 循环周期: 调用控制算法之间的时间Interval(间隔)循环周期时间。是闭环系统重要参数.

    变化迅速或操作复杂的系统,需要更短的周期(更快的循环速率)。
  • 干扰抑制: 控制系统克服干扰能力
    • 干扰:

      很多情况下,激励器输出不是对系统有影响唯一信号

      例如,在温度舱内,可能会有冷空气源。 冷空气吹入舱内时,会扰动环境温度。这类扰动因素叫做干扰。
    • 系统一般都有一个或多个影响 "过程变量" 或 "过程变量测量值" 的 "干扰"

      我们在设计控制系统时,通常会尽可能减少对过程变量的干扰因素。
  • 稳定性: 控制系统 对 干扰和非线性耐受度
  • PID循环如图1所示。

术语定义

控制设计 过程 从定义性能需求开始

控制系统的性能 常通过应用一个“阶跃函数”作为“设定值(命令变量)”,然后测量“过程变量”的响应。

一般,我们通过测量“定义的波形特征”来“量化响应”

  • 上升时间: 系统从"稳定状态(或最终值)"的 10% 上升到 90% 的"所需时间"
  • 过冲百分比: "过程变量" 超过 "最终值"的"百分比数",并用"最终值的百分比"表示
  • 稳定时间: "过程变量值" 稳定在 "最终值(通常是5%)范围内的"所需时间"。
  • 稳定状态误差: "过程变量" 和 "设定值" 之间的"最终差值"。
  • 请注意这些值的确切定义在学术和工业上的定义不尽相同

定义"最坏情况:":

  • 使用这些量来定义控制系统的性能要求时,有必要定义控制系统满足这些设计需求时可能遇到的“最坏情况”。
  • 干扰方面:

    系统一般都有一个 "干扰"(影响 "过程变量" 或 "过程变量测量值" )。

    所以,要设计一个在最坏情况下都能圆满工作的控制系统。
  • 耐受度方面: 控制系统对干扰和非线性的耐受度,被称为控制系统的稳定性。

    在某些情况下,对于一个 给定控制输出 的 系统反馈 可能会因 时间或某个有关变量 而变化。

    在非线性系统,控制参数 在 某个时刻 给出的 期望响应,但是在另一个时刻可能无法给出满意的响应。

    例如,舱室几乎为空时,其对 "加热器输出的响应" 比 舱室填满或几乎填满液体时 更快。
  • 不响应期方面: 不响应期是过程变量改变和观测到该改变之间的时间延迟。

    有些系统会出现非预期的不响应期。不响应期也可能是因为系统或输出激励器响应控制命令比较缓慢。

    如:

    温度传感器离水阀较远, 无论水阀打开或关闭,传感器都无法立即监测到温度变化. 阀门开关速度慢。

    在化工厂,造成不响应期的常见原因是化学试剂在管道流通需要的时间。
  • 循环周期 方面:

    变化迅速或操作复杂的系统,需要更快的循环速率。

一旦指定性能需求,即可开始 检查系统选择合适的控制方案

在大多数应用程序,PID控制程序必须提供结果。

PID理论

  • Proportional比例响应

    • 比例模块仅仅取决于设定值和过程变量之间的差值。这个差值被称为“Error(误差)”.
    • Kc(比例增益)决定"输出响应"对"误差信号"的"比例"。

      例如, 如错误项的幅值为10,比例增益为5, 则将产生比例响应为50。

      • 增加Kc(比例增益), 一般都将提高控制系统响应的速度。
      • 过大Kc(比例增益), 过程变量会出现振荡。
      • 超大Kc(比例增益), 系统振荡会越来越大, 使得系统变得不稳定, 甚至失控。
  • Integral积分响应

    积分模块 sum(累加)一段时间内的误差

    • 即使是"很小误差"也会使"积分响应"缓慢增加
    • 积分响应: 目的是将"稳定状态的误差"稳0: 积分响应根据时间持续增加, 除非0误差.
    • 积分饱和: 当"积分操作"满足"控制器的条件", 而"控制器"还 "未将误差保持在0" 时的一种现象.
    • 稳定状态误差: 是过程变量和设定值之间的差值.
  • Differential微分响应

    如果过程变量快速增加,微分分量会导致输出减少。

    微分响应: 与过程变量的变化率(注意是"变化率"而"不是变化量")之间成比例关系

    微分响应"过程变量的噪声"特别敏感

    • 增加Td(微分时间), 会使控制系统对 "误差的反应" 更加剧烈,也会增加整个控制系统的响应时间。
    • 小Td(微分时间): 大多数实用控制系统使用非常小的Td(微分时间),

      如 传感器反馈信号有噪声 或 控制循环速率太低,微分响应会使控制系统变得不稳定。

调整

设置P、I、D最佳增益,从而得到控制系统理想反馈的过程叫做整定。

PID整定方法有很多种。本文主要介绍"试错法"和"Ziegler Nichols法"。

试错法

我们可通过试错法获得PID控制器的增益。

当工程师了解了每个增益参数的有效性后,该方法就变得相对简单。

在该方法,

  • 先将I、D设置为0只调整P**,
  • P的比例增益增加循环输出开始振荡为止

    增加比例增益时,系统变得更快,但是要保证系统不会变得不稳定
  • 一旦设置好P,要有“期望的"快速响应"”:

    积分项增加停止振荡调整积分项, 达到最小稳定状态误差

    积分项会减少稳定状态的误差,但是会增加过冲

    合理的过冲对于一个快速系统来说是必要的,这样才能立即响应变化。
  • 一旦设置好P、I,要不仅“有最小稳定状态误差”而且“灵敏而不过敏”:

    微分项一直增加, 直到循环对于设定值来说足够快。

    增加微分项会减少过冲,产生更高的稳定性增益,但系统会对噪声变得异常敏感
  • 大多数情况下,工程师在设计时需要权衡控制系统的各种特性,以便更好地满足要求。

Ziegler-Nichols法

另一种常用的整定PID控制器的方法。

该方法与试错方法类似,即:

将I、D设置为0,且P增加到循环开始振荡为止。

一旦发生振荡,需观察关键增益Kc和振荡周期Pc。

然后根据下表所示调整P、I、D。

控制 P Ti Td
P 0.5Kc - -
PI 0.45Kc Pc/1.2 -
PID 0.60Kc 0.5Pc Pc/8

表1:Ziegler-Nichols整定,使用振荡法。

一文读懂PID控制算法

原理上真正理解PID控制,

  • PID控制是应用非常广泛的控制算法。

    小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。
  • 原理上来理解PID控制。

    理解原理才能知道为什么要用比例,微分,积分这3个项才能实现最好的控制。

PID(proportion, integration, differentiation)

其实就是指比例,积分,微分控制。先上图片和公式:

  • PID控制原理图:

  • PID控制公式:

    kp是一系数; 括号内: 第一项:"比例项", 第二项:"积分项", 第三项:"微分项":

    \[\large u(t)= K_{p} \times( error(t) + \dfrac{1}{T_{I}} \int error(t) dt + T_{D} \dfrac{d{error(t)}}{d{t}} )
    \]
  • 离散化公式(), 则控制可以化为:

    实际离散场合是大多数, 适合编程实现. 系数都要实验确定:

    \(\large \begin{array}{rll} u(k) & = & K_{p} \ err(k) + K_{i} \overset{ k }{\underset{n=0}{\sum}} { err(n) } + K_{d} (\ err(k) - err(k-1)\ ) \\ & & K_{p} \text{: 系数, Proportion 项的} \\ & & K_{i} \text{: 系数, Integration 项的} \\ & & K_{d}
    \text{: 系数, Differentiation 项的} \\ & \Uparrow & \\ u(k) & = & K_{p} \ err(k) + K_{p} \dfrac{T}{T_{i}} \overset{ k }{\underset{n=0}{\sum}} { err(n) } + K_{p} \dfrac{ T_{d}}{T} (\ err(k) - err(k-1)\ ) \\ & \Uparrow & \\ u(k) & = & K_{p} \times(\ \ err(k) + \dfrac{T}{T_{i}} \overset{ k }{\underset{n=0}{\sum}} { err(n) } + \dfrac{T_{d}}{T} (\ err(k) - err(k-1)\ ) \ \ ) \\ \end{array}\)

  • 如何确定三个项的系数,要大量实验+经验+需求来决定。

    通过不断的尝试和正确思考,就能选取合适的系数,实现优秀的控制器。

PID控制算法原理

PID控制算法公式

用“系统输出”作为“PID控制的输入”后,

将 “系统输出” 经过 比例,积分,微分 3种运算方式,叠加到输入,从而控制系统的行为,

实例背景假设

假设, 有一个水塔,要通过“系统控制”满足一定的需求:

  • 初始时刻: "初始水位=0.2", 是 0.2米
  • 最终目的: "目标水位=1.0", 要保证永远的维持在1米的高度
  • 当前时刻: "当前水位=0.2",初始化。

    "当前Error" = "目标水位" - "当前水位", 即 $\large error=0.8 $
  • "加水量u": 一人通过往水塔加水的方式来控制水位。

Proportion比例控制算法

如果只用 Proportion比例控制算法 是指“加水量u” 和 “误差error” 成正比

\[\large u_i =kp \times error(t_i), \ kp \text{ 是 比率 }, \ error \text{ 是 (目标值-当前值) }
\]

假设 \(\large kp=0.5, \ target_height=1.0\),

\[\large \begin{array}{llll} t_0 : & u_0 = 0, & curr_0=0.2, & error_0=0.8 \\ t_1 : & u_1 = 0.5 * 0.8 = 0.4, & curr_1 = 0.6, & error_1=0.4 \\ t_2 : & u_2 = 0.5 * 0.4 = 0.2, & curr_2=0.8, & error_2=0.2 \\ \cdots & & & \end{array}
\]
  • 如此循环,就是 比例控制算法 的运行方法。最终水位会达到我们需要的1米。
  • $\large kp $取值可以变化,系统最后都会达到1米,不会有"稳态误差"。

    $\large kp $越小,越精准,响应越慢("调控次数"越多)。

    $\large kp $越大,响应快,可能振荡并且系统稳态可能达不到最终目标值。(在目标值上下振荡)。

Proportion比例控制 没法表示 “稳态误差”:

  • 什么是 "稳态误差" ? 以及 "为什么有稳态误差"。

    上例,根据$\large kp $取值不同,系统最后都会达到1米,不会有稳态误差。

    假设, $\large kp = 0.5 $, 但是, 每次加水过程都用0.1米高的水(加水同时用水)。

    那么, 可能 经过几次加水后,水位稳定不变 但是 稳定值 不等于 目标值.

    • 因为,水位为0.8时,则error=0.2. 每次加水量u=0.5*0.2=0.1.
    • 同时,每次加水0.1, 又用0.1, 加水量 和 用水量 抵消, 水位不变, 系统稳定.
    • 目标1米,系统稳定0.8米。“系统稳定状态时的误差”就是“稳态误差”。

实际这种类似 "生产 同时 消费"的情况, 往往更加常见,

比如控制汽车运动,摩擦阻力 就相当于是“用水”,

控制机械臂、无人机的飞行,各类阻力 和消耗 都可以理解为上例的“用水.

所以,只用比例控制,在很多时候并不能满足要求。

积分控制算法

还用上例,如果仅用Proportion比例,可能存在 稳态误差。

控制上在\(\large kp\)之外引入一个分量,该分量和Error(误差)的 积分 是 正比关系。

所以,比例+积分控制算法为:

$\large u= kp \times error + ki \times \int error error, \ ki \text{ 是 误差积分 的 比率 }, \ \text{ 离散情况的积分 其实用的"sum累加" } $

还用上例,

第一次的误差error是0.8,第二次的误差是0.4,

Error积分\(\large \int error= 0.8 + 0.4 = 1.2\)

这时控制量, 不仅要有 Proportion比例的, 还要有: \(\large ki \times \int error= ki(0.8 + 0.4) = 1.2ki\)。

Error积分项会将前面若干次的Error误差积分累计,所以能很好的消除稳态误差.

假设: 在仅有Proportion比例项的情况,系统存在稳态误差,如上例的0.8,

新增积分项,会让输入增大,使得水塔水位可以大于0.8,渐渐到达目标的1.0.

微分控制算法: 减少逼近时震荡。

换另外一例: 刹车情况。

平稳的驾驶车辆,

  • 发现前面有红灯时, 提前几十米就放松油门并踩刹车(为使得行车平稳)。
  • 刹车过程, error是越来越小的.
  • error非常小(接近停车线)时, 则用力踩刹车, 使车辆停准。

整个过程可以看做一个加入“微分控制”的策略。

离散情况,, t时刻 和 t-1 时刻 error的差,即:

\[\large u= kd \times (error(t) - error(t-1) ), \ kd \text{ 是 误差微分 的 比率 }, \ \text{ 离散情况的微分 其实用"两个error相减"
\]

\(\large (error(t) - error(t-1) )\)(微分控制项) 一定是"负数"(刹车过程的error是越来越小的),

加入这个“负数项”的作用, 是为及时刹车, 防止汽车过线。

常识上理解,越靠近停车线,越应该注意踩刹车不过线,

所以微分项的作用,可理解为刹车:

当车离停车线很近 并且 车速还很快时,

这个微分项(负数)的"绝对值"会很大, 代表应该“用力踩刹车”才能车停。

换“水塔加水”例,

当发现水塔当前水位快要接近目标水位1时,加入微分项,防止给水塔水位超过1米高度。

SciTech-EECS-Control System-PID(Proportional,Integral,Derivative): 控制系统 的 PID控制算法: 比例:瞬态Error(快速逼近)+积分:稳态Error(稳定终值)+微分:平滑(减少逼近时震荡) 的 控制算法的更多相关文章

  1. 用MATLB仿真一个单闭环控制量,同时还存在两个开环控制变量的阶跃响应曲线。(自动控制方法是PID中的P控制。通过查表法直接给开环参数稳态最佳的大小)

    实际项目背景:甘肃省,航天510所的LIPS100电推力器.一共有三个控制变量,开环控制变量是:Ia(阳极电流).mmrf(阳极主流率) 这个阳极主流率是阀门变量,不能够突变,模拟用(大学一年级课,电 ...

  2. which type of VS files should be committed into a version control system

    which type of VS files should be committed into a version control system? aps, no: last resource edi ...

  3. Version Control System

    Version  Control System(版本控制系统),是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型 ...

  4. version control system:git/hg/subversion/cvs/clearcase/vss。software configruation management。代码集成CI:Cruisecontrol/hudson/buildbot

    version control system: git/hg/subversion/cvs/clearcase/vss software configruation management: daily ...

  5. 开源网络准入系统(open source Network Access Control system)

    开源网络准入系统(open source Network Access Control system) http://blog.csdn.net/achejq/article/details/5108 ...

  6. LED Mood Light Factory-Smart Mood Light: Control System Principle

    Intelligent devices have become more and more widespread in our lives. Intelligent scene lights are ...

  7. 【小问题】为啥乱搞就不行,golang没安装在系统目录下,导致go get出现"package bytes: directory "/home/ahfu/go/src/bytes" is not using a known version control system"

    想在自己的账号下安装golang开发环境,于是这样配置: wget https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz cd /home/ahfu ...

  8. PID控制器开发笔记之一:PID算法原理及基本实现

    在自动控制中,PID及其衍生出来的算法是应用最广的算法之一.各个做自动控制的厂家基本都有会实现这一经典算法.我们在做项目的过程中,也时常会遇到类似的需求,所以就想实现这一算法以适用于更多的应用场景. ...

  9. systemd[1]: mariadb.service: Can't open PID file /data/mariadb/mysql/30-mariadb-1.pid (yet?) after start: No such file or directory

    环境:Centos8 编译安装Mariadb-10.4.11,安装到make install都没有问题,添加服务启动脚本到/lib/systemd/system/,服务启动脚本名为mariadb.se ...

  10. Starting MySQL....The server quit without updating PID file[失败]/lib/mysql/ip12189.pid). 错误一例

    [root@ip12189 etc]# service mysqld startStarting MySQL....The server quit without updating PID file[ ...

随机推荐

  1. 移动开发框架,Hammer.js 移动设备触摸手势js库

    原文:https://www.cnblogs.com/zhwl/p/3525238.html hammer.js是一个多点触摸手势库,能够为网页加入Tap.Double Tap.Swipe.Hold. ...

  2. 【工具】Android|Android Studio 长颈鹿版本安装下载使用详解

    版本:2022.3.1.22, https://redirector.gvt1.com/edgedl/android/studio/install/2022.3.1.22/android-studio ...

  3. 【记录】BASE64|解决JS和C++中文传输乱码,内含两种语言的Base64编码解码的代码

    JS 解决方法来源于知乎新码笔记的文章 function b64Encode(str) { return btoa(unescape(encodeURIComponent(str))); } func ...

  4. Web前端入门第 46 问:CSS 中的数学函数不要只会 calc

    数学函数可以用来做什么? 最基础的当然是用来进行四则运算了,再进一步可以用来平方,对数,幂,绝对值,取余等,当然还可以用来计算三角函数. CSS 中的数学函数 灵活运用 CSS 中的数学函数,可以抛弃 ...

  5. Seata源码—3.全局事务注解扫描器的初始化

    大纲 1.全局事务注解扫描器继承的父类与实现的接口 2.全局事务注解扫描器的核心变量 3.Spring容器初始化后初始化Seata客户端的源码 4.TM全局事务管理器客户端初始化的源码 5.TM组件的 ...

  6. 高性能NoSQL

    极客时间:<从 0 开始学架构>:高性能NoSQL 1.引言 关系型数据库凭借着SQL功能和ACID的属性,活跃于各种各样的系统中,但它并不是完美的,其存在以下缺点: 关系数据库存储的是行 ...

  7. 做一次产品调研,这次我是一名PM

    AldeaS 想法超市:开启想法交流与项目协作新体验 在这个创意无限.节奏飞快的时代,你是否渴望一款能够精准捕捉想法,高效推进项目,并助力结识志同道合伙伴的得力工具?Aldeas 想法超市 App 应 ...

  8. 基于FPGA的超声波雷达感应预警系统 全过程记录

    FPGA系统开发 综合实验记录 实验时间节点与想法记录 2023.4.24 新建本文档.目前决定有以下两个方案,要根据学校发的器件和自己的水平和后面时间决定. 课设想法 具体情况 基于FPGA的高速运 ...

  9. java springboot api接口导出xlsx(不使用easyexcle)

    说明 在上一个文章里说了,用了阿里巴巴的easyexcle会导致项目build后的jar包体积增大20MB左右,所以想了个曲线救国的方式 其中的\t是制表符,即tab键,\n是回车 你可以自己试着这样 ...

  10. The length of parametric curve (x + sin x, cos x)

    问题引入 一个硬币(圆)的周长上有一个点,将硬币在一条线上无滑动地滚动.假设那个点开始时在最上面,滚了半圈到了最下面,求这个点相对于地面的运动轨迹的长度. 或者说,再简单点,自行车总骑过吧.假如你在骑 ...