Running a stepper motor directly from Arduino outputs... will zeners help?

howiem:
Using Schottkys in the configuration you suggested would protect against voltages over 5.33v (assuming BAT-43s with a .33v drop), which is only half a volt-ish more protection than the zeners but with double the component count - is this enough of a reason to use your 8-diode method over my 4 zeners? Is there another reason not to use zeners?

If you use zeners, you need to be sure that the reverse-biased zener + forward biased zener will not conduct at 5V (or whatever the supply voltage happens to be), but will conduct before any appreciable current flows through the pin protection diodes (I would choose 5.5V as a maximum). So it depends on the tolerance of the zener diode. A 4.7V 5% tolerance zener plus forward-biased zener might start to conduct at 5.065V if it were at the bottom of the tolerance range, or at 5.535V if it were at the top. So it's possibly just good enough.

If you are not careful, you may drive the stepper before the supply voltage has reached 5V, and in that instance the zeners will not protected the MCU, which might lock up.

So I think the Schottky diode solution is better, even though it requires more components.

As the calculated current is only 18mA, one other possibility is a snubber (resistor and capacitor in series) connected across each winding, where the resistor has a value lower than the winding resistance. The minimum value of the capacitor depends on the inductance of the winding. It might turn out to be physically rather large, bearing in mind that it can't be a polarised electrolytic capacitor.