改进的PID算法

位置式PID算法

在这里插入图片描述
  位置式PIDPIDPID算法是一种比较直观的的PIDPIDPID算法,如系统框图中所示,ininin表示设定值,errorerrorerror表示差值,uuu表示控制器输出值,outoutout表示被控量。算法表达式如下:
在这里插入图片描述

增量式PID算法

  增量式PIDPIDPID算法不比位置式更直观,当执行机构需要控制量的增量时,适合采用增量式PIDPIDPID算法,比如步进电机控制。算法表达式如下:
在这里插入图片描述
在这里插入图片描述
  也可用后向差分法进行离散化,PIDPIDPID的连续传递函数为
在这里插入图片描述

在这里插入图片描述
sss表达式代入到GGGc(s)(s)(s)中,得
在这里插入图片描述
在这里插入图片描述

积分分离PID算法

  PIDPIDPID算法中,积分可消除稳态误差,提高控制精度,在系统启动或设定值大幅改变时,被控量与设定值之间会产生较大的偏差,造成过大的积分积累,甚至使控制量超过执行机构允许最大动作范围对应的极限控制量,引起系统过大的超调量,从而振荡,为避免这些不利的情况出现,可在被控量与设定值之间有较大偏差时,取消积分作用,避免超调量增大;当被控量接近设定值时,引入积分控制,消除稳态误差,提高控制进度。
  设被控量与设定值之间的偏差阈值为X>0X>0X>0,该值人为设定,即
在这里插入图片描述
算法表达式如下:
在这里插入图片描述

梯形积分PID算法

  在PIDPIDPID算法中,积分项的作用就是为了消除稳态误差,故而提高积分项的运算精度能更好的提高控制精度。在单片机中,对于积分运算通常使用累加的形式,也就是矩形积分,即
在这里插入图片描述
上述式子在程序中经常这样使用,但在PIDPIDPID算法中,并不是这样,这不得不从原始的PIDPIDPID算法说起,其表达式如下所示。
在这里插入图片描述
将其离散化,我们将时间ttt当做一个时刻,即第一时刻,第二时刻,第三时刻,用kkk表示,相邻两个时刻之间的时长为TTT,比如说T=1sT=1sT=1s,那么第一时刻即k=1k=1k=1时表示第一秒,第二时刻即k=2k=2k=2时表示第二秒,于是
在这里插入图片描述

也就是说,从严格意义来讲,积分项应该为
在这里插入图片描述
为方便编程计算把系数项全部整合在一块,称之为积分系数,所以就把TTT省略了。积分从图像上来看,就是求面积。因此在单片机中计算积分的思路就是把图形划分为宽度为TTT高度为error(n)error(n)error(n)nnn个等份,然后将所有矩形面积相加便可近似为求积分的过程。TTT越小矩形面积和越接近于积分运算,但在实际工程中,TTT不可能太小,因为TTT实际上就是采样时间,也是PIDPIDPID的计算周期,TTT过小会加大单片机的负担。这样的计算方式很直观,但计算的精度较低,误差大。假设偏差errorerrorerror在某段时间服从函数error=−a∗t+berror=-a*t+berror=at+b,如下所示
在这里插入图片描述
那么积分运算就是指
在这里插入图片描述
很明显,这使得每个矩形上面填充红色的三角形都参与了计算,使得积分运算精度大大降低,为避免出现过大的误差或者进一步提高运算精度,引入梯形积分的概念,只计算errorerrorerror曲线以下的部分,即梯形的面积
在这里插入图片描述
故梯形积分的PIDPIDPID的表达式为
在这里插入图片描述
  当偏差errorerrorerror不服从线性关系,或者是其他一些曲线,则不会向示例中那般毫无误差,仍会有些许误差无法计算到,但同矩形积分相比,运算精度已经得到了很大的改善。

带死区的PID算法

  带死区的PIDPIDPID算法主要用于存在闭环死区的系统,当系统达到稳态时,系统的输出值仍在设定值上下有微小的震荡,其算式为
在这里插入图片描述
  e(k)e(k)e(k)表示偏差,eee0表示人为设定的一个阈值,当e(k)=0e(k)=0e(k)=0时,控制器的输出也会逐渐降为000,这是由于积分的原因,而对于PDPDPDPPP控制,当e(k)=0e(k)=0e(k)=0时控制器的输出会迅速衰减到000。例如直流电机的位置控制,当电机转动到预定位置时,如果存在一些干扰,电机会在预定位置上下震荡,此时引入一个死区,位置环控制器输出就会为0,系统也就稳定下来了。

变速积分PID算法

  变速积分PIDPIDPID算法与积分分离PIDPIDPID算法本质上相同,都是为了减小系统超调,提高系统响应速度,但是积分分离PIDPIDPID算法较为粗暴,变速积分PIDPIDPID算法则是根据偏差errorerrorerror的大小来改变积分的速度,偏差越大,积分越慢,反之越快。即积分项的表达式为
在这里插入图片描述

βββ是关于偏差errorerrorerror的函数,即
在这里插入图片描述
其中A,BA,BA,B表示人为设定的阈值,则变速积分PID算法的表达式为
在这里插入图片描述

带滤波器的PID算法

  当系统中存在高频干扰时,会使得系统变得不稳定,另外,在PIDPIDPID算法中,微分项会将高频干扰放大,所以需要将高频干扰过滤掉,从而使系统稳定,故引入低通滤波器。假设该滤波器传递函数为
在这里插入图片描述
该滤波器的转折频率为20HzHzHz,对如下系统
在这里插入图片描述
当干扰信号频率低于20HzHzHz,设为10HzHzHz,输出曲线如下
在这里插入图片描述
左图为带滤波器的输出响应,右图不带滤波器,可以看出此时两个系统输出很不稳定,波动都很大,再看看干扰信号频率大于20HzHzHz时的情况,设为100HzHzHz,输出曲线如下
在这里插入图片描述
很明显,此时带有滤波器的系统输出相比于之前10HzHzHz干扰信号时的输出波动幅度要小很多,此时不带滤波器的系统输出已经受到剧烈干扰,带有滤波器的系统输出波动幅度更小。在加大干扰信号的频率,设为10kHzkHzkHz,输出曲线如下
在这里插入图片描述
此时带有滤波器的系统输出几乎已经没有了波动。
  在编程中使用带滤波器的PIDPIDPID算法时,需要对滤波器的传递函数进行ZZZ变换并离散化,其公式为
在这里插入图片描述
——aaa表示滤波系数,取值(0,1)(0,1)0,1之间
——Y(n)Y(n)Y(n)表示滤波后的输出值
——X(n)X(n)X(n)表示滤波前的输入值
——Y(n−1)Y(n-1)Y(n1)表示上一次滤波的输出值
一阶低通滤波器的系统框图如下
在这里插入图片描述
由此可得
在这里插入图片描述
接着开始ZZZ变换并离散化,令
在这里插入图片描述
故而
在这里插入图片描述

基于前馈补偿的PID算法

  对于设定值变化的系统中,为提高系统的跟踪性能,需要加入前馈补偿。既然是提高系统的跟踪性能,那自然就是系统的输出越接近于甚至等于系统的输入,也就是闭环系统的传递函数为111。如下图所示
在这里插入图片描述
在这里插入图片描述
  假设有一个被控对象为
在这里插入图片描述

不加前馈补偿,如下
在这里插入图片描述
系统输入为w=2,A=3w=2,A=3w=2,A=3的正弦信号,我们将pidpidpid调节到一个没有超调量的合适参数,输出图像如下
在这里插入图片描述

  黄线表示系统输入的信号曲线,蓝线表示系统输出曲线,可以看出,输出曲线不仅幅值较系统输入小,且滞后于系统输入,我们在将pidpidpid适当调节,增大超调减小调节时间,系统相应如下
在这里插入图片描述
此时的输出幅值已经很接近系统的输入了,但仍存在误差和滞后,再来看看在现在的pidpidpid参数下加入前馈补偿的效果,系统框图如下
在这里插入图片描述
输出曲线如下
在这里插入图片描述
在响应0.1s0.1s0.1s内已基本重合,在放大看看
在这里插入图片描述
可以看出误差已经非常小,可以忽略不计了,所以加入前馈补偿可以很好地改善系统的跟踪性能。在编程中,使用前馈补偿的PIDPIDPID算法,在计算uf时,可对1/G(s)1/G(s)1/G(s)进行ZZZ变换并离散化。

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

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

相关文章

几种简单电路知识汇总

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

51单片机——交通灯

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

类的三大特性

类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性: 一、封装 学习过Java中类的同学可能都知道了,封装就是对类中的一些字段&a…

操作系统抢占式优先级调度_操作系统中的优先级调度(非抢先)

操作系统抢占式优先级调度Priority scheduling is a type of scheduling algorithm used by the operating system to schedule the processes for execution. The priority scheduling has both the preemptive mode of scheduling and the non-preemptive mode of scheduling…

数据结构pta选择判断复习

第一章绪论 1-3数据的逻辑结构是指数据的各数据项之间的逻辑关系。 错 是数据元素之间的逻辑关系 2-4以下属于逻辑结构的是( )。 (2分) 顺序表 散列表 有序表 单链表 有序表 2-12以下关于数据结构的说法中正确的是____。 (2分) A数据结构的逻辑结构独立于…

粗略的看JFinal的基于AOP的拦截器的实现

2019独角兽企业重金招聘Python工程师标准>>> 简单的说一下AOP的实现,所谓AOP,即(Aspect Oriented Programming)的缩写,体现在程序中就是你可以通过配置在任意的代码块前后插入你想插入的执行代码。例如日志…

大二上数据结构复习

目录 第一章绪论练习 第二章线性表 第三章栈和队列 第四章串 第五章数组和广义表 第六章树和二叉树 第七章图 第九章查找 第十章排序 第一章绪论练习 1-8 数据结构的抽象操作的定义与具体实现有关。 (1分) T F 1-14 数据结构包括数据对象集以及它们的逻辑结构和物理结构&#…

大二上数据结构复习2

第二章线性表 综合 一、在什么情况下用顺序表比用链表好 表长度确定,很少进行插入删除操作且经常访问元素 二、2-4 顺序表的插入和删除要求仍然保持各个元素原来的次序。设在等概率情形下, 对有 127 个元素的顺序表进行插入, 平均需要移动多少个元素? 删除一个元素…

操作系统(王道笔记第二章)

目录第二章 2.1_1进程的定义、组成、组成形式、特征 2.1_2进程的状态与转换 2.1_3进程的控制 2.1_4进程通信 2.1_5线程概念和多线程模型 2.2_1处理机调度的概念层次 2.2_2处理机调度的时机、切换与过程、方式 2.2_3调度算法的评价指标 2.2_4FCFS、SJF、HRRN调度算法 2.2_5时间片…

C语言画图形(图形库graphics的使用)

目录 工具 c语言基本绘图 文字输出 c语言基本贴图 获取鼠标、键盘信息 工具 (1)环境:VC (2)库函数:graphics.h(因为不是标准库函数,所以需下载EASYX) (3&am…

关于DDD中Domain的思考

2019独角兽企业重金招聘Python工程师标准>>> 本文既不推销UML,也不推广DDD,更不涉及各种论战。-- 作者 某天又一次打开关于DDD(领域驱动设计)的PDF文档时,自己有了个疑问:什么是领域(Domain)?译文中是这样描…

算法设计TSP问题动态规划

#include <iostream> #include <cmath> using namespace std; //集合虚拟化用000 、001 、010 、011 、100 、101 、110 、111分别表示{} 、{1}&#xff08;V[2^(1-1)]&#xff09; 、{2}&#xff08;V[2^(2-1)]&#xff09; 、{1,2}&#xff08;V[2^(1-1)2^(2-1)]…

字符串使用与内部实现原理

Redis 发展到现在已经有 9 种数据类型了&#xff0c;其中最基础、最常用的数据类型有 5 种&#xff0c;它们分别是&#xff1a;字符串类型、列表类型、哈希表类型、集合类型、有序集合类型&#xff0c;而在这 5 种数据类型中最常用的是字符串类型&#xff0c;所以本文我们先从字…

Lisp-Stat翻译 —— 第九章 统计绘图窗体

2019独角兽企业重金招聘Python工程师标准>>> 第九章 统计绘图窗体 除了前几章略述的绘图窗体原型提供的基本绘图工具之外&#xff0c;Lisp-Stat里的统计绘图还需要用来管理数据和将那些数据转换成屏幕上的图形的工具集。这些工具由绘图原型graph-proto提供。更多的…

操作系统(王道笔记第三章内存)

第三章内存3.1_1内存的基础知识&#xff08;1&#xff09;什么是内存&#xff1a;略&#xff08;2&#xff09;进程运行的基本原理①从写程序到程序运行②链接③装入3.1_2内存管理的概念&#xff08;1&#xff09;内存管理管哪几个方面&#xff08;2&#xff09;内存保护①上下…

Redis 快速搭建与使用

Redis 是由 C 语言开发的开源内存数据存储器&#xff0c;经常被用作数据库、缓存以及消息队列等。 Redis 因为其强大的功能和简洁的设计&#xff0c;深受广大开发者和公司的喜爱&#xff0c;几乎占领了内存数据库市场的所有份额。 1 Redis 特性 Redis 有很多优秀的特性&#…

hibernate annotation注解方式来处理映射关系

2019独角兽企业重金招聘Python工程师标准>>> 在hibernate中&#xff0c;通常配置对象关系映射关系有两种&#xff0c;一种是基于xml的方式&#xff0c;另一种是基于annotation的注解方式&#xff0c;熟话说&#xff0c;萝卜青菜&#xff0c;可有所爱&#xff0c;每个…

操作系统Ubuntu(实验一二)

摘录&#xff1a;https://www.cnblogs.com/penglang14/p/10632360.html 实验一二1.1_小技巧1.2_ls查看目录命令1.3_cd切换目录命令1.4_查看文件内容命令(1)cat filename(2)more filename(3)head [-n] filename([]表示此内容可有可无)&#xff08;4&#xff09;wc命令确定行数、…

Redis 是如何执行的?

在以往的面试中&#xff0c;当问到一些面试者&#xff1a;Redis 是如何执行的&#xff1f;收到的答案往往是&#xff1a;客户端发命令给服务器端&#xff0c;服务端收到执行之后再返回给客户端。然而对于执行细节却「避而不谈」 &#xff0c;当继续追问服务器端是如何执行的&am…