µ¥Éñ¾­ÔªPID¿ØÖƱ¨¸æ(3)

2019-08-20 18:43

Î塢˼¿¼Ìâ

1£®µ¥Éñ¾­ÔªPID¿ØÖÆÆ÷µÄ²»×ãÊÇʲô£¿ÓëʲôÒòËØÓйأ¿

µ¥Éñ¾­ÔªPID¿ØÖÆÆ÷µÄ¿ØÖÆÐ§¹ûÒÀÀµÓÚ¿ØÖƹæÔò¡¢Ñ§Ï°ËÙÂÊÒÔ¼°ÔöÒæKµÄÑ¡

È¡¡£µ±¿ØÖƹæÔòѡȡ²»µ±Ê±²»ÄÜÈ¡µÃÀíÏëµÄ¿ØÖÆÐ§¹û£»µ±²ÎÊýÑ¡Ôñ²»µ±Ê±ÉõÖÁ»áÔì³ÉϵͳµÄ·¢É¢£¬ÕâÓ빤³ÌÈËÔ±µÄ¾­ÑéÓкܴó¹ØÏµ¡£

µ¥Éñ¾­ÔªPID¿ØÖÆÆ÷Ó봫ͳPID¿ØÖÆÆ÷Ïà±È½á¹¹¸ü¼Ó¸´ÔÓ£¬¶ÔÓÚ¼òµ¥µØ±»¿Ø¶ÔÏó´«Í³PID¿ØÖÆÆ÷±ãÄÜÈ¡µÃºÜºÃµØ¿ØÖÆÐ§¹û¡£

2£®ÔÚ´«Í³PID¿ØÖÆÆ÷Éè¼ÆµÄ»ù´¡ÉÏ»¹ÓÐʲô°ì·¨¿ÉÒԸĽø£¿

´«Í³µÄPID¿ØÖÆÆ÷¶¼Êǽ¨Á¢ÔÚ¾«È·ÍêÕûµÄÊýѧģÐ͵Ļù´¡Éϵ쬶øÊµ¼ÊÉú²ú

ÖÐÍùÍù²»Äܵõ½±»¿Ø¶ÔÏó¾«È·µÄÊýѧģÐÍ»òÕß±»¿Ø¶ÔÏó±È½Ï¸´ÔÓ£¬ÔÚÕâÖÖÇé¿öÏ¿ÉÒÔÓÃÄ£ºý¿ØÖƵķ½·¨´úÌæ´«Í³PID¿ØÖÆÆ÷½øÐпØÖÆ¡£Ä£ºý¿ØÖÆÆ÷¿ÉÒÔ¸ù¾ÝÄ£ºý¹æÔò½øÐÐÄ£ºýÍÆÀí£¬¼´Ê¹±»¿Ø¶ÔÏóµÄÐÅÏ¢²»ÊÇÊ®·ÖÍêÕû¸ù¾ÝÄ£ºý¿ØÖÆÆ÷µÄ¼ÆËã»úÖÆÒ²Äܽ«½á¹ûÍÆËã³öÀ´¡£

´ËÍ⣬»¹ÓÐÐí¶àÖÇÄÜ¿ØÖÆËã·¨ÀýÈçר¼Ò¿ØÖÆÏµÍ³¡£ËüÊÇ»ùÓÚר¼ÒµÄ֪ʶºÍ¾­ÑéµÄÖ»ÄܼÆËã»ú¿ØÖÆÏµÍ³¡£Ëü¸ü¶àµÄÔËÓÃÆô·¢Ê½µÄËã·¨£¬¶Ô±»¿Ø¶ÔÏóÄ£Ð͵ľ«È·ÐÔÒªÇó²»ÊÇÌØ±ð¸ß£¬¶ÔÓÚÓû§À´ËµÒ²¸üÒ×ÓÚÀí½â¡£

Áù¡¢³ÌÐòÇåµ¥

%Single Neural Adaptive PID Controller clear all; close all;

x=[0,0,0]';

xiteP=0.40; %ѧϰËÙÂÊ xiteI=0.35; xiteD=0.40;

%Initilizing kp,ki and kd wkp_1=1; ȨϵÊý³õÖµ wki_1=1; wkd_1=1;

% wkp_1=rand; % wki_1=rand; % wkd_1=rand;

11

error_1=0; %ǰһÅIJÉÑùֵΪÁã error_2=0; y_1=0;y_2=0;y_3=0; u_1=0;u_2=0;u_3=0;

ts=0.001; for k=1:1:1000 time(k)=k*ts;

rin(k)=stepfun(k*ts,(k-1)*ts); %ÊäÈë½×Ô¾ÐźŠif k<=150

yout(k)=0.368*y_1+0.26*y_2+0.1*u_1+0.632*u_2; %¿ØÖÆÐźŠelseif k<=300

yout(k)=0.368*y_1+0.26*y_2+0.1*u_1+0.632*u_2-0.2*stepfun((k-150)*ts,(k-151)*ts); else

yout(k)=0.368*y_1+0.26*y_2+0.1*u_1+0.632*u_2; end

error(k)=rin(k)-yout(k) ;%Îó²îÐźŠ-justing Weight Value by hebb learning algorithm M=3;

if M==1 %Î޼ලµÄHebbѧϰ¹æÔò wkp(k)=wkp_1+xiteP*u_1*x(1); wki(k)=wki_1+xiteI*u_1*x(2); wkd(k)=wkd_1+xiteD*u_1*x(3); K=0.06;

elseif M==2 %ÓмලµÄDeltaѧϰ¹æÔò wkp(k)=wkp_1+xiteP*error(k)*u_1; wki(k)=wki_1+xiteI*error(k)*u_1; wkd(k)=wkd_1+xiteD*error(k)*u_1; K=0.12;

elseif M==3 %ÓмලµÄHebbѧϰ¹æÔò wkp(k)=wkp_1+xiteP*error(k)*u_1*x(1); wki(k)=wki_1+xiteI*error(k)*u_1*x(2); wkd(k)=wkd_1+xiteD*error(k)*u_1*x(3);

K=0.12; %Éñ¾­±ÈÀýϵÊý

elseif M==4 %¸Ä½øµÄѧϰ¹æÔò

wkp(k)=wkp_1+xiteP*error(k)*u_1*x(1)*(2*error(k)-error_1); wki(k)=wki_1+xiteI*error(k)*u_1*x(2)*(2*error(k)-error_1); wkd(k)=wkd_1+xiteD*error(k)*u_1*x(3)*(2*error(k)-error_1); K=0.12; end

12

x(1)=error(k); %Èý¸ö״̬Á¿ x(2)=error(k)-error_1; x(3)=error(k)-2*error_1+error_2;

wadd(k)=abs(wkp(k))+abs(wki(k))+abs(wkd(k)); w11(k)=wkp(k)/wadd(k); w22(k)=wki(k)/wadd(k); w33(k)=wkd(k)/wadd(k); w=[w11(k),w22(k),w33(k)];

u(k)=u_1+K*w*x;

if u(k)>10 %ÏÞ·ù¿ØÖÆ u(k)=10; end

if u(k)<-10 u(k)=-10; end

error_2=error_1; error_1=error(k);

u_3=u_2;u_2=u_1;u_1=u(k); y_3=y_2;y_2=y_1;y_1=yout(k);

wkp_1=wkp(k); wkd_1=wkd(k); wki_1=wki(k); end

figure(1);

plot(time,rin,'b','LineWidth',4); hold on;

plot(time,yout,'r','LineWidth',2); xlabel('time(s)'); ylabel('rin,yout');

legend(['ÊäÈëÐźÅ'],['×·×ÙÐźÅ']); title('¸Ä½øµÄHebbѧϰ¹æÔò(k=0.06)');

figure(2);

plot(time,error,'r'); xlabel('time(s)'); ylabel('error'); legend('Îó²îÇúÏß');

title('¸Ä½øµÄHebbѧϰ¹æÔò(k=0.06)');

13

¿ØÖÆÐźŠ%

figure(3); plot(time,u,'r'); xlabel('time(s)'); ylabel('u');

legend('¿ØÖÆÊä³öÇúÏß');

title('¸Ä½øµÄHebbѧϰ¹æÔò(k=0.06)');

14


µ¥Éñ¾­ÔªPID¿ØÖƱ¨¸æ(3).doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ ÏÂÔØÊ§°Ü»òÕßÎĵµ²»ÍêÕû£¬ÇëÁªÏµ¿Í·þÈËÔ±½â¾ö£¡

ÏÂһƪ£ºxx¹ãµçÖÐÐÄ»ú·¿»·¾³¼à¿Ø·½°¸

Ïà¹ØÔĶÁ
±¾ÀàÅÅÐÐ
¡Á ×¢²á»áÔ±Ãâ·ÑÏÂÔØ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩

ÂíÉÏ×¢²á»áÔ±

×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£º QQ£º