Matlab and Simulink For Modeling and Control DC Motor
Matlab and Simulink For Modeling and Control DC Motor
Matlab and Simulink For Modeling and Control DC Motor
Done by :
Supervisor:
2. Modeling a DC Motor
In this model we will learn how to develop a linear model for a DC motor, how to
analyze the model under MATLAB (poles and zeros, frequency response, time-
domain response, etc.), how to design a controller, and how to simulate the open-
loop and closed-loop systems under SIMULINK.
Consider a DC motor, whose electric circuit of the armature and the free body
diagram of the rotor are shown in Figure 1.
R L
+ T
+
J
V Vb = K
-
-
b
T = Ki. (1)
The back electromotive force (emf), Vb, is related to the angular velocity by:
(2)
From Figure 1 we can write the following equations based on the Newton’s law
combined with the Kirchhoff’s law:
𝒅𝟐 𝜽 𝒅𝜽
𝑱 +𝒃 = 𝑲𝒊 (3)
𝒅𝒕𝟐 𝒅𝒕
(4)
Using the Laplace transform, equations (3) and (4) can be written as:
where s denotes the Laplace operator. From (6) we can express I(s):
(7)
and substitute it in (5) to obtain:
(8)
This equation for the DC motor is shown in the block diagram in Figure 2.
Armature Load
Voltage Torque
Velocity Angle
V (s) K T (s) 1 s 1 s
Ls+ R Js+ b s
Vb (s)
Back emf
K
From equation (8), the transfer function from the input voltage, V (s), to the output
angle, θ, directly follows:
(9)
From the block diagram in Figure 2, it is easy to see that the transfer function from
the input voltage, V (s), to the angular velocity, ω, is:
(10)
3. Matlab Representation
The above transfer function can be entered into Matlab by defining the numerator
and denominator polynomials, using the conventions of the MATLAB’s Control
Toolbox. The coefficients of a polynomial in s are entered in a descending order of
the powers of s.
Furthermore, we will make use of the function conv(A,B), which computes the
product (convolution) of the polynomials A and B. First we will define the constants
of the motor :
J=0.01;
b=0.1;
K=0.01;
R=1;
L=0.5;
The transfer function (9) can be entered in MATLAB in a number of different ways.
1. As Ga(s) can be expressed as, we can enter these two transfer
functions separately and combine them in series:
aux = tf(K,conv([L R],[J b]))
Gv = feedback(aux,K);
Ga = tf(1,[1 0])*Gv;
Now by calling motor from the workspace, we have both the velocity (Gv) and the
position (Ga) transfer functions defined in the workspace.
4. Analysis
The Control System Toolbox offers a variety of functions that allow us to examine
the system’s characteristics.
G = [Gv; Ga]
Another way is to first convert Ga into its state-space representation and then add
one extra output being equal to the second state (the velocity):
G = [Gv; Ga];
G = ss(Ga);
set(G,'c',[0 1 0 ; 0 0 1],'d',[0;0],'OutputName',{'Velocity';'Angle'});
Note that this extension of the state-space model with an extra output has to be
done in one set command in order to keep the dimensions consistent.
Now, we can plot the step, impulse and frequency responses of the motor model:
Figure 3: Step impulse response and bode diagram.
4. Control Design
Let us design a PID feedback controller to control the velocity of the DC motor.
Recall that the transfer function of a PID controller is:
, (11)
where u is the controller output (in our case the voltage V), e = uc − y is the
controller input (the control error), and Kp, Kd, Ki are the proportional, derivative and
integral gains, respectively. A block diagram of the closed-loop system is given in
Figure 4.
Voltage Velocity
r + e V
PID DC Motor
−
First, try a simple proportional controller with some estimated gain, say, 100. To
compute the closed-loop transfer function, we use the feedback command :
Kp = 100;
Gc = feedback(Gv*Kp,1);
Gc.InputName = 'Desired velocity';
Here Gc is the closed-loop transfer function. To see the step response of the closed-
loop system, we enter:
figure(4); step(Gc,0:0.01:2);
You should get the plot given in Figure 5:
To eliminate the steady-state error, an integral action must be used. To reduce the
overshoot, a derivative action can be employed. In the following section, a
complete PID controller is designed.
Kp = 1;
Ki = 0.8;
Kd = 0.3;
C = tf([Kd Kp Ki],[1 0]);
rlocus(Ga*C);
Kp = rlocfind(Ga*C);
Gc = feedback(Ga*C*Kp,1);
figure(9); step(Gc,0:0.01:5)
The rlocus and rlocfind functions are used to select the overall gain of the PID
controller, such that the controller is stable and has the desired location of the
poles (within the defined ratio among the Kp, Ki and Kd constants). If the design is not
satisfactory, this ratio can be changed, of course. We should obtain a plot similar to
the one in Figure 6:
6. SIMULINK Model
By comparing step response in fig. 8 and in fig.3 we note that they are the same.
6.2 PID controller :
Fig. 9 Closed loop control system for DC motor with PID controller
And by tuning the PID controller we will find the controller parameter as Kp= 43.54,
Ki= 1.336, KD= 16.84.
8- Conclusion
While working in this project we have learned a lot of things such that: