教你快速学习PID控制原理

2023-05-16

教你快速学习PID控制原理

写在前面

 在这篇文章中我会通过举例的方式来让大家了解什么是PID控制,这篇博客是让大家更加容易的理解PID控制,如果大家想要跟深入的了解的话最好是自己上手去做一个关于PID控制的实物,在实践中去学习效果会更好。

如果大家需要PID学习套件的话可以点此淘宝链接,资料开源在淘宝链接上面可以自行下载:PID循迹车学习套件链接
此链接为通过PID控制的差速循迹车最终效果视频:PID差速循迹车

正文

 PID是我们在控制中常用的一种控制算法,大到导弹、火箭,小到平衡车或者热水器一般都会用到PID控制。PID控制中P(Proportion)为比例,I(Integral)为积分,D(Differential)为微分。
在这里插入图片描述

 为了简单说明PID控制的原理我们举一个小例子来说明,我们举一个常见的热水器例子。我们现在需要将一升水加热到50℃,且温度控制误差在±1℃。如图1所示,当开关闭合时加热器加热,则水温会升高,开关断开时加热器不会加热,水温也会变低。如果我们按照常规思路去想的话应该是当水温达到50℃的时候,热水器停止加热,当水温低于50℃的时候热水器开始加热。
图1

图1 恒温热水器加热图示说明

 如果按照刚才那种设想来实现的话,实际情况可能并不是按我们想的那样,水温会恒定到50摄氏度。实际上水温达到50℃加热棒停止加热时的水温同样会继续上升,这是因为当我们关闭开关时,加热棒的温度还是高于水温,因此水温还会继续升高。直到加热棒的温度和水温相同时,水温才会下降,这时水温可能会达到53℃了,则不满足控制精度。如果画成曲线形式可以表示成图2所示。

传统方法温度控制曲线

图2 传统方法温度控制曲线

 那么大家可能会说,能不能在50℃之前就停止,比如在47℃时停止加热,水温如果在停止加热后水温继续上升3℃,刚好50℃。但是水温低于47℃时我们再开始加热,水温又不满足控制精度的需求了。

 这种控制较为简单适合对水温控制精度要求不高的场合,仅仅用一个继电器即可实现对水温的控制,像我们常用的电热水器一般都是这种控制方式,因为水温高那一两度我们也察觉不到。但是如果在控制水温精度较高的场合可能就需要通过PID控制来实现了。

 我们知道水是通过加热棒加热的,加热棒的温度越高水温升高的速度也就越快。如果我们能够控制加热棒的温度,当水温快到达设定温度50℃时让加热棒温度慢慢降低,直到水温达到50℃时,只需让加热棒的温度维持水温即可。通过控制加热棒温度从而控制水温的方式能够快速且稳定的控制让水温达到目标温度。

 但是我们又如何控制加热棒的温度呢?我们可以通过PWM脉冲宽度调制来实现。如果我们设置加热棒在0.1S内加热0.02S,其余都是不加热状态,这时加热棒的温度肯定没有一直加热温度高。我们把加热周期设置为0.1S,通过控制加热棒在加热周期内的加热时间即可控制加热棒温度,其实也就是控制PWM脉冲的占空比。对于如何做到水温越接近目标温度,加热棒温度越低,我们可以引入PID控制中的’P’,比例控制来实现。公式如下所示,公式中D表示控制加热棒温度的占空比,其值越大加热棒温度越高,水温升高越快。Ttarget为热水器目标温度,Tnow为热水器当前温度,Kp为比例系数,其值越大温度加热的越快。我们可以从公式看出当目标温度和当前水温相差过大时,占空比也会越大,当接近目标温度时占空比会变小。从而实现越接近目标温度,水温升高越慢的效果。

P控制公式

 我们理想的的温度控制曲线,应该是接近图3所示。如果比例系数Kp过大的话,那么加热棒加热的就会越‘猛’,可能就会产生图5温度超调且震荡的效果了。如果比例系数Kp过小,那么加热棒加热力度不够,可能最终温度会稳定一个低于50℃的一个温度,产生图6的效果。
理想温度控制曲线

图3 理想温度控制曲线

超调震荡温度控制曲线

图4 超调震荡温度控制曲线

失调温度控制曲线

图5 失调温度控制曲线

 我们应该可以很容易的想到,当Kp过大时达到目标温度的时间t1,肯定会小于理想温度控制曲线中的t1。也就是说图4中的t1肯定会小于图3中的t1,因为Kp越大加热的越快,所以到达目标温度时的时间也会越短。如果我们想要水温快速的达到目标温度就要调大Kp,但是Kp过大会引起超调和震荡,可能又不满足我们控制稳定性的要求了,那么有没有办法解决这个问题的?当然是有的,也就是引入微分D,也就是下面的公式:
在这里插入图片描述
 上式中dT/dt为单位时间内温度的变化量,Kd为微分系数。这说明这时控制加热棒温度的占空比D就与水温上升的速度有关了,也就是温度的变化率。引入微分D能够抑制震荡,图5 超调震荡温度控制曲线中就不会震荡了,同时水温达到目标温度的时间t1也会小于仅仅引入比例控制的时间。我们可以把微分D看成引入一个阻尼系数Kd,Kd越大阻尼也就也大,Kd越小阻尼也就也。如果大家还不是很清楚的话,可以想想摆球,如图6所示。如果让摆球空气中摆动那么摆球会摆动很多次才会静止,这是因为空气阻尼对摆球很小。但是如果将其放到水里,可能就摆动几次就停止摆动了,也就是因为水对摆球的阻尼大。上式中的Kd也就等同于这里的阻尼系数。
摆球

图6 摆球

 如果我们在控制水温到达目标的过程中不能让水温产生超调现象,这时参数Kp必须要小,但是小的话就会产生图5的效果,水温达不到目标温度,那能不能有解决办法即使过小也能达到目标温度呢?当然是有的,也就是引入PID控制中的I积分,写成公式如下所示:
在这里插入图片描述
上式中Ki为积分系数,在这里插入图片描述为当前温度与目标温度差随时间的积分,由于我们不需要快速响应所以把参数Kd设置为了0。我们从公式可以看出,占空比与当前温度与目标温度差随时间的积分有关。如果水温一直打不到目标温度这个温度差就会一直存在,当然积分也就会越积越大,最后占空比也会增大,直到这个温度差为0时积分才不会起作用。
 讲到这基本上就把PID的比例、积分、微分为控制的作用讲的差不多了,大家应该也对PID控制有所了解了。PID写成公式如下所示,根据给定值与实际输入值构成控制偏差,即,控制系统原理框图如图7所示。
在这里插入图片描述
在这里插入图片描述

图7 PID控制系统原理框图

总结

通过以上说明我们可以大概了解PID每个参数的作用:
1.Kp越大响应速度越快,但是系统超调且会震荡。Kp越小响应速度变慢,但是会失调。
2.Kd能够抑制震荡,可以吧Kd理解为阻尼系数。
3.Ki可以看做一个推手,让Kp力气不足以让温度达到目标温度时,Ki可以推一把。

一般控制器不一定都要用到PID三个参数,
常用的有:

P控制器、PI控制器、PD控制器、PID控制器。

调节PID三个参数的步骤:
不管什么样的控制器都要先调节比例系数Kp,如果是PD控制器则调节完Kp后再调节Kd。如果是PI控制器则先调节完Kp后再调节Ki。如果是PID控制器,则应该是先调节Kp然后是Kd,最后是Ki。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

教你快速学习PID控制原理 的相关文章

随机推荐

  • jetson nano 部署yoloV3,yoloV4,yoloV3-tiny,yoloV4-tiny

    系统 ubuntu nbsp nbsp 自带cuda10 0 nbsp 1 下载与安装darknet git clone https github com AlexeyAB darknet cd darknet 2 以下步骤我都在直接进入c
  • 对比first-fit/best-fit/worst-fit/slab以及buddy这几种算法的特点

    以下均为自己对这些算法的理解 xff1a fitst fit算法 First fit算法 xff1a 连续物理内存分配算法的一种 xff0c 将空闲内存块按照地址从小到大的方式连起来 xff0c 具体实现时使用了双向链表的方式 当分配内存时
  • MIT6_0001F16_Pset2

    MIT6 0001F16 Pset2 完成Hangman Game的编写 xff0c 就是一个猜词游戏 span class token comment Problem Set 2 hangman py span span class to
  • 利用python进行数据分析 pdf

    利用python进行数据分析 链接 xff1a https pan baidu com s 1mFg7kB0WG6edKnhumMbbJg 提取码 xff1a 6kos 如果带来帮助 xff0c 可点赞或关注博主 xff01
  • 数据库系统概念第六版 第六章练习题6.11

    6 11 考虑下图所示的关系数据库 xff0c 主码加了下划线 给出关系代数表达式来表达下列的每一个查询 xff1a a 找出First Bank Corporation的所有员工姓名 b 找出First Bank Corporation所
  • 数据库实验4 SQL语言-SELECT查询操作

    数据库实验4 SQL语言 SELECT查询操作 1 首先按照第三章的jxgl数据库的模板创建jxgl数据库并插入数据 xff1a 创建数据库jxgl create database jxgl 创建相应的表 xff1a 创建student表
  • Docker安装RabbitMQ,RabbitMQ Management使用

    上一篇文章介绍了RabbitMQ的一些基本概念 xff0c 如果没看过没了解 xff0c 推荐先去了解一下 xff1a 下面我们一起来安装一下RabbitMQ并且访问一下它的Management吧 我这边是使用了Docker容器来安装和启动
  • 数据库系统概念第六版 第七章练习题 15 22

    数据库第七章理论习题 7 15 为医院构造一个包含一组病人和一组医生的E R图 为每个病人关联一组不同的检查和化验记录 说明 xff1a 医生和病人间存在联系 xff0c 同时病人有特有的检查和化验记录 xff0c 病人有病床 xff0c
  • 操作系统设计思想--主奴思想

    操作系统设计思想 主奴思想 对于操作系统而言 xff0c 如何稳定可靠运行无疑是最重要的 目前的方案均为将用户进程和其他用户进程 将用户进程和操作系统进行分离 实现操作系统可以管理用户进程 xff0c 但用户进程不能侵入内核 xff0c 同
  • 从零开始学GO ---- 错误处理

    从零开始学GO 错误处理 Go 语言通过内置的错误接口提供了非常简单的错误处理机制 error类型接口 在这个接口类型的声明中只包含了一个方法Error Error方法不接受任何参数 xff0c 但是会返回一个string类型的结果 它的作
  • 从零开始学GO ---- 接口

    从零开始学GO 接口 接口是一个编程规范 xff0c 一组方法签名的集合 Go的接口是非侵入式的设置 xff0c 一个具体类型实现接口不需要在语法上显式地声明 xff0c 只要具体类型的方法集是接口方法集的超集 xff0c 就代表该类型实现
  • Golang通过反射对结构体进行赋值和其他操作

    Golang通过反射对结构体进行赋值和其他操作 通过反射可以方便快捷地访问Golang的结构体字段 xff0c 并进行赋值或其他操作 当两个结构体内容相同但名字不同时 xff0c 如何快捷地进行赋值 xff1f 或者内容有交集 xff0c
  • 如何使用github来下载你需要使用的ros资源

    使用ros系统 xff0c 需要用到许多数据包 xff0c 有些时候你需要使用的ROS数据包并没有Debian包的形式 xff0c 这时你需要从数据源安装它 代码开发人员通常使用的有三种主流的版本控制系统 xff1a SVN xff0c G
  • VLC RTSP视频播放终极解决方案

    VLC播放RTSP视频流遇到的问题 摄像头是RTSP协议的 xff0c 需要在Android端实时显示摄像头视频流 xff0c 这里采用了开源的VLC播放器 xff0c 可能会有如下需求 xff1a 一 有截屏的需求 二 有屏幕录制的需求
  • docker push 实现过程

    这一篇文章分析一下docker push的过程 xff1b docker push是将本地的镜像上传到registry service的过程 xff1b 根据前几篇文章 xff0c 可以知道客户端的命令是在api client push g
  • FreeRTOS专题六:支持多优先级

    在 FreeRTOS 中 xff0c 数字优先级越小 xff0c 逻辑优先级也越小 xff0c 这与RT Thread 和 C OS刚好相反 就绪列表 pxReadyTasksLists configMAX PRIORITIES 是一个数组
  • 操作系统中的中断(详细介绍+图片理解)

    中断的概念 中断是指程序执行过程中 xff0c 遇到急需处理的事件时 xff0c 暂时中止CPU上现行程序的运行 xff0c 转去执行相应的事件处理程序 xff0c 待处理完成后再返回原程序被中断处或调度其他程序执行的过程操作系统是 中断驱
  • Android 如何杀死Service

    方法很简单就是用ActivityManager private void killeService List lt RunningAppProcessInfo gt infos TODO 自动生成的方法存根 ActivityManager
  • [自动驾驶]Build a Traffic Sign Recognition Program

    看 准确率98 的深度学习交通标志识别是如何做到的 xff1f 这篇文章的时候 xff0c 发现了udacity的自动驾驶课程 可惜要收费 xff0c 不过课程project在github上有 xff0c 那直接做project就好了 xf
  • 教你快速学习PID控制原理

    教你快速学习PID控制原理 写在前面 在这篇文章中我会通过举例的方式来让大家了解什么是PID控制 xff0c 这篇博客是让大家更加容易的理解PID控制 xff0c 如果大家想要跟深入的了解的话最好是自己上手去做一个关于PID控制的实物 xf