Drive a Stepper Motor with an AVR Microprocessor

 by The Real Elliot
Got some scavenged stepper motors from printers/disk drives/etc lying around?

Some probing with an ohmeter, followed by some simple driver code on your microprocessor and you'll be stepping in style.

 
Remove these adsRemove these ads by Signing Up

Step 1: Get to Know Steppers

Basically, you're going to need to figure out where all the little wires go.

First step is to figure out if it's a unipolar or bipolar motor. Have a look at Jones on Steppers for some deeper background, then at Ian Harries' Site for a simple method to figure out an unknown motor.

Read up a bit, then join me in a walkthrough of this motor I got for cheap. (They're on sale for $0.99 right now. They're small, relatively light, but don't have much torque. Don't know what it'll be good for yet.)

awais mughal says: Jan 4, 2012. 7:46 AM
bro can i use hard disk motor ...?
Bartuss in reply to awais mughalMay 18, 2013. 11:26 AM
No you can't, these are mostly 3 wire BLDC motors. I broke two l293 chips on one of these :) .
adamshizu says: Dec 16, 2011. 8:59 AM
hi there, I made a attiny13 + uln2003 to controll a small stepper motor, which can only running at ~40 rpm, if I increase the output, the motor just not run, what's happened help please.
uberdum05 says: May 7, 2011. 12:06 PM
An idea for the stepper motor, use two of them in a small robot as the drive motors to do fancy precision moves :)
specospec says: Dec 24, 2010. 3:19 AM
what about using l293d
The Real Elliot (author) in reply to specospecDec 29, 2010. 1:36 PM
Would be good.

If you're serious, you usually start off with an idea of how much torque and speed you need for your application, then find a motor that'll deliver, and then pick a motor driver depending on the motor's current requirements.

But for low-current applications, I've had good luck with the SN754410, for slightly larger currents the 293D is good, and above that, especially if you're driving with a microcontroller or need microstepping, Allegro has some great offerings.

And there's always build-it-yourself from 8 MOSFETs. Google for "H-bridge" to get an idea.

Enjoy!
vhk says: Jul 28, 2010. 3:43 AM
Hi I have a unipolar stepper motor 0.4A,15v,1.8 degree my chip is attiny3213, can i drive it with ULN2803?
nm17 in reply to vhkJul 31, 2010. 11:12 PM
Should be fine. According to manufacturers site: "currents up to 1 A at voltages from 4.5 V to 36 V"
wijting says: Jan 2, 2010. 6:58 AM
I m working with this stepper and a Picaxe 28x project board.
I want to make a 90 degree swing,  that would be about 5 steps, based on the 20 steps for 360 degree
anyone an idea how to do this in the Picaxe Basic language?
I can make it step but not exactly 90 degree forward and backwards
Any suggestion is welcome, thanks


Ebay says: Sep 14, 2009. 9:51 PM
where did u get that thing on the end of your motor to indicate it is turning?
geeklord says: Jun 9, 2009. 6:30 PM
Can someone please find me a good reference/explanation of the different functions/commands/whatever that are used for AVR's? I've been dinging around for a while now with an Arduino and would really like to start using just the uC and not a developement board and simple language with it. I pretty sure I can get past getting the HEX file on the chip, I just need help with the language. Thx for any help.
The Real Elliot (author) in reply to geeklordJun 11, 2009. 10:57 AM
Absolutely!

The language is C, and there's tons of good resources for that. For beginning I like the Kernighan & Ritchey book. Or search around for C tutorials on the web until you find one that looks good for you.

For AVR-specific C, everything you need is at the avr libc project page: http://www.nongnu.org/avr-libc/user-manual/index.html. While you're there, see their example projects link.

For AVR hardware-related stuff, there's the datasheet for the chip you're using (which can be a little daunting, but is very very good once you get used to it) and a bunch of projects online to learn from.

If I were just starting out, I'd pick up a project like a blinking-light kinda thing and learn just enough C to get that working. Then continue on project by project, expanding your hardware and software knowledge in tandem, but always with a concrete project in mind. At least that helps me...

I made a page of many helpful AVR resources for a class I taught: http://wiki.hacdc.org/index.php?title=Useful_AVR_Links

geeklord in reply to The Real ElliotJun 11, 2009. 6:07 PM
Wow, thanks a lot. Nice to get help from people who know what they're doing. The Instructables community is awesome!
TobiasPl says: Mar 17, 2009. 3:47 AM
I really like this tutorial! Very easy to follow, but I have a questions left: Lets say the sequence is BLUE BLACK RED YELLOW and RED is set to 5V, all others to 0V. Now I turn off the current and later on, I turn it on again but the IC now again starts with BLUE at 5V instead of RED. What will happen?
The Real Elliot (author) in reply to TobiasPlMar 19, 2009. 3:13 PM
It doesn't really matter where in the cycle you start, although the motor might turn backwards one step before it gets going in the right direction. So in your example, you stopped the motor with RED energized. If you then went back to BLACK, it would take one step backwards so that it was lined up with BLACK. At that point, you'd continue the cycle either to BLUE or RED, and that would determine the direction that the motor rotated. As for BLUE... It would be 50/50 whether it goes clockwise or counter-clockwise. Try it and see? Repeat it like 10 times or so. Regardless, it won't hurt the motor.
TurboTronix says: Mar 16, 2008. 3:44 PM
I want to use this setup to open and close a valve (for water current)...
The Real Elliot (author) in reply to TurboTronixMar 17, 2008. 10:30 AM
Are you in the US? If so, you probably want a "sprinkler valve" instead. They're like $10-15 at Home Depot or many hardware stores.

Or a dishwasher repair place may have a similar solenoid-driven water valve for use in dishwashers.

Unless your application is very strange, buying a purpose-built solenoid valve is probably a lot easier, cheaper, and more reliable.

If your application is very strange, you may need more torque to open/close the valve than a direct-driven stepper motor can provide. You may need a gearbox.
Herodotus in reply to The Real ElliotMay 10, 2008. 10:37 PM
I went to the hardware today (Sydney, Australia) to get a solenoid garden watering valve to use on my yacht. All seemed to be either mains power or 24 volt DC - no 12 volt available. Anypne know where I can get a 12 volt DC one please?
TurboTronix in reply to The Real ElliotMar 20, 2008. 7:38 AM
It is for a school project. I changed it a little though. Now all I need is to use your setup but with some sort of a switch that will allow me to choose the spinning direction. I tried adding a simple ON/OFF switch to one of the ATTINY2313 chip without success. I ordered the H-bridge and should be getting it shortly. Do you know by any chance how should your code look with an input?
The Real Elliot (author) in reply to TurboTronixMar 20, 2008. 3:59 PM
Setting up a button-press input with the AVR (or any microcontroller) is a classic problem. Basically, you can configure a pin as an input pin, and then you use the button to send either a high or low voltage to that pin.

There's some extra tricks because usually switches "bounce" back and forth between on and off as you press them down. You're gonna want to debounce the switch.

This PDF on debouncing is pretty good. And google around to find more examples.

TurboTronix says: Mar 17, 2008. 1:48 PM
ya i guess you are right... A selenoid would be a better idea. I saw an electrical one so basically it would be a simple ON/OFF switch rather then spin.
TurboTronix says: Mar 17, 2008. 12:57 PM
Yes it works but not clean. I need to get the H-bridge going... Also can you by any chance give me an example code where I'll use this setup with an input pin (i.e. a photocell which will base the rotation side of the motor based on its input)? I tried but could not get it going well.
TurboTronix says: Mar 16, 2008. 2:20 PM
All worked until I used the code in your stepperMotor.c Nothing happens, the motor does not run anymore...
The Real Elliot (author) in reply to TurboTronixMar 17, 2008. 10:35 AM
First thing to check is the signal coming out of your AVR going to the H-bridge chip or the motor. Is it giving the right pulses at the right time? If you have some LEDs around, you can hook them up to the AVR pins instead to verify that the code is doing the right thing. If it is, and you're not using an H-bridge, you may not have enough current to step the motor. (Depends on the motor brand and what load you've got attached. Try without load to get it working first.) The solution is to get an H-bridge.
xenomorph says: Mar 15, 2008. 7:15 PM
manuka um I beleive that he/she's using the attiny 2313 wich is $3 at spark fun
manuka says: Sep 26, 2007. 2:44 AM
(removed by author or community request)
stasterisk in reply to manukaJan 6, 2008. 4:08 PM
AVRs only cost ~$1.50
The Real Elliot (author) in reply to manukaSep 26, 2007. 9:15 AM
These steppers don't end up turning out much torque -- they're limited by small coil size and etc. But they're really fun for small and light applications.

Another stepper to look at are the Japan Servo low-voltage models. For example. They're a little heavier/bigger, but offer a much smaller step size and some more torque. They also cost $5 each, instead of $1.

As for AVR vs Pic, it's like Coke vs Pepsi. (With the AVR playing the part of Coke, as far as I'm concerned.)
Thomas Countz says: Jul 17, 2007. 1:12 AM
So in building this, should I put a diode between each motor winding and the SN754410, or should I put a diode between the power supply and the 8(Vcc2) pin of the SN754410.
coolguy says: Jul 1, 2007. 1:37 PM
If you want a cheap solution to greatly increasing the torque and resolution, add gearing. You could probably build one of those homebuilt CNC machines with really cheap unsophisticated parts if you incorporated gearing. BTW nice tutorial. I now have a reason to play with steppers and microprocessors.
AP says: Nov 28, 2006. 9:53 PM
With a motor this small it may not matter, but it's generally a good idea to stick a diode betwen the motor and the rest of the electronics to block back current or give it a shunt to ground.
The Real Elliot (author) in reply to APNov 29, 2006. 11:00 AM
Agreed. You get those "for free" if you go the motor-driver IC route. (Along with the extra voltage.)

That said, I would bet that back EMF is not as important for steppers as for regular DC motors because of the way they're driven. I'll do some 'scoping and get back to you on that.

And anyway, the AVRs also have limiting diodes on the pins that keep the voltage in the 0-12v range. They're not as beefy as the ones in the motor-driver chip, and can overheat if you really overdrive the pins, but for this project, they suit just fine.

For a small (50mA) motor like this, I'd not hesitate to drive it directly from AVR pins. Everything's within spec all around as far as I can see. But I'll test out the peak back-EMF under heavy load before I bet the farm on it.
The Real Elliot (author) in reply to The Real ElliotNov 29, 2006. 2:33 PM
Oops. I was looking again at the specs for the SN754410 chip, and I now think that the diodes in the block diagram may be smallish CMOS-protection-type diodes (like the ones in the AVR) and not proper large-current shunting diodes. The example circuit TI provides has additional, external shunt diodes in it. So AP is right -- if you care about not smoking your motor driver IC, you might want to add some more diodes to the system.
Captain Pedantic says: Nov 29, 2006. 1:10 AM
I have this exact motor. Figured for .99 it's a great way to learn about steppers. I haven't gotten around to playing with it yet. I did assemble the parts for their driver, though. This looks much more comprehensible. Great instructable.
lotmi127 says: Nov 28, 2006. 4:09 PM
Ideas for stepper motor projects?
check this guy out!
http://www.taomc.com/gallery/sand.htm
westfw says: Nov 28, 2006. 1:44 AM
It's pretty cool that you're able to drive the motor directly from the the AVR without letting the magic smoke out; I'll have to give that a try. I'll note that the diagram you derived for a bipolar stepper doesn't match the diagram Electronics Goldmine has on their website (for something closer to a 3-phase motor.) At least you have data to back up your version! Interesting.
The Real Elliot (author) in reply to westfwNov 28, 2006. 11:12 AM
The Goldmine circuit diagram: I started out trying to figure out their circuit and their motor diagram, but the resistances tell another story. I That said, I'd bet their circuit works anyway. They tie the center tap of the bottom coil and one pole of the top coil to ground, then drive them all unipolar. They're missing a step, and they're driving the whole coil in one phase and two half-coils in the others, but if there's enough inertia in the system it should work out ok. But it's obvious that they've got different design goals in mind. (And that's being kind.) So yeah. The point of this instructable is that driving a bipolar stepper like it's meant to be driven isn't hard at all.
Hovercraft says: Nov 28, 2006. 10:04 AM
Good work and good instructable! Oh and the 2nd and 3rd videos are identical. I think you mis-linked the half-stepping one.
The Real Elliot (author) in reply to HovercraftNov 28, 2006. 10:39 AM
Thanks man. Drinking and posting don't mix!
Pro

Get More Out of Instructables

Already have an Account?

close

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!