Controlmatlabsec
Controlmatlabsec
ﻣﻘﺪﻣﺔ:
ﺇﻥ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻳﺒﲔ ﻋﺪﻡ ﺇﻣﻜﺎﻧﻴﺔ ﺍﻟﻔﺼﻞ ﺑﲔ ﺍﻟﺮﻳﺎﺿﻴﺎﺕ ﻭﺍﳍﻨﺪﺳﺔ ﺣﻴﺚ ﻳﺘﻢ ﲤﺜﻴﻞ ﺍﻟﻨﻈﺎﻡ ﺍﻟﻌﻤﻠﻲ
ﲟﻌﺎﺩﻻﺕ ﺭﻳﺎﺿﻴﺔ ﻟﻠﺘﺤﻜﻢ ﺑﻪ.ﻭﺍﳌﺎﺗﻼﺏ ﰲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﺳﻴﻘﺪﻡ ﻟﻨﺎ ﻛﻌﺎﺩﺗﻪ ﺗﻌﻠﻴﻤﺎﺕ ﻭﺃﻭﺍﻣﺮ ﺟﺎﻫﺰﺓ
ﺗﻌﻴﻨﻨﺎ ﻛﻄﻼﺏ ﻭﻣﻬﻨﺪﺳﲔ ﻋﻠﻰ ﲤﺜﻴﻞ ﻫﺬﻩ ﺍﻟﻨﻈﻢ ﺑﻮﻗﺖ ﻗﺼﲑ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺠﻬﺪ ﺍﻟﻴﺪﻭﻱ ﻭﺧﺎﻟﻴﺎ ﻣﻦ
ﺍﻷﺧﻄﺎﺀ ﻭﺍﻟﺘﻌﻘﻴﺪ ﺍﻟﱵ ﺗﻌﺘﺮﻳﻨﺎ ﳓﻦ ﺍﻟﺒﺸﺮ ﻓﻬﻮ ﳚﻌﻞ ﺍﻷﻣﻮﺭ ﺍﳌﻬﻤﺔ ﻟﻚ ﻛﺘﻤﺜﻴﻞ ﻧﻈﺎﻡ ﻭﺍﻟﺘﺤﻜﻢ ﺑﻪ ﺃﻣﺎ
ﺣﺴﺎﺑﺎﺕ ﺍﻟﻨﺘﺎﺋﺞ ﻓﲑﳛﻚ ﻣﻨﻬﺎ.
ﻟﺼﻨﻊ ﻓﻀﺎﺀ ﺍﳊﺎﻟﺔ ﻧﺄﺧﺬ ﺍﳌﺜﺎﻝ ﺍﻟﺘﺎﱄ:
ﻟﻨﻔﺮﺽ ﺃﻧﻪ ﻟﺪﻱ ﺁﻟﺔ ﳍﺎ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ:
R= 2.0 % Ohms
L= 0.5 % Henrys
Km = .015 % torque constant
Kb = .015 % emf constant
Kf = 0.2 % Nms
ﺍﳌﺮﻛﺰ ﺍﳍﻨﺪﺳﻲ ﺍﻟﺘﺨﺼﺼﻲ
031 2461729 ﻡ.ﻣﻮﻓﻖ ﴰﺎ
00963 966 344 685 ﺩﻭﺭﺍﺕ ﻛﻤﺒﻴﻮﺗﺮ ﲣﺼﺼﻴﺔ
ﻓﻴﻜﻮﻥ ﺍﻟﻨﺎﺗﺞ:
=a
x1 x2
x1 -4 -0.03
x2 0.75 -10
=b
u1
x1 2
x2 0
=c
x1 x2
y1 0 1
=d
u1
y1 0
Continuous-time model.
ﻻﺣﻆ ﺃﻥ ﺍﻟﺮﻣﻮﺯ ﺍﻟﱵ ﻇﻬﺮﺕ u1ﻭ x1ﻭ ... y1ﺍﻟﱵ ﺗﻌﱪ ﻋﻦ ﺍﻟﺪﺧﻞ ﻭﺍﳋﺮﺝ ﳝﻜﻨﻚ ﺗﻐﻴﲑﻫﺎ
ﺇﺫﺍ ﺍﺗﺒﻌﻨﺎ ﺍﳋﻄﻮﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ:
;}'states = {'beta' 'yaw' 'roll' 'phi
;}'inputs = {'rudder' 'aileron
;}'outputs = {'yaw rate' 'bank angle
ﻫﻨﺎ ﰎ ﺗﺴﻤﻴﺘﻬﺎ ﺑﺄﲰﺎﺀ ﺟﺪﻳﺪﺓ.ﺍﻵﻥ ﻧﻘﻮﻡ ﺑﺈﺩﺧﺎﻝ ﻫﺬﻩ ﺍﻷﲰﺎﺀ ﻋﻠﻰ ﺍﻟﻨﻈﺎﻡ:
A = [-0.0558 -0.9968 0.0802 0.0415
0.5980 -0.1150 -0.0318 0
-3.0500 0.3880 -0.4650 0
0 0.0805 1.0000 ;]0
B = [ 0.0073 0
ﺍﳌﺮﻛﺰ ﺍﳍﻨﺪﺳﻲ ﺍﻟﺘﺨﺼﺼﻲ
031 2461729 ﻡ.ﻣﻮﻓﻖ ﴰﺎ
00963 966 344 685 ﺩﻭﺭﺍﺕ ﻛﻤﺒﻴﻮﺗﺮ ﲣﺼﺼﻴﺔ
-0.4750 0.0077
0.1530 0.1430
0 ;]0
C = [0 1 0 0
0 0 0 ;]1
D = [0 0
0 ;]0
…sys_mimo = ss(A,B,C,D,'statename',states,'inputname',inputs,
;)'outputname',outputs
ﻭﺗﺴﺘﻄﻴﻊ ﺇﻧﺸﺎﺀ ﺗﺎﺑﻊ ﺍﻻﻧﺘﻘﺎﻝ ﺇﻥ ﻛﻨﺖ ﺗﻌﺮﻓﻪ ﻣﺒﺎﺷﺮﺓ ﺑﺈﺩﺧﺎﻝ ﺃﻣﺜﺎ ﻛﺜﲑ ﺍﳊﺪﻭﺩ ﺑﺎﻟﺒﺴﻂ ﻭﺃﻣﺜﺎﻟﻪ
ﺑﺎﳌﻘﺎﻡ:
)]>> sys_tf = tf([2 3.6],[5 1 4
Transfer function:
2 s + 3.6
-------------
5 s^2 + s + 4
s^3 + 4 s + 2
:ﺭﲟﺎ ﻳﻜﻮﻥ ﻟﺪﻳﻚ ﻧﻈﺎﻡ ﻣﺘﻘﻄﻊ ﻓﻴﻪ ﻓﻮﺍﺻﻞ ﺯﻣﻨﻴﺔ ﻓﻤﺎﻋﻠﻴﻚ ﺇﻻ ﺃﻥ ﺗﻨﻈﺮ ﻟﻸﺳﻔﻞ ﻣﻦ ﻫﺬﺍ ﺍﻟﺴﻄﺮ
>> sys_disc = tf(2, [5 8], .01)
Transfer function:
2
-------
5z+8
Sampling time: 0.01
:ﺇﻥ ﺍﳌﺜﺎﻝ ﺍﻷﺧﲑ ﰲ ﺇﻧﺸﺎﺀ ﻓﺮﺍﻍ ﺣﺎﻟﺔ ﺳﻴﺘﻢ ﺇﻧﺸﺎﺀ ﺗﺎﺑﻊ ﺍﻻﻧﺘﻘﺎﻝ ﻟﻪ
tf(sys_mimo)
Transfer function from input "rudder" to output...
-0.475 s^3 - 0.2479 s^2 - 0.1187 s - 0.05633
yaw rate: ---------------------------------------------------
s^4 + 0.6358 s^3 + 0.9389 s^2 + 0.5116 s + 0.003674
0.1148 s^2 - 0.2004 s - 1.373
bank angle: ---------------------------------------------------
s^4 + 0.6358 s^3 + 0.9389 s^2 + 0.5116 s + 0.003674
Transfer function from input "aileron" to output...
0.0077 s^3 - 0.0005372 s^2 + 0.008688 s + 0.004523
yaw rate: ---------------------------------------------------
s^4 + 0.6358 s^3 + 0.9389 s^2 + 0.5116 s + 0.003674
0.1436 s^2 + 0.02737 s + 0.1104
bank angle: ---------------------------------------------------
s^4 + 0.6358 s^3 + 0.9389 s^2 + 0.5116 s + 0.003674
:ﰲ ﺣﺎﻝ ﻭﺟﻮﺩ ﻧﻈﺎﻡ ﺑﺪﺧﻞ ﻭﺣﻴﺪ ﻭﺧﺮﺟﲔ ﻓﺈﻥ ﺗﺎﺑﻊ ﺍﻧﺘﻘﺎﻝ ﻟﻜﻞ ﺧﺮﺝ ﺳﻴﻨﺸﺊ
>> h11 = tf([1 -1],[1 1]);
h21 = tf([1 2],[1 4 5]);
ﺍﳌﺮﻛﺰ ﺍﳍﻨﺪﺳﻲ ﺍﻟﺘﺨﺼﺼﻲ
031 2461729 ﻡ.ﻣﻮﻓﻖ ﴰﺎ
00963 966 344 685 ﺩﻭﺭﺍﺕ ﻛﻤﺒﻴﻮﺗﺮ ﲣﺼﺼﻴﺔ
ﻧﺴﺘﻄﻴﻊ ﺗﻌﺮﻳﻒ ﻋﺪﺓ ﺃﻧﻈﻤﺔ ﺧﻄﻴﺔ ﰲ ﻣﺪﺧﻞ ﻭﺍﺣﺪ ﺃﻭ ﻣﺘﻐﲑ ﻭﺍﺣﺪ ﻭﻳﺘﻢ ﺫﻟﻚ ﰲ ﺣﺎﻝ ﻣﺮﺍﻗﺒﺘﻚ
ﻟﻠﻤﺜﺎﻝ ﺍﻟﺘﺎﱄ:
; R= 2.0
; L= 0.5
; Km = .015
; Kb = .015
; Kf = 0.2
; J= 0.02
;]B = [1/L; 0
;]C = [0 1
;]D = [0
;]K = [0.1 0.15 0.2
;]A1 = [-R/L -K(1)/L; K(1)/J -Kf/J
;]A2 = [-R/L -K(2)/L; K(2)/J -Kf/J
;]A3 = [-R/L -K(3)/L; K(3)/J -Kf/J
ﻻﺣﻆ ﺃﻧﻪ ﰎ ﺗﻌﺮﻳﻒ ﺛﻼﺛﺔ ﻣﺼﻔﻮﻓﺎﺕ Aﺍﻵﻥ ﺳﻴﺘﻢ ﺇﻧﺸﺎﺀ ﻓﺮﺍﻍ ﺍﳊﺎﻟﺔ ﻟﻸﻧﻈﻤﺔ ﺍﻟﺜﻼﺛﺔ ﻣﻌﹶﺎ:
;)sys_lti(:,:,1)= ss(A1,B,C,D
;)sys_lti(:,:,2)= ss(A2,B,C,D
;)sys_lti(:,:,3)= ss(A3,B,C,D
y1 0
Model sys_lti(:,:,2,1)
======================
a=
x1 x2
x1 -4 -0.3
x2 7.5 -10
b=
u1
x1 2
x2 0
c=
x1 x2
y1 0 1
d=
u1
y1 0
Model sys_lti(:,:,3,1)
======================
a=
x1 x2
x1 -4 -0.4
x2 10 -10
b=
u1
x1 2
x2 0
c=
x1 x2
y1 0 1
d=
u1
y1 0
3x1 array of continuous-time state-space models.
ﻣﻦ ﺍﳌﻌﻠﻮﻡ ﻟﺪﻳﻚ ﺭﲟﺎ ﺃﻧﻪ ﻋﻨﺪ ﻭﺟﻮﺩ ﻧﻈﺎﻣﲔ ﻋﻠﻰ ﺍﻟﺘﻔﺮﻉ ﻓﻴﺘﻢ ﲨﻊ ﺗﺎﺑﻌﻲ ﺍﻻﻧﺘﻘﺎﻝ ﻭﻋﻠﻰ
ﺍﻟﺘﺴﻠﺴﻞ ﻳﺘﻢ ﺍﻟﻀﺮﺏ.
ﺗﺴﺘﻄﻴﻊ ﺑﻮﺍﺳﻄﺔ ﺃﻣﺮ seriesﺃﻥ ﲢﺼﻞ ﻋﻠﻰ ﻧﺎﺗﺞ ﺭﺑﻂ ﻧﻈﺎﻣﲔ ﺗﺴﻠﺴﻠﻴﹶﺎ:
))]>> series(tf(1,[5 9 3.2]),tf([1 6],[4 5 3
Transfer function:
s+6
---------------------------------------
20 s^4 + 61 s^3 + 72.8 s^2 + 43 s + 9.6
ﺇﺫﺍ ﻛﺎﻥ ﻟﺪﻱ ﺗﻐﺬﻳﺔ ﻋﻜﺴﻴﺔ ﻭﻫﻲ ﲣﺘﻠﻒ ﺑﻄﺒﻴﻌﺔ ﺍﳊﺎﻝ ﻋﻦ ﺍﻟﻮﺻﻞ ﺍﻟﺘﻔﺮﻋﻲ ﻓﻠﺪﻳﻨﺎ ﺃﻭﻣﺮ ﻣﺴﺘﻌﺪ
ﻟﻠﻘﻴﺎﻡ ﺑﺎﳌﻬﻤﺔ:
))]>> sys_f = feedback(tf(1,[1 0]), tf([1 1],[1 2
Transfer function:
s+2
-------------
s^2 + 3 s + 1
ﻭﳐﻄﻂ ﻧﻴﻜﻮﻳﺴﺖ:
)>> nyquist(H
= )H1(:,:,3
0.0005 - 0.0100i
ﺑـ) e(tواج ـ ﺳﻴﺘﻢ ﺑﺈﺫﻥ ﺍﷲ ﺗﻌﺎﱃ ﲤﺜﻴﻞ ﻫﺬﻩ ﺍﻟﺪﺍﺭﺓ ﺑﺘﺎﺑﻊ ﺍﻧﺘﻘﺎﻝ ﺣﻴﺚ ﺃﻥ ﺍﻟﺪﺧﻞ ﻳﺘﻤﺜﻞ
). v(t
ﺃﻭﺟﺪﻧﺎ ﺗﺎﺑﻊ ﺍﻻﻧﺘﻘﺎﻝ.ﺍﻵﻥ ﺃﺭﻳﺪ ﺃﻥ ﺃﺣﺼﻞ ﻋﻠﻰ ﺧﺮﺝ ﻫﺬﻩ ﺍﻟﺪﺍﺭﺓ ﻋﻨﺪ ﺇﺷﺎﺭﺍﺕ ﳐﺘﻠﻔﺔ:
ﺇﺷﺎﺭﺓ ﺟﻴﺒﻴﺔ:ﻣﻄﺎﳍﺎ ١ﻭﺗﺮﺩﺩﻫﺎ ٠.٥ﻫﺮﺗﺰ
;>> t=0:0.01:10
>> f=0.5;%Hz
>> w=2*pi*f;%rad/sec
;)>> y=sin(w*t
)>> lsim(sys1,y,t
ﰲ ﺣﺎﻝ ﻛﺎﻥ ﺍﻟﺪﺧﻞ ﺇﺷﺎﺭﺓ ﻣﺮﺑﻌﺔ:ﳍﺎ ﻧﻔﺲ ﺍﻟﺘﺮﺩﺩ ﻭﺍﳌﻄﺎﻝ ﻟﻠﺠﻴﺒﻴﺔ ﺍﻟﺴﺎﺑﻘﺔ:
ﺍﳌﺮﻛﺰ ﺍﳍﻨﺪﺳﻲ ﺍﻟﺘﺨﺼﺼﻲ
031 2461729 ﻡ.ﻣﻮﻓﻖ ﴰﺎ
00963 966 344 685 ﺩﻭﺭﺍﺕ ﻛﻤﺒﻴﻮﺗﺮ ﲣﺼﺼﻴﺔ
;>> t=0:0.01:10
>> f=0.5;%Hz
>> w=2*pi*f;%rad/sec
;)>> y=square(w*t
)>> lsim(sys1,y,t
ﺇﻥ ﺗﻌﻠﻴﻤﺔ pulstranﺑﺎﺭﻣﺘﺮﺍﺎ ﳐﺘﻠﻔﺔ ﻋﻤﺎ ﺳﺒﻖ ﻹﺎ ﺗﻘﻮﻡ ﺑﺘﻜﺮﺍﺭ ﺇﺷﺎﺭﺓ ﻣﺎ ﺑﻌﺪﺩ ﻳﺴﺎﻭﻱ ﻋﺪﺩ
ﻋﻨﺎﺻﺮ dﺿﻤﻦ ﳎﺎﻝ tﻭﺑﻌﺪ ﺫﻟﻚ ﲣﺘﺎﺭ ﺍﺳﻢ ﺍﻹﺷﺎﺭﺓ ﺍﻟﱵ ﺗﺮﻳﺪ ﺗﻜﺮﺍﺭﻫﺎ ﻭﻟﺪﻳﻚ ﺛﻼﺙ ﺧﻴﺎﺭﺍﺕ
ﻓﻘﻂ ﻭﻫﻲ. gauspuls, rectpuls, tripuls:
ﺍﳌﺮﻛﺰ ﺍﳍﻨﺪﺳﻲ ﺍﻟﺘﺨﺼﺼﻲ
031 2461729 ﻡ.ﻣﻮﻓﻖ ﴰﺎ
00963 966 344 685 ﺩﻭﺭﺍﺕ ﻛﻤﺒﻴﻮﺗﺮ ﲣﺼﺼﻴﺔ
)[u,t] = gensig(type,tau,Tf,Ts