MTE360 Automatic Control Prepared by: M.Heng, Revised by: K.
Erkorkmaz
Tutorial #1: An Introduction to Matlab/Simulink
Example #1: Plotting a trajectory vs. time
In motion control systems, a reference trajectory describes the desired motion from
position A to position B. Taking derivatives of the trajectory corresponds to getting the
velocity, acceleration, jerk, snap and so on.
1. Given Equations 1 to 4, calculate the desired trajectory, s (t ) , velocity, s(t ) , and
acceleration, s(t ) .
2. Plot the trajectory, velocity and acceleration profiles with respect to time as in
Figure 1.
3. Save the time and trajectory profile data to a text file.
A Simple Trajectory
60
displacement
L
40
[mm]
20
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7
100
F
[mm/sec]
feedrate
50
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7
500 A
acceleration
[mm/sec 2]
D
-500
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7
1 2Time [msec] 3
T1 T2 T3
Figure 1. A simple trajectory with trapezoidal velocity.
Given:
Acceleration: A = 500 mm/sec2
Deceleration: D = -500 mm/sec2
Feedrate (Velocity): F = 100 mm/sec
Travel Length: L = 50 mm
1
MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz
Sampling Period: Ts = 0.001 sec
F 2
2T 1 , 0 1 T1
1
FT1
s (t ) = + F2 , 0 < 2 T2 (1)
2
L FT3 + F3 F 32 , 0 < 3 T3
2 2T3
F
T1 = (2)
A
F
T3 = (3)
D
L T +T
T2 = 1 3 (4)
F 2
Solution: Matlab code (partially complete)
% file: tutorial01_example01.m
clear all % clears the workspace
close all % closes all figure windows
% Given:
A=500; % acceleration mm/sec^2
D=-500; % deceleration mm/sec^2
F=100; % feedrate (velocity) mm/sec
L=50; % travel length mm
Ts=0.001; % sampling period sec
T1=F/A; % from equation 2
T3=-F/D; % from equation 3
T2=L/F - (T1+T3)/2; % from equation 4
if T1<0 || T2<0 || T3<0 % kinematic compatibility conditions
disp('Error: acceleration, deceleration and travel length are not
kinematically compatible.');
else
% create row vector for time, initial time : step size : final time
tau1=0:Ts:T1;
% ... (do same for tau2 and tau3)
Continues on page 3.
2
MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz
Continued from page 2.
% preallocate arrays for speed
s1=zeros(1,length(tau1));
sd1=zeros(1,length(tau1));
sdd1=zeros(1,length(tau1));
%... (do same for s2 and s3)
% from equation 1
for index=1:length(tau1)
s1(index)=F*tau1(index)*tau1(index)/2/T1;
sd1(index)=F*tau1(index)/T1; % first derivative: velocity
sdd1(index)=A; % second derivative: acceleration
end
for index=1:length(tau2)
s2(index)=F*tau2(index) + F*T1/2;
sd2(index)=F;
sdd2(index)=0;
end
for index=1:length(tau3)
s3(index)=-F*tau3(index)*tau3(index)/2/T3 + F*tau3(index) +
L - F*T3/2;
sd3(index)=-F*tau3(index)/T3 + F;
sdd3(index)=D;
end
end
t1=tau1'; % change tau1 from a row to a column vector tau1'
t2=tau2(2:end)' + T1; % shift bounds and drop first vector element
t3=tau3(2:end)' + T1 + T2;
t = [t1;t2;t3]; % concatenation of time vector
s1=s1';
s2=s2(2:end)';
s3=s3(2:end)';
s = [s1;s2;s3]; % concatenation of displacement vector
%... (do same for sd and sdd)
figure(1); % opens a figure window
subplot(3,1,1); % subplot(rows, columns, position)
plot(t,s); % plots trajectory versus time
title('A Simple Trajectory'); % creates a title for the plot
ylabel('displacement [mm]'); % labels the y-axis
xlabel('Time [sec]') % labels the x-axis
subplot(3,1,2);
%... (do same for sd and sdd)
% save data to file
data = [t s]; % t and s should be column vectors
save ex1_data.txt -ASCII -DOUBLE data
%... (save also sd and sdd to the same file)
%-- End of File --%
3
MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz
Example #2: Simulation of a dynamic system
Given a defined set for time, t , a dynamic system can be described with a function that
receive inputs, u (t ) , and produces outputs, y (t ) .
1. Create a Simulink model with a first order system, with gain, K , and time
constant, T . Simulate a unit step input and view both the input, u (t ) , and output,
y (t ) , through a scope, as in Figure 2. Experiment with K , T , the step input and
observe how the system response, y (t ) , behaves. Save data and plot results.
Hint: In order to save your data in the Workspace as Structure with time, you need to
double click on the Scope, go to Parameters > History, and modify the data format.
2. Apply trajectory from Example 1 as the input, as in Figure 3. Save data and plot
results.
4
MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz
Figure 2: A simple first order system.
Figure 3: A simple first order system with trajectory input from Example 1.
5
MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz
Solution to Part 1
Figure 4: Scope of first order system simulink model.
Solution to Part 1: Matlab Code
% file: tutorial01_example02_q1.m
K=1; % set gain in workspace
T=1; % set time constant in workspace
open('fosystem.mdl'); % opens the model file
sim('fosystem.mdl'); % runs the simulation
% extract data from Scope Data struct
t = ScopeData.time;
u = ScopeData.signals.values(:,1);
y = ScopeData.signals.values(:,2);
% plot step input and output response
figure(2);
plot(t,u,t,y);
title('Step Input Response');
ylabel('Response, y');
xlabel('Time, t');
legend('Input','Output'); % creates a legend for the plot
% save data to file
data = [t u y];
%... (save as shown in Example 1)
%-- End of File --%
6
MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz
Solution to Part 2: Matlab Code
% file: tutorial01_example02_q1.m
S = load('ex1_data.txt'); % loads data from file to the workspace
t = S(:,1); % extract time vector
u = S(:,3); % extract velocity profile
Tend = t(end); % get total time of simulation
K = 1; % set gain in workspace
T = 0.01; % set time constant in workspace
simin = [t u]; % array format for 1-D input signal
open('fosystem_traj.mdl'); % opens the model file
sim('fosystem_traj.mdl'); % runs the simulation
time = simout.time; % if the save format of simout is "Structure with Time"
y = simout.signals.values; % output vector
% plot input and output in the same figure
figure(3);
plot(t,u,'b-'); hold on % "hold on" retains the current plot
plot(time,y,'r-.');
title('Velocity Response');
ylabel('Response [mm/sec]');
xlabel('Time [sec]');
legend('Input','Output');
% save data to file
%... (as shown in Example 1)
%-- End of File --%
7
MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz
Example #3: Design a Proportional Controller (p-controller)
A proportional controller is a simple feedback control design where the control signal, u ,
is the system error ( e = xr x ) multiplied by a gain, K p .
1. Create a Simulink model of a first order system cascaded with an integrator. The
gain should be K = 1 and time constant T =0.1 s. Simulate a square wave input
with unit amplitude and frequency of 0.3 Hz. The sample time is 0.001 sec. View
the reference position, xr (t ) , control signal, u (t ) , and actual position, x(t ) ,
through a scope, as in Figure 5. Experiment with different values of K p and
observe how the system response changes. Plot the results as in Figure 6.
Figure 5. A proportional control system.
Position Response
2
Position [mm]
0
Reference
-1
Actual
-2
5 6 7 8 9 10
20
Control signal, u
10
-10
-20
5 6 7 8 9 10
Time [sec]
Figure 6. Position response and control signal.
8
MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz
Example #4: Frequency Response Function
2n
Given a transfer function: G (s) = , with n =5 rad/s, =0.1
s 2 + 2n s + 2n
Plot its frequency response as Bode and Nyquist diagrams.
Procedure (refer to textbook, Chapter 6):
1. Substitute s j , resulting in G ( s ) G ( j)
2. Evaluate complex gain ( G ( j) ) of transfer function at each frequency
3. Solve for the magnitude |G(j)| and the phase angle <G(j).
G ( j ) = Re(G ( j )) + Im(G ( j )) Equation (5)
2 2
Im G ( j )
G ( j ) = tan 1 Equation (6)
Re G ( j )
4. Use a logarithmic frequency scale from 10-1 to 102 rad/s, with 1000 points.
Magnitude and frequency should be log scales (help loglog) while Phase and
Frequency are linear and log scales (help semilogx), respectively, as shown in
Figure 7.
9
MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz
Solution for Question #4
% m file to demonstrate Bode and Nyquist plots
clear;
% define 2nd order transfer function %
wn = 5; % natural frequency [rad/s]
zeta = 0.1; % damping ratio [ ]
G = tf([wn*wn],[1 2*zeta*wn wn*wn]);
% generate frequency array of interest [rad/s]%
w = logspace(-1,2,1000)'; % logarithmic, from 1e-2 to 1e2
% method 1: directly calculate frequency dependent complex gain %
% ============================================================= %
jw = j*w; % j*w vector
r2d = 180/pi; % radians to degrees conversion factor
numerator = G.num{1}; % extract numerator coefficients [0 0
25]
denominator = G.den{1}; % extract denominator coefficients [1 1
25]
Gf = polyval(numerator,jw)./polyval(denominator,jw); % evaluateu
complex gain
% generate Bode plot %
figure(1); clf; zoom on;
subplot(2,1,1); loglog(w,abs(Gf),'b');
title('Bode Plot'); ylabel('Magnitude [ ]'); grid on;
subplot(2,1,2); semilogx(w,r2d*angle(Gf),'b');
ylabel('Phase [deg]'); xlabel('Frequency [rad/s]'); grid on;
% generate Nyquist plot %
range = 1:800;
figure(2); clf;
plot3(w(range),real(Gf(range)),imag(Gf(range)),'b'); view(90,0);
xlabel('Frequency [rad/s]'); ylabel('Real{G(jw)}');
zlabel('Imag{G(jw)}');
grid on; title('Nyquist Plot');
% method 2: use matlab's built-in commands %
% ======================================== %
figure(3);
bode(G);
figure(4);
nyquist(G);
10
MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz
Figure 7. Bode plot a second order system.
G(j)
|G(j)|
Figure 8. Nyquist plot a second order system
(try performing a 3D rotation of the Matlab figure!).
11
MTE360 Automatic Control Prepared by: M.Heng, Revised by: K. Erkorkmaz
For full solutions, Matlab code (.m files) and Simulink models (.mdl) will be available on
the course website.
12