再论PID,PID其实很简单。。。

2023-11-05

0、PID前言

PID已经有105年的历史了。

它并不是什么很神圣的东西,大家一定都见过PID的实际应用
类似于这种:需要将某一个物理量“保持稳定”的场合(比如维持平衡,稳定温度、转速等),PID都会派上大用场。

那么问题来了:

比如,我想控制一个“热得快”,让一锅水的温度保持在50℃  。

这么简单的任务,为啥要用到微积分的理论呢?

你一定在想:

这不是so easy嘛~  小于50度就让它加热,大于50度就断电,不就行了?几行代码用Arduino分分钟写出来。

没错~在要求不高的情况下,确实可以这么干~  

但是,换一种说法,你就知道问题出在哪里了:

如果我的控制对象是一辆汽车呢?

要是希望汽车的车速保持在50km/h不动,你还敢这样干么

设想一下,假如汽车的定速巡航电脑在某一时间测到车速是45km/h

它立刻命令发动机:加速!

结果,发动机那边突然来了个100%全油门,嗡的一下,汽车急加速到了60km/h。这时电脑又发出命令:刹车!

结果,吱...............哇............(乘客吐)

所以,在大多数场合中,用“开关量”来控制一个物理量,就显得比较简单粗暴了。有时候,是无法保持稳定的。因为单片机、传感器不是无限快的,采集、控制需要时间。

而且,控制对象具有惯性。比如你将一个加热器拔掉,它的“余热”(即热惯性)可能还会使水温继续升高一小会。

这时,就需要一种『算法』:

  • 它可以将需要控制的物理量带到目标附近

  • 它可以“预见”这个量的变化趋势

  • 它也可以消除因为散热、阻力等因素造成的静态误差

  • ....

于是,当时的数学家们发明了这一历久不衰的算法——这就是PID。

你应该已经知道了,P,I,D是三种不同的调节作用,既可以单独使用(P,I,D),也可以两个两个用(PI,PD),也可以三个一起用(PID)

这三种作用有什么区别呢?客官别急,听我慢慢道来

 

我们先只说PID控制器的三个最基本的参数:KP,Ki,KD。

1、P

P就是比例的意思。它的作用最明显,原理也最简单。我们先说这个:


需要控制的量,比如水温,有它现在的『当前值』,也有我们期望的『目标值』。

当两者差距不大时,就让加热器“轻轻地”加热一下。要是因为某些原因,温度降低了很多,就让加热器“稍稍用力”加热一下。

要是当前温度比目标温度低得多,就让加热器“开足马力”加热,尽快让水温到达目标附近。

这就是P的作用,跟开关控制方法相比,是不是“温文尔雅”了很多

实际写程序时,就让偏差(目标减去当前)与调节装置的“调节力度”,建立一个一次函数的关系,就可以实现最基本的“比例”控制了~
KP越大,调节作用越激进,KP调小会让调节作用更保守。

要是你正在制作一个平衡车,有了KP的作用,你会发现,平衡车在平衡角度附近来回“狂抖”,比较难稳住。

如果已经到了这一步——恭喜你!离成功只差一小步了~

2、D

D的作用更好理解一些,所以先说说D,最后说i


刚才我们有了P的作用。你不难发现,只有P好像不能让平衡车站起来,水温也控制得晃晃悠悠,好像整个系统不是特别稳定,总是在“抖动”。

 

你心里设想一个弹簧:现在在平衡位置上。拉它一下,然后松手。这时它会震荡起来。因为阻力很小,它可能会震荡很长时间,才会重新停在平衡位置。

请想象一下:要是把上图所示的系统浸没在水里,同样拉它一下 :这种情况下,重新停在平衡位置的时间就短得多。

我们需要一个控制作用,让被控制的物理量的“变化速度”趋于0,即类似于“阻尼”的作用。

因为,当比较接近目标时,P的控制作用就比较小了。越接近目标,P的作用越温柔。有很多内在的或者外部的因素,使控制量发生小范围的摆动。D的作用就是让物理量的速度趋于0,

只要什么时候,这个量具有了速度,D就向相反的方向用力,尽力刹住这个变化。

kD参数越大,向速度相反方向刹车的力道就越强。

如果是平衡小车,加上P和D两种控制作用,如果参数调节合适,它应该可以站起来了~欢呼吧

等等,PID三兄弟好想还有一位。看起来PD就可以让物理量保持稳定,那还要I干嘛?

因为我们忽视了一种重要的情况:

3、i

还是以热水为例。假如有个人把我们的加热装置带到了非常冷的地方,开始烧水了。需要烧到50℃。

在P的作用下,水温慢慢升高。直到升高到45℃时,他发现了一个不好的事情:天气太冷,水散热的速度,和P控制的加热的速度相等了。
这可怎么办?

  • P兄这样想:我和目标已经很近了,只需要轻轻加热就可以了。

  • D兄这样想:加热和散热相等,温度没有波动,我好像不用调整什么。


于是,水温永远地停留在45℃,永远到不了50℃。

作为一个人,根据常识,我们知道,应该进一步增加加热的功率。可是增加多少该如何计算呢?

前辈科学家们想到的方法是真的巧妙。

设置一个积分量。只要偏差存在,就不断地对偏差进行积分(累加),并反应在调节力度上。

这样一来,即使45℃和50℃相差不太大,但是随着时间的推移,只要没达到目标温度,这个积分量就不断增加。

系统就会慢慢意识到:还没有到达目标温度,该增加功率啦!

到了目标温度后,假设温度没有波动,积分值就不会再变动。这时,加热功率仍然等于散热功率。但是,温度是稳稳的50℃。

Ki的值越大,积分时乘的系数就越大,积分效果越明显。

所以,I的作用就是,减小静态情况下的误差,让受控物理量尽可能接近目标值。

I在使用时还有个问题:需要设定积分限制。防止在刚开始加热时,就把积分量积得太大,难以控制。

这篇就写到这里。要想直观地体验PID的控制作用,需要一个具体的东西来调试。

下一篇,平衡小车中的PID,欢迎大家持续关注~

-END-

猜你喜欢

看完这篇文章,还不会做平衡小车,你来打我。

为什么在中国电子工程师不如搞软件的?

聊聊指针

 最 后  

 

若觉得文章不错,转发分享,也是我们继续更新的动力。

5T资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、单片机、等等

在公众号内回复「更多资源」,即可免费获取,期待你的关注~

长按识别图中二维码关注

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

再论PID,PID其实很简单。。。 的相关文章

  • JournalNode无法启动问题排查

    JournalNode无法启动问题排查 1 问题说明 1 1 JournalNode重新启动后又失败 一直重启不成功 经过观察 发现日志报错 经排查报错原因是编辑log损坏导致的 2018 05 28 16 06 07 896 WARN n
  • 【JS逆向】猿人学第二题动态cookie

    JS逆向 猿人学第二题动态cookie 一 分析网站 题目已经声明 关于cookie方面加密 所以进入网站后需要清理网站加载的cookie 方便调试 再次请求网站分析网站加载的参数 这里看到网站请求了两次接口 观察发现第一次请求并没有携带c
  • taro+flutter开发app应用问题汇总

    采用flutter webview plugin集成taro页面 flutter下taro无法拨打号码 一开始通过flutterWebViewPlugin onUrlChanged listen url 监听url变化 if url sta
  • ajax二进制图片显示,ajax请求图片,二进制形式显示图片有问题

    我想通过ajax请求图片vm ajaxGet img logo png function data 这里data 就是图片本身的文件流 测试ajax没有问题 var img document createElement img img on
  • 数据库连接接口(驱动)

    基于go python C 语言实现的数据库驱动 数据库 类型 Go语言 Python语言 C C 语言 MySQL 多线程关系型 github com go sql driver mysql mysql connector和PyMySQL
  • kubernetes(k8s) quick start

    文章目录 安装 使用kubeadm 环境准备 1 设置主机名与时区 2 添加hosts网络主机配置 三台虚拟机都要设置 3 关闭 selinux 关闭防火墙 关闭 swap 4 安装kubeadm 5 配置网桥 6 通过镜像安装k8s 7
  • YouComplete问题汇总

    1 ycm的readme中给出推荐版本需要注意一下 2 clone这个ycm 需要翻墙 不然完成不了编译 3 编译手段 按照给出的python需求进行编译 python3 install py clang completer 4 编译期间会
  • Unit8Array 转 Unit16Array

    vat u8 new Unit8Array data const buf Buffer from u8 const u16 new Uint16Array buf buffer buf byteOffset buf byteLength U
  • android:基于http的get和post请求

    1 说在前面 初次接触android的网络编程 现在再一次被刷新了世界观 android程序往往扮演的是一个 客户端 的角色 和服务器之间进行沟通 从而获得服务器传来的数据 通过服务器传回的信息丰富程序的内容 2 Http协议 2 1 概念
  • ESP32 LVGL8.1 实现太空人显示(29)

    文章目录 一 ESP32 LVGL工程配置 1 1从库中下载LVGL代码 1 2配置适合ESP32 液晶屏 1 3编译下载测试 二 GIF图片处理 2 1下载gif图片 2 2将gif图片按照帧率导出成图片 2 3导出的图片背景处理 2 4
  • 以蛋白质功能研究为题写一篇综述论文

    我们现在知道蛋白质是生物体的基本结构和功能的基础 它不仅可以提供机体所需的能量 还可以参与其他重要的生理过程 蛋白质的结构和功能与其化学性质密切相关 本文将重点介绍蛋白质的功能 并研究一些如何利用蛋白质来探索它在生物体中的作用 通过研究 我
  • 模拟电路设计学习

    模拟电路设计 1 功能示意图 三个滑动变阻器可以对3路恒流源输出量进行调节 从而改变LED发光亮度 ADS1220芯片 需要使用SPI模式1 目前使用的是两线制接线方式 不需要校准 加热丝PID控温 在湿度变送器项目中有涉及 光电采集板不对
  • 第十四章 我的毕业之作—苏州大学过程化管理系统

    大四上学期忙活着考研 虽然考研不顺利 但是上学期着急忙慌的在所难免 没做什么事情 也没有找工作 所以去年6月份接的项目一直推迟到现在才算大功告成 这虽然不是我做的最后一个项目 但是这是我的毕业设计 导师就是我一直跟随的陈老师 这个系统在我所
  • Dubbo 在 K8s 下的思考

    作者 曹胜利 Apache Dubbo PMC 导读 Dubbo 作为高性能 Java RPC 框架的刻板印象早已深入人心 在 Cloud Native 的架构选型上 Spring Cloud 或许才是业界的优先选择 实际上 Dubbo 已
  • nodejs将rtsp视频流打上水印后通过websocket发送给前端

    网上有把rtsp流通过websocket发送到前端的方法 就是用rtspStream 具体代码如下 var stream require node rtsp stream stream new stream name name stream
  • mount nfs 共享 用户名和组更改及没有写的权限

    今天工作当中碰到了这个问题 etc exports home ict ict data NewsData 10 0 21 65 rw home ict ict data ForumData 10 0 21 75 rw 结果在客户端mount
  • 招聘专用「人才洞察工具」|One Model

    人力管理 Talent management 在企业运营中起着关键的作用 不仅有助于优化人力资源的配置 还可以提高员工绩效 满意度和忠诚度 推动企业实现可持续增长 在人工智能蓬勃发展的当下 借助 AI 进行人才洞察也成为了现实 One Mo
  • InputStream&FileOutputStream文件复制后文件变大

    InputStream is FileOutputStream fos new FileOutputStream 保存文件路径 名称 byte b new byte 1024 while is read b 1 fos write b 写入
  • 大数据运维存档(3)HDFS&ZooKeeper调优与排障

    一 HDFS篇 1 巡检 HDFS 为集群提供高可用性弹性存储服务 是集群的存储主体 每日早晚巡检HDFS 服务 包括HDFS 服务可用性 存储使用率 datanode 是否有故障盘等 1 1 HDFS 总体状态 HDFS 状态 如下的红色
  • WDK学习笔记_docker容器客户端_fabric-go-sdk

    文章目录 摘要 一 智能合约在区块链上的部署步骤 二 用docker容器创建的客户端在命令行上与区块链网络进行交互 2 1 容器内创建通道 2 2 加入通道 2 3 安装链码 2 4 初始化链码 2 5 调用链码 三 fabric go s

随机推荐

  • Openlayers 快速上手教程

    欢迎点赞 收藏 留言 如有错误敬请指正 1 Openlayers简介 Openlayers 是开源的前端地图框架 官网地址 https openlayers org 它的作用主要是用于展现数据并且提供相应的地图操作工具 1 1 官网首页 1
  • C语言经典100例题(33)--学习goto与clrscr()函数

    目录 题目 问题分析 代码 运行结果 题目 学习goto 与clrscr 函数 问题分析 goto关键字 goto关键字直接将控件传递给标签名称指定的语句 gotoxy 定位函数 clrscr函数 清屏函数 注意在VS2019中没有这个函数
  • Bezier曲线的公式推导及代码实现

    本文仅简述Bezier曲线的公式推导 并给出了一种代码实现 在阅读本文之前 请确保你已经对Bezier曲线的背景知识有所了解 相关知识可以通过以下课程进行学习 MOOC 计算机图形学 中国农业大学 赵明或者观看B站搬运版 算法原理 给定 n
  • mysql count 测试

    从执行结果来说 count 1 和count 之间没有区别 因为count count 1 都不会去过滤空值 但count 列名 就有区别了 因为count 列名 会去过滤空值 从执行效率来说 count 1 和 count 一样 24 6
  • 自动登录脚本

    为了解决不同网络空间的问题 本来是想通过改变环境变量的方式 不过最终还是 选择了在shell脚本下 选择了网络空间后执行脚本 同时这个库 还可以实现相应的文件传输功能 这也是比较划算的一个功能 usr bin python coding u
  • chatgpt赋能python:Python获取微信群聊天记录

    Python获取微信群聊天记录 微信是目前中国最受欢迎的社交聊天应用程序之一 许多人都习惯在微信群中进行聊天和信息交流 然而 有时我们需要保存一些重要的聊天记录 以备日后查看和备份 Python可以帮助我们实现获取微信群聊天记录的目的 为什
  • java中对于类的了解

    1 java中的万事万物都由类组成 而类可以说是对象的载体 相当于类 2 类由属性与行为组成 属性 成员变量 行为 成员方法 相当于函数 举个例子 人 对象 高 矮 瘦 胖 成员变量 走路 吃饭 上班 成员方法 calss person S
  • 锂电池为啥会爆炸

    前段时间 三星公司的旗舰智能手机GalaxyNote 7一直牢牢占据着新闻头条 这倒不是因为它的性能或是设计有多么出众 当然Note7的性能和设计的确很好 而是因为其在上市后的短时间内 即被发现内置电池存在重大安全隐患 手机无故发生爆炸的几
  • JSP基本语法

    JSP基本语法 1 1 JSP页面的基本结构 1 在传统的HTML页面文件中加入Java程序片和JSP标记就构成了一个JSP页面 JSP页面有五种元素组成 普通的HTML标记和JavaScript标记 JSP标记 如指令标记 动作标记 变量
  • 3.1 简单变量

    为把信息存储在计算机中 程序必须记录3个基本属性 信息将存储在哪里 要存储什么值 存储何种类型的信息
  • java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException

    IDEA也没提示错误 但是跑单元测试的时候报错 加入以下依赖正常 gt
  • Linux上快速安装软RAID详细步骤

    物理环境 虚拟机CentOS6 4 配置 8G内存 2 2核cpu 3块虚拟硬盘 sda sdb sdc sdb和sdc是完全一样的 在实际生产环境中 系统硬盘与数据库和应用是分开的 这样有利于系统的维护和对数据应用的使用 本环境中将sda
  • tcp/udp建立连接并通信的过程

    基于TCP的socket编程的服务器程序流程如下 1 创建套接字 SOCKETsockSrv socket AF INET SOCK STREAM 0 2 将套接字绑定到本地地址和端口上 SOCKADDR INaddrSrv addrSrv
  • 利用Android Studio自带的模拟器联网

    Android Studio自带的模拟器本身默认是不能上网的 因为默认DNS为10 0 2 3 使用这个DNS是不能上网的 网上很多帖子已经给出了解决办法 但是会遇到下面这种情况 通过继续查询得知 通过shell命令设置 获取 IP 网关
  • 蓝桥杯真题系列:C语言A组奇妙的数字

    小明发现了一个奇妙的数字 它的平方和立方正好把0 9的10个数字每个用且只用了一次 你能猜出这个数字是多少吗 请填写该数字 不要填写任何多余的内容 这个题题意比较简单 解决办法也是非常简单 暴力即可 主要数据结构哈希表的运用 哈希表用来记录
  • 烟波钓叟赋注解。

    先理解一下烟波钓叟赋 奇门遁甲 的排盘过程 前言 基本数制系统 中国文化 12个数以内叫掌握 一掌內还可以握更多的数 易有太极 是生两仪 两仪生四象 四象生八卦 太极为1 两仪为阴阳 三奇就是乙丙丁 四象 左青龙 右白虎 南朱雀 北玄武 五
  • Qt将十二位整形十进制转换成十六进制,在转为ascii字符,并下发串口。在接受端完整还原这个十二位的十进制数。

    可以按照以下步骤进行操作 将十进制数123456789012转换成十六进制字符串 QString hexString QString 1 arg 123456789012ull 0 16 其中 1表示替换第1个参数 0表示输出的最小位数为0
  • 微信小程序环境配置过程

    微信小程序简介 可以通过阅读微信官方文档对小程序有一个初步的了解 在官方文档内也可以学习到如何进行小程序的环境配置 官方文档链接如下 https developers weixin qq com miniprogram dev framew
  • jsonEdit编辑器

    json格式化编辑器 源码做了部分修改 支持导入及手动编辑
  • 再论PID,PID其实很简单。。。

    0 PID前言 PID已经有105年的历史了 它并不是什么很神圣的东西 大家一定都见过PID的实际应用类似于这种 需要将某一个物理量 保持稳定 的场合 比如维持平衡 稳定温度 转速等 PID都会派上大用场 那么问题来了 比如 我想控制一个