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 次的采样值有关。
缺点:
①积分截断效应大,有稳态误差;
②溢出的影响大。有的被控对象用增量式则不太好;

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《微服务架构设计模式》第十三章 微服务架构的重构策略

微服务架构的重构策略 一、重构到微服务需要考虑的问题1、为什么重构2、重构形式3、重构策略 二、设计服务与单体的协作方式三、总结 一、重构到微服务需要考虑的问题 1、为什么重构 单体地狱造成的业务问题: 交付缓慢充满故障的软件交付可扩展性差 2、重构形式 …

前端 | (六)CSS盒子模型 | 尚硅谷前端html+css零基础教程2023最新

学习来源:尚硅谷前端htmlcss零基础教程,2023最新前端开发html5css3视频 文章目录 📚元素的显示模式🐇CSS长度单位🐇元素的显示模式⭐️块元素(block)⭐️行内元素(inline&#xff09…

浅谈电能分项计量在节能降耗中的应用

摘要:随着电力企业改革活动的持续推进,要想加快改革进程、优化改革效果,应该提高对节能降耗问题的关注度。在应用电力计量技术的过程中巧妙地渗透节能降耗这一理念,以此提高技术应用率,充分体现技术应用价值&#xff0…

selenium-多窗口和frame处理

1.切换窗口 适用场景:点击按钮后,重新打开一个窗口,想要在新的窗口定位操作,就需要切换窗口 原理:获取窗口的唯一标识就是句柄,获取到句柄,就可以切换到对应的窗口了 处理方法: …

S3C2440点亮LED(裸机开发)

文章目录 前言一、环境介绍一、GPIO介绍二、点亮开发板的LED1.预备动作2.led代码 总结 前言 本期和大家主要分享的是使用S3C2440开发板点亮一个LED灯,可能大家拿到开发板之后做的第一件事情都是点灯,这是为什么呢?因为点灯这件事情不仅能够检…

curl操作

下载路径:https://curl.se/windows/ 参考:https://blog.csdn.net/weixin_45191386/article/details/130652821 操作: curl http://localhost:8085/api/v1/aaa/bbbb/?ccc 652781344055627776

如何在PADS Logic中查找器件

PADS Logic提供类似于Windows的查找功能,可以进行器件的查找。 (1)在Logic设计界面中,将菜单显示中的“选择工具栏”进行打开,如图1所示,会弹出对应的“选择工具栏”的分栏菜单选项,如图2所示。…

【ArcGIS Pro二次开发】(46):要素类从上到下、从左到右排序

要素类经过编辑之后,【OBJECTID】字段会变得不规律。应部分网友要求,做了这个从上到下、从左到右排序的工具。 不过后来在ArcGIS Pro中发现了一个【排序】工具,已经可以完美实现这个功能需求,发现自己做了个白工。 不过做了不能白…

实例019 以图形按钮显示的界面

实例说明 菜单和工具栏虽然能方便用户操作程序的相应功能,但各有缺点。如果采用按钮式功能菜单,不但美观大方,而且操作灵活。当单击按钮时,用户区将显示相应的操作按钮组。下面介绍图形界面式菜单的设计方法。运行本例&#xff0…

算法与数据结构-排序

文章目录 一、如何分析一个排序算法1.1 排序算法的执行效率1.1.1 最好情况、最坏情况、平均情况时间复杂度1.1.1.1 最好、最坏情况分析1.1.1.2 平均情况分析 1.1.2 时间复杂度的系数、常数 、低阶1.1.3 比较次数和交换(或移动)次数 1.2 排序算法的内存消…

【PostgreSQL内核学习(二)—— 查询分析】

查询分析 查询处理查询分析查询处理与查询分析的关系查询分析执行流程Lex和YaccLex:Yacc:词法分析工具Lex语法分析工具Yacc使用Lex和Yacc的案例 词法和语法分析以SELECT语句为例讲解 PostgreSQL中查询语句如何被解析并生成分析树。 语义分析 声明&#x…

图片速览 DCN K-means-friendly Spaces: Simultaneous Deep Learning and Clustering

本文使用了一种交替更新网络参数和聚类中心的方法。在网络更新完成之后,对于固定的网络参数和 M,再更新当前样本的分配向量。然后根据新的分配结果如式子3.8更新聚类中心: 注:文中还有问题是否能进行凸优化的部分 CG https…