Controlling a Stepper Motor with an Arduino

Written by: admin@makezilla

Picture of Controlling a Stepper Motor with an ArduinoStepper_bb.png

This tutorial will show you how to operate a stepper motor that was salvaged from an old printer with an Arduino.

Step 1: What is a Stepper Motor?

Picture of What is a Stepper Motor?Stepper Motor.jpg

A stepper motor consists of two main parts, a rotor and a stator. The rotor is the part of the motor that actually spins and provides work. The stator is the stationary part of the motor that houses the rotor. In a stepper motor, the rotor is a permanent magnet. The stator consists of multiple coils that act as electromagnets when an electrical current is passed through them. The electromagnetic coil will cause the rotor to align with it when charged. The rotor is propelled by alternating which coil has a current running through it.

Stepper motors have a number of benefits. They are cheap and easy to use. When there is no current send to the motor, the steppers firmly hold their position. Stepper motors can also rotate without limits and change direction based on the polarity provided.

Step 2: Parts List

Picture of Parts ListIMG_4886.JPGIMG_4891.JPGIMG_4892.JPGIMG_5177.JPGIMG_4889.JPGIMG_4890.JPGIMG_4888.JPGIMG_4887.JPGIMG_4893.JPG

Needed Parts

  • Stepper Motor (This motor was salvaged from an old printer)
  • Arduino
  • Insulated Copper Wire
  • Wire Cutters/Strippers
  • Current Regulator
    • Transistor
    • H-Bridge (What will be used in this tutorial)
    • Motor Shield

Optional Parts

  • Soldering Iron
  • Solder
  • Soldering Fan
  • 3rd Hand Tool
  • Safety Glasses

Step 3: Attach the Wires

Picture of Attach the WiresIMG_4878.JPGIMG_4879.JPG

Most stepper motors have four leads so you will need to cut four pieces of copper wire (note the color does not correlate to anything specific. Different colors were only used to make it easier to see). These leads will be used to control which coil is currently active in the motor. This motor was salvaged from an old printer so soldering the wires on was the easiest option for this project. Anyway you can safely make a connection (solder, plug, clips) will work though.

Step 4: Arduino Sketch

Picture of Arduino Sketchstepper.pngstep_motor1_2.gif

Arduino already has a built in library for stepper motors. Simply go to File > Examples > Stepper > stepper_oneRevolution. Next you are going to want to change the stepsPerRevolution variable to fit your specific motor. After looking up the motors part number on the internet, this particular motor was designed for 48 steps to complete one revolution. What the Stepper library is actually doing is just alternating HIGH and LOW signals to each coil as shown in the GIF.

Step 5: What is an H-Bridge?

Picture of What is an H-Bridge?hbridge_labpinout.jpg

An H-Bridge is a circuit comprised of 4 switches that can safely drive a DC motor or stepper motor. These switches can be relays or (most commonly) transistors. The transistor is a solid state switch that can be closed by sending a small current (signal) to one of its pins. Unlike a single transistor which only allow you to control the speed of a motor, H-bridges allow you to also control the direction in which the motor spins. It does this by opening different switches (the transistors) to allow the current to flow in different directions and thus changing the polarity on the motor. WARNING: Switches 1 and 2 or 3 and 4 should never be closed together. This will cause a short circuit and possible damage to the device.

H-Bridges can help prevent your Arduino from being fried by the motors you are using it drive. Motors are inductors, meaning that they store electrical energy in magnet fields. When current is no longer being sent to the motors, the magnetic energy turns back into electrical energy and can damage components. The H-Bridge helps isolate your Arduino better. You should never plug a motor directly into an Arduino.

Though H-Bridges can be fairly easily built, many opt to buy an H-Bridge (such as a L293NE/SN754410 chip) due to convenience. This is the chip that we will be using in this tutorial. The physical pin numbers and their purpose are listed below.

  • Pin 1 (1, 2EN) ---> Motor 1 Enable/Disable (HIGH/LOW)
  • Pin 2 (1A) ---> Motor 1 Logic Pin 1
  • Pin 3 (1Y) ---> Motor 1 Terminal 1
  • Pin 4 ---> Ground
  • Pin 5 ---> Ground
  • Pin 6 (2Y) ---> Motor 1 Terminal 2
  • Pin 7 (2A) ---> Motor 1 Logic Pin 2
  • Pin 8 (VCC2) ---> Power Supply for Motors
  • Pin 9 ---> Motor 2 Enable/Disable (HIGH/LOW)
  • Pin 10 ---> Motor 2 Logic Pin 1
  • Pin 11 ---> Motor 2 Terminal 1
  • Pin 12 ---> Ground
  • Pin 13 ---> Ground
  • Pin 14 ---> Motor 2 Terminal 2
  • Pin 15 ---> Motor 2 Logic Pin 2
  • Pin 16 (VCC1) ---> Power Supply for H Bridge (5V)

Step 6: Connect the Wires

Picture of Connect the WiresIMG_5178.JPGIMG_4885.JPGIMG_5179.JPG

For a stepper motor, the 4 terminal pins on the H-Bridge should connect to the 4 leads of the motor. The 4 logic pins will then connect to the Arduino (8, 9, 10, and 11 in this tutorial). As shown in the Fritzing diagram, an external power source can be connected to power the motors. The chip can handle an external power source from 4.5V to 36V (I just chose a 9V battery because I'm still new to Fritzing).

Step 7: Upload Code and Test

Upload your code onto your Arduino. If you run your code and everything works as expected then that is awesome! If the wires are put into the wrong pins then the motor will just vibrate instead of fully rotating. Play around with the speed and direction of the motor as you see fit.

You should now have a working stepper motor with your Arduino. What you do next with it is up to you.

Step 8: Referneces & Thanks

The full data sheet for the H-Bridge can be found here.

When I initially posted this I didn't think it would gain the attention that it did. For that reason, I just made a quick instructable that I was planning on editing once all my parts had arrived. I didn't mean to cause so much concern with my previous, sloppy methods. Thanks for all your comments and I have updated my instructable to reflect the more appropriate method of connecting stepper motors.

Leave a Reply