PID控制.docx
- 文档编号:7956985
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:11
- 大小:813.17KB
PID控制.docx
《PID控制.docx》由会员分享,可在线阅读,更多相关《PID控制.docx(11页珍藏版)》请在冰豆网上搜索。
PID控制
PID控制是比例控制、积分控制与微分控制的总称,是目前在工程领域应用范围最广的一种控制方法。
在计算机控制系统中PID控制器的控制逻辑是通过编制程序来实现的,本来这是自动化专业学生需要掌握的基本技能,可实际情况却不乐观,许多学生在面临具体PID控制设计问题时往往无从下手,即使他写的关于PID控制的玄乎文章已经满天飞。
具体原因我想大家都有体会,总之,作为西工大的学生在工作中要上的厅堂,下的厨房,有白手起家,围土造城的本事,不过分依赖于现成的工具软件。
所以就想结合自己教学、科研与工程经验,把基本数字PID控制器的设计开发整理一下,供大家参考。
这个系列文章有几个原则:
(1)不用C++,全部采用标准C语言编写,可跨平台移植,因为C语言在目前工控领域是应用最广泛的开发语言;
(2)不用MATLAB,很简单,航空发动机FADEC系统、弹用控制器、载人航天机载控制器里面没有MATLAB;(3)不采用复杂的数据结构和软件框架结构,或者C语言里很生僻的语法,我只想写篇让大多数人能看懂的文章;(4)需要自动控制和C语言的基础知识。
OK,下面就开始。
控制系统由控制器和被控对象组成,没有被控对象,控制器是无从谈起的,所以,先抛开控制器,从对象入手。
常用的被控对象有一阶系统和二阶系统,在工程上,如果单位阶跃响应没超调或超调很小就用一阶系统模拟,如果有超调就用二阶系统模拟。
本文先谈一阶系统。
要在计算机里模拟一阶系统的变化,首先要将连续一阶系统离散化成差分方程,然后再根据差分方程的递推关系编程。
通常采用基于Z变换的一阶后向差分或双线性变换来离散化,此处用一阶后向差分法,推导如下:
代码如下:
(开发环境VC++6.0(SP6))
单位阶跃响应的过程计算存盘数据文件Data.dat,可通过Origin、MATLAB和Excel等软件打开。
输出曲线如下:
OK,一阶系统完成,在3T时刻达到0.95,进入5%误差带,有兴趣可在代码中加入系统增益调节。
下次完成二阶欠阻尼系统的模拟。
上一节我们小试牛刀,通过后向差分法得到一阶系统的离散化模型。
本节建立典型二阶系统的离散化模型,推导过程如下:
代码如下:
单位阶跃响应的输出曲线为:
再接再厉,给定一组不同阻尼比的二阶系统,计算单位阶跃响应输出,主函数代码如下:
阶跃响应的输出曲线为:
这组曲线我想学过《自动控制原理》的同学应该都很眼熟,不过以前是看过,这次是自己动手做出来,感觉还是很好滴!
再回到阻尼比为0.3的第一条曲线,放眼一望这位二阶兄台,既有傲人的超调(接近40%),也有过人的调节时间(接近6秒),一副张牙舞爪,不可一世的样子。
别担心,下一节我们就通过劈空掌比例控制,七伤拳积分控制和一阳指微分控制,三招两式搞定它!
上一节我们将典型一、二阶被控对象建模任务完成,本节就拿阻尼比为0.3,自然频率为2的二阶系统为例,进行PID控制器设计与算法验证。
首先观察一下闭环负反馈控制系统的结构图。
其中,误差=期望值-反馈指,控制器的输入是误差,控制器的输出是控制作用量,而被控对象的输入是控制作用量,即控制器的输出(这里暂不考虑执行机构)。
闭环系统的输入是期望值,输出是被控对象的实际输出。
所谓控制器设计的奥妙就在于合理的给对象控制作用量,使对象能够“听话”地达到期望值,从而将控制器输入误差减为零。
要牢记对象的特性是不变的,而变化的是控制器送出的控制作用量。
如同郭靖在江南七怪手下练十几年也没达到马钰调教两个月所获得的内功,更不用说郭靖跟着洪七公只练了几招降龙十八掌,就可以独自对阵梅超风了,显然对郭靖这个被控对象,马钰控制器与洪七公控制器较江南七怪控制器要好些。
所以,控制器的设计是控制系统设计的核心问题。
然后要明确PID三类控制器的各自特点,这样才能面对实际问题时正确设置控制器参数,而不是想当然的胡猜。
三类控制器的特点总结如下:
(1)比例控制:
控制输出与误差成比例,响应速度快,易于实现,对0型系统对象单纯依靠比例控制可减小误差,但不能消除误差。
为什么呢?
抛开课本的复杂公式推导,仔细观察上图,所谓0型系统对象就是不含积分环节的对象,也就是说对象输入为0,对象输出也必然为0,而1型以上系统有积分功能,则输入为0时,对象输出会稳定在一个定值(想想曲线积分的面积)。
假定误差为0,则比例控制输出为0,在零输入作用下0型被控对象输出也减到0,反馈到输入端得到误差为期望值,前后矛盾,所以,对0型系统对象单纯依靠比例控制可减小误差,但不能消除误差,而且比例系数过大还会导致系统发散(开环幅相曲线包围了(-1,0j)点)。
(2)积分控制:
消除系统误差,对于惯性较大或存在纯滞后的对象,积分系数应调小一点,否则易产生较大的超调,影响调节时间。
另外,如果对象本身就是1型以上系统,不建议增强积分控制,因为此时开环已接近2型系统,稳定裕度较小。
(3)微分控制:
反映误差信号的变化趋势,并能在误差变得太大之前,在系统中引入一个有效的早期修正信号,从而在加快系统响应速度的同时抑制超调,改善系统性能。
想一想,一箱水1分钟下降10cm和10分钟下降10cm,为维持液位不变能给一样的进水量吗?
显然不行,这就是不仅要考虑“误差值”还要考虑“误差变化率”。
但是,微分控制在高频噪声环境中,易导致系统输出剧烈变化,降低系统稳定性。
因为微分的计算是(e(k)-e(k-1))/T,噪声的跳变信号会导致微分计算出现较大的结果,影响控制输出。
数字PID控制器的推导如下(本文均采用一阶后向差分离散化):
在上一节TRP.c文件的基础上,添加关于PID控制器的代码如下:
主函数代码如下,尤其要牢记闭环负反馈的执行步骤,这是循环算法的关键。
将添加PID控制前后的二阶系统单位阶跃响应曲线对比如下:
显然,添加PID控制后,系统的超调消失了,调节时间也缩短到1s左右,比起后者36%的超调,6s的调节时间要强多了,控制的神奇作用得以体现!
OK,截至目前,我们设计了一个基本的数字PID控制器,以后不管在此基础上再进行何种改进,都是为了某个具体要求而进行的,PID控制的大框架仅此而已。
细究起来还有很多地方值得各位琢磨,比如,如何建立通用的任意阶系统的离散化模型?
如果一个系统中存在多个对象,程序该如何修改?
PID的积分分离、预限消弱、微分先行怎么做?
PID三个参数的具体调节步骤以及自整定算法该怎么做?
串级PID控制如何调节?
玄乎点,如何根据对象变化利用神经网络自适应在线修改PID参数?
对象工作在不同区间时,如何实现在线PID变参数的无扰切换?
等等。
后续有时间再给大家补充,还是那句老话“师傅领进门,修行在个人”。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PID 控制
![提示](https://static.bdocx.com/images/bang_tan.gif)