Introduction: Simple Stepper Motor Driver for Arduino CNC Projects

This is a simple dual H-Bridge drive I made some time ago using some chips I got off eBay. It uses a Pic micro-controller to handle the step direction inputs to coil drive logic. I used the cheapest pics I had around which were the 12c50/509's. There is no enable input but that could be added by using a larger pin count PIC.

Check out the completed Arduino 3 axis mill here:

Step 1: A Universal Driver

I built a bunch of these to use with Linux EMC. I used this same circuit for all types of stepper motor dirvers in CNC's, eggbot's, Idle Air Control (IAC) Testers, digital meter movements etc. the TA8050P chips are capable of handling 30V at 1.5 amps per phase with built in overcurrent, overvoltage, and overtemperature protection.I also used the cheaper TA8080K chips which are 30V at 1a.

there are different versions of the pic code for full and half step modes. Using a larger pin count chip it would be possible to add a select pin for step mode and even an enable pin. I never really needed that since I build each board or a specific machine and know if I will need half or full step mode.

the lack of enable has never really bothered me. I used the enable signal from the computer to control the motor supply. The PIC's are run from a separate 5v supply so they keep their logic active.

I have also placed an auto lamp in series with the motor supply lead and used the enable line to shunt it with a relay. this keeps a low current through the motors when they are not enabled and acts as a brake.

I want to try using a programmable supply and use the enable pin to raise the motor supply voltage providing the same effect without the glowing lamp. it just seems too complicated when I have so many 1156 bulbs on the shelf..


U1 - TA8050P

U2 - TA8050P

U3 - 12C508/9

R1 - 1K

R2 - 1K

R3 - 10K

R4 - 10K

C1 - 25uF 35V

C2 - 25uF 35V

C3 - 10uf 10V

D1 - 1N4007

D2 - 1N4007

Step 2: Variations and Code

I've reused this circuit over and over. A simple variation is to add a 5v regulator ad power the Pic from the motor supply. A 78L05 is more than enough. The same pic code also works fro driving Transistors or Mosfets or ULN2003 transistor arrays for unipolar motors.

its even possible to wire up an arduino to a db-25 and be able to switch to linux/windows parallel port control.

Step 3: Universal BOB for Linux EMC

This is the BOB PCB to go with the controllers when using Linux emc or mach2/3 etc.


R1 - 1K

R2 - 1K

R3 - 1K

R4 - 1K

R5 - 100K

R6 - 100K

R7 - 100K

R8 - 10K

R9 - 100K

R10 - 1K

R11 - 10K

R12 - 10K

R13 - 10K

R14 - 10K

C1 - 100uF 25V

C2 - 25uF 25V

C3 - .1uF

C4 - .1uF

C5 - .1uF

C6 - .1uF

C7 - .1uF

C8 - .1uF

Q1 - 2N2222

Q2 - 2N2222

Q3 - 2N2222

Q4 - 2N2222

Arduino Contest

Participated in the
Arduino Contest