PID原理及控制算法详解

news2024/11/19 16:33:53

文章目录

1. 概念

1.1 PID框图

1.2 具体示例:无人机高度控制

2. PID原理

3. 常用术语

4. 计算过程

4.1 比例控制(Proportional)

4.2 积分控制(Integral)

4.3 微分控制(Derivative)

5. 代码实现逻辑

7. 串级PID和代码实现

6. 模拟仿真


1. 概念

PID是应用最广泛的闭环控制方法之一,是一种常用的反馈控制方法,对于每个PID控制器由三个部分组成:比例控制(Proportional)、积分控制(Integral)和微分控制(Derivative)。

一般而言,目标值和反馈值为同种物理量,输出值可以是施加在被控物体上的控制量
举例:对物体进行位置控制时,目标值=目标位置,反馈值=当前位置,输出值=施加的驱动力大小,PID就能实时计算出驱动力使物体到达目标位置。

控制程序一般会定时运行PID算法,在每次运行时,先计算出误差=目标值-反馈值,然后分别由P、I、D三个环节根据误差计算出输出分量,三个分量加和即为最终输出值。

1.1 PID框图

上图就是PID的信号框图,表示了PID的运行过程:

为系统指定一个目标值。PID将目标值与被控对象(无人机)当前的反馈量作差得到误差。PID将误差值分别经过三个环节计算得到输出分量,三个分量加起来得到PID的输出。将PID的输出施加到被控对象上,使反馈量向目标值靠拢。

PID三个环节的作用

由控制无人机案例我们可以总结出PID三个环节各自的主要作用和效应:

  • 比例环节:起主要控制作用,使反馈量向目标值靠拢,但可能导致振荡。

  • 积分环节:消除稳态误差,但会增加超调量。

  • 微分环节:产生阻尼效果,抑制振荡和超调,但会降低响应速度。

PID中物理量的设计

我们在设计PID时主要关注三个量:目标值、反馈值、输出值。PID会根据目标值和反馈值计算输出值。

需要强调的是,PID并不知道被控对象是什么,它仅负责进行数值计算,而我们——作为控制系统的设计者,就需要为PID指定这三个量所对应的实际物理量,这在不同的控制系统中是不一样的。

如何确定实际物理量

我为大家总结了一个常用准则:

  • 目标值和反馈值
    • 通常为同种物理量,就是你需要控制的物理量。
  • 输出值
    • 通常是直接驱动被控对象的控制量。
    • 输出量作用在被控对象上需要经过时间积累才会产生反馈量的变化,换言之,输出值通常为反馈值对于时间的低阶物理量。例如:目标值和反馈值为位置,则输出值可以为速度或加速度。

对于线性关系的两个物理量(只差一个系数),可以直接替换。例如:目标和反馈值为无人机的位置,根据上一条准则,输出值可以为加速度。但我们无法直接控制加速度,只能控制推力大小,由于由于高度的变化是由推力产生的,且推力与加速度只差一个系数(F=ma),因此可以将输出值直接定为推力。

 

1.2 具体示例:无人机高度控制

  1. 目标值(Setpoint)无人机希望达到的高度,例如10米。

  2. 反馈值(Measured Value)无人机当前的实际高度,例如8米。

  3. 误差(Error)

    • 目标高度与实际高度的差值。误差 = 目标高度 - 实际高度 = 10米 - 8米 = 2米。
  4. 输出值(Output)

    • 控制电机的推力大小,以使无人机的高度向目标高度靠拢。
    • 由于推力与加速度成正比,我们可以将输出值设为推力。通过调整推力来改变无人机的加速度,从而改变高度。

2. PID原理

这是一个通过PID控制水管进出水流量的例子。让我们详细解释这个例子:

图示说明

  • 阀门:水管中间有一个阀门,通过调节阀门的开度来控制水流量。
  • PID控制器:控制系统通过PID控制器来调节阀门,以控制水流量。
  • 流量传感器:水管上有流量传感器,用来测量当前的实际流量。

工作原理

  1. 设定值:系统有一个预期流量值(设定值),这是希望达到的水流量。比如2L/S.
  2. 测量值:流量传感器实时测量当前的实际流量。
  3. 误差计算:PID控制器将实际流量与预期流量进行比较,得到误差值(误差 = 预期流量 - 实际流量)。
  4. 控制输出
    • 比例控制(P):根据当前误差值直接调节阀门的开度。误差越大,调整幅度越大。
    • 积分控制(I):根据误差随时间的累积来调节阀门,以消除持续的偏差。积分控制能消除系统的稳态误差。
    • 微分控制(D):根据误差变化的速度来调节阀门,预见并平滑误差的变化,减少超调和振荡。

实际操作

  • 启动时:当系统启动时,PID控制器根据初始误差进行较大的调整,使流量迅速接近设定值。
  • 稳定阶段:当实际流量接近设定值时,比例控制器的作用减小,积分控制器确保误差归零,微分控制器平滑误差变化,避免波动。
  • 扰动响应:当系统受到外部扰动(如水压变化)时,PID控制器会重新计算误差,并调整阀门,以重新达到设定的流量值。

3. 常用术语

  • 被控对象:需要控制的对象。例如,温度控制中的加热器、速度控制中的电机等。
  • 目标值(Setpoint):期望被控对象达到的状态量。例如,温度控制中的期望温度、速度控制中的目标速度。
  • 反馈值(Measured Value):被控对象当前时刻的状态量。例如,当前的温度、当前的速度。
  • 增益(Gain):比例、积分和微分部分的放大系数,分别是Kp、Ki和Kd。
  • 输出量(Output):PID的计算结果,用于调整被控对象的控制力。例如,加热器的功率、驱动电机的电压。
  • 误差(Error):目标值与反馈值之间的差异。公式为:误差 = 目标值 - 反馈值。
  • 稳态误差(Steady-State Error):系统在稳定状态下仍然存在的误差。例如,加入干扰后仍存在的误差。
  • 阶跃输入(Step Input):在系统稳定状态下,目标值发生突然变化。例如,目标温度从20°C突然升高到25°C。
  • 阶跃响应(Step Response):阶跃输入后,被控对象的响应状态,能够代表系统的控制性能。
  • 瞬态响应(Transient Response):系统从初始状态到达到稳态的过渡过程,包括上升时间、超调量和调节时间等。
  • 响应速度(Response Speed):阶跃输入后,被控对象再次到达目标值的速度。
  • 超调量(Overshoot):阶跃输入后,被控对象到达目标值后超出目标值的距离。

4. 计算过程

这里用无人机的高度控制来举例

4.1 比例控制(Proportional)

假如让无人机悬停在10米的高度,但此时高度为2米,所以此时误差(error)为8米,假设Kp=0.5,比例控制每次调节的高度就为:

Kp * error

所以第一次调节为 0.5*8=4,此时误差变为4米。

第二次调节:0.5*4=2,此时误差变为2米。

依次进行调节,误差逐渐变小。这个过程就叫做比例调节。

Kp值越大,系统反应速度越快,无人机更快靠近误差。

但是比例控制的缺点为两点:

  • 干扰:容易受到外界干扰,比如此时有持续的风将无人机向下吹,导致无人机同一周期向下1米,此时比例控制的计算结果为0.5*2=1,所以,这会导致无人机永远保持在八米的高度,误差保持在2米。这也叫做稳态误差。
  • 震荡:Kp值越大,系统反应速度越快,无人机更快靠近误差,但同时无人机在接近目标高度时,产生的震荡也越严重。

为了消除稳态误差的问题,就需要用到积分控制(Integral)。

为了消除系统震荡的问题,就需要用到微分控制(Derivative)。

4.2 积分控制(Integral)

积分控制是对之前计算的所有的误差求和,也就是在离散的情况下做累加,比如无人机经过两次调节,第一次误差为8米,第二次误差为4米,加起来就是12米,假如Ki=0.1,计算结果为:

 0.1*12=1.2,所以及时有向下持续的风影响无人机,由于积分控制,无人机还是会向上走1.2米。

所以积分控制会对误差进行累计,从而提供更大的升力,让无人机慢慢的朝着目标点靠近,最终误差消除为0。

所以经过第三次调节,累计误差从12调整到了12.8,那么第四次调节的结果0.1*12.8=1.28。

但此时无人机距离目标高度仅为0.8米,如果还是调节1.28米,就会出现过冲现象。

此时就需要使用微分控制进行更细致的调节。

4.3 微分控制(Derivative)

微分控制就是通过当前时刻与前一刻误差量的差值对未来做预测。如果差值为正,就表示误差在变大,为负就表示误差在减小。如果误差在变大,就会加大控制强度,让误差降下来。如果误差减小,就会减小控制强度,让无人机平稳缓和的到达指定值。

这里也就相当于对距离求微分:

d(error)/dt = 速度

微分控制算法可以对无人机的速度做出响应,当无人机的速度过快时,微分控制会抵消一部分由比例控制计算出来的升力,从而减缓系统的震荡。所以当我们提高Kd的值,系统的震荡会逐步减小。

但无论是比例,积分还是微分控制,数值调的过大,无人机就会出现过冲现象。

5. 代码实现逻辑

这段伪代码实现了一个基本的PID控制算法。

previous_error := 0
integral := 0

loop:
    error := setpoint - measured_value //计算误差
    integral := integral + error * dt //计算积分
    derivative := (error - previous_error) / dt //计算微分
    output := Kp * error + Ki * integral + Kd * derivative //计算控制输出
    previous_error := error //更新前一次误差
    wait(dt) //等待并循环
    goto loop
  • previous_error 用于存储前一次循环中的误差值,初始化为0。
  • integral 是积分部分的累加值,初始化为0。
  • error 是当前的误差,等于设定值(setpoint)减去测量值(measured_value)。
  • 积分部分通过累加误差乘以时间步长(dt)来实现。这个部分用于消除系统的稳态误差。
  • 微分部分通过当前误差减去前一次误差,再除以时间步长(dt)来实现。这个部分用于预测误差的变化趋势,从而提前进行调整。
  • 控制输出(output)是比例、积分和微分三部分的加权和。
  • Kp 是比例增益,对应 error。
  • Ki 是积分增益,对应 integral。
  • Kd 是微分增益,对应 derivative。
  • 将当前的误差值存储到 previous_error 中,以便下次循环使用。 

这段伪代码通过不断地测量误差、累积积分和计算误差变化率,动态调整控制输出,使系统的实际值尽量接近设定值。

7. 串级PID和代码实现

串级PID可增加系统的稳定性,抗干扰能力更强,包括代码实现可以看下面这篇:

串级PID控制算原理及法详解-CSDN博客

6. 模拟仿真

下面这个网站可以模拟调节PID参数来控制无人机

Webpack App

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1867204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NLP逻辑层次模型|跳出局限,站在更高维度认识自己

什么是NLP逻辑层次模型 N-Neuro:指神经系统,包括生理基础(大脑)和思维运作过程 L-Linguistic:指语言,感觉信号输出——构成意思的过程 P-Programming:指程序,大脑产生某结论后要具体…

Java基础简要(基础、集合、正则、时间类、异常、Stream流、File类、IO流、多线程、数据结构、泛型)

一位等于1比特。比特(BIT)和位是同一个概念的不同表述,都是信息量的最小单位。1字节(byte)由8位组成。 1.介绍 JVM(Java Virtual Machine):Java虚拟机, 真正运行Java程序的地方核…

Python | 使用Matplotlib生成子图的示例

数据可视化在分析和解释数据的过程中起着举足轻重的作用。Python中的Matplotlib库提供了一个强大的工具包,用于制作各种图表和图表。一个突出的功能是它能够在单个图中生成子图,为以组织良好和结构化的方式呈现数据提供了有价值的工具。使用子图可以同时…

华为---VRRP基本配置(一)

10、VRRP 10.1 VRRP基本配置 10.1.1 原理概述 随着Internet的发展,人们对网络可靠性的要求越来越高。对于用户来说,能够时刻与外部网络保持通信非常重要,但内部网络中的所有主机通常只能设置一个网关IP地址,通过该出口网关实现…

Flutter TIM 项目实现

目录 1. 服务端API 1.1 生成签名 1.1.1 步骤 第一步:获取签名算法 第二步:查看函数输入输出 第三步:nodejs 实现功能 1.1.2 验证签名 小结 1.2 Rest API 调用 1.2.1 签名介绍 1.2.2 腾讯接口 生成管理员 administrator 签名 包装一个 post 请求函数 查询账号 …

发;flask的基本使用2

上一篇我们介绍了基本使用方法 flask使用 【 1 】基本使用 from flask import Flask# 1 实例化得到对象 app Flask(__name__)# 2 注册路由--》写视图函数 app.route(/) def index():# 3 返回给前端字符串return hello worldif __name__ __main__:# 运行app,默认…

c++11 abi 兼容性

理解 _GLIBCXX_USE_CXX11_ABI: 兼容性与现代化之间的平衡 随着 C 标准的不断演进,编译器和标准库实现也在不断更新,以支持新的语言特性和库功能。然而,这些更新有时会引入不兼容的更改,特别是应用程序二进制接口(ABI&…

第N8周:seq2seq翻译实战-Pytorch复现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 一、前期准备 from __future__ import unicode_literals, print_function, division from io import open import unicodedata import s…

Jenkins通过Squid代理服务器添加局域网节点机器

✨前言: 当jenkins在公网上的时候,如果要添加局域网内的服务器为节点机器构建的时候,这里就需要通过squid代理服务来实现了。当然你也可以使用其他的方式例如Apache等等,这里主要介绍通过Squid的方式。 🌟什么是Squi…

通过颜色传感器控制机械臂抓物体

目录 1 绪论 2整体设计方案 2.1 系统的介绍 2.2 抓取模块 2.2.1 机械臂的定义 2.2.2 机械臂的分类 2.2.3 机械臂的选用 2.3 颜色识别模块 2.3.1 颜色传感器识别原理 2.3.2 TCS3200简介 2.4 整体控制方案 3 颜色识别抓取系统的硬件设计 3.1 单片机选型及参数 3.2 系…

第三十二篇——大数据2:大数据思维的四个层次

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 我们生活在这个时代,我们是否按照这个时代需要的思维方式去思…

SHELL/2024/6/26

1.统计家目录下.c文件的个数 #!/bin/bash count0 for filename in $(ls ~ *.c) do ((count)) done echo count$count 2.终端输入一个.sh文件,判断文件是否具有可执行权限/然后运行脚本,没有可执行权限,添加可执行权运行脚本 #!/bi…

windows USB设备驱动开发通用技术

通用串行总线 (USB) 设备通过配置、接口、备用设置和终结点来定义其功能和功能,下面提供这些概念的高级概述。 常见 USB 方案 获取用于通信的设备句柄 ,并使用检索到的句柄或对象发送数据传输。 USB 描述符检索 以获取有关设备配置的信息、接口、设置及…

C语言之进程学习

进程打开的文件列表:就是0 1 2 stdin stdout stderro等 类似于任务管理器是动态分ps是静态的 Zombie状态: 在Linux进程的状态中,僵尸进程是非常特殊的一种,它是已经结束了的进程,但是没有从进程表中删除。太多了会导…

Flutter笔记(一)- 安装和配置Flutter

一、下载Flutter 访问网址:https://docs.flutter.dev/get-started/install?hlzh-cn 根据电脑所使用的操作系统的平台进行选择。笔者电脑的操作系统为Windows,因此选择如图1-1的Windows图片: 图1-1 Flutter网站(一) …

【LangChain系列——案例分析】【基于SQL+CSV的案例分析】【持续更新中】

目录 前言一、LangChain介绍二、在SQL问答时如何更好的提示?2-1、安装2-2、SQLite 样例数据2-3、使用langchain与其进行交互2-4、查看模型提示语2-5、提供表定义和示例行2-6、将表信息插入到Prompt中去2-7、添加自然语言->SQL示例2-8、在向量数据库中查找最相关的…

springboot异常产生原因

DataIntegrityViolationException Cause: java.sql.SQLException: Field ‘id’ doesn’t have a default value org.springframework.dao.DataIntegrityViolationException: ### Error updating database. Cause: java.sql.SQLException: Field id doesnt have a default …

qt开发-15_QFile

QFile 类提供了读取和写入文件的接口。在嵌入式里如果需要读写文件,最简单的方法就是 用 Qfile。 QFile 是一个读写文本、二进制文件和资源的 I/O 设备。QFile 可以自己使用,也可以更方 便地与 QTextStream 或 QDataStream 一起使用。 文件名通常在构造函…

海云安参编《数字安全蓝皮书 》正式发布并入选《2024中国数字安全新质百强》荣膺“先行者”

近日,国内数字化产业第三方调研与咨询机构数世咨询正式发布了《2024中国数字安全新质百强》(以下简称百强报告)。海云安凭借在开发安全领域的技术创新力及市场影响力入选百强报告“新质百强先行者” 本次报告,数世咨询经过对国内8…

获取个人免费版Ubuntu Pro

首先上官网地址:Ubuntu Pro | Ubuntu 点击页面中的"Get Ubuntu Pro now" 将用途选为“Myself”,在此页面中Ubuntu说明了该版本只面向个人开发者,且最终只允许5台设备免费使用;因而部署设备的抉择就不得不慎重考虑了&am…