⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ep10_2.m

📁 离散控制系统设计的MATLAB 代码
💻 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 + -