PID控制算法.docx

上传人:b****5 文档编号:5383789 上传时间:2022-12-15 格式:DOCX 页数:12 大小:256.28KB
下载 相关 举报
PID控制算法.docx_第1页
第1页 / 共12页
PID控制算法.docx_第2页
第2页 / 共12页
PID控制算法.docx_第3页
第3页 / 共12页
PID控制算法.docx_第4页
第4页 / 共12页
PID控制算法.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

PID控制算法.docx

《PID控制算法.docx》由会员分享,可在线阅读,更多相关《PID控制算法.docx(12页珍藏版)》请在冰豆网上搜索。

PID控制算法.docx

PID控制算法

下面将常用的各种控制规律的控制特点简单归纳一下:

1、比例控制规律P:

采用P控制规律能较快地克服扰动的影响,它的作用于输出值较快,但不能很好稳定在一个理想的数值,不良的结果是虽较能有效的克服扰动的影响,但有余差出现。

它适用于控制通道滞后较小、负荷变化不大、控制要求不高、被控参数允许在一定范围内有余差的场合。

如:

金彪公用工程部下设的水泵房冷、热水池水位控制;油泵房中间油罐油位控制等。

2、比例积分控制规律(PI):

在工程中比例积分控制规律是应用最广泛的一种控制规律。

积分能在比例的基础上消除余差,它适用于控制通道滞后较小、负荷变化不大、被控参数不允许有余差的场合。

如:

在主线窑头重油换向室中F1401到F1419号枪的重油流量控制系统;油泵房供油管流量控制系统;退火窑各区温度调节系统等。

3、比例微分控制规律(PD):

微分具有超前作用,对于具有容量滞后的控制通道,引入微分参与控制,在微分项设置得当的情况下,对于提高系统的动态性能指标,有着显著效果。

因此,对于控制通道的时间常数或容量滞后较大的场合,为了提高系统的稳定性,减小动态偏差等可选用比例微分控制规律。

如:

加热型温度控制、成分控制。

需要说明一点,对于那些纯滞后较大的区域里,微分项是无能为力,而在测量信号有噪声或周期性振动的系统,则也不宜采用微分控制。

如:

大窑玻璃液位的控制。

4、比例积分微分控制规律(PID):

PID控制规律是一种较理想的控制规律,它在比例的基础上引入积分,可以消除余差,再加入微分作用,又能提高系统的稳定性。

它适用于控制通道时间常数或容量滞后较大、控制要求较高的场合。

如温度控制、成分控制等。

鉴于D规律的作用,我们还必须了解时间滞后的概念,时间滞后包括容量滞后与纯滞后。

其中容量滞后通常又包括:

测量滞后和传送滞后。

测量滞后是检测元件在检测时需要建立一种平衡,如热电偶、热电阻、压力等响应较慢产生的一种滞后。

而传送滞后则是在传感器、变送器、执行机构等设备产生的一种控制滞后。

纯滞后是相对与测量滞后的,在工业上,大多的纯滞后是由于物料传输所致,如:

大窑玻璃液位,在投料机动作到核子液位仪检测需要很长的一段时间。

总之,控制规律的选用要根据过程特性和工艺要求来选取,决不是说PID控制规律在任何情况下都具有较好的控制性能,不分场合都采用是不明智的。

如果这样做,只会给其它工作增加复杂性,并给参数整定带来困难。

当采用PID控制器还达不到工艺要求,则需要考虑其它的控制方案。

如串级控制、前馈控制、大滞后控制等。

5,公式:

8,pid算法流程图:

对于学控制的人都知道,Matlab在全数字仿真领域占尽了风头,不但功能强大,其simulink工具使用图形的方式既直观又方便,但是它在实际的数字控制中却无能为力,因为它运算速度太慢,做一次for循环所用的时间是c语言的好多倍,而VC++在效率方面很有优势,因为他使用可以是c语言,它和windows操作系统很接近,许多API函数都是以c语言的形式提供的,因为它与操作系统很好的结合,所以其效率和实时性都比较高。

下面主要讲下PID控制的数字算法的伪代码

constdoubledTimeInterval=0.001;//采样间隔为0.001秒

//PID参数,实际使用时根据系统调试

doubleKp=2.5;

doubleKi=5.0;

doubleKd=1.2;

voidCALLBACKPIDControl(UINTuID,UINTuMsg,DWORDdwUser,DWORDdw1,DWORDdw2)

{

staticdoubledValue[3];

staticdoubledOldError;

doubledOutSignal;//PID控制的输出

doubledError;

doubledDemandSignal=GetDemandSignal();//输入值

doubledFeedbackSignal=GetFeedbackSignal();//反馈值

dError=dDemandSignal–dFeedbackSignal;//偏差

dValue[0]=Kp*dError;比例

dValue[1]=dValue[1]+Ki*dError*dTimeInterval;//积分

dValue[2]=Kd*(dError-dOldError)/dTimeInterval;//微分

dOutSignal=dValue[0]+dValue[1]+dValue[2];//输出值

 

SendControlSignal(dOutSignal);//这个函数是把控制量输出到D/A,然后传送到以后的环节进行控制

}

以上的代码是一个定时中断处理函数,每1ms执行一次控制,因此必须要有一个定时器来控制上面所写的代码的执行,定时间隔不同,dTimeInterval也不同。

对于windows系统,可以用timeSetEvent()函数来注册一个定时中断处理函数,最小的定时间隔可以达到1ms,在一般的控制系统中能满足要求。

4.PID试验结果

采样周期:

Ts=0.002;设定值:

Setpoint=100;

1)当只有P控制器时,响应速度快,波形会出现一定的振荡。

Kp=0.8;//比例增益

Ti=0.0;//积分时间

Td=0.0;//微分时间

2)适当调节积分时间Ti后波形如下:

Kp=6;//比例增益

Ti=0.001;//积分时间

Td=0.0;//微分时间

增加了积分调节后波形变的平滑了

3)最后增加微分调节,以提高动态性能。

Kp=30;//比例增益

Ti=0.0005;//积分时间

Td=0.004;//微分时间

由以上分析知,经过PID综合调节后达到稳定的时间提前了,响应速度快,静态误差变小了,抗干扰能力大大增强。

 

《面向对象的VisualC++程序设计》

课程设计报告

 

学号:

姓名:

专业年级:

河南大学物理与电子学院

测控技术与仪器教研室

 

PID控制器的面向对象方法实现

1.面向对象的程序设计方法

面对对象编程(Object-orientedProgramming,OOP)

C++是由AT&TBell(贝尔)实验室的BjarneStroustrup博士及其同事与20世纪80年代在C语言的基础上开发成功的。

C++保留了C语言原有的所有优点,增加了面向对象的机制。

出发点是为了能更直接的描述客观世界中存在的事物(即对象),以及它们之间的关系。

面对对象编程语言将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特性)和行为(动态特性)形成类。

通过类的继承与多态可以很方便的实现代码的重用。

抽象

抽象是忽略与与所处理问题无关或非本质的信息,以充分的注意与当前目标有关的特征。

封装性,类,对象:

将数据及对数据的操作方法放在一起,作为一个相互依存、不可分割的整体——对象。

对同类型的对象抽象出其共性,形成类。

继承性

基类,派生类:

继承是一种连接类的层次模型,提供了一种表述共性的方法。

新的类可以从现有的类中派生,派生的类可以继承现有类的属性和操作,也可以修改和增加新的操作。

多态性

重载,动态联编:

类中具有相似功能的不同函数使用同一个名字来使用,允许不同类的对象对同一个消息作出不同的响应。

允许派生类的的对象当作基类的来使用。

多态性提高了代码的重用性和可扩展性。

2.PID基本原理

PID代表Proportonal-Integral-Differential,即比例积分微分,指的是一项流行的线性控制策略。

P控制器实质上是一个可调增益的放大器。

其控制器的输出与输入误差信号成比例关系。

I控制器可以提高系统的性别(无差度),I应发生在系统频率特性的低频段以提高系统的稳态性能。

D能反应输入信号的变化趋势,产生早期的修正信号,增加系统的阻尼程度,从而改善系统的稳定性。

应使D发生在频率特性的中频段,以改善系统的动态性能。

3.C++实现PID的程序设计

PID控制器程序流程图:

 

 

4.PID试验结果

采样周期:

Ts=0.002;设定值:

Setpoint=100;

1)当只有P控制器时,响应速度快,波形会出现一定的振荡。

Kp=0.8;//比例增益

Ti=0.0;//积分时间

Td=0.0;//微分时间

2)适当调节积分时间Ti后波形如下:

Kp=6;//比例增益

Ti=0.001;//积分时间

Td=0.0;//微分时间

增加了积分调节后波形变的平滑了

3)最后增加微分调节,以提高动态性能。

Kp=30;//比例增益

Ti=0.0005;//积分时间

Td=0.004;//微分时间

由以上分析知,经过PID综合调节后达到稳定的时间提前了,响应速度快,静态误差变小了,抗干扰能力大大增强。

5.总结

通过这次课程设计让我巩固了所学的知识,学以致用,对所学的课程有了更深一步的认识。

不仅练习了本门课程C++高级语言,而且理解了PID控制的原理和掌握了其是如何实现的。

参考文献

[1]StanleyB.Lippman,JoseeLajoie,BarbaraE.Moo著.李诗贤等译.C++Primer中文版,第四版.北京:

人民邮电出版社,2006.3.

[2]张福祥,面对对象程序设计基础.北京:

高等教育出版社,2004.12.

[3]胡寿松,自动控制原理简明教程。

北京:

科学出版社,2008

[4]XX文库,

3&weight=4&lastweight=3&count=5

附录

PID部分源代码:

//_________头文件pid.h实现类的定义_________________________

classPID

{

public:

doubleTs,Kp,Ti,Td,Setpoint;

doubleek,ek_1,ek_2;

PID();

PID(doublets,doublekp,doubleti,doubletd,doublesetpoint);

doublepid_out(doublepid_in);

~PID(){}//析构函数

};

/****************************************************************

主文件pid.cpp主要实现:

*对PID类的成员变量初始化(构造函数重载)

*PID:

:

PID()

*PID:

:

PID(doublets,doublekp,doubleti,doubletd,doublesetpoint)

*成员函数函数doublePID:

:

pid_out(doublepid_in)//增量式PID

****************************************************************/

#include"pid.h"

//-------无参的---------------------------------------

PID:

:

PID()

{

Ts=0.002;//采样周期

Kp=30;//比例增益

Ti=0.0005;//积分时间

Td=0.004;//微分时间

Setpoint=100;//设置位置

ek=0;//当前偏差

ek_1=0;//上次偏差

ek_2=0;//前次偏差

}

//-------有参的----------------------------------------------

PID:

:

PID(doublets,doublekp,doubleti,doubletd,doublesetpoint)

{

Ts=ts;

Kp=kp;

Ti=ti;

Td=td;

Setpoint=setpoint;

ek=0;

ek_1=0;

ek_2=0;

}

//-----------PID主成员函数---------------------------------

doublePID:

:

pid_out(doublepid_in)//增量式PID

{

ek=Setpoint-pid_in;//当前偏差=设定的值-PID输入值(反馈值)

doublePidOut;//PID调节后输出

PidOut=Kp*(Ts/Ti+Td/Ts)*ek-Kp*(1+2*Td/Ts)*ek_1+Kp*Td/Ts*ek_2;

//PID主要

ek_2=ek_1;//更新:

把“现在”的赋值给“上次”

ek_1=ek;//更新:

把“上次”的赋值给“前次”

return(double)PidOut;//返回PID调节后值,进行输出

}

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

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1