Regulator PID z uwzględnieniem siły ciążenia.
Aby uwzględnić siłę grawitacji należało dodać odpowiedni moment obciążający silnik. Obciążenie wymusiło użycie przekładni, o przełożeniu i=2, między silnikiem a bębnem windy.
Regulator PID nie jest odpowiedni do generowania stałego sygnału potrzebnego do utrzymania windy w niezmiennej pozycji.
Możliwym rozwiązaniem tego problemu byłoby zastosowanie kompensacji równej napięciu potrzebnemu do utrzymania zadanego ciężaru. Taki układ będzie regulował położenie widny poprawnie jedynie dla wcześniej ustalonego obciążenia.
Wartość kompensacji:
$$U_{k} = \frac{m_{o}*g*R*r}{k_{m}*i}$$
Po usunięciu dodatkowego ciężaru układ podniesie windę o kilka centymetrów - nie utrzyma zadanego położenia.
Regulator PID nie nadaje się do sterowania pozycją układów o zmiennym obciążeniu.
Regulator deadbeat z uwzględnieniem siły ciążenia.
Regulator deadbeat wymusił zwiększenie przełożenia przekładni do i=3. Bez dodatkowego obciążenia położenie widny było ustalane bardzo dokładnie.
Dodatkowy ciężar spowodował zwiększenie mocy oraz niewielki uchyb statyczny, około 1.5cm. Tak samo jak w regulatorze PID, zastosowanie kompensacji zniwelowałoby ten błąd. Jednak różnica 1.5cm jest w przypadku windy dopuszczalna.
Regulator czasooptymalny w obu przypadkach regulował położenie windy w teki sam sposób jak regulator deadbeat.
Regulatory deadbeat i czasooptymalny znacznie lepiej nadają się do sterowania położeniem windy niż regulator PID.
Obliczanie transmitancji:
Ge=tf(1,[L R]);
Gm=tf(1,[J B]);
Go=tf(k,[m B k]);
G1=parallel(-Go,1);
G2=series(G1,tf(r*k*r*(1/i),[1 0]));
G3=feedback(Gm*(1/i),G2);
G4=series(Ge,G3);
G5=series(G4,km);
G6=feedback(G5,ke*i);
G7=series(G6,Go);
G8=series(G7,tf(r,[1 0]));
G8d=c2d(G8,.1)
[num den]=tfdata(G8d);
num=cell2mat(num);
den=cell2mat(den);
% -------###- deadbeat -###-------
q0=1/((num(2))+(num(3))+(num(4))+(num(5))+(num(6))+(num(7))+(num(8)));
q1=den(2)*q0;
q2=den(3)*q0;
q3=den(4)*q0;
q4=den(5)*q0;
q5=den(6)*q0;
q6=den(7)*q0;
q7=den(8)*q0;
p1=num(2)*q0;
p2=num(3)*q0;
p3=num(4)*q0;
p4=num(5)*q0;
p5=num(6)*q0;
p6=num(7)*q0;
p7=num(8)*q0;
num_deadbeat=[q0 q1 q2 q3 q4 q5 q6 q7];
den_deadbeat=[1 -p1 -p2 -p3 -p4 -p5 -p6 -p7];
% -----##- czasooptymalny -##-----
Lo1=(num(2))+(num(3))+(num(4))+(num(5))+(num(6))+(num(7))+(num(8));
num_czasooptymalny=den;
den_czasooptymalny=[Lo1 -num(2) -num(3) -num(4) -num(5) -num(6) -num(7) -num(8)];