PID算法

PID,就是“比例(proportional)、积分(integral)、微分(derivative)”,是一种很常见的控制算法。
需要将一个物理量保持在稳定状态(比如维持平衡,温度、转速的稳定),这些场景都需要PID
假设现在有一个场景:加热棒将一杯水加热到70℃
大多数情况下,我们只需要“开关量”来控制加热棒,当温度没达到时,打开开关,当温度达到时关闭开关。但是,我们发现,当温度达到70℃时断开开关后,水温还是会由于“余热”持续升高。传感器的采集都是需要时间的,所以为了精确控制,便有了PID算法:
  • 可以将控制量带到目标值附近
  • 可以“预见”该控制量的变化趋势
  • 可以消除因为余热,散热等因素引起的误差

P、I、D是三种不同的调节作用,既可以单独使用,也可以两两组合使用,也可以三个一起使用。

先来说说PID的三个参数:kP,kI,kD

①kP:比例系数

还是那个场景:

当水温差距很大时,狠狠加热一下;差距很小时,慢慢加热一下;

这就是P的作用

②kD:微分时间常数

有了上述P的控制,水温维持的晃晃悠悠,所以此时我们需要稳定一下,给它一个“阻尼”,让控制量的变化速度趋于0

③kI:积分时间常数

同样的场景,不同的地方,现在到北极了,需要加热到70℃,在P的作用下,加热到了66℃,此时水散热的速度和加热速度一样,P在慢慢加热,D觉得已经很稳定了,于是水温永远是66℃。

此时就需要I的作用:设置一个积分量,只要没达到目标,就一直积分。也就是增加加热功率

专业来讲:

PID控制其实就是对偏差的控制过程;如果偏差为 0, 则比例环节不起作用,只有存在偏差时,比例环节才起作用;积分环节主要是用来消除静差,所谓静差,就是系统稳定后输出值和设定值之间的差值,积分环节实际上就是偏差累计的过程,把累计的误差加到原有系统上以抵消系统造成的静差;而微分信号则反应了偏差信号的变化规律,也可以说是变化趋势,根据偏差信号的变化趋势来进行超前调节,从而增加了系统的预知性。

PID结构体初始化:

typedef struct
{
    float target_val;               //目标值
    float actual_val;        		//实际值
    float err;             			//定义偏差值
    float err_last;          		//定义上一个偏差值
    float Kp,Ki,Kd;          		//定义比例、积分、微分系数
    float integral;          		//定义积分值
}pid;

位置式PID算法:

在这里插入图片描述 

float PID_realize(float temp_val)
{
	/*计算目标值与实际值的误差*/
    pid.err=pid.target_val-temp_val;
	/*误差累积*/
    pid.integral+=pid.err;
	/*PID算法实现*/
    pid.actual_val=pid.Kp*pid.err+pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last);
	/*误差传递*/
    pid.err_last=pid.err;
	/*返回当前实际值*/
    return pid.actual_val;
}

增量式PID算法

在这里插入图片描述

float PID_realize(float temp_val) 
{
	/*传入目标值*/
	pid.target_val = temp_val;
	/*计算目标值与实际值的误差*/
    pid.err=pid.target_val-pid.actual_val;
	/*PID算法实现*/
	float increment_val = pid.Kp*(pid.err - pid.err_next) + pid.Ki*pid.err + pid.Kd*(pid.err - 2 * pid.err_next + pid.err_last);
	/*累加*/
	pid.actual_val += increment_val;
	/*传递误差*/
	pid.err_last = pid.err_next;
	pid.err_next = pid.err;
	/*返回当前实际值*/
	return pid.actual_val;
}

 增量式与位置式区别:

1 增量式算法不需要做累加,控制量增量的确定仅与最近几次偏差采样值有关,计算误差对
控制 量计算的影响较小。而位置式算法要用到过去偏差的累加值,容易产生较大的累加误
差。
2 增量式算法得出的是控制量的增量,例如在阀门控制中,只输出阀门开度的变化部分,误
动作影响小,必要时还可通过逻辑判断限制或禁止本次输出,不会严重影响系统的工作。
而位置式的输出直接对应对象的输出,因此对系统影响较大。
3 增量式 PID 控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分
部件的对象,如步进电机等,而位置式 PID 适用于执行机构不带积分部件的对象,如电液伺
服阀。
4 在进行 PID 控制时,位置式 PID 需要有积分限幅和输出限幅,而增量式 PID 只需输出限幅
位置式 PID 优缺点:
优点:
①位置式 PID 是一种非递推式算法,可直接控制执行机构(如平衡小车),u(k)的值和执行
机构的实际位置(如小车当前角度)是一一对应的,因此在执行机构不带积分部件的对象中
可以很好应用
缺点:
①每次输出均与过去的状态有关,计算时要对 e(k)进行累加,运算工作量大。
增量式 PID 优缺点:
优点:
①误动作时影响小,必要时可用逻辑判断的方法去掉出错数据。
②手动/自动切换时冲击小,便于实现无扰动切换。当计算机故障时,仍能保持原值。
③算式中不需要累加。控制增量Δu(k)的确定仅与最近 3 次的采样值有关。
缺点:
①积分截断效应大,有稳态误差;
②溢出的影响大。有的被控对象用增量式则不太好;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用后台模块SessionCookieToken身份验证唯一性

文章目录 开发环境数据导入-mysql架构&库表列数据库操作-mysqli函数&增删改查数据接收输出-html混编&超全局变量第三方插件引用-js传参&函数对象调用身份验证-Cookie使用身份验证-Session使用唯一性判断-Token使用具体安全知识点:Cookie和Session都…

数据库应用:CentOS 7离线安装MySQL与Nginx

目录 一、理论 1.安装依赖 二、实验 1.离线安装MySQL与Nginx 2.离线安装Nginx 三、问题 1.执行nginx -v命令报错 四、总结 一、理论 1.安装依赖 (1)概念 安装依赖是指在软件开发中,为了运行或者编译一个程序或者库,在计…

基于小波哈尔法(WHM)的一维非线性IVP测试问题的求解(Matlab代码实现)

💥1 概述 小波哈尔法(WHM)是一种求解一维非线性初值问题(IVP)的数值方法。它基于小波分析的思想,通过将原始问题转化为小波空间中的线性问题,然后进行求解。以下是一维非线性IVP测试问题的求解…

Android性能优化——启动优化

App 的启动速度是用户的第一体验,互联网中有一个八秒定律,如果用户等待八秒App 还没打开,70%的用户都会停止等待 一、启动分类 官方 App startup time 冷启动 耗时最多,衡量标准 热启动 最快。 后台~前台 温启动…

数据中心水浸事件,该如何找回安全?

数据中心是现代企业和组织中不可或缺的基础设施,承载着大量的敏感数据和关键业务运作。然而,水浸事件可能成为数据中心的巨大威胁,可能导致设备故障、数据丢失以及业务中断,给组织带来严重的损失和风险。 因此,为了保护…

linux之Ubuntu系列(八)用户管理 修改文件权限

修改文件权限 chown 修改拥有者 -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。 修改 文件|目录 的拥有者 sudo chown [-R] 用户名 文件名|目录 更改文件属主&…

pytest 参数化进阶

目录 前言: 语法 参数化误区 实践 简要回顾 前言: pytest是一个功能强大的Python测试框架,它提供了参数化功能,可以帮助简化测试用例的编写和管理。 语法 本文就赶紧聊一聊 pytest 的参数化是怎么玩的。 pytest.mark.par…

⛳ Java数组

Java数组的目录 ⛳ Java数组🎨 一,一维数组👣 1.1,概念📢 1.2,基本用法1,语法格式2,代码 💻 1.3,内存结构📝 1.4,练习 🎁 …

DB-Engines排名公布 GBASE南大通用入围国产数据库TOP 3

什么是DB-Engines排名? DB-Engines排名是数据库领域的流行度榜单,它对全球范围内的419款数据库(截至2023年7月)进行排名,每月更新一次,排名越靠前,则表示越流行。在很多技术选型的场合&#xf…

亚信科技荣任「DBL电信行业工作组」副组长单位,AntDB数据库连年入选《中国数据库产品图谱》

日前,“2023可信数据库发展大会”在京圆满召开。亚信科技凭借自研的电信级核心交易数据库AntDB在通信行业15年的技术积累和行业贡献,成功当选为数据库应用创新实验室(DBL)电信行业工作组副组长单位。AntDB数据库连续两年入选《全球…

Stable Diffusion - 编辑生成 (OpenPose Editor) 相同人物姿势的图像

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131818943 OpenPose Editor 是 Stable Diffusion 的扩展插件,可以自定义人物的姿势和表情,以及生成深度、法线和边缘图等信…

学会在重装系统前如何备份软件,再也不怕失去珍贵的应用!

​Windows系统是电脑的重要组成部分,它不仅提供了友好的用户界面,还承担着许多关键的功能和任务,为我们提供了一个稳定、安全和效率的工作环境,使我们能够充分发挥电脑的潜力,优化工作效率和生活品质。 随着系统使…

浅谈测试工程化 - 以并发自动化框架为例

目录 前言 测试工程化 一、测试需求分析 二、测试设计 三、测试实现和落地 四、测试维护 扩展 前言 测试工程化是指将软件测试过程中的各个环节进行自动化和标准化,以提高测试效率、质量和可持续性。在测试工程化中,使用并发自动化框架是一个重要…

kotlin中使用Room数据库(包含升降级崩溃处理)

目录 1.导入依赖库 2.数据实体类 3.数据访问对象 (DAO) 4.数据库类 5.调用DAO里面的“增、删、改、查”方法 6.数据库升降级处理 升级(保存数据库历史数据): 升级(不保存数据库历史数据): 降级&…

NUXT3学习笔记2

1、配置Ant design Vue (两个安装方式随便选一种,yarn会安装的更快) npm i ant-design-vue --save yarn add ant-design-vue 2、使⽤的 Vite,你可以使⽤ unplugin-vue-components 来进⾏按需加载。 yarn add unplugin-vue-components --save 在nuxt.…

【iOS】探索ARC的实现

ARC ARC在编译期和运行期做了什么?编译期:运行期:block 是如何在 ARC 中工作的? ARC的实现分析__strong自己生成并持有storeStrongSideTable散列表objc_retainobjc_releasesidetable_releaseretainCount非自己生成并持有 ARC在编译…

python3GUI--仿win10任务管理器By:PyQt5(附UI源码)

文章目录 一.前言二.展示1.主界面1.进程2.性能1.CPU2.内存 3.简略信息4.详细信息5.新建任务 三.设计思路1.UI设计1.主界面1.进程2.性能3.详细信息4.新建任务5.图表信息组件 2.代码整体设计1.项目设计心得2.项目设计其他心得 3.其他心得 四&am…

华为无线ac+ap旁挂二层组网常用配置案例

AC控制器理解配置步骤: capwap source interface Vlanif 100 //源IP回包地址 wlan ssid-profile name test //新建个模版名称为test ssid test //wifi名称 wlan security-profile name test //建立安全模版也叫test security wpa-wpa2 psk pass-phrase admin123 a…

【PDFBox】PDFBox操作PDF文档之读取指定页面文本内容、读取所有页面文本内容、根据模板文件生成PDF文档

这篇文章,主要介绍PDFBox操作PDF文档之读取指定页面文本内容、读取所有页面文本内容、根据模板文件生成PDF文档。 目录 一、PDFBox操作文本 1.1、读取所有页面文本内容 1.2、读取指定页面文本内容 1.3、写入文本内容 1.4、替换文本内容 (1&#xf…

在 Amazon 上以高可用性模式实现 Microsoft SQL 数据库服务现代化的注意事项

许多企业都有需要 Microsoft SQL Server 来运行关系数据库工作负载的应用程序:一些应用程序可能是专有软件,供应商可使用它强制 Microsoft SQL Server 运行数据库服务;其他应用程序可能是长期存在的、自主开发的应用程序,它们在最…