PID算法Matlab仿真程序和C程序_第1页
PID算法Matlab仿真程序和C程序_第2页
PID算法Matlab仿真程序和C程序_第3页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、time(k)=k*ts;end增量式PID控制算法Matlab仿真程序设一被控对象 Gs=50/(0.125<2+7s), 用増量式PID控初算法编写防真程序 输人分别为单位阶跌、正菽信号, 呆样时间为1ms,控制器输出限幅: -5,5,仿真曲S0I8系貌输岀及锲差 曲线,并加上注释、图例。程序如下 clear all;close all;ts=O.OO1;sys=tf(50,0.125,7, 0); dsys=c2d(sys,ts,'z');num,den=tfdata(dsys,V); u_1=0.0;u_2=0.0;y_1=0.0;y_2=0.0;x=O,O,OJ

2、,;error_1=0;error_2=0;fork=1:1:1000S=2;if S=1kp=10;ki=0.1;kd=15;rin(k)=1;%Step Signalelseif S=2kp=10;ki=0.1;kd=15;%SineSignalrin(k)=0.5*sin(2*pi*k*ts);enddu(k)=kp*x(1)+kd*x (2)+ki*x;%PID Controlleru(k)=u_1 +du(k);%Restricting the output of controllerif u(k)>=5u(k)=5;endif u(k)<=-5u(k)=-5;%Line

3、ar modelyout(k)=-den(2)*yj-den(3)*y_2+num(2)*u_1+num(3)*u_2;error(k)=rin(k)-yout(k);%Return of parametersu_2=u_1;u_1=u(k);y_2=yj;y_1=yout(k);x(1 )=error(k)-error_1;%Calculating Px =error(k)-2*erroM +error_2; %C alculating Dx(3)=error(k); %Calculating Ierror_2=error_1;errorj=error(k);endfigure(1);plo

4、t(time,rin;b,time,yout,r,);xlabel(,time(s),),ylabel(,rin,yout,);figure(2);plotftimerror/r')xlabel(,time(s),);ylabel(,error1);微分先行PID算法Matlab仿真程序%PID Controler with differential in advanceclear all;close all;ts=20;sys=tf(1,60,1 ,'i 叩 utdelay',80);dsys 二 c2d(sys,ts,'zoh');num,den=t

5、fdata(dsys,V);u_1 =0;u_2=0;u_3=0;u_4=0;u_5=0; ud_1=0;y_1=0;y_2=0;y_3=0;errorj=0;error_2=0;ei=0;for k=1:1:400%Linear modeltime(k)=k*ts;yout(k)=-den(2)*y_1+num(2)*u_5;kp=0.36;kd=14;ki=0.0021;rin(k)=1.0*sign(sin(0.00025*2*pi*k*ts)1error(k)=rin(k)-yout(k);ei=ei+error(k)*ts;gama=0.50;Td=kd/kp;Ti=0.5;c1=g

6、ama*Td/(gama*Td+ts);c2=(Td+ts)/(gama*Td+ts);c3=Td/(gama*Td+ts);M=1;if M=1%PID Control withdifferential in advanceud(k)=c1 *udj +c2*yout(k)-c3*yj; u(k)=kp*error(k)+ud(k)+ki*ei;elseif M=2 %Simple PID Control u(k)=kp*error(k)+kd*(error(k)-error_1)/ts+ki*ei;endif u(k)>=110u(k)=110;endif u(k)<=-110

7、u(k)=-110;end% Update parametersu_5=ij_4;u_4=u_3;ii_3=u_2;ij_2=u_1;u_1=u(k);y_3=y_2;y_2=y_1 ;y_1 =yout(k);error_2=errorj;errorj=error(k);endfigure(1);plot(time,rin,'retime,yout/b');xlabel(,time(s),);ylabel('rin,yout,);error J =0;ei=0;Filterfigure(2);plot(time,u,T);xlabel('time(s)J;yl

8、abel(U);不完全傲分PID算法Matlab仿真程序%PID Controler with Partial differentialclear all;close all;ts=20;sys=tf(1 ,60,1 ,'inputdelay',80);dsys=c2d(sys,ts,'zohj;num,den=tfdata(dsys,V);u_1 =0;u_2=0;u_3=0;u_4=0;u_5=0;ud_1=0;yJ=0;y_2=0;y_3=0;fork=1:1:100 time(k)=k*ts;rin(k)=1.0;%Linear modelyout(k)=-de

9、n(2)*y_1+num(2)*u_5;error(k)=rin(k)-yout(k);%PID Controller with partly differential ei=ei+error(k)*ts;kc=0.30;ki=0.0055;TD=140;kd=kc*TD/ts;Tf=180;Q=tf(1,Tf,1);% Low Freq SignalM=2;if M=1 %Using PID with Partial differential M在简单PID后的不完全 分alfa=Tf/(ts+Tf);u(k)=alfa*u_1+(1-alfa)*(kc*error(k)+kd*(error

10、(k)-error_1 )+ki*ei);u_1=u(k);elseif M=2%Using PID withPartial differential只加在fi!分坏节上的 不完全撤分alfa=Tf/(ts+Tf);ud(k)=kd*(1-alfa)*(error(k)-error_1)+alfa*ud_1;u(k)=kc*error(k)+ud(k)+ki*ei;ud_1=ud(k);elseif M=3 %Using Simple PID 简单的PID徹分u(k)=kc*error(k)+kd*(error(k)-error_1)+ki*ei;end%Restricting the out

11、put of controller if u(k)>=10u(k)=10;endif u(k)<=-10u(k)=-10;endu_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u1=u(k);y_3=y_2;y_2=y_1 ;y_1 =yout(k);error_1=error(k);endfigured);plot(time,in,b,time,yout,);xlabel('time(s)');ylabel('rin,yoiit');figure(2);plotftime.u/r');xlabel('time(s)&

12、#39;);ylabel(');figure(3);plot(time,nn-yout,'r');xlabel(,time(s),);ylabel(,error1);figure ;bode(Q,'r');dcgain(Q);C培言PID演爪程序include <string.h>#include<stdio.h> typedef struct PIDdouble mand;/输入指令double Proportion; 比例系数double Integral; 枳分系数double Derivative; /做分系数double

13、 preErr; 前一拍锲差double sumErr; j吴差累枳JPID;double PIDCale(PID *p,double feedback)double dErr,Err;Err=p->mand-feedback; 当前锲差p->sumErr+=Err; 误差累加dErr=Err-p->preErr; /锲差撤分p->preErr=Err;return(p->Proportion*Err 比例顶+p->Derivative*dErr /ffi 分项+p->lntegral*p->sumErr); 枳分 ®Ivoid PID

14、Init(PID *p)memset(p,0,sizeof(PID); 初始化typedef struct motor!double lastY;double preY;double lastU;double prell;Imotor;void motorlnit(motor *m)memset(m,0,sizeof(motor);double y=0;double motorCal(motor *m?double u)doubley=1.9753*m->lastY-0.9753*m->preY+0 .00003284*u+0.00006568*m->lastU+0.0000

15、3284*m->preU;/Z 系貌m->preY=m->lastY;m->lastY=y;m->prell=m->lastU;m->lastll=u;return y;void main()FILE *fp=fopen("data.txt",w+");PIDsPID;motor mmotor;int k=0;double u;PIDInit(&sPID);sPID.Proportion=2;sPID.Derivative=1;sPID.Integral=O.OOOO1;sPID.mand=10;motorlnit

16、(&m_moto);while(k<=1000) fprintf(fp/%d 设定值=%f 被控量=%f偏差=%彳控制 量=%fn,k,sPID.mand,y1sPID.mand-y.u);u=PIDCale(&sPID,y);y=motorCal(&m_motor,u);k+;)printf(,%,y);fclose(fp);int LastError;/臼ror-1前一拍误差int PreError;/Error-2前两拍误差増量戏PID控制C语言代码 PID;増量式PID控胃C语言代码main()/PID vPID;/定义PID参数构造休定义构造变量名/PI

17、DInit ( &vPID );/Initialize Structuretypedef struct PID /vPID.Proportion = 10;构造体定义/Set PID Coefficientsint SetPoint/vPID.Integral = 10;设定值/ Set PID Integralint Proportion;/vPID.Derivative = 10;/Proportion比例系数Set PID Derivativeint Integral;/vPID. SetPoint =/Integral枳分系数根据实际悄况设定int Derivative;/De

18、rivative撤分系数while(1)/Return:Verror=Measure();得到AD的输出值Error =vPID. SetPoint- Verror;与设定值比fl到误差值tempi=PIDCal(&vPID, Error; laser.Value+=tempi;/ Value与Num2为共同体,共同It名 laserLASERH=laser.NumO;LASERL=laser.Num1;lllllllllllllllllllllllllllllllllllllllllllllllllllllllllll/Title:PID 参数初始(t/Description: Pr

19、oportion"/Integrals/LastError=0/Input: PID的P、I控制常数和之前的lllllllllllllllllllllllllllllllllllllllllllllllllllllllllll/void PIDInit (PID *pp)/PID参数初始化,都置0Imemset ( pp,0,sizeof(PID);/memsetO的函数,它可以一字节一字 节地把整个数组设置为-个摘定的 值。/ memsetO函数在mem.h头文件中声 明,它把数级的起始地址作为其第一 个参数,第二个参数是设置数组每个字节的 值,第三个参数是数组的长度(字节数, 不是元素个数)。其函数原塑为:void *memset(void*, int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论