گزارشکار آزمایشگاه کنترل
به نام خدا
آزمایش شماره 1 ————————————–توابع مثلثاتی
آزمایش شماره 2 —————————— پاسخ پله
آزمایش شماره 3 ——————– رسم مکان هندسی رشه ها
آزمایش شماره 4 ——————- پاسخ پله(داخل آزمایشگاه)
آزمایش شماره 5——————— بررسی پایداری به کمک مکان هندسی رشه ها
آزمایش شماره 6 —————————کنترل کننده های PID
آزمایش شماره 7 —————————- طراحی کنترلر controler
MATLAB
step impulse grid on pole poly
plot legend input pzmap linspace
series tf(‘s’) function zero logspace
roots break run zpk size
length mod parallel solve ones
rlocus feed back
for hold on
معرفی چنددستور ——————————————— پیش گفتار
. می توانیم خروجی مربوط به آن رابه شکل زیر ببینمCommand WIindowبا تایپ دستورات زیر در
: پیش گفتار
<<sin(30)
ans =
-0.9880
>> sind(30)
ans =
0.5000
>> a=5
a =
5
>> a==5
ans =
1
>> a==6
ans =
0
سینوس برحسب رادیان
سینوس برحسب درجه
رابرابریک عددقرارمیدهیمa
بااین دستورمی پرسیم که آیااین متغیربرابر بااین عدداست اگربرابر بودجواب1میدهد وگرنه0میدهد
>> syms x
>> a=[1 2 3];
>> length(a)
ans =
3
>> zeros(5,2)
ans =
0 0
0 0
0 0
0 0
0 0
>> ones(2,9)
ans =
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
>> eye(2,2)
ans =
1 0
0 1
Matlab درxتعریف مقدار
a تعریف بردار(ماتریس سطری)
این دستورتعدادسطرهاوستونهای ماتریس رابررسی میکندوهرکدام که بیشترباشدرامینویسد
این دستوریک ماتریس باتعدادسطروستون داده شده راایجادمی کندکه تمام درایه های آن صفراست
این دستوریک ماتریس باتعدادسطروستون داده شده راایجادمی کندکه تمام درایه های آن یک است
این دستوریک ماتریس قطری باتعدادسطروستون داده شده راایجادمی کند
>> a=1:2:3;
<<a=1:100;
>> size(a)
ans =
1 100
>> a=linspace(1,12,5)
a =
1.00 3.75 6.50 9.25 12.00
>> a=logspace(1,2,3)
a =
10.00 31.62 100.00
که درایه های آن اعدادبین1و3با گام2می باشدa (تعریف بردار(ماتریس سطری
که درایه های آن اعدادبین1و100با گام1می باشدa (تعریف بردار(ماتریس سطری
رامیدهدaتعدادسطرهاوستونهای ماتریس
این دستور5عددبین1و12میدهدکه فاصله آنهابرابراست
این دستور3عددبین1و2میدهدکه فاصله لگاریتمی آنهابرابراست
>> c=solve('a*x^2+b*x+c','c')
c =
-a*x^2-b*x
>> roots([ a b c]); solve(‘a*x^2+b*x+c')
>> poly([-6 -6])
ans =
1 12 36
معادله درجه دوم راحل کنیمa,b,cبااین دستورات میتوانیم به ازای هر
دراین دستوراگرریشه هارابدهیم ضرایب معادله رابه مامیدهد
حل کنیمcبااین دستورمیتوانیم معادله درجه دوم رابرحسب حل کنیم
>> roots([ a b c d]); solve(‘a*x^3+b*x^2+c*x+d')
معادله درجه سوم راحل کنیمa,b,c,dبااین دستورات میتوانیم به ازای هر
<<s=tf('s')
Transfer function:
s
>> g=(s+3)*(s-6)*(s^2+2*s+7)/(s+5)
Transfer function:
s^4 – s^3 – 17 s^2 – 57 s – 126
——————————-
s + 5
>> pzmap(g)
sبردن تابع تبدیل به حوزه
نوشتن تابع تبدیل
نشان دادن صفرها وقطبها
>> zero(g)
ans =
6.0000
-3.0000
-1.0000 + 2.4495i
-1.0000 – 2.4495i
>> zpk(g)
Zero/pole/gain:
(s-6) (s+3) (s^2 + 2s + 7)
—————————
(s+5)
>> pole(g)
ans =
-5
صفرهای تابع تبدیل رانشان می دهد
صفرها وقطبهاوبهره تابع تبدیل راجدا میکند
قطبهای تابع تبدیل رانشان می دهد
>> g=1/(s+3);
>> feedback(g, -1)
Transfer function:
1
—–
s + 2
ففیدبک مثبت
>> feedback(g,1)
Transfer function:
1
—–
s + 4
فیدبک منفی
<<feedback(1,g)
Transfer function:
s + 3
—–
s + 4
فیدبک منفی
>> feedback(-1,g)
Transfer function:
-s – 3
——
s + 2
فیدبک مثبت
>> g1=1/(s+3);
>> g2=1/(s+4);
>> feedback(g1,g2); feedback(g1,g2,-1)
Transfer function:
s + 4
————–
s^2 + 7 s + 13
g2
>> feedback(g1,g2,+1)
Transfer function:
s + 4
————–
s^2 + 7 s + 11
g1
g2
+
>> parallel(g1,g2)
Transfer function:
2 s + 7
————–
s^2 + 7 s + 12
>> series(g1,g2)
Transfer function:
1
————–
s^2 + 7 s + 12
دوتابع تبدیل راباهم جمع می کند
دوتابع تبدیل را درهم ضرب میکند
g1
g1
g2
g3
g4
>> g3=1/(s+3);
>> g4=1/(s+4);
>> G1=series(g1,g2);
>> G2=parallel(g3,g4);
>> G=feedback(G1,G2)
Transfer function:
s^2 + 7 s + 12
———————————–
s^4 + 14 s^3 + 73 s^2 + 170 s + 151
آزما یش یک:
.دراین آزمایش می خواهیم ازطریق بسط سری تیلوربرای بدست اوردن توابع مثلثاتی برنامه بنویسیم
به عنوان مثال بسط سری تیلوربرای سینوس به این صورت میباشد.
Sin(x)=x-x^3+x^5-x^7+…
3! 5! 7!
(برحسب رادیان)راخواهدداد. Sin(x)میباشد که مابایدآن راوارد کنیم وبرنامه به ما xورودی برنامه ما
قسمت اوّل:
برنامه مربوط به قسمت اوّل
clc
close all
clear all
x=.5;
s=0;
d=1;
if mod(i,2)==1
s=s+d*x^i/factorial(i);
d=-d:
end
end
sin=s
راکاملا پاک کرده وودرهربار اجرافقط خروجی برنامه را نشان میدهدcommand window پنجره
های مربوط به آنهارامیبندد figureتمام برنامه هاو
فقط برنامه مارااجرامی کند
ورودی
sinمحاسبه سری تیلور
خروجی
clc
clear all
close all
x=input('insert the num.less than 2>>');
if x<2
k=input('for cal.sin of arg.insert"1"&for cos insert "2">>');
if k==1
s=0;
d=1;
for i=1:7
if mod(i,2)==1
s=s+d*x^i/factorial(i);
d=-d;
end
end
sin=s
end
if k==2
s=0;
d=1;
for i=1:7
if mod(i,2)==1
s=s+d*(pi/2-x)^i/factorial(i);
d=-d;
end
end
cos=s
end
else
disp('undifine num.tag again>>')
run ali
end
برنامه مربوط به قسمت دوم
مربوط به آن رابرحسب رادیان حساب کنیم cosیا sinدراین قسمت می خواهیم به ازای هرورودی
یک ورودی کمتراز2واردمی کنیم
کمتراز2 بوداین قسمت برنامه را اجرا میکندxاگر
(2)راحساب کنندcos (1) یا sinانتخاب می کنیم که برنامه
sinمحاسبه
cosمحاسبه
اگرورودی بیشتراز2بودبایدورودی رادوباره واردکنیم
clc
clear all
close all
x=input('insert the num>>');
tic
s=0;
d=1;
for i=1:7
if mod(i,2)==1
s=s+d*(x*pi/180)^i/factorial(i);
d=-d;
end
end
sin=s
s=0;
d=1;
for i=1:7
if mod(i,2)==1
s=s+d*(pi/2-x*pi/180)^i/factorial(i);
d=-d;
end
end
cos=s
tan=sin/cos
cot=tan^-1
sec=cos^-1
csc=sin^-1
sinh=.5*(exp(x)-exp(-x))
cosh=.5*(exp(-x)-exp(x))
tanh=sinh/cosh
sech=cosh^-1
csch=sinh^-1
toc
برنامه مربوط به قسمت سوم
دراین قسمت می خواهیم به ازای هرورودی کلیه توابع مثلثاتی رابرحسب درجه حساب کنیم
شروع محاسبه زمان برنامه
اتمام محاسبه زمان برنامه
نباشد.(OVER SHOOTرا طوری پیدا کنید تا پاسخ پله سیستم دارای فرا جهش( K1)
برای سیستم مقابل مواردزیررابررسی کنید
2آزمایش شماره
K (2 را طوری بیابید تا که شروط زیر برقرارباشد:
Mp<5% Ts<3
(3 خطای حالت دائمی سیستم را برای مقادیر مختلف K بدست آورید:
(4 مشخصات حوزه زمان سیستم را برای مقادیر مختلف Kبررسی کنید:
تمرین1
باشدO.Sراطوری تعیین کنیدکه 5%=K
فراجهش(over shoot)
مقادیرحداکثری که سیستم درپاسخ به ورودی پله کسب میکند.
Mp
Tp
Ts
nΠ
wd
wd=wn√1-ξ^2
wn^2
s^2+2ξwn+wn^2
Cp-css
css
Tp=
G(s)=
wn
s^2+2ξwn+wn^2
o.s=
*100%
ξ > 1
ξ=1
0<ξ<1
ξ=0
-1<ξ<0
ξ<-1
Wn^2
S^2+2ξwns+wn^2
G(s)= تابع تبدیل درجه2
G(s)=
k
S^2+s+k
2ξwn=1
Wn=√k
1
2√k
0≤k≤0.25
1
2√k
≥1
ξ=
نباشد.(OVER SHOOTرا طوری پیدا کنید تا پاسخ پله سیستم دارای فرا جهش( K1)
زمان نشست(setting time)
زمانی که طول میکشدکه پاسخ پاسخ سیستم به ورودی پله وارد باندتلورانس شده وازآن خارج نشود.
Ts= 2%
4
ξwn
Ts= 5%
4
ξwn
G(s)=
k
S^2+s+k
2ξwn=1
TS=8 sec
ξwn=0.5
.سیستم راتغییردهیم برای تغییرسیستم بایدتغیرات کلی درسیستم ایجادکنیمTsنمی توانیمkزمان نشست به بهره سیستم ارتباطی نداردباتغییر
o.s=100e^-£/(1-£^2)^0.5
می خواهیم پاسخ سیستم در 5% مقدار نهایی باشد بنابراین :
o.s=5% £=0.7 £wn=1 wn=√k k=1/ξ^2=0.5
جواب تمرین1
c(S)=Y(S)/R(S)=K/S^2+S+K
e(∞)=lim(1-c(S))=1-c(0)=1-K/K=0
Ess=e(∞)=0 برای ورودی پله
خطای حالت ماندگارEss))
منظورازخطا اختلاف بین ورودی وخروجی می باشد.
Ess
زمان صعود(Rise time)
زمانی که پاسخ سیستم به ورودی پله از5% تا 90% مقدارنهایی برسد.
مشخصات حوزه زمان سیستم را برای مقادیر مختلف Kبررسی کنید:
clc
close all
clear all
for k=.6:.1:1.2
g=tf([k],[1 1 k]);
step(g)
hold on
legend('k=.6','k=.7','k=.8','k=.9','k=1','k=1.1','k=1.2');
end
K=0.6 tr=2.54,overshoot=7.03%
K=0.7 tr=2.22,overshoot=9.62%
K=0.8 tr=1.98,overshoot=12%
K=0.9 tr=1.79,overshoot=14%
K=1 tr=1.62,overshoot=16.3%
بررسی نمودار ها نشان می دهد که با افزایش k فراجهش افزایش می یابد و سرعت سیستم کاهش می یابد.
K=1.1
tr=1.53,overshoot=18.2%
K=1.2
tr=1.43,overshoot=19%
تابع تبدیلی بامعادله صورت ومخرج روبرو
رسم پاسخ پله
رسم می کندfigure تمام منحنی هاراروی یک
همنحنی رابایک رنگ رسم می کند
بدست آوردنtoolbox)) پاسخ پله
Y(s)=wn^2/s(s^2+2ξwns+wn^2)
Y(t)=1-(e (-ξ*wn*t)/(√(1-ξ^2)))*sin(2*√(1-ξ^2)*t+cos^-1(ξ));
K=4
2ξwn=1 ξ=0.25
wn=2
عکس معکوس لاپلاس
Y(t)=1-(e (-0.5*t)/(√(1-0.25^2)))*sin(2*√(1-0.25^2)*t+cos^-1(0.25));
Clc
close all
clear all
format bank تادورقم اعشارنمایش میدهد
figure(1)
g=tf([4],[1 1 4]);
step(g)
t=0:.1:12;
for i=1:length(t)
y(i)=1-((exp(-.5*t(i))/.96)*sin(1.93*t(i)+1.32));
end
figure(2)
plot(t,y)
xlabel('Time(sec)');
ylabel('Amplitude');
hold on
a=[1 1];
b=[0 12];
plot(b,a,'–k')
[m,n]=max(y);
o.s=(m-1)*100;
Tp=t(n);
Ess=y(length(y))-1;
for i=1:length(y)
if y(i)>.1
break;
end
end
t1=t(i);
for i=1:length(y)
if y(i)>.9
break;
end
end
t2=t(i);
Tr=t2-t1;
for i=length(y):-1:1
if y(i)<.98
break;
end
end
Ts=t(i);
j=1;
for i=17:length(y)
x(j)=y(i);
j=j+1;
end
u.s=min(x);
F=[o.s Tp Ess Tr u.s Ts];
disp(' o.s(%)|Tp(sec)|Ess|Tr(sec)|u.s(%)|Ts(sec)')
fprintf('%9.2f|%1.2f|%1.2f|%1.2f|%1.2f|%1.2fn',F) رسم جدول
o.s(%)|Tp(sec)|Ess|Tr(sec)|u.s(%)|Ts(sec)
44.65|1.60|0.00|0.60|0.80|7.00
3آزمایش شماره
مکان هندسی ریشه هاو روث هروتیس
روث هروتیس
g(s)=1/(s+1)(s+3)(s+4)
Y(s)/R(s)=(K/ (s+1)(s+3)(s+4))/(1+(K/ (s+1)(s+3)(s+4)))
Y(s)/R(s)=K/ ((s+1)(s+3)(s+4)+K)
Y(s)=K/(s^3+8s^2+19s+12+K)*R(s)
s^3+8s^2+19s+12+K معادله مشخصه
S^3 1 19
S^2 8 12+K
S^1 140-K/8 0
S^0 12+K
140-K≥0 درنقاط 12-و140 نوسانی می باشد
K<140
,
K>-12
برای پایداری
مکمکان هندسی
clc
close all
clear all
for k=0:400
N=roots([1 8 19 12+k]);
R=real(N);
I=imag(N);
plot(R,I,'g*','markersize',2)
hold on
end
رسم مکان هندسی بااستفاده ازریشه یابی و toolbox
clc
clear all
close all
figure(1)
for k=1:400
N=roots([1 12 (41+k) (30+5*k) (6*k)]);
R=real(N);
I=imag(N);
figure(1)
plot(R,I,'g*','markersize',2)
hold on
end
figure(2)
s=tf('s');
g=((s+2)*(s+3))/(s*(s+1)*(s+5)*(s+6))
rlocus(g)
figure(3)
g=(-(s+2)*(s+3))/(s*(s+1)*(s+5)*(s+6))
rlocus(g) دستوررسم مکان هندسی
K>0
K<0
راتاچقدرمیتوان افزایش دادتاسیستم پایداربماندa
P=1/(s+1)(s+3)(s+4)
1+a(num/den)=0
1+kg(s)=0
rlocus(g(s))
1+p(s+a)=0
1+(s+a)/(s+1)(s+3)(s+4)
(s+a)+(s+1)(s+3)(s+4)=0
S^3+8s^2+20s+12+a=0
1+a(1/S^3+8s^2+20s+12)
clc
close all
clear all
s=tf('s')
g=1/(s^3+8*s^2+20*s+12);
rlocus(g)
S=148پایداردرS=148تاS=0در
نوسانی از148به بالا ناپایدار
1+b(num/den)=0
1+(1/(s+a)(s+1)(s+3)(s+4))
clc
close all
clear all
s=tf('s')
g=tf([1 8 19 12],[1 8 19 12 1])
rlocus(g)
G(s)= 1/(s+1)(s+2)
Gc(s)=Kc [1+1/Tis+Tds]
کنترل کننده PID کنترل کننده ای قدیمی و کلاسیک می باشد که در حدود 90% کنترل کننده های صنعتی را شامل می شود. این کنترل کننده دارای سه ضریب بهره می باشد Td ,Ti, Kc که هدف از این آزمایش تاثیری است که این سه ضریب بهره بر سیستم اعمال خواهند کرد.
افزایش تدریجی kc
آزمایش الف
clc
clear all
close all
s=tf('s');
td=.5;ti=.5;
k=[.5 1 2 5 10 15 20];
for i=1:length(k)
Gc=k(i)*(1+td*s+1/(s*ti));
P=1/((s+1)*(s+2));
g=series(Gc,P);
G=feedback(g,1);
step(G)
hold on
legend('k=.5','k=1','k=2','k=5','k=10','k=15','k=20');
end
آزمایش ب
clc
clear all
close all
s=tf('s');
k=1;td=.5;
ti=[.5 1 2 5 10 15 20];
for i=1:length(ti)
Gc=k*(1+td*s+(1/(s*ti(i))));
P=1/((s+1)*(s+2));
g=series(Gc,P);
G=feedback(g,1);
step(G)
hold on
legend('ti=.5','ti=1','ti=2','ti=5','ti=10','ti=15','ti=20');
end
افزایش تدریجی Ti
آزمایش ج
افزایش تدریجی Td
clc
clear all
close all
s=tf('s');
k=1;ti=.5;
td=[.5 1 2 5 10 15 20];
for i=1:length(td)
Gc=k*(1+td(i)*s+1/(s*ti));
P=1/((s+1)*(s+2));
g=series(Gc,P);
G=feedback(g,1);
step(G)
hold on
legend('td=.5','td=1','td=2','td=5','td=10','td=15','td=20');
end
M
θ
X
F
CONTROLERکنترلر
Θ خروجی=
m,I
:جرم ارابهM
جرم میله باگوی سرآن:m
اصطکاک ارابه با زمین:b
فاصله مرکزثقل:L
لختی وتنبلی میله(تمایل به حالت قبلی):I
موقعیت ارابه:X
:زاویه ای که پاندول باخط عمودی داردθ
θ
mg
L
N
P
X
I,m
I
θ
˚
I
θ
˚
˚
˚
˚
F
r=0
e(s)
clc
close all
M = .5;
m = 0.2;
b = 0.1;i = 0.006;
g = 9.8;
l = 0.3;
s=tf('s');
q = (M+m)*(i+m*l^2)-(m*l)^2;
openloop=(m*l/q)*s/(s^3+(b*(i+m*l^2)/q)*s^2-((M+m)*m*g*l/q)*s-(b*m*g*l/q));
kd = 25;
k = 100;
ki = 1;
pid=(kd*s^2+k*s+ki)/s;
closeloop=feedback(openloop,pid);
impulse(closeloop,'y*',2)
clc
close all
s=tf('s');
kd = 20;
kp = 100;
ki = 1;
p=s/(s*(s+.5));
g=(kd*s^2+kp*s+ki)/s;
G=series(p,g);
y=feedback(G,1);
step(y,'g')
طراحی کنترلر