毕业设计(论文)常用PID改进的编程实现与仿真研究.doc

上传人:laozhun 文档编号:3982264 上传时间:2023-03-30 格式:DOC 页数:45 大小:619KB
返回 下载 相关 举报
毕业设计(论文)常用PID改进的编程实现与仿真研究.doc_第1页
第1页 / 共45页
毕业设计(论文)常用PID改进的编程实现与仿真研究.doc_第2页
第2页 / 共45页
毕业设计(论文)常用PID改进的编程实现与仿真研究.doc_第3页
第3页 / 共45页
毕业设计(论文)常用PID改进的编程实现与仿真研究.doc_第4页
第4页 / 共45页
毕业设计(论文)常用PID改进的编程实现与仿真研究.doc_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《毕业设计(论文)常用PID改进的编程实现与仿真研究.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)常用PID改进的编程实现与仿真研究.doc(45页珍藏版)》请在三一办公上搜索。

1、摘 要 用计算机实现PID控制,不只是简单的把PID控制规律数字化,而是进一步与计算机的强大运算能力,储存能力和逻辑判断能力结合起来,克服在实际应用中的一些PID控制缺陷。本文罗列了常见的四种PID改进方法,包括积分分离算法,抗积分饱和算法,微分项的改进算法和带死区的数字PID算法,这些控制算法的优点是可以减小系统的超调量,使系统变得稳定,提高了控制系统的品质,能在控制过程中设置输出值的上下限,能在设定值变化时使控制作用的变化较为平缓,在使用带死区PID控制算法后,在一定程度上可以抑制由于执行机构存在回差而可能产生的控制量来回振荡现象。在了解PID改进算法规律数字化的基础上使用面向对象的C+语

2、言在VC+6.0平台上写出了完整的运算代码及仿真界面,具有一定的人机交互界面。同时并以一个具有一定纯滞后的典型热工被控对象为例,在上述仿真环境下,验证各种改进算法的效果,并绘制输出后的仿真曲线。关键词:PID,改进,编程,仿真,C+ ABSTRACTTo realize the PID control with the computer, not only Digitalization PID control rules simply, but further unifies with computers formidable operational capability、 the stora

3、ge power and logical judgment ability to overcome some PID control flaws in the practical application. This article has displayed four common PID corrective methods, including the integral separation algorithm, the anti-integral saturated algorithm, the differential improvement algorithm and the bel

4、t dead areas digital PID algorithm, these control algorithms not only reduce systems overshoot ,which make the system become stable, thus improve control systems quality ,but also establish the bound of the output in the controlled process, thus resulting in a stable change when the setting value ch

5、ange, after using dead-section PID control algorithm, to a certain extent ,it may suppress the control variable oscillation caused by backlash exit in Actuator . Using the object-oriented C+ language to write the complete operation part and the simulation contact surface in the VC+6.0 platform in th

6、e base of understanding the PID improvement algorithm rule digitization, which have certain man-machine interaction contact surface. Simultaneously, take the example that the certain pure time delay typical hot working controlled plant, under the above simulation environment, confirms the effect of

7、each kind of improvement algorithm and draws up the output simulation curve.KEY WORDS: PID,improve,program,simulate,C+ language 目录摘 要IABSTRACTII第1章 绪论11.1 选题背景和意义11.1.1发展现状及背景11.1.2 常用PID递推位置式算法及其不足21.2 国内外发展现状31.2.1 积分分离算法31.2.2 抗积分饱和算法41.2.3 微分项的改进算法51.2.4 不完全微分算法61.2.5 带死区的数字PID算法61.2.6单神经元自适应PID

8、控制71.3 本文主要内容71.4 本论文的章节安排8第2章 PID改进控制算法设计82.1积分分离算法82.2抗积分饱和算法102.3不完全微分PID控制122.4 微分先行PID控制132.5带死区的数字PID算法13第3章 程序设计153.1 研究现状和开发工具的选择153.2 程序说明153.2.1 PID算法程序说明163.2.1.1 PID算法主程序main.cpp163.2.1.2 PID计算算法过程程序pid calc.cpp173.2.1.3 头文件pid.h203.2.1.4 头文件function.h203.2.2 仿真绘图程序说明203.3 仿真结果比较及人机界面213

9、.3.1.常规PID算法输出结果如图 3-3:213.3.2.积分分离算法仿真过程及结果如图3-4,3-5:213.3.3抗积分饱和算法仿真结果图3-6233.3.4带死区的数字PID仿真曲线图3-7:243.3.5微分项的改进数字PID仿真曲线图3-8:错误!未定义书签。3.4 仿真结果分析25结论与展望26附录1 PID算法C+编程29附录2 仿真曲线绘图程序38致 谢42第1章 绪论1.1 选题背景和意义1.1.1发展现状及背景当今的自动控制技术都是基于反馈的概念。反馈理论的要素包括三个部分:测量、比较和执行。测量关心的变量,与期望值相比较,用这个误差纠正调节控制系统的响应。 这个理论和

10、应用自动控制的关键是,做出正确的测量和比较后,如何才能更好地纠正系统。PID(比例-积分-微分)控制器作为最早实用化的控制器已有50多年历史,足以说明它的普遍性,所以PID控制器现在仍然是应用最广泛的工业控制器。由于其算法简单、鲁棒性好和可靠性高,被广泛用于过程控制和运动控制中。数字PID控制算法是将模拟PID离散化得到,各参数有着明显的物理意义,调整方便,所以PID控制器很受工程技术人员的喜爱。它由于用途广泛、使用灵活,已有系列化产品,使用中只需设定三个参数(Kp, Ti和Td)即可。在很多情况下,并不一定需要全部三个单元,可以取其中的一到两个单元,但比例控制单元是必不可少的。 首先,PID

11、应用范围广。虽然很多工业过程是非线性或时变的,但通过对其简化可以变成基本线性和动态特性不随时间变化的系统,这样PID就可控制了。 其次,PID参数较易整定。也就是,PID参数Kp,Ti和Td可以根据过程的动态特性及时整定。如果过程的动态特性变化,例如可能由负载的变化引起系统动态特性变化,PID参数就可以重新整定。 在一些情况下针对特定的系统设计的PID控制器控制得很好,但它们仍存在一些问题需要解决,比如PID在控制非线性、时变、耦合及参数和结构不确定的复杂过程时,工作地不是太好。最重要的是,如果PID控制环境复杂,或者在输出幅值有限制的情况下,并不能很好的发挥控制作用。虽然有这些缺点,PID控

12、制器是最简单的有时却是最好的控制器,所以本文的意义是尽可能的改进PID运算规律数字化后的运算算法,并与现在广泛使用的计算机相结合,更加高效的应用在工程方面,使其能够应对各种较为复杂的工作情况,将PID这种简单又实用的控制器应用到更广阔的领域。目前工业自动化水平已成为衡量各行各业现代化水平的一个重要标志。同时,控制理论的发展也经历了古典控制理论、现代控制理论和智能控制理论三个阶段。目前,PID控制及其控制器或智能PID控制器已经很多,已不再是简单的机械控制,而已经发展到通过网络或自身智能来控制被控对象。这样的产品已在工程实际中得到了广泛的应用,有各种各样的PID控制器产品,各大公司均开发了智能调

13、节器 (intelligent regulator),其中PID控制器已经不再是简单的数字PID常规控制,而引用了很多改进算法。有利用PID控制实现的压力、温度、流量、液位控制器,能实现PID控制功能的可编程控制器(PLC),还有可实现PID控制的PC系统等等。 可编程控制器(PLC) 是利用其闭环控制模块来实现PID控制,而可编程控制器(PLC)可以直接与ControlNet相连,如Rockwell的PLC-5等。还有可以实现 PID控制功能的控制器,如Rockwell 的Logix产品系列,它可以直接与ControlNet相连,利用网络来实现其远程控制功能。随着PID控制器的日趋完善,上文

14、中提到的在PID控制器中引用了许多PID改进算法,来弥补PID不能适应较为复杂的控制环境。如积分分离算法、抗积分饱和算法、微分项的改进算法、不完全微分算法、微分先行算法、带死区的PID控制、单神经元自适应PID控制、融合型智能PID控制器等。而且随着技术的不断发展,肯定会出现越来越多适用不同具体场合的PID控制方法。1.1.2 常用PID递推位置式算法及其不足PID算法在工业控制中应用的最为广泛,其离散数学模型表示为1: (1)式中 k采样序号,k=0,1,2; u(k)第k次采样时刻的计算机输出值;e(k)第k次采样时刻输入的偏差值;e(k-1)第(k1)次采样时刻输入的偏差值;Kp比例系数

15、,KI积分系数,KD微分系数,通常称式(1)为位置式PID控制算法,这种是位置式的非递推形式。当控制器的输出直接控制执行机构的增量时,通常采用的是增量式PID控制算法。增量式PID控制算法的表达式为: (2)其中u(k)、u(k-1)分别为k、k-1时刻的PID控制器的输出值。根据增量式PID算法可以推导出位置式PID算法的递推形式,其表达式为:(3)其中r(k)为系统的输入,y(k)为控制对象的测量量。由于非递推位置式算法的积分项计算时与前K次的误差都有关,计算量大,而且易于出现问题;而递推位置式算法在计算过程中只与最近的三次误差值有关,计算量小,在计算机编程的控制算法中得到广泛的应用。在计

16、算机编程时为了限制PID的输出超限现象,通常对PID控制器进行限幅,控制其输出的最大和最小值。但在实验中我们却发现这种PID算法在加大比例系数时容易产生严重的欠调失控的现象,为此我们利用MATLAB软件对常用的递推位置式PID算法进行了仿真研究。采用了MATLAB/Simulink对常用的PID控制系统进行建模仿真2。为了验证算法存在的普遍缺陷,采用Simulink模块与M 函数相结合的形式,利用ODE45的方法求解连续对象方程,主程序由Simulink模块实现,PID控制器由M函数实现。输入的指令信号为阶跃信号,误差的初始化是通过时钟功能实现的,从而在M函数中实现了误差的积分和微分。具体的仿

17、真模型如图1-1所示。图1-1 PID控制器的仿真模型在此我们主要研究PID常规控制算法中的缺陷与不足,设定Ki=0,Kd=0,逐渐加大比例系数Kp,对于非递推式PID算法得到的输出结果没有增大系统的稳态误差,在实际结果中,在Kp较小时系统的响应慢,但系统几乎没有静差;随着比例系数的加大,系统出现了静差,当Kp=15的时候已经存在了较大的静差了,这时的系统已经出现了失控的现象。此时如果系统中加入了积分环节,则系统在积分环节的作用下逐渐减小静态误差,这样系统的调节时间将会很长,这样的控制器也是不能满足工业控制的需要的。1.2 国内外发展现状目前国内外常用的PID改进方法有许多,本文着重编程仿真最

18、常用,改动简单,适应范围广泛的四种改进方法进行说明。1.2.1 积分分离算法一般的PID控制算法中,当有较大的扰动或者大幅度改变设定值时,由于短时间内出现大的偏差,加上系统本身具有的惯性和滞后,在积分的作用下,将引起系统过量的超调和长时间的波动。特别是对于温度、成分等大惯性、大滞后的系统,这一现象更为严重。考虑到积分的主要作用是消除系统的稳态偏差,在偏差较大的过程中,积分的作用并不明显,为此可以通过下面的积分分离措施来改变这一情况。积分分离措施可以采用如下一种简便的处理办法,即当偏差较大时取消积分作用,当偏差较小时才投入积分作用,也就是当时,采用PD控制;当时,采用PID控制。积分分离值应根据

19、具体对象及要求确定。若值过大,达不到积分分离的目的,如图1-1中的曲线a所示;若值过小,一旦被控量y脱离了积分分离区,只进行PD控制,有可能无法消除残差,如图1-2中的曲线c所示。YbactPIDPDPD图1-2积分分离除了采用上述简单的积分“开关”控制外,还可以采用所谓变速积分的算法。变速积分的基本思想是设法改变积分增益的大小,使其与输入偏差的大小相对应。偏差越大,积分作用越弱;反之则越强。与普通PID算法相比,积分分离算法的优点是可以减小系统的超调量,容易使系统稳定,提高了控制系统的品质。1.2.2 抗积分饱和算法虽然PID控制系统是作为线性系统来分析处理的,但是某些情况下往往存在不可避免

20、的非线性因素,如所有的执行机构、阀门以及D/A转换输出都有限幅,具有上、下限的限制。控制系统在运行过程中,控制量输出是一个动态过程(不是与当前的控制量一一对应的),有时会不可避免地使控制输出达到系统的限幅值。这时的执行器将保持在极限位置而与过程变量无关,相当于控制系统处于开环状态。此时,若控制器具有积分作用,输入偏差的存在可能导致持续积分,积分项可能会进一步使PID计算的控制输出超出系统的限幅值。当偏差反向时,系统需要很长的时间才能使积分作用返回有效的正常值。这一现象称为积分饱和,积分饱和现象会使控制系统的品质变差。从上面积分饱和的现象分析,很容易得到一种简单的抗积分饱和的办法,即当出现积分饱

21、和时,通过停止积分作用的方法来抑制积分的饱和。具体的办法是,当控制输出达到系统的上、下限限幅时,停止对某一方向的积分。设控制器输出满足,其中和分别为控制量容许的上、下限值。当超出此范围时,采取停止积分的措施。以采用正作用的PID控制为例,若,且,则令积分增益停止积分,防止计算控制量u继续增加;类似的,若,且,同样积分增益停止积分,防止计算控制量u的继续减少。当然,在要求不高时,也可以不考虑偏差的方向,只要达到控制量容许的上、下限值,就停止积分。这里要特别注意,是否采取抗积分饱和措施的关键是判断控制系统最终的控制输出是否超出了系统要求的限幅值。在串级控制系统中积分饱和现象有时非常严重,这是控制最

22、后的输出是副调节器的输出,当他已达到了执行机构容许的上、下限值时,不仅副调节器要采取抗积分饱和措施,更重要的是主调节器要采取抗积分饱和算法。例如,在火电厂主蒸汽温度ude串级控制中,一般主调节器就必须采取抗积分饱和的算法,这里的主调节器是否采取抗积分饱和措施与其本身的输出无关。从形式上看,尽管积分分离算法和抗积分饱和算法都是通过停止积分作用实现的,但他们判断停止积分的条件完全不同。积分分离算法进行分离的依据是PID控制器的输入偏差,而抗积分饱和算法的抗积分饱和依据是抗积分饱和算法系统最终的控制输出u。如果用一句通俗简单的话来总结积分分离算法和抗积分饱和算法的特点,就是“大偏差时不积分(积分分离

23、算法),输出超限时也不积分(抗饱和)”。1.2.3 微分项的改进算法数字PID控制算法对微分项的改进,其中最重要就是前面介绍过的实际微分PID算法,该算法不仅可以抑制干扰,还可以克服理想微分算法对系统有大幅度冲击的缺点。从抗干扰的观点出发,为了抑制微分作用容易引入干扰的不足,除了可以像实际微分算法一样在PID算法的输出侧对控制输出进行惯性滤波外,同样也可以通过对PID控制的输入偏差进行低通滤波处理,以抑制高频的过程干扰对系统的不利影响,如采用数字滤波算法中均值滤波、去极值滤波、限幅限速滤波等,其中采用四点中值差分法处理输入偏差就是其中一种典型的方法。1.2.4 不完全微分算法在PID控制中,微

24、分信号的引入可改善系统的动态特性,但也易引起高频干扰,在误差扰动突变时尤其显出微分项的不是。若在控制算法中加人低通滤波器,则可使系统性能得到改善。克服上述缺点的方法之一,是在PID算法中加入一个一阶惯性环节(低通滤波器) ,可使系统性能得到改善。不完全微分PID的结构如图所示,其中图1-3是将低通滤波器直接加在微分环节上。可以有效抑制干扰信号的影响,改善系统性能。E(S)图1-3 不完全微分PID结构1.2.5 带死区的数字PID算法在许多实际的控制系统中,并不要求被控量十分精确地与设定值相等,完全无差,而是容许偏差在一定范围内变化。在这种情况下,计算机控制中为了避免控制动作过于频繁,以消除由

25、于执行机构或阀门的频繁动作所引起的系统振荡,有时采用所谓带死区的PID算法,也称带不灵敏区的算法。该算法是在原PID算法的前面增加一个不灵敏区的非线性环节来实现的,即死区B是一个可调参数,其大小一般应根据控制系统对被控量稳态精度的要求以及现场的实验结果来确定。需要指出的是,死区是一个非线性环节,不能像线性环节一样随便移到PID控制器的后面,对控制量输出设定一个死区,这样做的效果是完全不同的。在生产现场有时为了延长执行机构或阀门使用寿命,有一种错误的做法,即不按设计规范的要求片面地增大执行机构或阀门的回程误差(简称回差),希望能避免执行机构或阀门频繁动作,这就相当于将死区移到了PID控制器后面,

26、这样有时会得到适得其反的效果。使用在PID前面带有死区的算法,在一定程度上可以抑制由于执行机构存在回差而可能产生的控制量来回振荡现象。1.2.6单神经元自适应PID控制神经网络具有大规模并行处理、高度的容错性和鲁棒性、自组织学习和实时处理等特点,可构造有效地用于非线性、时变系统的只能控制器。单神经元控制器继承了常规PID控制器的简单、实用、易于在DCS系统中通过组态实现的优点,现场可调整参数少,易于现场调试,控制品质优于常规PID控制器。实用经典的神经元智能控制器算法如图1-4:图1-4 单神经元自适应PID控制系统图1-6中,表示系统误差,表示一阶差分,表示误差积累1.3 本文主要内容首先,

27、本文介绍了PID的改进方法目前的研究现状,介绍了各种常用方法的模型,结构,并着重阐述了积分分离算法,抗饱和积分算法,微分项的改进算法,带死区的数字PID算法,这四种方法的结构和具体算法过程。然后以四种方法为基础,在VC平台上使用C语言编写改进程序,其中选用具有滞后特性的热工被控对象并仿真最终结果。仿真结果表明: 对于不同的要求不同的改进程序会有更好更稳定的仿真结果相比较常规PID。1.4 本论文的章节安排第一章 绪论简单论述了选题的意义和重要性以及PID改进算法的研究现状,并阐述了论文的理论依据,说明了本论文所采用算法的可行性和必要性。最后介绍了本文所作的主要工作和文章的结构安排。第二章 PI

28、D改进控制算法设计在各种常用的PID改进算法中着重选取四种改进控制算法,绘制程序流程图,展示明确的判断运算过程。第三章 程序设计在VC平台上,使用C+语言,描述重要的程序中变量以及程序中重要语句的说明。选用一个典型的热工被控对象,具有一定的滞后特性,经过四种改进程序比较仿真结果。最后是结论与展望本部分总结了本论文的成果和不足,提出以后应该注意和改进的地方,并且总结在编写程序过程中遇到的各种问题以及解决方法。第2章 PID改进控制算法设计2.1积分分离算法积分分离控制基本思路是:当被控量与设定值偏差较大时,取消积分作用,以免由于积分作用使系统稳定性降低,超调量增大;当被控量接近给定值时,引入积分

29、控制,以便消除静差,提高控制精度。其具体实现步骤如下:(1)根据具体系统,人为设定阈值0;(2)当时|e(k)|,采用PD控制;(3)当时|e(k)|,采用PID控制;积分分离控制算法可表示为其中为采样时间,为积分项的开关系数:积分分离PID控制算法的程序框图如图2-1所示:PID控制算法开始采样输入r(k)输出 y(k)PD控制算法计算控制量u(k)输出控制YN图2-1积分分离算法程序控制流程图数据更新2.2抗积分饱和算法当系统存在一个方向的误差时,由于积分的累加作用会使控制量一直增大,可能会使控制量达到执行器的执行阈值,如果此时误差的方向发生改变,控制量会逐渐减小,控制量也会退出饱和区,执

30、行器也会在阈值内执行;如果此时误差方向还是没有改变,控制量会继续增大但是执行器会一直保持在阈值,此时控制量就进入了饱和区。进入饱和区越深,退出饱和区时间就会越长,在饱和区时执行器会一直在阈值位置,如果误差发生反向,执行器不会立刻有反应,控制量会慢慢减小,等执行器推出饱和区才会有反应。这样就会使控制的动态响应变差,控制性能变差。抗积分饱和算法。若 ,只累加负的误差;若 ,只累加正的误差。这样就可以避免积分饱和现象。下图2-2为抗积分饱和算法在PID改进过程中的程序框图。PID控制算法开始采样输入r(k)输出 y(k)PD控制算法计算控制量u(k)输出控制N图2-2抗积分饱和算法程序控制流程图数据

31、更新Y2.3不完全微分PID控制当信号突变时,PID控制的微分项输出的控制量可能比较大,尤其是阶跃信号时,微分项急剧增加,容易引起调节过程的振荡,导致系统的动态品质下降。不完全微分PID控制算法就是采用一个带惯性的微分环节来克服常规PID控制的这一缺点。它的控制结构如图2-3所示。图2-3不完全微分PID控制结构图2.4 微分先行PID控制微分先行PID控制是只对输出量进行微分,而对给定指令不起微分作用,因此它适合于给定指令频繁升降的场合,可以避免指令的改变导致超调过大。它的控制结构如图2-4所示:图2-4微分先行PID控制结构图2.5带死区的数字PID算法在计算机控制系统中,某些系统为了避免

32、控制动作的过于频繁,消除由于频繁动作所引起的振荡,可采用带死区的PID控制。在控制精度要求不高、控制过程要求平稳的场合,可以人为的设置一个不灵敏区B,即带死区的PID控制。开始采样输入r(k)输出 y(k)计算控制量u(k)输出控制YesNo图2-5带死区的计算机PID控制系统控制流程图数据更新只有不在死区范围内时,才按PID算式计算控制量。其程序框图如图2-5,结构如图2-6所示。BBPID图2-6 带死区的计算机PID控制系统第3章 程序设计3.1 研究现状和开发工具的选择PID改进的编程与仿真在matlab平台已经有较多的实例,但在实际应用中,matlab程序并没有简单的可执行程序应用广

33、泛,所以选择面向对象的C+语言作为开发语言,VC作为开发平台来编写PID改进的程序。为什么要悬在C+和VC,因为matlab有强大的函数库,而VC具有高效率的优点。首先:用C+开发效率很高。由于OOP,对象会自己管理自己,这样避免了很多维护的麻烦,加快了开发速度。 其次:从运行角度上讲,由于封装引入的效率损失不一定比C直接做差多少。所谓C更具优势对绝大多数程序员都是不成立的,因为你用非OOP思想设计出的C程序,本身由于混乱维护造成的损失会远远大于封装带来的损失 现在已经不是讲那么细节的效率的时代了,对于几个指令调用上的损失,往往会被人家忽略,人们更多的会关注项目的可重用性,可维护性和可读性,这

34、些C都远远不如C+,所以选择C+和VC+来编写常见PID改进的编程研究和仿真实现。3.2 程序说明完整程序见附录,PID算法程序为附录1,仿真绘图程序见附录2。3.2.1 PID算法程序说明完整代码共包括4个模块,如图3-1:图3-1PID算法程序结构3.2.1.1 PID算法主程序main.cpp主程序main.cpp为人机界面的编写,和算法选择的过程。主要变量有:float a100,y100,rin,x=0,z=0,b,um,us,death;int i;char c;a100,y100:为数组,用来储存经过每个周期T后更新的PID模块输出和最终的Y输出。rin:为输入,程序中赋值给单位

35、阶跃输入。x,z:是初始化数据,是实际微分PID控制算法中,设置du和u的初值为0。Um,us:人机界面时输入的抗积分饱和算法需要的上下限幅值,然后需要带入子函数进行计算。B:在进行积分分离算法中需要设定的偏差Beta值。其中包括switch进行选择控制方法,界面如图3-2,包括:1.实际微分PID的控制算法2.积分分离算法3.抗积分饱和算法4.微分项的改进算法5.带死区的数字PID算法6.EXIT图3-2PID算法程序运行界面3.2.1.2 PID计算算法过程程序pid calc.cpppid calc.cpp主要负责用在main.cpp中选择的功能,来计算单位阶跃响应,并返回值到main.

36、cpp,然后储存在ai,yi数组中。主要变量有:void PID:initial()Kp =55;/*比例增益55*/T =0.1;/*采样周期0.1s*/ Ti =5.0;/*积分时间5.0s*/Td =5.0;/*微分时间5.0s*/Tf =10.0;/*惯性时间10.0s*/caculate();void PID:caculate()C1 =(Tf/(T+Tf);/*增量型PID运算系数有C1,C2,C3,C4*/C2 =(Kp*T*(1+T/Ti+Td/T)/(T+Tf);C3 =(0-Kp*T*(1+2*Td/T)/(T+Tf);C4 =(Kp*Td/(T+Tf);C22=(Kp*T

37、*(1+Td/T)/(T+Tf);/C22为第二种方法积分分离方法中,PD算法的系数C23=(Kp*T*(1+Td/T)/(T+Tf);/C23为第三种方法抗积分饱和中Ki=0则(1/Ti)=0时 float New,Sp,u,du,Float Beta,float umin,float umax, float d:New:反馈回来的输出值;Sp:输入值;U:增量型实际微分PID控制算法中经过离散化的u(k);Du: 增量型实际微分PID控制算法中的;Beta:积分分离算法中的设定值Beta;float umin:抗积分饱和算法中的下限;float umax: 抗积分饱和算法中的上限;floa

38、t d:带死区的数字PID算法中死区幅值。算法思路举例:1.例如实际微分PID的控制算法,先在头文件中定义一个类,PID类,然后申明PIDCONTR为该类中的一个成员函数。如下:float PID:PIDContr(float New, float Sp,float u,float du)static float e3=0.0,0.0,0.0;e2=e1;/*数据更新*/e1=e0;e0=Sp-New;du=C1*du+C2*e0+C3*e1+C4*e2;/*PID运算*/u=u+du;return u;由main.cpp中传入数据New,sp,u和du初始化初值为0。初始化数组e3均为0,然

39、后在数组e3中更新数据,e0等于输入减去反馈回来的输出。;然后将返回至main.cpp中的数组yi,并储存。2.例如积分分离算法计算过程,先在头文件中定义一个类,PID类,然后申明PIDjffl为该类中的一个成员函数。如下:float PID:PIDjffl(float New, float Sp,float u,float du,float Beta)static float e3=0.0,0.0,0.0; / Beta为具体施工过程中的设定值,此处假设输入1e2=e1;/数据更新e1=e0;e0=Sp-New;if(e0Beta)/当偏差大于beta时,采用PD计算,则Ti为无穷大du=C

40、1*du+C22*e0+C3*e1+C4*e2;u=u+du;由main.cpp中传入数据New,sp,u和du初始化初值为0。由人为输入设定值Beta,并赋给子程序,初始化数组e3均为0,然后在数组e3中更新数据,e0等于输入减去反馈回来的输出。如果满足偏差e0小于等于输入的设定值,则继续PID计算:;如果当偏差e0大于输入的设定值Beta,则停止积分作用,采取PD计算:代替;然后将返回至main.cpp中的数组yi,并储存。3.2.1.3 头文件pid.h 申明了需要引用的系统头文件,以及说明了在子程序中需要用到的PID类中的成员函数,单独编写时为了模块化主程序而写的头文件。3.2.1.4

41、 头文件function.h 其中包括输入和输出程序,该程序中,输入设为了单位阶跃。3.2.2 仿真绘图程序说明为了更方便的编写程序,单独编写了仿真输出曲线的绘图程序。在执行完PID计算程序后,Yi数组中存放的输出值使用如下语句,写入y.dat文件。FILE *f;f=fopen(y.dat,w);for(i=0;i100;i+)fprintf(f,%f ,yi);fclose(f);然后在仿真程序中(绘图程序见附录2),绘图赋值部分代码解释:FILE *f; f=fopen(y.dat,r); float yd100; for(i=0;iNUM;i+) fscanf(f,%f ,&ydi);

42、 fclose(f); hdc = BeginPaint (hwnd, &ps) ; for (i = 0 ; i NUM ; i+) pti.x = i * cxClient / NUM ; pti.y = (int)(cyClient-cyClient*ydi/3) ; Polyline (hdc, pt, NUM) ;重要参数及变量说明:hdc - Long,要在其中绘图的设备场景;lpPoint - POINTAPI,nCount POINTAPI结构数组中的第一个POINTAPI结构;nCount - Long,lpPoint数组中的点数。会从第一个点到第二个点画一条线,以次类推;c

43、yClient-这个是y轴的实际长度;cxClient-这是x轴实际长度。程序过程:用当前画笔描绘一系列线段。使用PolylineTo函数时,当前位置会设为最后一条线段的终点。它不会由Polyline函数改动,调用y.dat文件中所存放的值,读入yd100数组,然后做循环输出。3.3 仿真结果比较及人机界面3.3.1.常规PID算法输出结果如图 3-3:图3-3增量式常规PID单位阶跃响应3.3.2.积分分离算法仿真过程及结果如图3-4,3-5,3-6:仿真结果现实,积分分离算法能有效减小系统的超调量,容易使系统稳定,提高了控制系统的品质。被控对象被控对象为一延迟对象,采样时间为20s,延迟时间为4个采样时间,即为80s。图3-4积分分离算法输入界面图3-5积分分离算法单位阶跃响应图3-6采用普通PID阶跃响应为保证引入积分作用后,系统的稳定性不变,在输入积分作用时的比例系数Kp可做响应变化。3.3.3抗积分饱和算法仿真结果图3-7,3.8,3-9图3-7抗积分饱和算法PID阶跃响应图3-8抗积分饱和算法的PID U输出图3-9没有抗积分饱和算法的普通PID 阶跃响应3.3.4带死区的积分分离数字PID仿真曲线图3-10:图3-10带死区抗积分饱和算法PID阶跃响应图3-11不带死区有小扰动抗积分饱

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号