PID算法Matlab仿真程序和C程序_第1页
PID算法Matlab仿真程序和C程序_第2页
PID算法Matlab仿真程序和C程序_第3页
PID算法Matlab仿真程序和C程序_第4页
PID算法Matlab仿真程序和C程序_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

PID算法Matlab仿真程序和C程序PID算法Matlab仿真程序和C程序PID算法Matlab仿真程序和C程序资料仅供参考文件编号:2022年4月PID算法Matlab仿真程序和C程序版本号:A修改号:1页次:1.0审核:批准:发布日期:增量式PID控制算法Matlab仿真程序设一被控对象G(s)=50/^2+7s),用增量式PID控制算法编写仿真程序(输入分别为单位阶跃、正弦信号,采样时间为1ms,控制器输出限幅:[-5,5],仿真曲线包括系统输出及误差曲线,并加上注释、图例)。程序如下clearall;closeall;ts=;sys=tf(50,[,7,0]);dsys=c2d(sys,ts,'z');[num,den]=tfdata(dsys,'v');u_1=;u_2=;y_1=;y_2=;x=[0,0,0]';error_1=0;error_2=0;fork=1:1:1000time(k)=k*ts;S=2;ifS==1kp=10;ki=;kd=15;rin(k)=1;%StepSignalelseifS==2kp=10;ki=;kd=15;%SineSignalrin(k)=*sin(2*pi*k*ts);enddu(k)=kp*x(1)+kd*x(2)+ki*x(3);%PIDControlleru(k)=u_1+du(k);%Restrictingtheoutputofcontrollerifu(k)>=5u(k)=5;endifu(k)<=-5u(k)=-5;end%Linearmodelyout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;error(k)=rin(k)-yout(k);%Returnofparametersu_2=u_1;u_1=u(k);y_2=y_1;y_1=yout(k);x(1)=error(k)-error_1;%CalculatingPx(2)=error(k)-2*error_1+error_2;%CalculatingDx(3)=error(k);%CalculatingIerror_2=error_1;error_1=error(k);endfigure(1);plot(time,rin,'b',time,yout,'r');xlabel('time(s)'),ylabel('rin,yout');figure(2);plot(time,error,'r')xlabel('time(s)');ylabel('error');微分先行PID算法Matlab仿真程序%PIDControlerwithdifferentialinadvanceclearall;closeall;ts=20;sys=tf([1],[60,1],'inputdelay',80);dsys=c2d(sys,ts,'zoh');[num,den]=tfdata(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;error_1=0;error_2=0;ei=0;fork=1:1:400time(k)=k*ts;%Linearmodelyout(k)=-den(2)*y_1+num(2)*u_5;kp=;kd=14;ki=;rin(k)=*sign(sin*2*pi*k*ts));error(k)=rin(k)-yout(k);ei=ei+error(k)*ts;gama=;Td=kd/kp;Ti=;c1=gama*Td/(gama*Td+ts);c2=(Td+ts)/(gama*Td+ts);c3=Td/(gama*Td+ts);M=1;ifM==1%PIDControlwithdifferentialinadvance ud(k)=c1*ud_1+c2*yout(k)-c3*y_1; u(k)=kp*error(k)+ud(k)+ki*ei;elseifM==2%SimplePIDControl u(k)=kp*error(k)+kd*(error(k)-error_1)/ts+ki*ei;endifu(k)>=110u(k)=110;endifu(k)<=-110u(k)=-110;end%Updateparametersu_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);y_3=y_2;y_2=y_1;y_1=yout(k);error_2=error_1;error_1=error(k);endfigure(1);plot(time,rin,'r',time,yout,'b');xlabel('time(s)');ylabel('rin,yout');figure(2);plot(time,u,'r');xlabel('time(s)');ylabel('u');不完全微分PID算法Matlab仿真程序%PIDControlerwithPartialdifferentialclearall;closeall;ts=20;sys=tf([1],[60,1],'inputdelay',80);dsys=c2d(sys,ts,'zoh');[num,den]=tfdata(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;error_1=0;ei=0;fork=1:1:100time(k)=k*ts;rin(k)=;%Linearmodelyout(k)=-den(2)*y_1+num(2)*u_5;error(k)=rin(k)-yout(k);%PIDControllerwithpartlydifferentialei=ei+error(k)*ts;kc=;ki=;TD=140;kd=kc*TD/ts;Tf=180;Q=tf([1],[Tf,1]);%LowFreqSignalFilterM=2;ifM==1%UsingPIDwithPartialdifferential加在简单PID后的不完全微分 alfa=Tf/(ts+Tf); u(k)=alfa*u_1+(1-alfa)*(kc*error(k)+kd*(error(k)-error_1)+ki*ei);u_1=u(k);elseifM==2%UsingPIDwithPartialdifferential只加在微分环节上的不完全微分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);elseifM==3%UsingSimplePID简单的PID微分 u(k)=kc*error(k)+kd*(error(k)-error_1)+ki*ei;end%Restrictingtheoutputofcontrollerifu(k)>=10u(k)=10;endifu(k)<=-10u(k)=-10;endu_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);y_3=y_2;y_2=y_1;y_1=yout(k);error_1=error(k);endfigure(1);plot(time,rin,'b',time,yout,'r');xlabel('time(s)');ylabel('rin,yout');figure(2);plot(time,u,'r');xlabel('time(s)');ylabel('u');figure(3);plot(time,rin-yout,'r');xlabel('time(s)');ylabel('error');figure(4);bode(Q,'r');dcgain(Q);C语言PID演示程序#include<>#include<>typedefstructPID{doubleCommand;SetPoint=SetPoint-Verror;//与设定值比较,得到误差值tempi=PIDCal(&vPID,Error;+=tempi;//Value与Num[2]为共同体,共同体名laserLASERH=[0];LASERL=[1];}}/////////////////////////////////////////////////////////////////////////Title:PID参数初始化//Description:Proportion="0"//Integral=0//LastError=0//Input:PID的P、I控制常数和之前的误差量(PID*pp)//Return://////////////////////////////////////////////////////////////////////voidPIDInit(PID*pp)//PID参数初始化,都置0{ memset(pp,0,sizeof(PID));//memset()的函数,它可以一字节一字节地把整个数组设置为一个指定的值。//memset()函数在头文件中声明,它把数组的起始地址作为其第一个参数,//第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。//其函数原型为:void*memset(void*,int,unsigned);//头文件<>}/////////////////////////////////////////////////////////////////////////Title:增量式PID算法程序//Description:给出一个误差增量//Input:PID的P、I控制常数和之前的误差量(PID*pp)&当前误差量(ThisError)//Return:误差增量templ//////////////////////////////////////////////////////////////////////intPIDCal(PID*pp,intThisError){//增量式PID算法(需要控制的不是控制量的绝对值,而是控制量的增量)intpError,dError,iError;longtempl; pError=ThisError-pp->LastError;iError=ThisError;

温馨提示

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

评论

0/150

提交评论