What's so great about stepper drivers?

Hi there, I was just recently looking at the RepRap project and found out it is using dedicated stepper driver chips. However, I recall having seen stepper motor connected to Duino just using 2004 darlington array, or 293D h bridge. So I just wanted to ask-what's the advantage of using stepper control circuit? Using less Duino pins? If I'm not mistaken, it's not common to use any sort of hall-effect feedback from steppers, so that leaves you with needing pins as output only-and in such case, one can use 74HC595 or similar shift reg, right? Or is it processing power? You basically only need to drive 1 or 2 steppers at the time if you optimise the code. :/So why the drivers? They are expensive and I don't see much pros.

While not necessary for all applications, I think in something like a 3D printer where repeatability of all aspects of the motion are important would make the extra feedback worthwhile. I know that on my Thing-O-Matic varying the speed of the movement in just one axis can make a significant difference on how much plastic gets deposited and where.

You've mentioned some of the reasons - less pins, less processing done on arduino

add to that the fact that most drivers support microstepping and high currents, chopping and stuff, that most ppl expect want their arduino to act as gcode interpreter or do lots of things other than just controlling the motor and you've got the answer

besides... consider the price of pololu drivers - as little as 12$ - it isn't really practical to build your own driver using l297 & l298N... sure if you're just experimenting with step motors ULN2004 or l293D seem ok but they're not for anything serious

A dedicated stepper driver generally uses step and direction signals (2 wires vs. 4 required). The driver also handles microstepping and current control. More advanced drivers have features that limit motor resonance, etc. All of these are necessary for critical motion control applications such as CNC.

TO put it as simply as possible - A simpler interface. All you have to do is send the driver pulses for the number of steps and the driver handles how the phases are powered on and off. You program is just concerned with the motion, and not how the motion in done.

http://arduino.cc/forum/index.php/topic,84809.0.html - you can even do a driver using Arduino related chips - in this case an ATtiny2313 -http://arduino.cc/forum/index.php/topic,84809.0.html