为什么是PID控制

  在进入正式话题之前需要引入四个概念:稳态误差终值定理幅角条件系统稳定的充要条件
稳态误差:系统达到稳定状态后,系统的实际输出量与系统希望的输出量之间的偏差。
终值定理:设有连续函数f(t)f(t)f(t),当t趋于无穷时,f(t)f(t)f(t)的极限存在,则有
在这里插入图片描述
其中。F(s)F(s)F(s)f(t)f(t)f(t)经过拉普拉斯变换后的函数,即
在这里插入图片描述
幅角条件
  零点到根的夹角和与极点到根的夹角和是 180°180°180° 的倍数。φφφ表示零点,θθθ表示极点
在这里插入图片描述

系统稳定的充要条件:闭环传递函数的极点位于sss的左半平面。对于某个系统的传递函数的极点为 ppp1ppp2 ,它们都在实轴上,即 p1 === −-aaa , p2 === −-bbb (aaabbb均为常数)对该系统一个单位冲激信号,于是系统的响应为
在这里插入图片描述
ppp1 <<< 000 , ppp2 <<< 000
在这里插入图片描述
  说明这个系统是收敛的,也就是说这个系统可以稳定。

ppp1ppp2 有一个大于000
在这里插入图片描述
  说明这个系统是发散的,也就是说这个系统无法达到稳定。
ppp1ppp2 并没有在实轴上,即 p1 === −-aaa +++ bbbiii , p2 === −-aaa −-bbbiii ,此时有
在这里插入图片描述
在经过拉普拉斯逆变换,得
在这里插入图片描述
  正弦函数是等幅振荡函数,而 eee(-at) 会随 ttt 得增大而减小 ,最终趋向于000,故而 X(t)X(t)X(t) 是一个振荡衰减函数,最终仍会趋向于 000。图像大概是这个样子
在这里插入图片描述
如果 p1 === aaa +++ bibibi , p2 =a−bi= a -bi=abi ,此时有
在这里插入图片描述
  此时该函数时振荡发散的,是不稳定的,图像就是上图从右往左看。

  进入正式话题,在做实际工程或者学习自动控制原理的时候,PID控制经常被提起,大部分工程中涉及控制基本都是PID,那么PID到底是什么?它为什么可以做控制使用?又是如何控制的呢?所谓PID就是比例积分微分控制,下面我们就对333种控制稍做分析。

比例控制

  对于如下比例控制系统,输入是R(s)R(s)R(s),输出是X(s)X(s)X(s)
在这里插入图片描述

在这里插入图片描述
于是系统的闭环传递函数为
在这里插入图片描述
  由这个传递函数可知极点p=(−1−p = ( -1 -p=(1 Kp )/a) /a)/a,我们知道,当 ppp位于 sss 的左半平面时系统才会稳定,也就是说 Kp >>> −1-11 时系统才会稳定。
  我们给系统一个输入一个目标值,即 r(t)=rr(t)=rr(t)=r, 于是
在这里插入图片描述

在这里插入图片描述
根据中值定理,有
在这里插入图片描述
那么稳态误差为
在这里插入图片描述
  由上式可知,KKKp 趋向于无穷大时,eeess 趋向于 000,但实际工程中,KKKp 不可能取太大,否则超调量会非常大(一阶系统除外),如果超过了控制器的输出范围,那也就没有意义了,但是在控制器的输出范围内,Kp又不会太大,所以稳态误差还是消除不了,故而一般不单独使用比例控制。

举个实际的例子:
  对于系统:
在这里插入图片描述
  通过以上的推理,该系统在 KKKp >>> −1-11 时才会稳定,那就在simulink中仿真一下,把输入设置为101010,示波器中的黄线代表目标值,蓝线代表输出值:
KKKp === −- 222 时,系统结构如下
在这里插入图片描述
输出曲线如下
在这里插入图片描述
  由图可以看出,输出值已经跑飞了,系统不可能会稳定下来。
看看 KKKp === 222 时的情况
在这里插入图片描述
  这时候系统已经稳定了,但是稳态误差很大。
再看看 KKKp === 100 的情况
在这里插入图片描述
  此时稳态误差已经很小了,可以忽略不计了。但是此时的 KKKp 已经非常大了,如果系统此时输出为 999 ,那么偏差就为 111,比例控制输出为 100100100,对于PWM调节的话,占空比最大就是100100100%\%%,很明显这是不符合实际应用的。当然控制器的输出我们可以不当做占空比直接使用,比如在单片机的PWM的配置过程中,令计数值为100010001000才代表100100100%\%%占空比,那么比例控制输出100100100,对应PWM占空比也才101010%\%%,看上去很合理,也符合实际应用,这样一来,系统的调节时间就会变长,同样我们也可以理解为此时 KKKp 还较小。所以比例控制一般不单独使用。

积分控制

  上面我们研究了比例控制器,他不能消除稳态误差,所以需要设计新的控制器C(s)C(s)C(s),系统结构框图如下:
在这里插入图片描述
求得系统传递函数
在这里插入图片描述
  我们同样令r(t)=rr(t) = rr(t)=r ,拉普拉斯变换后, R(s)=r/sR(s) = r / sR(s)=r/s,于是有
在这里插入图片描述
  我们的目标是消除稳态误差,即 eeess === 000
在这里插入图片描述
继续推导
在这里插入图片描述
  这个 C(s)C(s)C(s)不就是积分嘛,KKKi 就是积分增益。我们来验证一下,还是拿前面的系统
在这里插入图片描述
设置 KKKp === 222 , KKKi === 111,看看比例控制与积分控制的效果
在这里插入图片描述
  黄色的直线表示目标值,蓝色的线是比例控制,橙色线是积分控制。由图可以看出,积分控制很明显的消除了稳态误差,但是积分控制的调节时间却比比例控制要长很多,那将比例控制与积分控制放在一起,同时作用,效果又是怎样的?

更改系统框图
在这里插入图片描述
  最上面一个闭环是比例控制,第二个是积分控制,最下面一个是比例积分控制,为方便对比我们稍稍做下参数调整,将比例积分控制的 KKKi 增加到 222,看看效果
在这里插入图片描述
  这条绿色的线就是比例积分控制,其余三条不变。由图可知,比例积分控制不仅吸取了比例控制的快速响应并稳定特点,还吸取了积分控制能消除稳态误差的特点,所以比例积分控制的有点明显胜于比例控制。

引入微分控制

  设一个二阶系统的一对根为 ppp1 =−a+bi= - a + bi=a+bi , ppp2 =−a−bi= - a - bi=abi,对该系统输入一个单位冲激信号,那么该系统的响应为
在这里插入图片描述
经过拉普拉斯逆变换后,得
在这里插入图片描述
  我们知道这个函数得曲线是振荡衰减直至到000,也就是说这个系统是稳定的。我们的目标是让系统更快速稳定,也就是加快系统的收敛速度,也就是−a-aa 越小,系统的收敛的速度才会越快,减小 −a-aa 也就是改变根轨迹,让根左移。我们以实例来说明:
设有系统的开环传递函数为
在这里插入图片描述
  该系统有222个极点,φφφ1=== 000,φφφ2=== −2-22,没有零点,渐近线交点σσσa===−1-11,与实轴得交角为90°90°90°,根轨迹如下
在这里插入图片描述
那么所有的根都将在实部为−1-11这条竖线上,我们要让系统快速衰减,也就是让根左移,并且越左越好,我们就让他移到实部为−2-22得这条竖线上,为便于计算,我们设这个根为k=−2+2√3ik=-2+2√3ik=2+23i
在这里插入图片描述
根据幅角条件
在这里插入图片描述

在这里插入图片描述
这也就是说,k=−2+2√3ik=-2+2√3ik=2+23i不在原根轨迹上,如果要使这个根满足幅角条件,或者说改变原根轨迹使得kkk在新的根轨迹上,该怎么办呢?那就加个30°,也就是加个零点嘛,如图
在这里插入图片描述
通过计算,补偿的30°这个零点为−8-88,那么这个新的控制器不就是H(s)=s+8H(s)=s+8H(s)=s+8,这不就是微分控制和比例控制吗,即PDPDPD控制,这里就把微分控制引进来了,我们可以仿真一下
在这里插入图片描述
  这个结构中,上面一个闭环是PDPDPD控制,下面一个就是PPP控制,KpK~p~K p  =8=8=8,得到得输出响应
在这里插入图片描述
蓝色的线表示PDPDPD控制,橙黄色得线表示PPP控制,可以清楚得看到PDPDPD控制得超调要小的多,收敛的速度也明显比比例控制快很多。我们在修改修改参数,将KKKi =2.9=2.9=2.9,看看效果
在这里插入图片描述
很明显,现在的超调已经变得很小了,收敛速度更快。对于微分控制,在实际应用中,不会拿微分控制单独做一个控制器,因为微分控制对高频干扰十分敏感,比如在系统中存在这样一个干扰:D(t)=0.01sin(100t)D(t)=0.01sin(100t)D(t)=0.01sin(100t),它的幅值很小,频率很高,一旦遇到微分控制,于是D(t)D(t)D(t)ttt求导,此时 DDD1(t)=cos(100t)cos(100t)cos(100t),赋值被放大了100倍,所以微分控制在很多时候并不被使用,PIPIPI控制被广泛应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WinForm C#全局错误捕捉处理【整理】

1 static class Program2 {3 /// <summary>4 /// 应用程序的主入口点。5 /// </summary>6 [STAThread]7 static void Main()8 {9 try 10 { 11 12 //添加事件处理…

第 6-6 课:消息队列面试题汇总

1.消息队列的应用场景有哪些? 答:消息队列的应用场景如下。 应用解耦,比如,用户下单后,订单系统需要通知库存系统,假如库存系统无法访问,则订单减库存将失败,从而导致订单失败。订单系统与库存系统耦合,这个时候如果使用消息队列,可以返回给用户成功,先把消息持久化…

在新建FileInputStream时使用当前相对路径或者绝对路径作为参数的问题

当new一个FileInputStream时&#xff0c;想使用相对路径这样无论我的服务端部署到哪里&#xff0c;都可以一直用一个文件夹而不必修改程序的路径代码&#xff0c;当然首先我用的绝对路径来做实验&#xff0c;保证能够成功通信&#xff0c;使用绝对路径时要注意路径的分隔符可以…

卡尔曼滤波器推导

注&#xff1a;受控制领域大牛CAN博士启发&#xff0c;受益匪浅&#xff0c;作此文以为笔记。 简介 设 卡尔曼滤波器是从测量值ZZZk的平均数开始的。开始推导&#xff1a; 由上式可知   也就是说随着kkk的增大&#xff0c;测量结果Zk不在重要&#xff0c;因为已经获得了足…

第 6-7 课:Java 分布式框架面试题合集

1.什么是 ZooKeeper? 答:ZooKeeper 是一个开源的分布式应用程序协调服务,是一个典型的分布式数据一致性解决方案。设计目的是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的系统,并以一系列简单易用的原子操作提供给用户使用。 2.ZooKeeper 提供了…

Oracle date 插入显示公元前日期

显示公元前日期很简单&#xff1a;--先创建一个表 create table test (d date);--插入一条记录 --插入的日期要注意 --1、“ - ”&#xff08;负号&#xff09; 表示公元前 --2、“ s ” 格式控制符 insert into test values(to_date(-2000-12-2, syyyy-mm-dd));--查询一下 --要…

cocos2dx3.2文件结构和代码结构

既然选定了cocos2dxlua的原生方式来开发&#xff0c;首先要确定的是使用哪个版本的cocos2dx&#xff0c;先看看github上的changelog和releasenote&#xff0c;然后在google里搜索一下&#xff0c;参考了jacky的博客http://zengrong.net/post/2100.htm&#xff0c;最终选择了coc…

java 方法 示例_Java集合的lastlastIndexOfSubList()方法和示例

java 方法 示例集合类lastIndexOfSubList()方法 (Collections Class lastIndexOfSubList() method) lastIndexOfSubList() method is available in java.util package. lastIndexOfSubList()方法在java.util包中可用。 lastIndexOfSubList() method is used to return the star…

Redis 面试题汇总

1.Redis 使用场景有哪些? 答:Redis 使用场景如下: 记录帖子点赞数、点击数、评论数缓存近期热帖缓存文章详情信息记录用户会话信息2.Redis 有哪些功能? 答:Redis 功能如下: 数据缓存功能分布式锁的功能支持数据持久化支持事务支持消息队列3.Redis 支持哪些数据类型? …

改进的PID算法

位置式PID算法 位置式PIDPIDPID算法是一种比较直观的的PIDPIDPID算法&#xff0c;如系统框图中所示&#xff0c;ininin表示设定值&#xff0c;errorerrorerror表示差值&#xff0c;uuu表示控制器输出值&#xff0c;outoutout表示被控量。算法表达式如下&#xff1a; 增量式PI…

奇怪的排序

P6: 奇怪的排序 Description: 春秋战国时期&#xff0c;赵国地大物博&#xff0c;资源非常丰富&#xff0c;人民安居乐业。但许多国家对它虎视眈眈&#xff0c;准备联合起来对赵国发起一场战争。 显然&#xff0c;面对多个国家的部队去作战&#xff0c;赵国的兵力明显处于劣势。…

Oracle 练习题P256

--根据Oracle数据库scott模式下的emp表和dept表&#xff0c;完成下列操作。--&#xff08;1&#xff09;查询20号部门的所有员工信息select * from emp where deptno 20;--&#xff08;2&#xff09;查询所有工种为CLERK的员工的员工号、员工名和部门号select empno,ename,dep…

oracle中dbms_如何在DBMS中找到关系的最高范式?

oracle中dbmsTo find the highest normal form of a relation, you have to first understand the basics of Functional dependency, Candidate keys, and Normal Forms. 要查找关系的最高范式 &#xff0c;您必须首先了解功能依赖项 &#xff0c;候选键和范式的基础。 In re…

MySQL 面试题汇总

1.说一下 MySQL 执行一条查询语句的内部执行过程? 答:MySQL 执行一条查询的流程如下: 客户端先通过连接器连接到 MySQL 服务器;连接器权限验证通过之后,先查询是否有查询缓存,如果有缓存(之前执行过此语句)则直接返回缓存数据,如果没有缓存则进入分析器;分析器会对查…

几种简单电路知识汇总

这篇文章用于记录平时设计电路或者在书中遇到的一些电路方面的知识&#xff0c;会不定期更新。就先从运算放大器开始&#xff0c;对此做个简单的介绍。 运算放大器 说到运算放大器就不得不说两个概念&#xff0c;虚短与虚断。 虚短&#xff1a; 在理想情况下&#xff0c;运算…

Oracle 创建表 练习题

a) 建立下列教学管理用的数据表。注意&#xff0c;表名和字段名都是英文。 学生表&#xff08;student&#xff09; 字段 名称 数据类型 约束 学号 S_NO CHAR(6) 主键 姓名 S_NAME CHAR(10) 非空 性别 S_SEX CHAR(2) 只取男、女 出生日期 S_BIRTHDAY DA…

算法常用面试题汇总

1.说一下什么是二分法?使用二分法时需要注意什么?如何用代码实现? 二分法查找(Binary Search)也称折半查找,是指当每次查询时,将数据分为前后两部分,再用中值和待搜索的值进行比较,如果搜索的值大于中值,则使用同样的方式(二分法)向后搜索,反之则向前搜索,直到搜…

Java LocalDateTime类| 带示例的getDayOfYear()方法

LocalDateTime类getDayOfYear()方法 (LocalDateTime Class getDayOfYear() method) getDayOfYear() method is available in java.time package. getDayOfYear()方法在java.time包中可用。 getDayOfYear() method is used to get the field value day-of-year from this date-t…

51单片机——交通灯

原理图 功能描述 1、基本功能就是如同红绿灯一般&#xff0c;不做赘述。   2、红灯时长和绿灯时长可通过按键设置&#xff0c;即按键列中的上面4个&#xff0c;当这4个按键有一个按下后便进入时长设置功能&#xff0c;设置完成后按最下面两个按键&#xff08;紧急控制按钮&am…

设置TextField内文字距左边框的距离

2019独角兽企业重金招聘Python工程师标准>>> //设置文本框左边的viewUITextField *textField [[UITextField alloc]init];textField.frame CGRectMake(10, 30, 300, 30);[self.view addSubview:textField];textField.leftView [[UIView alloc]initWithFrame:CGRe…