C++实现PID控制算法.doc

C++实现PID控制算法.doc

ID:49765732

大小:43.50 KB

页数:4页

时间:2020-03-04

C++实现PID控制算法.doc_第1页
C++实现PID控制算法.doc_第2页
C++实现PID控制算法.doc_第3页
C++实现PID控制算法.doc_第4页
资源描述:

《C++实现PID控制算法.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C++实现PID控制算法

2、C++/VC/MFC/PID算法2008-06-1018:50第一步:控制系统的结构仿真  我们要用C++实现对这个单输入单输出系统的PID控制算法,就需要先进行结构仿真,系统结构和对象的数学模型如上图所示,我们取定参数:K=2、T1=1、T2=2.5,tao=0.6(tao代表上面那个延时参数)。  系统性能指标要求:超调<=10%,调节时间Ts<=10秒,绘制出系统的单位阶跃响应。  控制器采用PID控制器,控制器参数包括:kp、ki、kd、T(采样时间)。  对被控对象采用Z变换进行离散化,离散化后的离散化对象为:    yout(k)=-den

3、(2)yout(k-1)-den(3)yout(k-2)+num(2)u(k-1)+num(3)u(k-2)          tao=0    yout(k)=-den(2)yout(k-1)-den(3)yout(k-2)+num(2)u(k-1-n)+num(3)u(k-2-n)          tao/T=n,n>1为整数den、num参数的获取参看“C++实现PID控制算法理论分析

4、C++/VC/MFC/PID算法”2、参数声明在算法中要用到很多参数,为了方便我们定义一个结构体。typedefstructtagPid{    doubletao;    //系统纯延

5、时参数,一般为采样时间的整数倍    doublets;    //采样时间    intn;    //n=tao/ts    doublerin,yout,u;    //系统输入、系统输出、PID控制器输出    doublekp,ki,kd;    //PID控制器参数    doubleerror_1,error_2;    //,前1、2次的误差,在增量PID算法中需要error_2    doubleerror,perror,ierror,derror;    //用于计算PID输出u的参数    doubleden_1,den_2,den_3;    //Z传函

6、分母的系数    doublenum_1,num_2,num_3;    //Z传函的分子系数    doubleyout_[2];//系统输出过去时刻的值    CArrayu_;    //控制器过去时刻的输出值,就是上面公式中的u(k-2-n)等    intsize_Yout;//Yout的大小,算法循环次数,每次的输出值计入数组Yout,用来绘制输出曲线    CArrayYout;//输出数据数组    doublemaxYout,minYout;//输出值的最大值和最小值}Pid;定义控制对象参数:dou

7、blem_t1,m_t2,m_k,m_tao;//控制对象参数3、初始化参数voidCICDoc::PidInit(Pid*pid){m_t1=1;m_t2=2.5;m_k=2;pid->ts=0.1;pid->tao=0.6;pid->n=(int)(pid->tao/pid->ts+0.5);pid->rin=1;pid->yout=0.0;pid->u=0.0;pid->kp=0.70;pid->ki=0.15;pid->kd=0.90;pid->error_1=0.0;pid->error_2=0.0;pid->error=0.0;pid->perror=0.0;pid

8、->ierror=0.0;pid->derror=0.0;doublez1,z2,b,c;if(m_t1==m_t2){  z1=exp(-(pid->ts/m_t1));     //e(-T/T1)z2=z1   pid->num_1=0;   pid->num_2=m_k*(1-z1-pid->ts*z1/m_t1);   pid->num_3=m_k*(z1*z1-z1+pid->ts*z1/m_t1);   pid->den_1=1;   pid->den_2=-2*z1;   pid->den_3=z1*z1;}else{   z1=exp(-(pid->ts/m_

9、t1));     //e(-T/T1)   z2=exp(-(pid->ts/m_t2));     //e(-T/T2)   b=m_t1/(m_t2-m_t1);   c=m_t2/(m_t1-m_t2);   pid->num_1=0;   pid->num_2=m_k*(1+b*z1+c*z2);   pid->num_3=m_k*(z1*z2+b*z2+c*z1);   pid->den_1=1;   pid->den_2=-(z1+z2);   pid->den_3=z1*z2

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。