您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 微分先行的PID控制算法
微分先行的PID控制算法实验目的通过上机实践操作,使学生能够直观理解课堂上所讲的内容。学生在计算机上结合课程教学用的Matlab语言或Simulink构建仿真模型实现微分先行的PID控制算法,培养学生的动手实践能力。实验内容用Matlab语言或Simulink构建仿真模型实现微分先行的PID控制算法题目:控制对象为170800seGt,采样时间为20s,输入信号为带有高频干扰的方波信号:)03.0sin(05.0))0005.0(()(ttsquaresigntr,执行机构输出限制在[-10,10],仿真时间为8000s;其中,0.418,kd0.006,ki0.3,kp.试采用微分先行的PID控制算法和标准PID控制算法实现后,比较两种控制算法的输入/输出、控制量。实验原理微分先行PID控制算法:kjipDDTjekkekkukyckyckucku0321*)(*)(*)()1(*)(*)1(*)(式中)()()(,*,*,**321kukrkeTTTcTTTTcTTTcDdddddd。实验程序:clearall;closeall;ts=20;M=2;ki=0.006;kd=18;kp=0.3;gama=0.4;sys=tf(1,[701],'inputdelay',80);dsys=c2d(sys,ts,'zoh');[num,den]=tfdata(dsys,'v');ud_1=0;y_1=0;e_1=0;ei=0;u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;Td=kd/kp;c1=gama*Td/(gama*Td+ts);c2=(Td+ts)/(gama*Td+ts);c3=Td/(gama*Td+ts);%微分先行算法中的参数c1,c2,c3fork=0:1:400time(k+1)=k*ts;y(k+1)=-den(2)*y_1+u_5*num(2);%输出量ud(k+1)=c1*ud_1+c2*y(k+1)-c3*y_1;%控制量ud_1=ud(k+1);r(k+1)=sign(sin(0.0005*pi*time(k+1)))+0.05*sin(0.03*pi*time(k+1));ifM==1e(k+1)=r(k+1)-ud(k+1);ei=ei+e(k+1)*ts;%积分项累加值u(k+1)=kp*e(k+1)+ki*ei;%控制量elsee(k+1)=r(k+1)-y(k+1);ei=ei+e(k+1)*ts;u(k+1)=kp*e(k+1)+ki*ei+kd*(e(k+1)-e_1)/ts;endifu(k+1)10%控制量限幅u(k+1)=10;elseifu(k+1)-10u(k+1)=-10;endendy_1=y(k+1);u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k+1);e_1=e(k+1);endholdon;ifM==1figure(1);plot(time,r,'r',time,y,'b');xlabel('时间(单位:s)');ylabel('输入/输出');legend('输入','微分先行PID输出');elsefigure(1);plot(time,r,'r',time,y,'b');xlabel('时间(单位:s)');ylabel('输入/输出');legend('输入','普通PID输出');endfigure(2);plot(time,u,'r');xlabel('时间(单位:s)');ylabel('控制量');legend('微分先行PID控制算法控制量');实验结果微分先行PID算法结果:010002000300040005000600070008000-1.5-1-0.500.511.5时间(单位:s)输入/输出输入微分先行PID输出010002000300040005000600070008000-1.5-1-0.500.511.5时间(单位:s)控制量微分先行PID控制算法控制量普通PID算法结果:010002000300040005000600070008000-1.5-1-0.500.511.5时间(单位:s)输入/输出输入普通PID输出010002000300040005000600070008000-2-1.5-1-0.500.511.52时间(单位:s)控制量微分先行PID控制算法控制量结果及分析通过比较两种PID算法的输出可发现,当输入r(t)具有高频干扰信号时,采用微分先行PID算法,只对输出进行微分,可以避免给定值频繁升降引起的振荡,改善系统动态特性。
本文标题:微分先行的PID控制算法
链接地址:https://www.777doc.com/doc-5417042 .html