Solution 8.8.3.mtr1cx
The full MATLAB program used to nd the transfer function is:
%
%load the data
%
load mtr1stepc
t=mtr1stepc(1:500,1);;
y=mtr1stepc(1:500,2);;
plot(t,y)
print -deps sr883mtr1cxa.eps
y=y(51:500);;
t=t(51:500);;
y=y-y(1);;
y(1) = 0;;
t(1) = 0;;
plot(t,y)
print -deps sr883mtr1cxb.eps
y(180:450) = mean(y(180:450));;
y(170:179) = mean(y(170:179));;
y(160:169) = mean(y(160:169));;
y(150:159) = mean(y(150:159));;
y(140:149) = mean(y(140:149));;
y(130:139) = mean(y(130:139));;
y(120:129) = mean(y(120:129));;
y(110:119) = mean(y(110:119));;
y(100:109) = mean(y(100:109));;
%y(75:79) = mean(y(75:79));;
%y(70:74) = mean(y(70:74));;
%y(65:69) = mean(y(65:69));;
%y(60:64) = mean(y(60:64));;
%y(55:59) = mean(y(55:59));;
%y(50:54) = mean(y(50:54));;
plot(t,y)
print -deps sr883mtr1cxc.eps
%zero the summer
%
asum = 0.0;;
%
1
%Find the length of the array y(t) Note:this the step response. It has to be
%pulled into Matlab before this program is run.
%
top = size(y);;
top = top(1,1)
%
%Initialize counter.
%
k=1;;
%
%
%Find maximum value of step response.
%
K0 = max(y)
%
%
%Form function K0 - y(t). Note y(t) is the same as yu(t) in the write up.
%
ftemp = K0 - y;;
%
fsave1 = ftemp;;
%
%Reset counter
%
k=2;;
%
%Integrate K0 - y(t). and form the function y1(t).
%
while ( k <= top)
l= k-1;;
asum = asum + ( ( (ftemp(k)+ftemp(l))/2 ) *( t(k) - t(l) ) );;
t1(k) = t(k);;
f1(k) = asum;;
k=k+1;;
end
%
%Save data for plotting.
%
save time.dat t1 -ascii
2
save f1.dat f1 -ascii
save ftempa.dat ftemp -ascii
%
%SetK1 = to max(y1(t)), that is its final steady state value.
%
K1 = max(f1)
%
%
%form function: K1 - y1(t).
%
ftemp1 = K1 - f1;;
%
%Save function for later plotting
%
save ftempb.data ftemp1 -ascii
%
%reset summer
%
asum = 0.0;;
%
%Reset counter
%
k=2;;
%
%Integrate K1 - y1(t) to get y2(t) (called f2 in program)
%
while ( k <= top)
l= k-1;;
asum = asum + ( ( (ftemp1(k) + ftemp1(l) ) /2 ) *( t(k) - t(l) ) );;
f2(k) = asum;;
k=k+1;;
end
%
%SetK2 equal to maximum value of y2(t).
%
K2 = asum
%
%Save function y2(t) for later plotting.
%
save f2.data f2 -ascii
3
%
%Find coefficients and then poles of transfer function.
%
a1 = K1/K0
a2 = ( a1*K1 - K2 )/K0
cpol = [1, a1/a2 , 1/a2]
roots(cpol)
%
%Find gain of transfer function
%
Kplant = K0/a2
g=zpk([],[-1.6764 -2.3235],Kplant)
T=linspace(0,9.01,402);;
u=ones(402,1);;
[yhat,T] = lsim(g,u,T);;
load mtr1stepc
t=mtr1stepc(1:500,1);;
y=mtr1stepc(1:500,2);;
y=y(51:500);;
t=t(51:500);;
y=y-y(1);;
y(1) = 0;;
t(1) = 0;;
plot(t,y,'k-',T,yhat,'k--')
print -deps sr883mtr1cxd.eps
The rst step is to get the data into MATLAB. That is done by the MAT-
LAB statements:
load mtr1step
t=mtr1stepc(1:500,1);;
y=mtr1stepc(1:500,2);;
plot(t,y)
print -deps sr883mtr1cxa.eps
The plot of the raw date is shown in Figure1. As can be seen, the plot
does not start at t =0and the initial voltage is not zero. The MATLAB
statements
y=y(51:500);;
t=t(51:500);;
4
-1 0 1 2 3 4 5 6 7 8 9
0
1
2
3
4
5
6
Figure 1: Rawstep response data
5
0 1 2 3 4 5 6 7 8 9
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
5
Figure 2: Adjusted step response data
%y = y-y(1);;
y(1) = 0;;
t(1) = 0;;
plot(t,y)
print -deps sr883mtr1xb.eps
produce the adjusted step respone shown in Figure 2 The rest of the MAT-
LAB program is designed to do the successiveintegrations necessary to nd
the twopoles. The MATLAB statements
print -deps sr883mtr1cxb.eps
y(180:450) = mean(y(180:450));;
y(170:179) = mean(y(170:179));;
y(160:169) = mean(y(160:169));;
y(150:159) = mean(y(150:159));;
y(140:149) = mean(y(140:149));;
y(130:139) = mean(y(130:139));;
y(120:129) = mean(y(120:129));;
y(110:119) = mean(y(110:119));;
6
0 1 2 3 4 5 6 7 8 9
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
5
Figure 3: Smoth step response data
y(100:109) = mean(y(100:109));;
%y(75:79) = mean(y(75:79));;
%y(70:74) = mean(y(70:74));;
%y(65:69) = mean(y(65:69));;
%y(60:64) = mean(y(60:64));;
%y(55:59) = mean(y(55:59));;
%y(50:54) = mean(y(50:54));;
plot(t,y)
print -deps sr883mtr1cxc.eps
are a crude smoothing program designed to help the algorith converge. The
smoothed response is shown in Figure 3
For this problem the alogrithm gives a good answer, namely
G(s)=
18:5683
(s +1:676)(s+2:324)
:
This is unadjusted for the size of the input voltage, about 24 V, a shown inf
Figure 4. So we nally arriveat
G(s)=
0:7737
(s +1:676)(s+2:324)
:
7
-0.1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
0
5
10
15
20
25
Figure 4: Armature voltage applied to motor
The step response of the model is compared to the actual recorded step
response in Figure 5
The matchisprettygood.
8
0 1 2 3 4 5 6 7 8 9 10
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
5
Figure 5: Smoth step response data
9