Documente Academic
Documente Profesional
Documente Cultură
This example shows how to simulate a simple closed-loop control algorithm in Simulink and
how to run it on an Arduino board.
Supported Hardware:
Arduino Leonardo
Arduino Pro
Arduino Uno
Available versions of this example:
Arduino Mega 2560 board:
Introduction
Prerequisites
Required Hardware
Task 1 - Build the Vehicle
Task 2 - Build the Motor Controller
Task 3 - Simulate Open-Loop Control Model
Task 4 - Run Open-Loop Control Model on the Arduino Mega 2560 Board
Task 5 - Simulate Closed-Loop Control Model
Task 6 - Run Closed-Loop Control Model on the Arduino Mega 2560 Board
Other Things to Try
Summary
Introduction
In a vehicle using independent wheel control, applying the same power to each wheel
generally does not result in the vehicle moving straight. This is caused by mechanical and
surface differences experienced by each of the wheels. To reduce deviation in the vehicle
heading, a better approach is to use a closed-loop controller which adjusts the power applied
to two motors based on the difference in their rates of rotation. One such controller is a wellknown proportional-integral-derivative (PID) controller.
PID control is a basic control loop feedback mechanism. The controller minimizes the
difference between the measured and the desired value of a chosen system variable by
adjusting the system control inputs.
This example shows you how to simulate the controller using a simple plant model, first with no
feedback control (Open-Loop Control), and then with feedback control (Closed-Loop Control).
This example also illustrates how to switch between simulating the PID controller and running it
on hardware in the same model.
Prerequisites
We recommend completing Getting Started with Arduino Hardware.
Required Hardware
To run this example you will need the following hardware:
Controller board:
USB cable
Motor controller parts:
Small breadboard
Breadboard wires
A four-wheel vehicle:
This example was tested with the four-wheel vehicle built using DFRobot 4WD ArduinoCompatible Platform w/Encoders.
Other vehicle kits can be used as long as they have the same mechanical characteristics (four
wheels, four DC motors and two encoders).
With a minor modification to the controller connections, a vehicle with only two DC motors can
be used as well.
Encoders used in this example are ten-step encoders. Different encoders can be used with
minor modifications to the example models.
2. Connect the controller to the vehicle battery pack following the same circuit diagram.
Task 3 - Simulate Open-Loop Control Model
This step illustrates that independently powered wheels cause deviations in vehicle heading.
1. Open the model. Observe two subsystems in the model.
2. Open the Open-Loop Controller subsystem. This subsystem controls the vehicle driving.
Observe that the controller does not use the difference between two encoder outputs to control
the motors.
3. Notice the Motors subsystem. The subsystem contains both simulated and actual motors.
The Environment Controller block takes the outputs of the simulated or actual motors,
depending on the current environment. This allows you to represent both simulated and actual
motors in one model. As an alternative, you may create two models, one for simulation, and
the other one for running on actual hardware.
4. Click Run button in the Simulink toolbar. Click the Scope block and observe that
theEncoder Output Mismatch increases over time. This indicates that the vehicle will not
move straight.
Task 4 - Run Open-Loop Control Model on the Arduino Mega 2560 Board
1. Disconnect the battery power wire leading to the Vin terminal on the Arduino Mega 2560
board since the board will get powered via a USB cable.
2. Connect the Arduino Mega 2560 board to your host computer using USB cable.
3. In the model, click the Deploy To Hardware button on the toolbar.
4. After the model is downloaded, disconnect the USB cable from your Arduino Mega 2560
board.
5. Connect back the battery power wire leading to the Vin terminal on your Arduino Mega 2560
board.
6. Place the vehicle on the ground and turn the vehicle switch on. The model runs on the board
and the vehicle starts moving.
7. Notice that the path of the vehicle is not straight, as predicted by the simulation.
8. Turn the vehicle switch off.
Task 5 - Simulate Closed-Loop Control Model
1. Open the model. Observe two subsystems in the model.
2. Double-click PID Controller subsystem. Notice that the proportional (P) control is used to
synchronize two motors when the vehicle runs straight. Also, notice that during a turn, no
synchronization is applied.
3. Click Run button in the Simulink toolbar. Click the Scope block and observe that
theEncoder Output Mismatch remains close to zero. This indicates that the vehicle will skew
less compared to the Open Loop Control model.
Task 6 - Run Closed-Loop Control Model on the Arduino Mega 2560 Board
1. Disconnect the battery power wire leading to the Vin terminal on the Arduino Mega 2560
board since the board will get powered via a USB cable.
2. Connect the Arduino Mega 2560 board to your host computer using USB cable.
3. In the model, click the Deploy To Hardware button on the toolbar.
4. After the model is downloaded, disconnect the USB cable from your Arduino Mega 2560
board.
5. Connect back the battery power wire leading to the Vin terminal on your Arduino Mega 2560
board.
6. Place the vehicle on the ground and turn the vehicle switch on. The model runs on the board
and the vehicle starts moving.
7. Observe that the path of the vehicle is straighter, as predicted by the simulation.
8. Turn the vehicle switch off.
Other Things to Try
Adjust the PID Controller settings. Improve the vehicle's ability to move straight on a rough or
tilted surface.
Summary
This example showed how to simulate and implement a basic closed-loop controller on an
Arduino Mega 2560 board. In the example you learned that:
Open-Loop Control does not ensure straight driving in a vehicle with independently powered
wheels.
Closed-Loop Control uses the difference between two encoder outputs to calculate the power
that should be applied to each wheel individually.
Both simulated and actual hardware may be used in the same model, provided that a
mechanism for switching between them exists.