PID教程

介绍

本教程将向您展示了比例每一个比例项 (P)的特点,积分项(I)和微分项 (D) 控制,以及怎样使用它们来获得所需的响应。在本教程中,我们会考虑下面单位反馈系统:

Plant【被控对象】:被控制的系统

Controller【控制器】:为被控对象提供刺激;目的是控制整个系统的行为

三个控制系数

PID控制器的传递函数例如以下所看到的:

· Kp =比例控制參数

· KI =积分控制參数

· Kd =微分控制參数



首先,让我们来看看怎样在一个PID控制器的闭环使用上述系统的工作原理图。变量(e)代表误差,这里的误差是指输入值(R)和实际输出(Y)两者之差。这个错误信号(e)将发送到PID控制器,该控制器对这个错误信号同一时候计算导数和积分。刚刚过去信号(u)将等于比例控制參数(Kp)乘上误差,积分控制參数(Ki)乘上误差的积分,微分控制系数(Kd)乘上误差的微分。

这个信号(u)将被发送到被控对象,新的输出(Y)将获得。这样的新的输出(Y)将被送回传感器再次找到新的误差信号(e)。该控制器採用这个新的误差信号,并计算其微分及其积分了。这个过程将重复的进行。

P,I和D控制器的属性

比例控制參数(Kp)加快系统的响应速度,提高系统的调节精度,但从未消除稳态误差。一个积分控制參数(Ki)将消除残差,但它可能使瞬态响应差。一个微分控制參数(Kd)将改善系统的动态性能,降低了过冲,改善瞬态响应的影响。Kp, Kd, 和Ki在闭环系统的影响总结例如以下表。

请注意,这些关系不是固定不变的,由于Kp, Kd, 和Ki是互相依赖。其实,改变一个值能够改变其它两个效果。出于这个原因,该表帮您确定Ki, Kp 和Kd值时作为參考。

以下对PID做一个简单形象的介绍

简单的控制模型:你控制一个人让他以PID控制的方式走100步后停下。

00步,他依照一定的步伐走到90几步(如98步)或100多步(如102步)就停了。

说明:P比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。

2、PI
积分控制
,就是他依照一定的步伐走到102步然后回头接着走,走到98步位置时,然后又回头向100步位置走。在100步位置处来回晃几次,最后停在100步的位置。

说明:在积分I控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自己主动控制系统,假设在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System
with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”积分项对误差取决于时间的积分,随着时间的添加,积分项会增大。这样,即便误差非常小,积分项也会随着时间的添加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,能够使系统在进入稳态后无稳态误差。

3、PD
00步的位置靠近,假设最后能精确停在100步的位置,就是无静差控制;假设停在100步附近(如99步或101步位置),就是有静差控制。

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

带着上面的形象的说明通过例题让我们加深记忆!!

例题

如果我们有一个简单的质量,弹簧,阻尼器和问题,例如以下图。

该系统的建模方程式



(1)

我们得到的建模方程(1)用拉普拉斯变换,得到

位移X(s)和输入值F(s)的传递函数就变成

当中

· M = 1kg

· b = 10 N.s/m

· k = 20 N/m

· F(s) = 1

把这些值代入到传递函数

这个例题的目的是向您展示Kp, Ki 和Kd 值怎样有助于获得

· 高速的上升时间(Fast rise time)

· 最小的过冲量(Minimum overshoot)

· 没有稳态误差 (No steady-state error)

开环阶跃响应

让我们先来查看开环阶跃响应。创建一个新的M-文件,加入下面代码:

  1. num=1;
  2. den=[1 10 20];
  3. plant=tf(num,den);
  4. step(plant)

复制代码

MATLAB命令窗体中执行M -文件应该得到以下的图。

该被控对象的传递函数的直流增益为1/ 20,所以0.05是一个单位阶跃输入输出的终于值。这相当于0.95稳态误差,确实相当大。此外,上升时间约为1秒,稳定时间约为1.5秒。让我们设计的控制器将降低上升时间,降低稳定时间,并消除了稳态误差。

比例控制

从上面的表格中,我们看到,比例控制參数(Kp)使上升时间缩短,添加了过冲,并降低了稳态误差。上述系统的闭环传递一个比例控制參数的功能是:

比例控制參数(Kp)等于300,然后对M -文件进行例如以下改动:

  1. Kp=300;
  2. contr=Kp;
  3. sys_cl=feedback(contr*plant,1);
  4. t=0:0.01:2;
  5. step(sys_cl,t)

复制代码

执行在MATLAB命令窗体中的M -文件应提供下列情节。

Note: The MATLAB function called feedback was used to obtain a closed-loop transfer function directly from the open-loop transfer function (instead of computing closed-loop transfer function by hand).

注意:MATLAB函数称为反馈是用来直接从开环传递函数获取闭环传递函数。(而不是用手工计算闭环传递函数)。

上图显示,使用比例控制參数的降低了上升时间和稳态误差,但提高了过冲,并降低了小额的稳定时间。

比例积分控制

在进入一个PID控制去,让我们来看看在PI控制。从表中,我们看到积分控制參数(Ki)减少上升时间,但添加了超调和稳定时间,只是消除了稳态误差。对于给定的系统,使用PI控制的闭环传递函数为:

让我们把Kp减小到等于30,并让 Ki 等70。创建一个新的M-文件,输入下面命令。

  1. Kp=30;
  2. Ki=70;
  3. contr=tf([Kp Ki],[1 0]);
  4. sys_cl=feedback(contr*plant,1);
  5. t=0:0.01:2;
  6. step(sys_cl,t)

复制代码

执行此命令窗体在MATLAB的M -文件,你应该得到下面的图片。

我们降低了比例控制參数(Kp),由于积分控制參数对也对降低上升时间,添加了冲量和比例控制參数有同样效果(双重效果)。上述反应表明,积分控制器消除了稳态误差。

比例微分控制

如今,让我们看看在PD控制。从上面的表格中,我们看到,微分控制參数(Kd)减少了过冲量和稳定时间。此次与PD控制器给定的系统闭环传递函数为:

让我们像第一次一样,让Kp等于300, Kd等于10。把以下的命令输入到m-文件并执行以下的命令在MATLAB命令窗体中。

  1. Kp=300;
  2. Kd=10;
  3. contr=tf([Kd Kp],1);
  4. sys_cl=feedback(contr*plant,1);
  5. t=0:0.01:2;
  6. step(sys_cl,t)

复制代码

此图表明,微分控制器既减少超调量和稳定时间,并对上升时间和稳态误差较小的影响。

比例,积分,微分控制

如今,让我们看看在一个PID控制器。此次与PID控制器的给定的系统闭环传递函数为:

经过多次重复试验执行,Kp=350, Ki=300, 和Kd= 50提供所需的响应。为了确认,请输入下面命令,以一米文件并执行在命令窗体中。你应该得到下面步骤响应。

  1. Kp=350;
  2. Ki=300;
  3. Kd=50;
  4. contr=tf([Kd Kp Ki],[1 0]);
  5. sys_cl=feedback(contr*plant,1);
  6. t=0:0.01:2;
  7. step(sys_cl,t)

复制代码

如今,我们已经获得了无过冲,高速上升时间,并没有稳态误差闭环系统。

设计一个PID控制器的一般技巧

当你要设计一个给定系统的PID控制器,请依照以下以获得所需的响应的步骤。

1. 获取一个开环反应并确定哪些须要改进

2. 加入比例控制以改善上升时间

3. 加入微分控制以改善冲量

4. 加入一个积分控制消除稳态误差

5. 调整每一个Kp, Ki, 和 Kd直到您获得所需的总体反应。

你总是能够參考本“PID教程”上显示的表,以找出哪个控制器控制什么特点。

最后,请记住假设没有必要你并不须要在一个单一的系统中的把全部三个控制器(比例,微分和积分)都用上。比如,假设一个PI控制器提供足够好的反应(如上面的样例),那么你就不须要在系统上运行微分控制器。尽可能保持简单的控制器。

书上的经常使用口诀:

參数整定找最佳,从小到大顺序查

先是比例后积分,最后再把微分加

曲线振荡非常频繁,比例度盘要放大

曲线漂浮绕大湾,比例度盘往小扳

曲线偏离回复慢,积分时间往下降

曲线波动周期长,积分时间再加长

曲线振荡频率快,先把微分降下来

动差大来波动慢,微分时间应加长

理想曲线两个波,前高后低4比1

一看二调多分析,调节质量不会低

PS1: 推荐一个最经典的教程,由入门到精通吃透PID2.0版-焦作华润白志刚。从PID历史到说明再到例题!! 认为很有研读价值。在project领域仅仅要吃透PID大部分都能够解决掉!! 所以不在多在于精!! 下载完一定要去研读哦!!

PID教程的更多相关文章

  1. Kubernetes 教程:根据 PID 获取 Pod 名称

    原文链接:https://fuckcloudnative.io/posts/find-kubernetes-pod-info-from-process-id/ 在管理 Kubernetes 集群的过程 ...

  2. T12焊台控制器制作教程 | T12烙铁 | PID增量式算法恒温控制 | 运算放大器-热电偶电压采集 | OLED屏幕显示-SPI通信 | 旋转编码器EC11用户操作

    前言 购买T12烙铁的相关配件已经1年多了,期间也尝试了一些开源的T12控制器,但都没有成功,要么是配套资料少,要么是英文的,其中51和arduino的居多,STM32的较少.求人不如求己,索性自己开 ...

  3. Entity Framework教程(第二版)

    源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,E ...

  4. nginx简易教程

    概述 什么是nginx? Nginx (engine x) 是一款轻量级的Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器. 什么是反向代理? 反向代理(Reverse Pr ...

  5. solr教程

    转载请注明出处:http://www.cnblogs.com/zhuxiaojie/p/5764680.html 本教程基于solr5.5 前言 至于为什么要用solr5.5,因为最新的6.10,没有 ...

  6. Memcache教程 Memcache零基础教程

    Memcache是什么 Memcache是danga.com的一个项目,来分担数据库的压力. 它可以应对任意多个连接,使用非阻塞的网络IO.由于它的工作机制是在内存中开辟一块空间,然后建立一个Hash ...

  7. Smokeping安装教程

    Smokeping安装教程 #Smokeping2.6.8安装教程 #2016.3.6 改编v1.0 #Linux运维技术交流 347163978   环境 CentOS release 6.4 (F ...

  8. 如何在脚本中获取进程ID(PID)

    我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将shell脚本 ...

  9. 超强、超详细Redis数据库入门教程

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...

随机推荐

  1. OS X EI Capitan 10.11.1快速升级方法介绍

    公告:本文纯粹是给国内小水管用户而写的,如果你们家网络是100M光线那么就不需要看本文了! 一句话概要本文:在本地山寨从App store服务器上下载安装包的动作! 导读:OS X EI Capita ...

  2. sql优化-总结

    1.尽量缩小数据范围. 2.能一个sql解决的,坚决不用两条sql.利用case when或decode. select month_id, corppkno, sum(exportSum_new) ...

  3. MFC数据类型(data types)

    为便于理解MFC库函数中的各种形参,现将MFC中常见的参数类型总结如下: 下面这些是和Win32程序(SDK程序)共同使用的数据类型: 数据类型 意义 BOOL Boolean值(布尔值,不是TRUE ...

  4. CAD二次开发(.NET)之PaletteSet和Palette

    在CAD中经常用到停靠或浮动的PaletteSet,比如:特性.图层特性管理器.工具选项板等(以下截图来自AutoCAD2010界面). 特性PaletteSet(停靠) 图层特性管理器Palette ...

  5. jQuery 迭代器

    在 叶小钗 的博客中看到一段关于遍历的代码 var ajQuery = {}; function dir(elem, dir, until) { var matched = [], truncate ...

  6. C++ template学习一(函数模板和模板函数)

    函数模板和模板函数(1)函数模板函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数.函数模板的声明形式为:templat ...

  7. Lua for Windows入门01

    由于项目紧急,我都没来得及研究lua的基本知识就直接持枪上阵了.在实施编写的过程中,却次发现编程语言如此之美,第一次. 随着Lua+for+Windows+5.1.4-45版本的完全安装,最后跳出了一 ...

  8. HDU 5584 LCM Walk(数学题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5584 题意:(x, y)经过一次操作可以变成(x+z, y)或(x, y+z)现在给你个点(ex, e ...

  9. leetcode String to Integer (atoi) python

    class Solution(object): def myAtoi(self, str): """ :type str: str :rtype: int "& ...

  10. This 关键字和变量作用域

    public class Number {     int count; public void method01(){ //    int count=3;     count=3; //    t ...