PID算法通俗讲解

上传人:壹****1 文档编号:561401393 上传时间:2023-05-17 格式:DOCX 页数:10 大小:24.68KB
返回 下载 相关 举报
PID算法通俗讲解_第1页
第1页 / 共10页
PID算法通俗讲解_第2页
第2页 / 共10页
PID算法通俗讲解_第3页
第3页 / 共10页
PID算法通俗讲解_第4页
第4页 / 共10页
PID算法通俗讲解_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《PID算法通俗讲解》由会员分享,可在线阅读,更多相关《PID算法通俗讲解(10页珍藏版)》请在金锄头文库上搜索。

1、总所周知,PID算法是个很经典的东西。而做自平衡小车,飞行器PID 是一个必须翻过的坎。因此本节我们来好好讲解一下PID,根据我在学 习中的体会,力求通俗易懂。并举出PID的形象例子来帮助理解PIDo一、首先介绍一下PID名字的由来:P: Proportion (比例),就是输入偏差乘以一个常数。I : Integral (积分),就是对输入偏差进行积分运算。D: Derivative (微分),对输入偏差进行微分运算。注:输入偏差=读出的被控制对象的值-设定值。比如说我要把温度控制 在26度,但是现在我从温度传感器上读出温度为28度。则这个26度 就是”设定值“,28度就是“读出的被控制对象

2、的值”。然后来看一下,这 三个元素对PID算法的作用,了解一下即可,不懂不用勉强。P,打个比方,如果现在的输出是1,目标输出是100,那么P的作用 是以最快的速度达到100,把P理解为一个系数即可;而I呢?大家学 过高数的,0的积分才能是一个常数,I就是使误差为0而起调和作用; D 呢?大家都知道微分是求导数,导数代表切线是吧,切线的方向就是 最快到至高点的方向。这样理解,最快获得最优解,那么微分就是加快 调节过程的作用了。二、然后要知道PID算法具体分两种:一种是位置式的,一种是增量 式的。在小车里一般用增量式,为什么呢?位置式PID的输出与过去的 所有状态有关,计算时要对e (每一次的控制

3、误差)进行累加,这个计 算量非常大,而明显没有必要。而且小车的PID控制器的输出并不是绝 对数值,而是一个,代表增多少,减多少。换句话说,通过增量PID 算法,每次输出是PWM要增加多少或者减小多少,而不是PWM的实 际值。所以明白增量式PID就行了。三、接着讲PID参数的整定,也就是PID公式中,那几个常数系数Kp, Ti, Td等是怎么被确定下来然后带入PID算法中的。如果要运用PID, 则PID参数是必须由自己调出来适合自己的项目的。通常四旋翼,自平 衡车的参数都是由自己一个调节出来的,这是一个繁琐的过程。本次我 们可以不管,关于PID参数怎么确定的,网上有很多经验可以借鉴。比 如那个经

4、典的经验试凑口诀:参数整定找最佳,从小到大顺序查。先是比例后积分,最后再把微分加。曲线振荡很频繁,比例度盘要放大。曲线漂浮绕大弯,比例度盘往小扳。曲线偏离回复慢,积分时间往下降。曲线波动周期长,积分时间再加长。曲线振荡频率快,先把微分降下来。动差大来波动慢,微分时间应加长。理想曲线两个波,前高后低四比一。一看二调多分析,调节质量不会低。四、接下来我们用例子来辅助我们把常用的PID模型讲解了。(PID控 制并不一定要三者都出现,也可以只是PI、PD控制,关键决定于控制 的对象。)(下面的内容只是介绍一下PID模型,可以不看,对理解 PID 没什么用)例子:我们要控制一个人,让他一 PID 的控制

5、方式来行走110步后停 下来。1)P 比例控制,就是让他按照一定的比例走,然后停下。比如比例系 数为 108,则走一次就走了108 步,然后就不走了。说明:P比例控制是一种最简单的控制方式,控制器的输出与输入误差 信号成比例关系。但是仅有比例控制时系统输出存在稳态误差。比如上 面的只能走到 108,无论怎样都走不到110。2)PI 积分控制,就是按照一定的步伐走到112 步然后回头接着走,走 到 108 步位置时,然后又回头向 110 步位置走。在 110 位置处来回晃 荡几次,最后停在110步的位置。说明:在积分I控制中,控制器的输 出与输入误差信号的积分成正比关系。对一个自动控制系统来说,

6、如果 在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称 有差系统。为了消除稳态误差,在控制器中必须引入“积分项”。积分项 对误差的影响取决于时间的积分,随着时间的增加,积分项会增大。这 样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器 的输出增大,从而使稳态误差进一步减小,直到等于0。因此,比例+ 积分(PI)控制器可以使系统在进入稳态后无稳态误差。3)PD 微分控制,就是按照一定的步伐走到一百零几步后,再慢慢地走 向110 步的位置靠近,如果最后能精确停在110 步的位置,就是无静 差控制;如果停在 110 步附近(如 109 步或 111 步位置),就是有静 差

7、控制。说明:在微分控制 D 中,控制器的输出与输入误差信号的微分(即误差 的变化率)成正比关系。自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳, 原因是存在较大惯性组件(环节)或滞后组件,具有抑制误差的作用, 其变化总是落后于误差的变化。解决的办法是使抑制误差作用的变化 “超前”,即在误差接近于零时,抑制误差的作用就应该是零。这就是说, 在控制器中仅引入“比例P”项往往是不够的,比例项的作用仅是放大误 差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势。 这样,具有比例+微分的控制器就能够提前使抑制误差的控制作用等于 零,甚至为负值,从而避免了被控量的严重超调。所以对有较

8、大惯性或 滞后的被控对象,比例P+微分D (PD)控制器能改善系统在调节过程 中的动态特性。五、用小明来说明 PID:小明接到这样一个任务:有一个水缸有点漏水(而且漏水的速度还 不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度 低于要求位置,就要往水缸里加水。 小明接到任务后就一直守在水缸 旁边,时间长就觉得无聊,就跑到房里看小说了,每30 分钟来检查一 次水面高度。水漏得太快,每次小明来检查时,水都快漏完了,离要求 的高度相差很远,小明改为每3 分钟来检查一次,结果每次来水都没怎 么漏,不需要加水,来得太频繁做的是无用功。几次试验后,确定每 10分钟来检查一次。这个检查时间就称

9、为采样周期。 开始小明用瓢加 水,水龙头离水缸有十几米的距离,经常要跑好几趟才加够水,于是小 明又改为用桶加,一加就是一桶,跑的次数少了,加水的速度也快了, 但好几次将缸给加溢出了,不小心弄湿了几次鞋,小明又动脑筋,我不 用瓢也不用桶,老子用盆,几次下来,发现刚刚好,不用跑太多次,也 不会让水溢出。这个加水工具的大小就称为比例系数。小明又发现水虽然不会加过量溢出了,有时会高过要求位置比较 多,还是有打湿鞋的危险。他又想了个办法,在水缸上装一个漏斗,每 次加水不直接倒进水缸,而是倒进漏斗让它慢慢加。这样溢出的问题解 决了,但加水的速度又慢了,有时还赶不上漏水的速度。于是他试着变 换不同大小口径的

10、漏斗来控制加水的速度,最后终于找到了满意的漏 斗。漏斗的时间就称为积分时间。小明终于喘了一口,但任务的要求突然严了,水位控制的及时性 要求大大提高,一旦水位过低,必须立即将水加到要求位置,而且不能 高出太多,否则不给工钱。小明又为难了!于是他又开努脑筋,终于让 它想到一个办法,常放一盆备用水在旁边,一发现水位低了,不经过漏 斗就是一盆水下去,这样及时性是保证了,但水位有时会高多了。他又 在要求水面位置上面一点将水缸要求的水平面处凿一孔,再接一根管子 到下面的备用桶里这样多出的水会从上面的孔里漏出来。这个水漏出的 快慢就称为微分时间。六、在代码中理解PID:(好好看注释,很好理解的。注意结合下面

11、PID 的公式) 首先看PID的增量型公式:PID=Uk+KP*【E(k)-E(k-1)】+KI*E(k)+KD*【E(k)-2E(k-1)+E(k-2)】在单片机中运用PID,出于速度和RAM的考虑,一般不用浮点数,这 里以整型变量为例来讲述PID在单片机中的运用。由于是用整型来做 的,所以不是很精确。但是对于一般的场合来说,这个精度也够了,关 于系数和温度在程序中都放大了10 倍,所以精度不是很高,但是大部 分的场合都够了,若不够,可以再放大10 倍或者100倍处理,不超出 整个数据类型的范围就可以了。一下程序包括PID计算和输出两部分。 当偏差10度时全速加热,偏差在10度以内时为PID

12、计算输出。程序说明:下面的程序,先看main函数。可知在对定时器0初始化后 就一直在执行PID_Output()函数。在PID_Output()函数中先用iTemp 变量来得到 PID 运算的结果,来决定是启动加热丝加热还是不启动加热 丝。下面的if语句结合定时器来决定PID算法多久执行一次。PID_Operation()函数看似很复杂,其实就一直在做一件事:根据提供 的数据,用PID公式把最终的PID值算出来。#include typedef unsigned charuChar8;typedef unsigned intuInt16;typedef unsigned long int uI

13、nt32;sbit ConOut = PIT;加热丝接到 P1.1 口typedef struct PID_ValueuInt32 liEkVal3;/差值保存,给定和反馈的差值uChar8 uEkFlag3; uChar8 uKP_Coe;uChar8 uKI_Coe; uChar8 uKD_Coe;uInt16 iPriVal; uInt16 iSetVal;uInt16 iCurVal; PID_ValueStr;/符号, 1 则对应的为负数, 0 为对应的为正数/比例系数/积分常数/微分常数/上一时刻值/设定值/实际值/定义一个结构体,这个结构体用来存算法中要用到的各PID_Value

14、Str PID; 种数据 bit g_bPIDRunFlag = 0; 定时间,算一次。/PID运行标志位,PID算法不是一直在运算。而是每隔一/*Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx/* 函数名称:PID_Operation()/*函数功能:PID运算/* 入口参数:无(隐形输入,系数、设定值等)/

15、* 出口参数:无(隐形输出, U(k)/* 函数说明: U(k)+KP*E(k)-E(k-1)+KI*E(k)+KD*E(k)-2E(k-1)+E(k-2)/void PID_Operation(void)uInt32 Temp3 = 0;/中间临时变量uInt32 PostSum = 0;/正数和uInt32 NegSum = 0;/负数和if(PID.iSetVal PID.iCurVal)if(PID.iSetVal - PID.iCurVal 10) PID.iPriVal = 100;热)1、)else/设定值大于实际值否?/偏差大于10 否?/偏差大于 10 为上限幅值输出(全速加/否则慢慢来Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx Tx

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号