在实际的控制系统中,线性系统毕竟是少数,大部分的系统属于非线性系统,或者说是系统模型不确定的系统,如果控制精度要求较高的话,那么对于参数的整定过程是有难度的。专家 PID 和模糊 PID 就是为满足这方面的需求而设计的。专家算法和模糊算法都归属于智能算法的范畴,智能算法最大的优点就是在控制模型未知的情况下,可以对模型进行控制。这里需要注意的是,专家PID 也好,模糊 PID 也罢,绝对不是专家系统或模糊算法与 PID 控制算法的简单加和,他是专家系统或者模糊算法在 PID 控制器参数整定上的应用。也就是说,智能算法是辅助 PID 进行参数整定的手段。
如果偏差太大的话,就去除积分项,这本身就是含有经验的专家系统。专家系统、模糊算法,需要参数整定就一定要有整定的依据,也就是说什么情况下整定什么值是要有依据的,这个依据是一些逻辑的组合,只要找出其中的逻辑组合关系来,这些依据就再明显不过了。下面先说一下专家 PID 的 C 语言实现。正如前面所说,需要找到一些依据,还得从 PID 系数本身说起。
1.比例系数 Kp 的作用是加快系统的响应速度,提高系统的调节精度。Kp 越大,系统的响应速度越快,系统的调节精度越高,但是容易产生超调,甚至会使系统不稳定。Kp 取值过小,则会降低调节精度,使响应速度缓慢,从而延长调节时间,是系统静态、动态特性变差;
2.积分作用系数 Ki 的作用是消除系统的稳态误差。Ki 越大,系统的静态误差消除的越快,但是 Ki 过大,在响应过程的初期会产生积分饱和的现象,从而引起响应过程的较大超调。若 Ki 过小,将使系统静态误差难以消除,影响系统的调节精度;
3.微分系数 Kd 的作用是改善系统的动态特性,其作用主要是在响应过程中抑制偏差向任何方向的变化,对偏差变化进行提前预报。但是 kd 过大,会使响应过程提前制动,从而延长调节时间,而且会降低系统的抗干扰性。反应系统性能的两个参数是系统误差e 和误差变化律ec,这点还是好理解的:
首先我们规定一个误差的极限值,假设为 Mmax;规定一个误差的比较大的值,假设为 Mmid;规定一个误差的较小值,假设为 Mmin;
当 abs(e)>Mmax 时,说明误差的绝对值已经很大了,不论误差变化趋势如何,都应该考虑控制器的输入应按最大(或最小)输出,以达到迅速调整误差的效果,使误差绝对值以最大的速度减小。此时,相当于实施开环控制。
当 eec>0 时,说明误差在朝向误差绝对值增大的方向变化,此时,如果abs(e)>Mmid,说明误差也较大,可考虑由控制器实施较强的控制作用,以达到扭转误差绝对值向减小的方向变化,并迅速减小误差的绝对值。此时如果abs(e)<Mmid,说明尽管误差是向绝对值增大的方向变化,但是误差绝对值本身并不是很大,可以考虑控制器实施一般的控制作用,只需要扭转误差的变化趋势,使其向误差绝对值减小的方向变化即可。
当 e
err<0 且 eerr(k-1)>0 或者 e=0 时,说明误差的绝对值向减小的方向变化,或者已经达到平衡状态,此时保持控制器输出不变即可。当 eerr<0 且 e*err(k-1)<0 时,说明误差处于极限状态。如果此时误差的绝对值较大,大于 Mmin,可考虑实施较强控制作用。如果此时误差绝对值较小,可以考虑实施较弱控制作用。
当 abs(e)<Mmin 时,说明误差绝对值很小,此时加入积分,减小静态误差。
上面的逻辑判断过程,实际上就是对于控制系统的一个专家判断过程。

在 PID 控制算法的 C 语言实现九中,文章已经对模糊 PID 的实质做了一个简要说明。本来打算等到完成毕业设计,工作稳定了再着力完成剩下的部分。鉴于网友的要求和信任,抽出时间来,对模糊 PID 做一个较为详细的论述,这里我不打算做出仿真程序了,但就基本概念和思路进行一下说明,相信有 C 语言基础的朋友可以通过这些介绍性的文字自行实现。这篇文章主要说明一下模糊算法的含义和原理。
实际上模糊算法属于智能算法,智能算法也可以叫非模型算法,也就是说,当我们对于系统的模型认识不是很深刻,或者说客观的原因导致我们无法对系统的控制模型进行深入研究的时候,智能算法常常能够起到不小的作用。这点是方便理解的,如果一个系统的模型可以轻易的获得,那么就可以根据系统的模型进行
模型分析,设计出适合系统模型的控制器。但是现实世界中,可以说所有的系统都是非线性的,是不可预测的。但这并不是说我们就无从建立控制器,因为,大部分的系统在一定的条件和范围内是可以抽象成为线性系统的。问题的关键是,当我们系统设计的范围超出了线性的范围,我们又该如何处理。显然,智能算法
是一条很不错的途径。智能算法包含了专家系统、模糊算法、遗传算法、神经网络算法等。其实这其中的任何一种算法都可以跟 PID 去做结合,而选择的关键在于,处理的实时性能不能得到满足。当我们处理器的速度足够快速时,我们可以选择更为复杂的、精度更加高的算法。但是,控制器的处理速度限制了我们算法的选择。当然,成本是限制处理器速度最根本的原因。这个道理很简单,51 单片机和 DSP 的成本肯定大不相同。专家 PID 和模糊 PID 是常用的两种 PID 选择方式。其实,模糊 PID 适应一般的控制系统是没有问题。文章接下来将说明模糊算法的一些基本常识。
模糊算法其实并不模糊。模糊算法其实也是逐次求精的过程。这里举个例子说明。我们设计一个倒立摆系统,假如摆针偏差<5°,我们说它的偏差比较“小”;
摆针偏差在 5°和 10°之间,我们说它的偏差处于“中”的状态;当摆针偏差>10°的时候,我们说它的偏差有点儿“大”了。对于“小”、“中”、“大”这样的词汇来讲,他们是精确的表述,可问题是如果摆针偏差是 3°呢,那么这是一种什么样的状态呢。我们可以用“很小”来表述它。如果是 7°呢,可以说它是“中”偏“小”。那么如果到了 80°呢,它的偏差可以说“非常大”。而我
们调节的过程实际上就是让系统的偏差由非常“大”逐渐向非常“小”过度的过程。当然,我们系统这个调节过程是快速稳定的。通过上面的说明,可以认识到,其实对于每一种状态都可以划分到大、中、小三个状态当中去,只不过他们隶属的程度不太一样,比如 6°隶属于小的程度可能是 0.3,隶属于中的程度是
0.7,隶属于大的程度是 0。这里实际上是有一个问题的,就是这个隶属的程度怎么确定?这就要求我们去设计一个隶属函数。详细内容可以查阅相关的资料,这里没有办法那么详细的说明了。http://baike.baidu.com/view/150383.htm(见附录 3)这里面有些说明。那么,知道了隶属度的问题,就可以根据目前隶
属的程度来控制电机以多大的速度和方向转动了,当然,最终的控制量肯定要落实在控制电压上。这点可以很容易的想想,我们控制的目的就是让倒立摆从隶属“大”的程度为 1 的状态,调节到隶属“小”的程度为 1 的状态。当隶属大多一些的时候,我们就加快调节的速度,当隶属小多一些的时候,我们就减慢调节的
速度,进行微调。可问题是,大、中、小的状态是汉字,怎么用数字表示,进而用程序代码表示呢?其实我们可以给大、中、小三个状态设定三个数字来表示,比如大表示用 3 表示,中用 2 表示,小用 1 表示。那么我们完全可以用0.3+20.7+3*0.0=1.7 来表示它,当然这个公式也不一定是这样的,这个公式的设计是系统模糊化和精确化的一个过程,读者也可参见相关文献理解。但就1.7 这个数字而言,可以说明,目前 6°的角度偏差处于小和中之间,但是更偏向于中。我们就可以根据这个数字来调节电机的转动速度和时间了。当然,这个数字与电机转速的对应关系,也需要根据实际情况进行设计和调节。
前面一个例子已经基本上说明了模糊算法的基本原理了。可是实际上,一个系统的限制因素常常不是一个。上面的例子中,只有偏差角度成为了系统调节的参考因素。而实际系统中,比如 PID 系统,我们需要调节的是比例、积分、微分三个环节,那么这三个环节的作用就需要我们认清,也就是说,我们需要根据超
调量、调节时间、震荡情况等信息来考虑对这三个环节调节的比重,输入量和输出量都不是单一的,可是其中必然有某种内在的逻辑联系。所以这种逻辑联系就成为我们设计工作的重点了。下一篇文章将详细分析 PID 三个变量和系统性能参数之间的联系。
这几天一直在考虑如何能够把这一节的内容说清楚,对于 PID 而言应用并没有多大难度,按照基本的算法设计思路和成熟的参数整定方法,就算是没有经过特殊训练和培训的人,也能够在较短的时间内容学会使用 PID 算法。可问题是,如何能够透彻的理解 PID 算法,从而能够根据实际的情况设计出优秀的算法呢。通过讲述公式和基本原理肯定是最能说明问题的,可是这样的话怕是犯了“专家”的错误了。对于门槛比较低的技术人员来讲,依然不能透彻理解。可是说的入耳了,能不能透彻说明也是一个问题,所以斟酌了几天,整理了一下思路才开始完成 PID 系列文章的最后一篇。我所说的最后一篇不代表 PID 的功能和发展就止步与此,仅仅是说明,透过这一些列的文章,基本上已经可以涵盖 PID 设计的要点,至于更深入的研究,就交给有需要的读者去做。上一节中大致讲述了一下模糊算法。实际上模糊算法的很多概念在上一节中并没有深入的解释。举的例子也只是为了说明模糊算法的基本含义,真正的模糊算法是不能这么设计的,当然也不会这么简单。模糊算法的核心是模糊规则,如
果模糊规则制定的出色,那么模糊算法的控制效率就高。其实这是智能算法的一般特性,规则是系统判断和处理的前提。那么就说说 PID 的规则该怎么制定。

我们知道,模糊算法的本质是对 PID 的三个参数进行智能调节。那么首先要提出的问题是如何对 PID 的参数进行调节?这个问题其实是参数整定的问题,现实当中有很多整定方法。可是我们需要从根本上了解为什么这么整定,才能知道该如何建立数学模型进行分析。那么要回答如何整定参数的问题,就需要先明白PID 参数的作用都是什么?对系统有什么影响?
我们从作用和副作用两个方面说明参数对系统的影响。
1.比例环节 Kp,作用是加快系统的响应速度,提高系统的调节精度,副作用是会导致超调;
2.积分环节 Ki,作用是消除稳态误差,副作用是导致积分饱和现象;
3.微分环节 Kd,作用是改善系统的动态性能,副作用是延长系统的调节时间。理解了上述问题,那么就可以“辩证施治,对症下药”了。比如说,如果系统
响应速度慢,我们就加大 Kp 的取值,如果超调量过大我们就减小 Kp 的取值等等。可是问题这些语言的描述该如何用数学形式表达出来呢。我们所知道的,反馈系统的实质就是系统的输出量作为反馈量与系统的输入量进行作差,从而得到系统的误差 e,那么这个误差 e 就能够反应目前系统所处的状态。误差 e 可以表明目前系统的输出状态到底偏离要求多少。而误差 e 的变化律 ec,表示误差变化的速度。这样,我们可以根据这两个量的状态来分析三个参数此时应该如何取值,假如 e 为负方向比较大,ec 也为负方向增大状态,此时比例环节要大一些,从而加快调节速度,而积分环节要小一些,甚至不加积分环节,从而防止负方向上出现饱和积分的现象。微分环节可以稍加一些,在不影响调节时间的情况下,起到改善系统动态性能的作用。

(文章是从另一个文章找到的,忘记具体是哪里,单纯分析,很有帮助)

PID算法之模糊PID相关推荐

  1. 搭建机器人电控系统——PID算法——什么是PID?

    PID算法 PID算法介绍,不同系数仿真,优缺点 位置式.增量式.模糊式PID 大林算法.史密斯算法和PID算法的区别 文章目录 PID算法 控制系统介绍 开环控制系统 前馈控制系统 单闭环控制系统 ...

  2. c语言程序位置式pid算法,位置式PID算法的C语言代码

    描述 位置式PID的C语言写法详解 PID调节口诀: 参数整定找最佳,从小到大顺序查 先是比例后积分,最后再把微分加 曲线振荡很频繁,比例度盘要放大 曲线漂浮绕大湾,比例度盘往小扳 曲线偏离回复慢,积 ...

  3. OCPC系列 - PID算法(理解PID算法)-比例控制算法、积分控制算法、微分控制算法

    OCPC中PID算法应用场景 任何一个广告投放体系在商业化的过程中必须考虑的两个因素就是,投放成本.投放量. 只有投放成本低于整个商业链条中可接受的成本,这个商业模式才能够成立,而投放量决定了这个模式 ...

  4. 智能小车c语言pid算法,智能小车pid算法

    3.1寻迹算法 采用PID(PD)控制算法,如果某时刻检测到黑线偏左,就要向左转弯:如果检测到黑线偏右,就要向右转.偏得越多,就要向黑线方向打越大的转角.这就是比例控制(P). 遗憾的是,因为小车有惯 ...

  5. 搭建机器人电控系统——PID算法——位置式、增量式、模糊式PID

    PID算法 PID算法介绍,不同系数仿真,优缺点 位置式.增量式.模糊式PID 大林算法.史密斯算法和PID算法的区别 文章目录 PID算法 位置式PID和增量式PID 位置式PID: 增量式PID: ...

  6. 2021-03-31 Matlab simulink 模糊PID在无刷直流电机中的应用

    Matlab simulink 模糊PID在无刷直流电机中的应用 无刷直流电机的数学模型. 1.无刷直流电机数学模型 然后给出无刷直流电机的动态数学模型 看到上述这张图,不知聪明的你有没有发觉,图中采 ...

  7. Pid控制算法-专家PID与模糊PID的C++实现

    PID控制算法的C语言实现 八 专家PID与模糊PID的C语言实现    本节是PID控制算法的C++语言实现系列的最后一节,前面7节中,已经分别从PID的实现到深入的过程进行了一个简要的讲解,从前面 ...

  8. 自适应模糊PID控制算法

    一.自适应模糊PID控制 自适应模糊PID控制将模糊控制与传统PID控制相结合,将两种控制方式进行结合,取长补短,对传统的算法进行优化,形成一种新的控制算法,自适应模糊PID控制可以用于很多场景,比如 ...

  9. [控制原理基础]浅谈PID算法

    一.PID使用背景 当今的自动控制技术都是基于反馈的概念.即一个In Loop闭环的理论,反馈理论的要素包括三个部分:测量.比较和执行.测量关心的变量,与期望值相比较,用这个误差纠正调节控制系统的响应 ...

  10. 模糊PID控制器的实现

    文章目录 前言 一.模糊PID控制优势 二.PID控制原理 2.1三个参数的功能 比例KPK_PKP​ 积分KIK_IKI​ 微分KDK_DKD​ 三.模糊控制原理 四.模糊PID控制器实现 前言 本 ...

最新文章

  1. java 提取内容并排序
  2. 你的团队能通过电梯测试吗?
  3. 互联网架构师必备技能
  4. 总结:实例化SqlParameter时,如果是字符型,一定要指定size属性,还有制定具体的类型...
  5. 对抗生成网络_深度卷积生成对抗网络
  6. WSUS注冊表導入,工作組用戶系統更新
  7. linux免密登录_Linux SSH免密钥登录总结
  8. 他受他爸影响,他爸受数学家影响,最终造出了自动旋转的房子!
  9. vs2005用正则表达式统计有效代码行数
  10. IT十八掌掌第十一天课程总结
  11. php源码 乱码 通达oa_PHPOA源码中小企业OA办公系统流程ERP CRM HR微信钉钉泛微通达oa...
  12. MySQL数据库如何建立视图
  13. mysql记录的增删改查、单表查询
  14. 【抖音视频剪辑】台词找影片素材,剪视频必备
  15. 在linux用锐捷客户端上校园网
  16. inprivate浏览是什么意思_打开浏览器无痕是什么意思
  17. 显著目标检测之Cascaded Partial Decoder for Fast and Accurate Salient Object Detection(CPD)
  18. 华为拼了!三年要发展100万AI开发者和合作伙伴!
  19. Showdoc升级版本记录
  20. 【搞事情】利用PyQt为目标检测SSD300添加界面(一)

热门文章

  1. 数字图像处理—美图秀秀:磨皮算法
  2. poi(easypoi)导出excel(xls,xlsx)后,文件打开错误或乱码的解决方法(亲测)
  3. kotlin的属性代理
  4. 网络安全 Python 编程指南
  5. 地狱少女...._习惯累积沉淀_新浪博客
  6. php客户订单管理系统,PHP订单管理系统完整版源码PHP订单管理系统完整版源码
  7. Redis 设计与实现
  8. 2022年最新全国各省五级行政区划代码(省/市/区县/乡镇/村)
  9. win10字体模糊设置
  10. 与孩子一起学编程03章