书签 分享 收藏 举报 版权申诉 / 6
上传文档赚钱

类型对PID通俗的看法.docx

  • 上传人(卖家):淡淡的紫竹语嫣
  • 文档编号:542515
  • 上传时间:2020-05-23
  • 格式:DOCX
  • 页数:6
  • 大小:49.95KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《对PID通俗的看法.docx》由用户(淡淡的紫竹语嫣)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    PID 通俗 看法
    资源描述:

    1、比例主要用于偏差的“粗调”, 保证控制系统的“稳”;积分主要用于偏差的“细 调”,保证控制系统的“准”;微分主要用于偏差的 “细调”,保证控制系统的“快” 很多同学都不清楚 PID 是个什么东西,因为很多不是自动化的学生。他们开口就要资料, 程序。 这是明显的学习方法不对,起码,首先,你要理解 PID 是个什么东西。 本文以通俗的理解,以小车纵向控制举例说明 PID 的一些理解。 首先,为什么要做 PID? 由于外界原因,小车的实际速度有时不稳定,这是其一, 要让小车以最快的时间达达到既定的目标速度,这是其二。 速度控制系统是闭环, 才能满足整个系统的稳定要求, 必竟速度是系统参数之一, 这是

    2、其三. 小车调速肯定不是线性的,外界因素那么多,没人能证明是线性的。如果是线性的,直接用 P 就可以了。 比如在 PWM=60%时, 速度是 2M/S, 那么你要它 3M/S, 就把 PWM 提高到 90%。 因为 90/60=3/2, 这样一来太完美了。 完美是不可能的。 那么不是线性的, 要怎么怎么控制 PWM 使速度达到即定的速度呢?即要快, 又要准, 又要狠。 (即快准狠 )系统这个速度的调整过程就必须通过某个算法调整,一般 PID 就是这个所用的算法。 可能你会想到,如果通过编码器测得现在的速度是 2.0m/s,要达到 2.3m/s 的速度,那么我 把 pwm 增大一点不 就行了吗?

    3、是的,增大 pwm 多少呢?必须要通过算法,因为 PWM 和速度是个什么关系,对于 整个系统来说,谁也 不知道。要一点一点的试,加个 1%,不够,再加 1%还是不够,那么第三次你还会加 1%吗? 很有可能就加 2%了。 通过 PID 三个参数得到一个表达式:PWM=a *V1+b *V2+c *V3,a b c 是通过 PID 的 那个长长的公式展开 ,然后约简后的数字,V1 ,V2 ,V3 此前第一次调整后的速度差 ,第二次调整后的 速度差,第三次。 。一句话,PID 要使当前速度达到目标速度最快,需要建立如何调整 pwm 和速度之间的 关系。 输入输出是什么: 输入就是前次速度,前前次速度

    4、,前前前次速度。 输出就是你的 PWM 应该增加或减小多少。 为了避免教科书公式化的说明,本文用口语化和通俗的语言描述。虽然不一定恰当,但意 思差不多,就是那个事。如果要彻头彻尾地弄 PID,建议多调试,写几个仿真程序。 PID 一般有两种: 位置式 PID 和增量式 PID。 在小车里一般用增量式, 为什么呢?位置式 PID 的输出与过去的所有状态有关,计算时要对 e(每一次的控制误差)进行累加,这个计算量 非常大,而明没有必要。而且小车的 PID 控制器的输出并不是绝对数值,而是一个,代表 增多少, 减多少。 换句话说, 通过增量 PID 算法, 每次输出是 PWM 要增加多少或者减小多少

    5、, 而不是 PWM 的实际值。 下面均以增量式 PID 说明。 这里再说一下 P、 I、 D 三个参数的作用。 P=Proportion, 比例的意思, I 是 Integral, 积分, D 是 Differential 微分。 打个比方, 如果现在的输出是 1, 目标输出是 100, 那么 P 的作用是以最快的速度达到 100, 把 P 理解为一个系数即可;而 I 呢?大家学过高数的,0 的积分才能是一个常数,I 就是使 误差为 0 而起调和作用;D 呢?大家都知道微分是求导数,导数代表切线是吧,切线的方向 就是最快到至高点的方向。这样理解,最快获得最优解,那么 D 微分就是加快调节过程的

    6、作 用了。 公式本来需要推导的,我就不来这一套了。直接贴出来: 看看最后的结果: Uk=A*e(k)+B*e(k-1)+C*e(k-2) 这里 KP 是 P 的值,TD 是 D 的值,1/Ti 是 I 的值,都是常数,哦,还有一个 T,T 是采样周 期,也是已知。而 A B C 是由 P I D 换算来的,按这个公式,就可以简化计算量了,因为 P I D 是常数,那么 A B C 可以用一个宏表示。这样看来,只需要求 e(k) e(k-1) e(k-2)就 可以知道Uk 的值了,按照Uk 来调节 PWM 的大小就 OK 了。PID 三个参数的确定有很多方 法,不在本文讨论范围内。采样周期也是有

    7、据可依的,不能太大,也不能太小。 制模型:你控制一个人让他以 PID 控制的方式走 110 步后停下。 (1)P 比例控制,就是让他走 110 步,他按照一定的步伐走到一百零几步(如 108 步)或 100 多步(如 112 步)就停了。 说明: P 比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有 比例控制时系统输出存在稳态误差(Steady-state error) 。 (2) PI 积分控制, 就是他按照一定的步伐走到 112 步然后回头接着走, 走到 108 步位置时, 然后又回头向 110 步位置走。在 110 步位置处来回晃几次,最后停在 110 步的

    8、位置。 说明: 在积分 I 控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统, 如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统 (System with Steady-state Error) 。为了消除稳态误差,在控制器中必须引入“积分项”。积分 项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分 项也会随着时间的增加而加大, 它推动控制器的输出增大使稳态误差进一步减小, 直到等于 零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。 (3)PD 微分控制,就是他按照一定的步伐走到一百零几步后,

    9、再慢慢地向 110 步的位置靠 近,如果最后能精确停在 110 步的位置,就是无静差控制;如果停在 110 步附近(如 109 步或 111 步位置) ,就是有静差控制。 说明: 在微分控制 D 中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。 自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳, 其原因是由于存在有较大 惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差 的变化。解决的办法是使抑制误差作用的变化“超前”,即在误差接近零时,抑制误差的作用 就应该是零。这就是说,在控制器中仅引入“比例 P”项往往是不够的,比例项的作用仅是

    10、放 大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势。这样,具有比例 +微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控 量的严重超调。所以对有较大惯性或滞后的被控对象,比例 P+微分 D(PD)控制器能改善 系统在调节过程中的动态特性。 解释二: 小明接到这样一个任务:有一个水缸有点漏水(而且漏水的速度还不一定固定不变),要 求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。 小明 接到任务后就一直守在水缸旁边,时间长就觉得无聊,就跑到房里看小说了,每 30 分钟来 检查一次水面高度。水漏得太快,每次小明来检查时,水都快

    11、漏完了,离要求的高度相差很 远,小明改为每 3 分钟来检查一次,结果每次来水都没怎么漏,不需要加水,来得太频繁做 的是无用功。几次试验后,确定每 10 分钟来检查一次。这个检查时间就称为采样周期。 开始小明用瓢加水,水龙头离水缸有十几米的距离,经常要跑好几趟才加够水,于是小 明又改为用桶加,一加就是一桶,跑的次数少了,加水的速度也快了,但好几次将缸给加溢 出了,不小心弄湿了几次鞋,小明又动脑筋,我不用瓢也不用桶,老子用盆,几次下来,发 现刚刚好,不用跑太多次,也不会让水溢出。这个加水工具的大小就称为比例系数。 小明又发现水虽然不会加过量溢出了, 有时会高过要求位置比较多, 还是有打湿鞋的危 险

    12、。他又想了个办法,在水缸上装一个漏斗,每次加水不直接倒进水缸,而是倒进漏斗让它 慢慢加。这样溢出的问题解决了,但加水的速度又慢了,有时还赶不上漏水的速度。于是他 试着变换不同大小口径的漏斗来控制加水的速度, 最后终于找到了满意的漏斗。 漏斗的时间 就称为积分时间。 小明终于喘了一口,但任务的要求突然严了,水位控制的及时性要求大大提高,一旦水 位过低,必须立即将水加到要求位置,而且不能高出太多,否则不给工钱。小明又为难了! 于是他又开努脑筋,终于让它想到一个办法,常放一盆备用水在旁边,一发现水位低了,不 经过漏斗就是一盆水下去,这样及时性是保证了,但水位有时会高多了。他又在要求水面位 置上面一点

    13、将水缸要求的水平面处凿一孔, 再接一根管子到下面的备用桶里这样多出的水会 从上面的孔里漏出来。这个水漏出的快慢就称为微分时间。 看到几个问采样周期的帖子, 临时想了这么个故事。微分的比喻一点牵强,不过能帮助理解就行了,呵呵,入门级的,如 能帮助新手理解下 PID,于愿足矣。故事中小明的试验是一步步独立做,但实际加水工具、 漏斗口径、 溢水孔的大小同时都会影响加水的速度, 水位超调量的大小, 做了后面的实验后, 往往还要修改改前面 PID 实际编程的过程的,要注意的东西还是有几点的。PID 这东西可以做得很深。 1 PID 的诊定。凑试法,临界比例法,经验法。 2 T 的确定,采样周期应远小于过

    14、程的扰动信号的周期,在小车程序中一般是 ms 级别。 3 目标速度何时赋值问题,如何更新新的目标速度?这个问题一般的人都乎略了。目标速 度肯定不是个恒定的,那么何时改变目标速度呢? 4 改变了目标速度,那么 e(k) e(k-1) e(k-2)怎么改变呢?是赋 0 还是要怎么变? 5 是不是 PID 要一直开着? 6 error 为多少时就可以当速度已达到目标? 7 PID 的优先级怎么处理,如果和图像采集有冲突怎么办? 8 PID 的输入是速度,输出是 PWM,按理说 PWM 产生速度,但二者不是同一个东西,有 没有问题? 9 PID 计算如何优化其速度?指针,汇编,移位?都可以试! /*

    15、/定义 PID 结构体 /* typedef struct PID int SetPoint; /设定目标 Desired Value double Proportion; /比例常数 Proportional Const double Integral; /积分常数 Integral Const double Derivative; /微分常数 Derivative Const int LastError; /Error-1 int PrevError; /Error-2 PID; /* /定义相关宏 /* #define P_DATA 100 #define I_DATA 0.6 #def

    16、ine D_DATA 1 #define HAVE_NEW_VELOCITY 0X01 /* /声明 PID 实体 /* static PID sPID; static PID *sptr = /* /PID 参数初始化 /* void IncPIDInit(void) sptr-LastError = 0; /Error-1 sptr-PrevError = 0; /Error-2 sptr-Proportion = P_DATA; /比例常数 Proportional Const sptr-Integral = I_DATA; /积分常数 Integral Const sptr-Deriv

    17、ative = D_DATA; /微分常数 Derivative Const sptr-SetPoint =100; 目标是 100 /* /增量式 PID 控制设计 /* int IncPIDCalc(int NextPoint) int iError, iIncpid; /当前误差 iError = sptr-SetPoint - NextPoint; /增量计算 iIncpid = sptr-Proportion * iError /Ek项 - sptr-Integral * sptr-LastError /Ek1项 + sptr-Derivative * sptr-PrevError;

    18、 /Ek2项 sptr-PrevError = sptr-LastError; /存储误差,用于下次计算 sptr-LastError = iError; return(iIncpid); /返回增量值 Int g_CurrentVelocity; Int g_Flag; void main(void) DisableInterrupt InitMCu(); IncPIDInit(); g_CurrentVelocity=0; /全局变量也初始化 g_Flag=0; /全局变量也初始化 EnableInterrupt; While(1) if (g_Flag g_Flag /* /采样周期 T /* Interrrupt TIME void CurrentVelocity =GetCurrentVelocity; g_Flag|= HAVE_NEW_VELOCITY;

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:对PID通俗的看法.docx
    链接地址:https://www.163wenku.com/p-542515.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库