您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 增量式PID的MATLAB实现
第1页共10页1设某一步进电机控制系统传递函数为:系统的输入为单位阶跃信号,对步进电机进行位置控制设系统的采样时间T=1s,设计PID控制器如下:Kp=10,TI=10,TD=15试比较增量法PID和传统PID两种方法对该控制系统进行仿真分析其控制结果要求得出两种控制方法的响应曲线解:(1)根据增量式PID算法:pid(k)K[e(k)e(k1)]Ke(k)K[e(k)2e(k1)e(k2)]=--++--+-△c(1)即:ppdpiKTKT(k)K[e(k)e(k1)]e(k)[e(k)2e(k1)e(k2)]TT=--++--+-△c(2)所以可以整理得:(k)Ae(k)Be(k1)Ce(k2)=⋅+⋅-+⋅-△c(3)其中:ppdpiKTKTAKTT=++、pdpKTBK2T=+、pdKTCT=()()()ckck1ck=-+Δ(3)(2)根据()()2Yz0.01647z0.01389Czz1.571z0.5712+=-+(4)对角相乘得到:()()()()2Cz0.01647z0.01389=Yzz1.571z0.5712+-+(5)()()()()-12-12Cz0.01647z0.01389Z=Yz11.571z0.5712Z--+-+(6)()2500.1257Gsss=+PID—+ZOHe(t)c(t)y(t)x(t)第2页共10页()()()-12-12Yz11.571zCZ0.5712ZCz0.01647z0.01389Z--=-+++(7)即:()()()()()Yk11.571Ck-10.5712Ck-20.0164710.013892YkYk=-++-+-(8)因此编制程序如下:clearall;closeall;%增量式PID控制ts=0.001;%采样时间G=tf(50,[0.125,7,0])Gd=c2d(G,ts,'z');%Z变换[num,den]=tfdata(Gd,'v')c_1=0;c_2=0;y_1=0;y_2=0;e_1=0;e_2=0;kp=10;Ti=0.1;Td=0.015;ki=kp*ts/Tikd=kp*Td/tsA=kp*(1+ts/Ti+Td/ts);B=-kp*(1+2*Td/ts);C=kp*Td/ts;fork=1:1:3000t(k)=k*ts;r(k)=1;y(k)=-den(2)*y_1-den(3)*y_2+num(2)*c_1+num(3)*c_2;e(k)=r(k)-y(k);c(k)=A*e(k)+B*e_1+C*e_2;c(k)=c_1+c(k);c_2=c_1;c_1=c(k);y_2=y_1;y_1=y(k);e_2=e_1;e_1=e(k);endfigure(1);plot(t,y,'r');gridon;figure(2)设置Kp,Ki,Kd根据公式(3)根据公式(8)根据公式(3)第3页共10页plot(t,y,'r');holdon;gridon;%传统PID控制c_1=0;c_2=0;y_1=0;y_2=0;e_1=0;x=[0,0,0]';fork=1:1:3000t(k)=k*ts;r(k)=1;y(k)=-den(2)*y_1-den(3)*y_2+num(2)*c_1+num(3)*c_2;e(k)=r(k)-y(k);x(1)=e(k);x(2)=x(2)+e(k);x(3)=e(k)-e_1;c(k)=kp*x(1)+ki*x(2)+kd*x(3);c_1=c(k);c_2=c_1;y_1=y(k);y_2=y_1;e_1=e(k);endplot(t,y,'b');图1-1采用增量式PID的输出图形传统PID控制算法,其中x(2)为误差的累加。第4页共10页也可用附录函数:f(1,2)(4)与传统PID比较图1-2采用传统PID控制效果ft(1,3)图1-3增量式PID与传统PID比较f(1,3);holdon;ft(1,3)分析:如图3所示,采用增量式PID控制,超调量小,响应速度快,稳定时间短,控制效果明显优于传统PID控制。2输入为三角波和正弦波信号,再对信号进行位置跟踪,设计仿真程序,分析仿真结果第5页共10页如果PID参数不合适,调整参数(1)三角波信号输入响应如图3所示:()()()22210,1,2...222122tnntnrtntnntn-+⎧⎪==⎨-+++⎪⎩代码略,与单位跃阶类似,只需修改输入函数:T=1000;ifk=0&k0.5*Tr(k)=2*k;elser(k)=-2-2*(k-T);end得到如下图形输出:图2-1三角波输出响应f(3,1)第6页共10页图2-2三角波输入下增量式PID与传统PID对比f(3,1);holdon;ft(3,1)图2-1为三角波输入下采用增量式PID控制的系统的输入和输出对比,控制效果较好,图2-1为增量式PID与传统PID比较,明显增量式的控制效果优于传统式。(2)采用增量式PID控制的正弦信号输入响应如图2-3所示:()()sinrttp=代码略,与单位跃阶类似,只需修改输入函数:r(k)=sin(pi*t(k));图2-3采用增量式PID的正弦波响应f(2,2)第7页共10页f(2,2);holdon;ft(2,2)图2-4与传统PID比较由图2-4得正弦波输入下增量式PID控制效果明显优于传统PID控制。总结:采用增量式PID算法时,通过不同信号的输入(单位阶跃,三角波,正弦波)与其分别采用传统PID算法比较,可以很明显地看到,增量式PID具有很明显的优越性。因为算式中不需要累加误差,控制增量△c(k)的确定仅与最近k次的采样值有关,所以较容易通过加权处理而获得比较好的控制效果。第8页共10页附录:1,增量式PID算法functionf(a,M)%a选则输入信号,M为输出图形的横坐标最大值;%单位阶跃f(1,1);%正弦波f(2,2)%三角波f(3,1)ts=0.001;%采样时间G=tf(50,[0.125,7,0])Gd=c2d(G,ts,'z');%Z变换[num,den]=tfdata(Gd,'v')c_1=0;c_2=0;y_1=0;y_2=0;e_1=0;e_2=0;kp=10;Ti=0.1;Td=0.015;ki=kp*ts/Tikd=kp*Td/tsA=kp*(1+ts/Ti+Td/ts);B=-kp*(1+2*Td/ts);C=kp*Td/ts;fork=1:1:M*1000t(k)=k*ts;s=a;ifs==1r(k)=1;elseifs==2r(k)=sin(pi*t(k));elseifs==3T=1000;ifk=0&k0.5*Tr(k)=2*k;elser(k)=-2-2*(k-T);end第9页共10页endy(k)=-den(2)*y_1-den(3)*y_2+num(2)*c_1+num(3)*c_2;e(k)=r(k)-y(k);c(k)=A*e(k)+B*e_1+C*e_2;c(k)=c_1+c(k);c_2=c_1;c_1=c(k);y_2=y_1;y_1=y(k);e_2=e_1;e_1=e(k);endplot(t,y,'r',t,r,'b');gridon;2,传统PID算法functionft(a,M)%a选则输入信号,M为输出图形的横坐标最大值;%单位阶跃ft(1,4);%正弦波ft(2,2)%三角波ft(3,1)ts=0.001;%采样时间G=tf(50,[0.125,7,0])Gd=c2d(G,ts,'z');%Z变换[num,den]=tfdata(Gd,'v')c_1=0;c_2=0;y_1=0;y_2=0;e_1=0;x=[0,0,0]';kp=10;ki=0.1;kd=15;fork=1:1:1000*Mt(k)=k*ts;s=a;ifs==1r(k)=1;elseifs==2r(k)=sin(pi*t(k));elseifs==3T=1000;第10页共10页ifk=0&k0.5*Tr(k)=2*k;elser(k)=-2-2*(k-T);endendy(k)=-den(2)*y_1-den(3)*y_2+num(2)*c_1+num(3)*c_2;e(k)=r(k)-y(k);x(1)=e(k);x(2)=x(2)+e(k);x(3)=e(k)-e_1;c(k)=kp*x(1)+ki*x(2)+kd*x(3);c_1=c(k);c_2=c_1;y_1=y(k);y_2=y_1;e_1=e(k);endplot(t,y,'r',t,r,'b');gridon;
本文标题:增量式PID的MATLAB实现
链接地址:https://www.777doc.com/doc-5867474 .html