You are on page 1of 3

Example 8: State-Space Observer Design and Control

Initial Matlab Commands (before running Simulink):


% clear matlab memory and close all figures
clear all; close all;
% define motor parameters
L = 1e-3; R = 1; J = 5e-5; B = 1e-4; K = 0.1;
%
A
B
C
D

define motor state variable model


= [-R/L, 0, -K/L; 0, 0, 1; K/J, 0, -B/J];
= [1/L; 0; 0];
= [0, 1, 0];
= [0];

% check observability
O = obsv(A,C);
rank(O)
% design observer by placing poles of A-LC at -500+j250, -500-j250, -200
Lt = acker(A.',C.',[-500+250j, -500-250j, -2000]);
L = Lt.'
% check poles of estimator-error dynamics
est_poles = eig(A - L*C)
%
%
C
D

redefine
use only
= [1, 0,
= [0; 0;

C,D to get all states out of DC motor block y = x_2 for observer
0; 0, 1, 0; 0, 0, 1];
0];

% define DC motor intial conditions for use in Simulink


x0 = [0, 0, 0];
% define estimator state variable model and initial conditions
Ahat = A;
Bhat = [B, L];
Chat = [1, 0, 0; 0, 1, 0; 0, 0, 1];
Dhat = [0, 0; 0, 0; 0, 0];
xhat0 = [5, 5, 5];

Matlab Response:
ans =
3
L =
56450
1998
108504
est_poles =
1.0e+003 *
-0.5000 + 0.2500i

-0.5000 - 0.2500i
-2.0000

Simulink File

Matlab Plot Commands (after Simulink):


figure(1);
subplot(3,1,1); plot(tout, states(:,1), tout, states(:,4), '--');
xlabel('time (sec)'); legend('x_1 = i_a', 'xhat_1');
title('States x and their Estimates xhat');
subplot(3,1,2); plot(tout, states(:,2), tout, states(:,5), '--');
xlabel('time (sec)'); legend('x_2 = \theta', 'xhat_2');
subplot(3,1,3); plot(tout, states(:,3), tout, states(:,6), '--');
xlabel('time (sec)'); legend('x_3 = \theta_{dot}', 'xhat_3');

Plots Generated:

You might also like