Recently I made a board to control Nema Size #23 Steppers, 4V x 1.2A, and they run pretty warm --> hot after some half hour activity, this is normal, it is a motor anyway. Using current control reduced some of the temperature, it is just a pulsed system that cuts off the current for very few time whenever it goes bigger than 1.2A. Running at low speeds, the motor steps and then settles quiet for some time, at this point the current increases because the coil impedance reduces. This is known about stepper motors, running at high speed it consumes less power than stopped with coils energized. This is the reason to use current control, to avoid the motor to super-heat. After reading several chip specifications, I decided for the (Dual H-bridge) L2998 (Allegro), considering current, voltage and features, and the fact of being a dual-H-bridge requires just one chip per motor. It could not be the best, but for sure it goes over several well known other chips features, but not about price, it is cheap and available at NetBuy. The only problem with this chip is that it needs at least 10V to feed its internal electronics, so the 4V bipolar motor needed to be connected as unipolar (8V). There are several other chips around, but I think the H-bridge is the most versatile, since you can connect unipolars, bipolars (connected as unipolar), or even a bipolar with center tap to +VCC (since the bridge would use only the lower section transistors). By this way, the H-Bridge drivers can accept any kind of 2 phases stepper motors. Several chips uses 2, 3 or more pins to control the motor action. Phase A (on/off), Phase B (on/off), sometimes Enable (1 or 2 pins), sometimes also PWM control. One way to control nicely the motor using at least this 2 control pins, is create a two bit counter at the software (0-3), so going forward you just increase the counter and AND it with 00000011 (03h) so it would keep only the last two bits, going backward just decrease the counter and apply the AND again. Then check the counter value and run one of four different small subroutines to turn ON or OFF the phases, or just control the phases based on this two bits counter value, bit 0 = phase A, bit 1 = phase B. Bit0=0 => Phase A=Off, Bit0=1 => Phase A=On, Bit1=0 => Phase B=Off, Bit1=1 => Phase B=On. Using this 2 bits counter is nice since you don't need to save any other motor status. At the time to update the motor physical motion, just consult the counter and take the correspondent action. Of course you can use 4 FET transistors to drive a bipolar motor, gates tied directly to the PIC port pins, still the same logic, for each of the 2 bits counter value, would corresponde to a combination of those PIC port pins on or off. But then, you won't have any temperature protection, current control or anyother thing you could find at those chips, and... by the way... 4 x IRFxxx transistors would cost more than a L2998 chip... :)