How to find equilibrium point to place stable poles?
8 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
My nonlinear system of field controlled DC motor contains two equations for each state variable.
![](https://www.mathworks.com/matlabcentral/images/broken_image.png)
One of these variables, namely x1 is unobservable. I have designed a State Feedback Integral Controller that uses the observable state x2 to calculate control input for the plant DCmotor. Following are the images of SIMULINK model.
![](https://www.mathworks.com/matlabcentral/images/broken_image.png)
Following is the SIMULINK model for DC motor described by two nonlinear state equations:
![](https://www.mathworks.com/matlabcentral/images/broken_image.png)
and the state-feedback integral controller:
![](https://www.mathworks.com/matlabcentral/images/broken_image.png)
After building the model I wrote an m-file to perform the simulation.
clear all
close all
clc
% Defining the parameters
h = 0.001; % Sampling time [sec]
final_time = 2;
theta1 = 60;
theta2 = 0.5;
theta3 = 40;
theta4 = 6; % Model variable
theta5 = 40000; % Model variable
ref_in = 2; % Reference signal input
% Specify initial values. These are also equilibrium points.
y0 = ref_in; % Output guess
u0 = (theta1*theta4*ref_in)/(theta3*theta5); % Control input guess
x1_0 = theta3/theta1; % State x1 guess
x2_0 = y0; % State x2 guess
x0 = [x1_0 x2_0]'; % State vector
% Find equilibrium point
% Keep x2 state fixed because this is the only observable state. Also keep
% output fixed at the initial output which is the reference signal input.
[x, u, y] = trim('DCmotor', x0, u0, y0, 2, [], 1);
% Linearization about equilibirum point
[A,B,C,D] = linmod('DCmotor', x, u);
% Pole Placement for stability
p1 = -10 + 5i;
p2 = -10 - 5i;
K = place(A, B, [p1 p2]);
k1 = K(1,1);
k2 = K(1,2);
% Run the model
sim('mot_ctrl');
After executing "trim" command, I got x = [0.6666;0.6666]'. Clearly this is not correct because I specified(in trim) that x0's 2nd state must remain same as reference input itself. So the 2nd value in x above should have been 2. Consequently linearize and place does not give correct result.
I hope someone can help me with this.
0 Kommentare
Antworten (1)
Samuel Mitiku
am 30 Dez. 2021
syms x1 x2 ; assume (x1, 'real'); assume(x2, 'real'); F1(x1,x2)=-x1+2*x1*x2 F2(x1,x2)=-x2 e=[x1,x2]; f=[F1,F2]; J=jacobian(f,e) M=J(0,0) % M= Jeq Jeq=[-1 0 ; 0 -1] Q=[1 0; 0 1]; % P= lyap(Jeq,Q) %Solving the Lyapunov Equation Jeq'P+PJ+Q=0 P=lyap(Jeq,Q); disp('lyapnov solution in matrix='); disp(P); disp('Eigne Values of matrix p=') K=eig(P) if (K(1)>0 && K(2)>0) disp('The matrix P is positive definite matrix, Hence the system is stable at equilibrium point (0,0)') else disp('The matrix P is not positive definite matrix, Hence the system is unstable at equilibrium point (0,0)') end
0 Kommentare
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!