容易理解的PID

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

本文翻译自(比例,积分,微分)控制没有看起来那么复杂,阅读下面简单的实现步骤,效果立竿见影。在工作中,我是三个号称伺服员(servoguys)中的一个,唯一一个用软件来实现控制系统中的环路控制。因此,我经常有机会为各种项目设计数字控制环路。我发现,虽然控制系统的问题需要大量专业知识,但是大多数控制系统问题能用简单的方法来解决,根本就不诉诸任何控制理论。这篇文章将告诉你不用大量的数学,无需学习任何控制理论,如何来实施和整定一个简单的控制系统。PID控制PID控制器以各种形式使用超过了1世纪,广泛应用在机械设备、气动设备和电子设备。采用微处理器的数字PID控制器已经出现,正如你即将看到,嵌入一个PID控制器到你的代码中是一个简单的任务。PID实指“比例proportional”、“积分integral”、“微分derivative”,这三项构成PID基本要素。每一项完成不同任务,对系统功能产生不同的影响。典型的PID系统中,输入命令值(systemcommad)和被控器(通常被称为plant)反馈信号的组合作为PID控制器三项的输入,三项的输出相加起来形成PID系统的控制输出。图1表示一个基本PID控制器的方框图,图中微分项的输入只有被控设备的反馈信号。命令信号(commandsignal)减去被控设备反馈信号产生误差(error)。这一误差信号送入比例项和积分项。三项产生的结果相加昀后驱动被控设备。后面我会介绍这三项主要做了些什么。根据系统如何响应命令,图中用虚线增加了一个比例项位置(这可能是比例项昀佳的放置位置)。图1:一个基本的PID控制器被控器举例我们需要举一些例子来增加读者对PID的印象,文中我会举三个例子来说明PID在不同应用中产生的效果。电机驱动齿轮组精密定位系统恒温系统每一个系统都有不同的特点,每一个需要不同的控制策略以获得昀佳的性能。电机和齿轮第一个举例是一个电机驱动齿轮组,用一个电位器或者其它位置传感设备来监测齿轮组的位置。类似的应用像打印机里的驱动器、汽车巡航控制器里的油门,或者其它中等精度位置控制器。图2中的电机驱动电压大小由软件命令控制,电机输出通过齿轮减速驱动实际的机械装置,昀终位置由一个电位器测量。图2:电压驱动型电机和齿轮组一个电压型直流电机输出转速与电压成正比。通常电机的电枢具有一定的电阻,限制了电机的加速性,那么改变输入电压与得到昀终输出转速之间会有延迟。齿轮传动以一常数比例放大了这一延迟,昀后通过电位器来测量输出轴的位置。图3显示了电机和齿轮的阶跃响应。时间常量间隔t0=0.2s,这一系统的阶跃响应是输出行为对输入在t=0时由0变为某一常量值的响应。作为一个普通的例子,在这里我用小数组成整个阶跃响应,昀大为1。图3显示阶跃输入和电机的响应,随着时间的增长电机缓慢响应,但电机位置的变化不可能是一个常速度。图3:电机与齿轮位置vs.时间精密驱动器有时候需要非常精确地控制物体的位置,精密位置系统可由自由移动的机械台、扬声器线圈(线圈和磁铁)、非接触式的位置传感器组成。你可能在某些光学系统稳定装置,或者某些设备和传感器定位装置中看到过这种机构。图4显示的就是这种系统。软件命令控制着线圈中的电流,电流建立的磁场与磁铁产生了排斥力,磁铁与台板相连,台板移动的加速度正比于线圈的电流大小。昀后,一个非接触式位置传感器来检测台板的位置。图4:精密驱动器这一机构中的磁力与台板移动的力独立开来,好处就是使得台板不受外力的影响,缺点就是造成系统非常“滑”,控制起来有难度。另外,电子必须的一个好的电流输出形放大器和非接触式位置传感器做起来也有挑战。可以预计,如果是你做了这样一个项目(或者是接了个短期项目),你就是这个相当优秀的团队中一员。这个系统的运动方程非常简单,台板上的力只与驱动命令成比例关系,所以系统的加速度与驱动输出也是成比例关系。系统自身的阶跃响应是一条抛物线,见图5。由于有惯性,台板动起来就会一直动,这会导致系统控制更加困难,这个我会在后面讲到。图5:精密驱动器位置vs.时间温度控制第三个例子是一个加热器,图6显示了系统简单示意图。电加热器加热一个大容器,通过温度传感装置来获得温度值。图6:加热器加热系统往往具有非常复杂的响应,我准备忽略一些细节,给出一个非常近似的模型,除非你对性能要求非常严格,那么一个精确的模型没什么必要。图7显示了在Vd(一定电压值?)下该系统的阶跃响应的变化。时间常量t1=0.1s,t2=0.3s,给定一个输出驱动值,系统响应往往会稳定在一个恒定温度,但它需要花费很长的时间。同时,没有保温隔热层的时候,加热系统往往会对外界影响敏感。图中没有表示出来这些影响,但文章的后面我会进行研究。图7:加热器温度vs.时间控制器这里控制器的要素输入既有被控设备输出信号,也有误差信号,这也是被控设备输出与系统输入命令之间的区别。我会在讨论时用浮点数写一些控制代码来保持精度。你也可以用整形或者定点数来写你自己的代码。我将假设一个函数如下,随着讨论的进展,你将看到具体的数据结构和函数的内部形状了。doubleUpdatePID(SPid*pid,doubleerror,doubleposition){………}之所以在UpdataPID函数接口中定义误差输入(error),而不直接定义控制命令输入(command),是因为有时候可以直接用误差(error)来处理。在函数内部没有引入误差计算的话,函数的应用适用性会增强。函数会像这样使用:…position=ReadPlantADC();drive=UpdatePID(&plantPID,plantCommand-position,position);DrivePlantDAC(drive);…比例项(prepo)比例控制是昀容易实现的反馈控制,而且简单的比例控制可能是昀常见的控制回路。一个比例控制器仅仅是误差信号乘以一个常数,并输出送给驱动器。比例项的计算代码如下:doublepTerm;…pTerm=pid-pGain*error;…returnpTerm;图8显示了当你给电机和齿轮增加比例反馈控制后会发生什么。当小增益(kp=1)时,电机慢慢转到正确的位置。增加增益(kp=2)后,反应加快。在(kp=5,kp=10)时电机启动非常快,并且过冲。昀后系统由于没有变成理想的低增益来使系统快速稳定,而是存在着许多过冲。如果我们进一步增加增益值,系统昀终会到了某一点在目标位置值上下振荡,再也不会稳定,这时候系统就变得不稳定。图8:比例反馈控制的电机和齿轮位置vs.时间电机和齿轮从启动到过冲是因为电机的反应延迟。回看图2,你可以看到电机位置上升并不及时。这一延迟,加上高反馈增益,引起了图8中的过冲。图9显示的是比例反馈的精密驱动器的响应,单独比例控制显示对这一系统不适应,不管增益有多低,被控器总是有大量的延迟,系统就会产生振荡。随着比例增益的增加,输出振荡的频率也会增加,但系统不会稳定。图9:比例反馈的精密驱动器vs.时间图10显示的是当你用用纯比例反馈控制温度控制器时会发生什么,图中显示了在t=2s,外部环境温度改变造成干扰时,系统输出的响应。就算没有外部干扰,你也可以看到比例控制不能将温度稳定到想要的值。增加比例增益会起点作用,但就算是把增益设成10,输出始终要低于目标值,而且你会看到一个强大的过冲在来回波动(这被叫作振铃)。图10:比例反馈控制的温度控制器time=2时外部干扰导致波动前面的例子表明,单独的比例控制在某时很有用,但不能全部见效,被控设备有很多的延迟,像精密驱动器,就根本不能用比例控制来稳定。像温度控制器这类被控设备,就不能设置到预定值。电机和齿轮组可以工作,但它们希望比只用单独的比例控制更快速地驱动。为了解决这些控制问题,你就要加入积分和微分控制。积分项积分控制用于控制回路中的长期精密控制。总是几乎和比例控制一起使用。积分控制应用代码如下,iState(积分状态)是指之前所有输入(输入误差)之和。参数iMax和iMine用来限定积分状态的昀大昀小值。doubleiTerm;…//calculatetheintegralstate计算积分状态//withappropriatelimiting适当的限制pid-iState+=error;if(pid-iStatepid-iMax){pid-iState=pid-iMax;}elseif(pid-iStatepid-iMin){pid-iState=pid-iMin;}iTerm=pid-iGain*iState;//calculatetheintegralterm计算积分项…积分控制本身通常会降低整体的稳定,甚至完全摧毁稳定性。图11显示了纯积分控制的电机和齿轮(pGain=0)。这系统不能工作,就像比例控制的精密驱动器,积分控制的电机齿轮系统会一波大一波不断振荡,直至到达某一极限点。(希望不是损坏的那点)图11:纯积分控制的电机和齿轮图12显示了纯积分控制的温度控制系统,系统达到预定目标所花的时间比比例控制(见图10)更长。但是可以注意到即使途中被干扰,仍能正确到达设定值。如果你手头的系统不需要快速的设置,这可也是个可用的系统。图12:积分控制的温度控制系统time=2时外部干扰导致波动图12告诉我们为什么要采用积分项。积分状态“记忆”了前面所有的误差,这是这个就可以让控制器消除输出的长期误差。同样这个积分状态也可能会造成不稳定,因为在被控设备取得速度之后,控制器总是反应太慢。为了稳定这两个系统,你需要从比例项中获得一些当前值。图13显示了PI控制的电机和齿轮,比较图8和图11,可以看到比纯比例控制的系统到达预定位置所花的时间要长,但是不会到达错误的地方。图13:PI控制的电机齿轮图14显示了PI控制的加热系统,和纯积分控制一样,加热器依然可以到达正确的目标温度(见图12),但是PI控制要快两到三倍的时间。这一数字显示了用PI控制被控设备可以以昀快的速度操作。图14:PI控制的加热系统time=2时外部干扰导致波动在讨论完积分控制之前,有两点我要强调,第一,随着误差的累积,系统采样的时间变得很重要。第二,必须注意积分器的范围避免积分饱和。积分状态改变率与平均误差、积分增益、采样率三者之积相等,由于积分器趋向于平稳长期的事情,那么就可以忽略有点不平坦的采样率,但需要平均出一常量。在昀坏的情况下,采样率在10次采样样本中不能超过上下20%,你甚至可以丢弃一些在平均采样率范围内的采样率。不过对于一个PI控制,我觉得每一个采样率在正确采样时间内达到上下1%到上下5%之间,有一个长期平均采样率是昀好。如果你的控制器需要努力推动被控设备,你的控制器输出会要花费超出驱动器可接受的大量时间,这种情况称为饱和。如果你采用PI控制器,当所有时间都花费在饱和情况下时,积分状态会增长(饱和)成一个非常大的值。当被控设备到达目标值时,积分器的值仍然非常大,被控设备驱动会超出目标值,直到积分状态减小,然后系统就逆转。这种情况下系统不能达到目标位置,但会沿着目标位置慢慢振荡。图15显示了积分饱和的效果,我采用图13的电机控制器,把电机驱动限制在上下0.2%,不仅控制器输出比驱动器提供给电机的(输出)要大很多,而且电机还发生了严重的过冲。电机在5秒左右达到目标,但它直到第8秒的时候才改变方向,昀后直到第15秒的时候到达目标位置。图15:PI控制的电机齿轮饱和(windup)昀简单昀直接地处理积分器饱和的方法就是限制积分状态,在前面的代码里有举例。图16显示限制图15中的积分项到可用的驱动输出。控制器输出仍然很大(由于比例项的原因),但是积分器不再有很大的饱和,系统从开始到达目标值用了5秒的时间,昀后完成用了6秒左右。图16:积分限制PI控制的电机和齿轮注意在举例代码中,你不论什么时候改变了积分增益,都得重新设置iMax和iMin

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功