```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.
displacement
[mm]
A Simple Trajectory
60
L
40
20
0
0
0.1
0.2
0.3
0.1
0.2
0.3
feedrate
[mm/sec]
100
0.4
0.5
0.6
0.7
0.4
0.5
0.6
0.7
50
0
0
500
acceleration
[mm/sec 2]
F
A
0
-500
D
0
0.1
τ1
T1
0.2
0.3
0.4
Time [msec]
τ2
T2
0.5
0.6
0.7
τ3
T3
Figure 1. A simple trajectory with trapezoidal velocity.
Given:
Acceleration:
Deceleration:
Feedrate (Velocity):
Travel Length:
A = 500 mm/sec2
D = -500 mm/sec2
F = 100 mm/sec
L = 50 mm
1
MTE360 Automatic Control
Sampling Period:
Prepared by: M.Heng, Revised by: K. Erkorkmaz
Ts = 0.001 sec
F 2
 2T 1
 1
 FT
s (t )   1  F2
 2
 L  FT3  F3  F 32

2
2T3
F
T1 
A
F
T3  
D
L T T
T2   1 3
F
2
, 0  1  T1
, 0  2  T2
(1)
, 0  3  T3
(2)
(3)
(4)
Solution: Matlab code (partially complete)
% file: tutorial01_example01.m
clear all % clears the workspace
close all % closes all figure windows
% Given:
A=500;
D=-500;
F=100;
L=50;
Ts=0.001;
%
%
%
%
%
acceleration mm/sec^2
deceleration mm/sec^2
feedrate (velocity) mm/sec
travel length mm
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&lt;0 || T2&lt;0 || T3&lt;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);
subplot(3,1,1);
plot(t,s);
title('A Simple Trajectory');
ylabel('displacement [mm]');
xlabel('Time [msec]')
subplot(3,1,2);
%... (do same for sd and sdd)
%
%
%
%
%
%
opens a figure window
subplot(rows, columns, position)
plots trajectory versus time
creates a title for the plot
labels the y-axis
labels the x-axis
% 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.
2. Apply trajectory from Example 1 as the input, as in Figure 3. Save data and plot
results.
Figure 2: A simple first order system.
Figure 3: A simple first order system with trajectory input from Example 1.
4
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
%
t
u
y
extract data from Scope Data struct
= ScopeData.time;
= ScopeData.signals.values(:,1);
= 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 --%
5
MTE360 Automatic Control
Prepared by: M.Heng, Revised by: K. Erkorkmaz
Solution to Part 2: Matlab Code
% file: tutorial01_example02_q1.m
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 &quot;Structure with Time&quot;
y = simout.signals.values; % output vector
% plot input and output in the same figure
figure(3);
plot(t,u,'b-'); hold on % &quot;hold on&quot; 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 --%
6
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
Position [mm]
2
1
0
Reference
Actual
-1
-2
5
6
7
5
6
7
8
9
10
8
9
10
Control signal, u
20
10
0
-10
-20
Time [sec]
Figure 6. Position response and control signal.
7
MTE360 Automatic Control
Prepared by: M.Heng, Revised by: K. Erkorkmaz
Example #4: Frequency Response Function
Given a transfer function:
G ( s) 
2n
, with n =5 rad/s,  =0.1
s 2  2n 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 &lt;G(jω).
G  j   ReG  j   ImG  j  Equation (5)
2
2
 Im G  j  
 Equation (6)
G  j   tan 1 
 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.
8
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
wn = 5;
zeta = 0.1;
G = tf([wn*wn],[1 2*zeta*wn
function %
% damping ratio [ ]
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);
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);
9
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!).
10
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.
11
```