M-file:
%
% Filename: example1.m
%
% Description: This m-file demonstrates how to
% 1) define and display transfer function and state-space
% model representations,
% 2) plot step responses of systems represented
% in either state-space or transfer function form, and
% 3) convert between state-space and transfer function
% representations.
%
% The DC gearmotor model developed in class is used as
% the example system.
clear; close all; % Clear workspace and close all figures
% Motor parameters:
Jm = 0.01; bm = 0.3; Kt = 0.8;
Ke = 0.8; Ra = 1.4; La = 0.004;
% Gear paramters:
N1 = 10; N2 = 61;
% Load parameters:
Jl = 11; bl = 27;
% Equivalent load seen by motor:
Jt = Jm + (N1/N2)^2*Jl;
bt = bm + (N1/N2)^2*bl;
% State-Space/Variable model definition:
A = [-Ra/La 0 -Ke/La; ...
0 0 1 ; ...
Kt/Jt 0 -bt/Jt];
B = [1/La; 0; 0];
C = [0 0 1];
D = [0];
disp('State-Space Representation by Definition:');
printsys(A, B, C, D);
% Transfer Function model (motor speed)/(armature voltage)
% definition:
numH = Kt; % define numerator and denominator polynomials
denH = conv([La Ra],[Jt bt]) + [0 0 Ke*Kt];
numH = numH/denH(1); % divide numerator and denominator by coefficient
denH = denH/denH(1); % of highest power of s in denominator
disp('Transfer Function by Definition: Omega(s)/Va(s)=');
printsys(numH,denH,'s');
% Determine Transfer Function from State-Space Model using
% built in Matlab function:
[numH2, denH2] = ss2tf(A, B, C, D);
disp('TF from SS via Matlab function: Omega(s)/Va(s)=');
printsys(numH2,denH2,'s');
% Compute State-Space Model from Transfer Function using
% built in Matlab function:
[A2, B2, C2, D2] = tf2ss(numH, denH);
disp('SS from TF via Matlab function:');
printsys(A2, B2, C2, D2);
% Plot motor speed response to a 12V step input
ss_sys = ss(A,B,C,D); % create Matlab ss object
tf_sys = tf(numH,denH); % create Matlab tf object
t = 0:0.01:1.5; % define times for step response
[thetamdottf] = 12*step(tf_sys, t); % find step response using tf
subplot(2,1,1); plot(t, thetamdottf); % plot step response
xlabel('t (sec)'); ylabel('\omega_m (rad/sec)');
title('Geared DC Motor Step Response via TF');
[thetamdotss] = 12*step(ss_sys, t); % find step response using ss
subplot(2,1,2); plot(t, thetamdotss); % plot step response
xlabel('t (sec)'); ylabel('\omega_m (rad/sec)');
title('Geared DC Motor Step Response via SS');
Results:
State-Space Representation by Definition:
a =
x1 x2 x3
x1 -350.00000 0 -200.00000
x2 0 0 1.00000
x3 2.61763 0 -3.35584
b =
u1
x1 250.00000
x2 0
x3 0
c =
x1 x2 x3
y1 0 0 1.00000
d =
u1
y1 0
Transfer Function by Definition: Omega(s)/Va(s)=
num/den =
654.4086
----------------------------
s^2 + 353.3558 s + 1698.0725
TF from SS via Matlab function: Omega(s)/Va(s)=
num/den =
654.4086 s
--------------------------------
s^3 + 353.3558 s^2 + 1698.0725 s
SS from TF via Matlab function:
a =
x1 x2
x1 -353.35584 -1698.07248
x2 1.00000 0
b =
u1
x1 1.00000
x2 0
c =
x1 x2
y1 0 654.40860
d =
u1
y1 0
Plots: