Example: DC Motor Position Modeling in Simulink


Physical setup
Building the model
Open-loop response
Extracting a digital model
Implementing digital control
Closed-loop response

Physical setup

A common actuator in control systems is the DC motor. It directly provides rotary motion and, coupled with wheels or drums and cables, can provide transitional motion. The electric circuit of the armature and the free body diagram of the rotor are shown in the following figure:

For this example, we will assume the following values for the physical parameters. These values were derived by experiment from an actual motor in Carnegie Mellon's undergraduate controls lab.

* moment of inertia of the rotor (J) = 3.2284E-6 kg.m^2/s^2
* damping ratio of the mechanical system (b) = 3.5077E-6 Nms
* electromotive force constant (K=Ke=Kt) = 0.0274 Nm/Amp
* electric resistance (R) = 4 ohm
* electric inductance (L) = 2.75E-6 H
* input (V): Source Voltage
* output (theta): position of shaft
* The rotor and shaft are assumed to be rigid

The motor torque, T, is related to the armature current, i, by a constant factor Kt. The back emf, e, is related to the rotational velocity by the following equations:

In SI units (which we will use), Kt (armature constant) is equal to Ke (motor constant).

Building the Model

This system will be modeled by summing the torques acting on the rotor inertia and integrating the acceleration to give the velocity, and integrating velocity to get position. Also, Kirchoff's laws will be applied to the armature circuit. Open Simulink and open a new model window. First, we will model the integrals of the rotational acceleration and of the rate of change of armature current.

Next, we will start to model both Newton's law and Kirchoff's law. These laws applied to the motor system give the following equations:

The angular acceleration is equal to 1/J multiplied by the sum of two terms (one pos., one neg.). Similarly, the derivative of current is equal to 1/L multiplied by the sum of three terms (one pos., two neg.).

Now, we will add in the torques which are represented in Newton's equation. First, we will add in the damping torque.

Next, we will add in the torque from the armature.

Now, we will add in the voltage terms which are represented in Kirchoff's equation. First, we will add in the voltage drop across the coil resistance.

Next, we will add in the back emf from the motor.

The third voltage term in the Kirchoff equation is the control input, V. We will apply a step input.

You can download a model file for the complete system here.

Open-loop response

To simulate this system, first, an appropriate simulation time must be set. Select Parameters from the Simulation menu and enter "0.2" in the Stop Time field. 0.2 seconds is long enough to view the open-loop response. Also in the Parameters dialog box, it is helpful to change the Solver Options method. Click on the field which currently contains "ode45 (Dormand-Prince)". Select the option "ode15s (stiff/NDF)". Since the time scales in this example are very small, this stiff system integration method is much more efficient than the default integration method.

The physical parameters must now be set. Run the following commands at the MATLAB prompt: Run the simulation (Ctrl-t or Start on the Simulation menu). When the simulation is finished, double-click on the scope and hit its autoscale button. You should see the following output.

Extracting a Digital Model into MATLAB

A linear digital model of this continuous-time system (in state space or transfer function form) can be extracted from a Simulink model into MATLAB. Conversion to a discrete-time (digital) system is done with Zero-Order Hold blocks on both the inputs and outputs of the system, which act as both D/A (sample-and-hold) and A/D devices. The extraction of a model makes use of In and Out Connection blocks and the MATLAB function dlinmod. We will start with the model which we just build. You can download a complete version here. We will first group all of the system components (except for the Step and Scope which aren't really part of the system) into a Subsystem block.

Save your file as "motorpos.mdl" (select Save As from the File menu). MATLAB will extract the linear model from the saved model file, not from the open model window. At the MATLAB prompt, enter the following commands:

The extra parameter in dlinmod provides the sample time for the discrete conversion. You should see the following output, providing discrete time models of the system both in state-space and transfer function form. As noticed in above results, both numerator and denominator of the discrete transfer function have one extra root at z = 0. These cancel each other, and the discrete-time transfer function to the motor position output from the voltage input is:

To verify the model extraction, we will generate an open-loop step response of the extracted transfer function in MATLAB. Enter the following commands in MATLAB.

You should see the following plot which is equivalent to the Scope's output.

Implementing Digital Control

In the motor speed control digital example a digital controller was designed with the following transfer function.

We will first feed back the plant output.

The output of the Sum block will provide the error signal. We will feed this into the digital controller.

Finally, we will apply a step input and view the output on a scope.

You can download our version of the closed-loop system here.

Closed-loop response

To simulate this system, first, an appropriate simulation time must be set. Select Parameters from the Simulation menu and enter "0.05" in the Stop Time field. The design requirements included a settling time of less than 0.04 sec, so we simulate for 0.05 sec to view the output. The physical parameters must now be set. Run the following commands at the MATLAB prompt: Run the simulation (Ctrl-t or Start on the Simulation menu). When the simulation is finished, double-click on the scope and hit its autoscale button. You should see the following output.


Simulink Examples
Cruise Control | Motor Speed | Motor Position | Bus Suspension | Inverted Pendulum | Pitch Controller | Ball and Beam

Motor Position Examples
Modeling | PID | Root Locus | Frequency Response | State Space | Digital Control | Simulink

Tutorials
MATLAB Basics | MATLAB Modeling | PID | Root Locus | Frequency Response | State Space | Digital Control | Simulink Basics | Simulink Modeling | Examples