You are on page 1of 6

IJSTE - International Journal of Science Technology & Engineering | Volume 3 | Issue 09 | March 2017

ISSN (online): 2349-784X

Design and Development of Stepper Motor
Position Control using Arduino Mega 2560
Shailesh J. Parmar Mital S. Zala
Student Student
Department of Electrical Engineering Department of Electrical Engineering
Dr. Subhash Technical Campus, Junagadh, Gujarat, India. Dr. Subhash Technical Campus, Junagadh, Gujarat, India.
Pin-362001, India Pin-362001, India

Ishita S. Thaker Ketan M. Solanki
Student Professor
Department of Electrical Engineering Department of Electronics & Communication Engineering
Dr. Subhash Technical Campus, Junagadh, Gujarat, India. Dr. Subhash Technical Campus, Junagadh, Gujarat, India.
Pin-362001, India Pin-362001, India

Abstract
A stepper motor controller capable of both independent as well as synchronized control of a multiple number of stepper motors is
discussed. Arduino ATmega2560 microcontroller provides fast and reliable control operations. Furthermore, as a feedback element
rotary encoder is used to count detents of stepper motor with high resolution. The Arduino controller includes 54 digital I/O pins
of which 14 provide PWM output. For instance, it can be used to control a robot having two directional freedom. The controller
tested with a simultaneous control (synchronous) of two stepper motors for precision trajectory control applications. The objective
of this project is to design Arduino controller based Stepper Motor controller for position control that will smoothly control the
rotation of a stepper motor taking into account the physical constraints. This project describes the method by which a controlling
circuit for stepper motor is being designed using Arduino Mega 2560 Controller.
Keywords: Stepper Motor, Arduino Mega 2560, Rotary Encoder, Position Control
________________________________________________________________________________________________________

I. INTRODUCTION

Stepper motors are mainly used in open loop position control system. But open loop control of stepper motor can causes loss of
steps or slip of steps. We designed the closed loop position control to overcome this problem. If any wrong position of stepper
motor have been achieved, it will try to solve that problem [1].
Here system is described by micro-controller program which can control the position of two stepper motor together [1]. Arduino
Mega 2560 controller of microcontroller family is used in control circuit. It provides to set the position of the stepper motor angle.
It count the step value and display in LED. This system should be used in automatic gauges, machine tooling, automated production
equipment, medical scanners, robotics, bidirectional position control etc.
A stepper motor can moves one step at a time, unlike those conventional motors, which rotate continuously. If we give command
a stepper motor to move some exact number of steps, it rotates incrementally that many number of steps and stops. Because of this
basic nature of a stepper motor, it is generally used in low cost, open loop position control systems [2].

Fig. 1: Block Diagram

All rights reserved by www.ijste.org 77
Design and Development of Stepper Motor Position Control using Arduino Mega 2560
(IJSTE/ Volume 3 / Issue 09 / 015)

Open loop control means, there is no feedback information about the position is required. It eradicates the need for expensive
sensing and feedback devices, such as optical encoders. Motor position is recognized simply by keeping track of the number of
input step pulses. A stepper motor controller which we have use capable of independent control as well as synchronized control.
Stepper motor is built around an Arduino Mega 2560 ATmega2560 to provide fast as well as reliable control operations [3]. The
controller also includes 54 digital input/output pins. This has wide applications in manufacturing, robotics, actuators used in
industrial and position of various laboratory systems, etc.
Positioning systems have traditionally been implemented using DC motors, AC servo motors, Synchronous motors, Stepper
motors, etc. DC motors are relatively easy to control. However it has disadvantages in using such motors for positioning systems
like overheating of the armature windings. Also the torque to inertia is relatively low [4].
For the above reasons positioning systems are now being implemented using stepper motors. Usually stepper motors were
designed to provide precise positioning control within an integer number of steps. They have stable open loop operation to any
step position and consequently no feedback is needed to control them [5]. The following are some of the applications in different
fields.
 Robots in Industry - Automobile, Laboratories, Military, Mining, etc.
 Industrial applications - Material Handling, Material transfer, spot welding, etc.
 Mechanical equipment - Lath machines
 Medical robots - Robotic assistant for micro surgery
A precision stepper motor controller capable of both independent and synchronized control of 2 stepper motors is built around
an Arduino Mega 2560 ATmega2560 to provide fast and reliable control operations. The controller also includes 54 digital
input/output pins. This has wide applications in manufacturing, robotics, actuators used in industrial and position of various
laboratory systems, etc. [5].

II. HARDWARE

Fig. 2: M542 Stepper Driver [7]

Fig. 3: Arduino Mega 2560 [6]

All rights reserved by www.ijste.org 78
Design and Development of Stepper Motor Position Control using Arduino Mega 2560
(IJSTE/ Volume 3 / Issue 09 / 015)

Arduino Mega 2560
The Arduino Mega 2560 is a microcontroller board based on the ATmega2560 datasheet [6]. It has 54 digital input/output pins in
which 14 pins can be used as PWM (Pulse Width Modulation) outputs, 16 Analog inputs, 4 UARTs (Hardware serial ports), a
power jack, a 16 Mega Hertz crystal oscillator, an ICSP header, a USB connection, and a reset button. It contains everything needed
to support the microcontroller; simply we have to connect it to a computer with a USB data cable or power it with an AC-DC
adapter or battery to get started [6].

M542 Stepper Driver
The M542 is an economical patented technology based micro-stepping driver. It is suitable for driving two phase and four phase
stepper motors. By using the advanced bipolar constant current chopping technique, it can output more speed and torque from the
same motor compared with other traditional drivers like L/R drivers. Its 3-state current control technology allows coil currents to
be well controlled and with relatively small current ripple, so less motor heating is achieved [7].

Fig. 4: LCD (LM016L) [9]

Fig. 5: Rotary Encoder | circuit-diagram.com

Rotary Encoder
Incremental rotary encoders provide a pair of digital signals that allow a microcontroller to determine the speed and direction of a
shaft’s rotation. They can be used to monitor motors and mechanisms, or to provide a control-knob user interface. The best-known
application for rotary encoders is the mouse, which contains two encoders that track the x- and y-axis movements of a ball in the
device’s underside [8].

LCD (LM016L):
LCD LM016L is commonly used LCD. It is a 14 pin LCD which interfacing with various microcontrollers, various interfaces 8
bit and 4 bit, programming. It is 16×2 LCD interfacing example with Arduino in 4 bit mode. In this project we can display results
or outcomes of our system for users LCD. In embedded systems it is difficult to find status and errors generated by system software
running inside of microcontroller. So there is a need of a display unit [9].

All rights reserved by www.ijste.org 79
Design and Development of Stepper Motor Position Control using Arduino Mega 2560
(IJSTE/ Volume 3 / Issue 09 / 015)

III. OUTPUT WAVE OF ENCODER

Fig. 6: Quadrature waveforms from a rotary encoder contains directional information [8]

Fig. 7: Sequence of two-bit numbers output by the phase of a rotary encoder [8]

IV. IMPLEMENTATION & RESULTS

Fig. 8: Circuit Diagram

All rights reserved by www.ijste.org 80
Design and Development of Stepper Motor Position Control using Arduino Mega 2560
(IJSTE/ Volume 3 / Issue 09 / 015)

Here system is described by Arduino program which can control the position of two stepper motor. The micro controller used is
Arduino. Simply Stepper motor is an open loop control system but in this implementation, closed loop control of stepper motor is
used. Here as a feedback element rotary encoder is used. Rotary encoder count the number of detents when stepper motor rotates.
Here LCD (LM016L) is a 16×2 pixels display will displays the speed of stepper motor and also display number of detents counts,
Initial and Old position of the motor’s shaft.

V. ARDUINO PROGRAMMING

Program for encoder testing:
#include <RotaryEncoder.h>
RotaryEncoder encoder(A2, A3);
void setup()
{
Serial.begin(57600);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
}
void loop()
{
static int pos = 0;
encoder.tick();
int newPos = encoder.getPosition();
if (pos != newPos) {
Serial.print(newPos);
Serial.println();
pos = newPos;
}
}
Program for motor testing:
#include <Stepper.h>
const int stepsPerRevolution = 1600;
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
void setup()
{
myStepper.setSpeed(30);
Serial.begin(9600);
}
void loop()
{
Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
delay(1000);
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution);
delay(1000);
}

All rights reserved by www.ijste.org 81
Design and Development of Stepper Motor Position Control using Arduino Mega 2560
(IJSTE/ Volume 3 / Issue 09 / 015)

VI. IMPLEMENTATION

Fig. 9: Implementation of Components

VII. CONCLUSION

Arduino mega 2560 controller is good controller of micro controller family which can be used for high resolution and high accuracy
result and will reduce the step loss or slip of stepper motor. If any wrong position of stepper motor have been achieved then it will
give the feedback signal and finally error will be solved. It is economical compared to IR-sensor based feedback control.

VIII. FUTURE WORK

we have decide that if we use this technique in two motor configuration and by using feedback element (encoder) to give the
feedback signal to the Arduino mega 2560, We get accurate results and we can implement in number of applications of industries
as well as others, so in the future we will made a working model of two stepper motor operation with position control of both
motors.

REFERENCES
[1] Pabitra Kumar Nandi, “Design and Development Stepper Motor Position Control System Using Atmel 85c51 Microcontroller” International Journal of
Emerging Research in Management &Technology Vol. 2, Issue 12, December 2013
[2] Archan Patel, K. S. Denpiya, A. N. Patel “Novel Microstepping Technique for Disc Rotor Type Stepper Motor Drive” 978-1-4244-7398-4/10/$26.00 ©2010
IEEE.
[3] D. P. Mital, C. T. Chai & T. Myint from School of Electrical and Electronics Engineering Nanyang Technological Institute Singapore, “A precision stepper
motor controller for robotic applications”
[4] R. R. Dodake, S. Subbaraman, R. K. Gurav “Design and Development of Portable Insulin Syringe using Low Power Embedded Systems” Vol. 2 Issue 10,
October - 2013 International Journal of Engineering Research & Technology (IJERT)
[5] “Stepper motor speed and position control - the GMU ECE Department” by Subash Anigandla, Hemanth Rachakonda, Bala Subramanyam Yannam and Sri
Divya Krovvidi http://www.ece.gmu.edu/
[6] Datasheet of Arduino Mega 2560 (AT mega 2560) https://www.arduino.cc/en/Main/arduinoBoardMega2560/
[7] M542 Economical Micro stepping Driver Leadershine technology Co., Ltd. http://www.leadshine.com/
[8] “Reading Rotary Encoders PIC Application Notes” http://emerald.tufts.edu/
[9] Innovation of Engineers https://embeddedcenter.wordpress.com/

All rights reserved by www.ijste.org 82