📄 ep10_2.m
字号:
%%%%%%%%%%%% Exploratory problem 10.2 %%%%%%%%%%%
% Discrete-Time Control Problems using %
% MATLAB and the Control System Toolbox %
% by J.H. Chow, D.K. Frederick, & N.W. Chbat %
% Brooks/Cole Publishing Company %
% September 2002 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ---- Second order plant and sensor ----
%
clear;clf
disp('EP10.2: observer-controller design for')
disp('.....plant with 2 real poles, no zeros')
disp('.....sensor with 1 time constant')
%
tauP1 = 2; tauP2 = 0.5; Kproc = 4; % plant
tau_sen = 0.05; % sensor
Ts = 0.1;
numGp = Kproc;
denGp = conv([tauP1 1],[tauP2 1]);
disp('SS model of plant')
Gp = tf(numGp,denGp);
Gp = ss(Gp)
disp('*******>');pause
numH = 1;
denH = [tau_sen 1];
disp('SS model of sensor')
H = tf(numH,denH);
H = ss(H)
disp('*******>');pause
disp('SS model of continuous plant & sensor in series to form 1-input, 2-output system')
G = [1; H]*Gp
disp('*******>');pause
disp('Discretized model')
Gz = c2d(G,Ts)
disp('*******>');pause
%----- check for controllability & observability
[Az,Bz,Cz,Dz] = ssdata(Gz)
disp('both of these rank values should be 3')
n_ctrb = rank(ctrb(Az,Bz))
n_obsv = rank(obsv(Az,Cz(2,:)))
disp('*******>');pause
disp('Reasonable desired CL eigenvalues are: [0.9048 0.8187 0.1353]')
pp = input('enter 3 desired CL eigenvalues as column.....')
Rpp_str = vec2str(real(pp));
Ipp_str = vec2str(imag(pp));
disp('Controller gains')
K = place(Az,Bz,pp)
disp('*******>');pause
disp('Gains for observer poles = CL eigenvalues / 2')
L = place(Az',Cz(2,:)',pp/2)'
disp('*******>');pause
disp('A matrix of observer-controller')
Aoc = Az-Bz*K-L*Cz(2,:) % observer-controller (3 x 3)
disp('*******>');pause
disp('Input matrix of observer-controller')
Boc = L % (3x1)
disp('*******>');pause
disp('Output matrices of observer-controller')
Coc = K % (1x3)
Doc = zeros(1,1) % (1x1)
disp('*******>');pause
disp('Observer-controller poles')
eig_OC = eig(Aoc) % obsvr-ctrlr poles
disp('*******>');pause
disp('Observer-controller zeros')
G_oc = ss(Aoc,Boc,Coc,Doc,Ts);
[zoc, poc, koc] = zpkdata(G_oc);
z_oc = zoc{1} % obsv-ctrlr zeros
disp('*******>');pause
%
disp('Feedback connection from sensor to input')
Gcl = feedback(Gz*G_oc,1,1,2)
[Acl,Bcl,Ccl,Dcl] = ssdata(Gcl)
disp('closed-loop eigenvalues are:')
ev_CL = eig(Acl)
disp('*******>');pause
disp('prefilter to correct DC gain')
N = dcgain(Gcl(1,1));
disp('*******>');pause
disp('Put gain in front of CL system')
GclN = Gcl/N
disp('*******>');pause
disp('Unit step in reference input')
t = [0:Ts:4]';
ref = ones(size(t));
[y,t,x] = lsim(GclN,ref,t);
plot(t,y(:,1),t,y(:,2),'--');grid
title('EP10.2: 2nd-order plant (solid) + sensor (dashed)')
xlabel('Time (s)')
ylabel('Amplitude')
%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -