Push-pull tri-state motor driver

I am working on a small bot that will use 1.5v pager motors and run from 2 AAA batteries.  The brains will be an 8 pin PIC. So I am looking for ways to conserve pins as much as possible.  I have been inspired by the Y bridge  and tri-stating work that I have seen here, but I am really aggressivly trying to reduce the part count on this bot.  So,  I thought I would try the trick that the Big Trak uses to only use a half-bridge for motor drivers, but I need it to use only 1 pin per motor, not 2.  So after noodling around a bit and trying some things.  I finally arrived at a very simple solution by turning a typical half-bridge upside down:


setting the pin to 1 will go one way, 0 the other, and Z will coast.  Setting it up on the bread board and my favorite prototyping tool, the sparkfun simon game.  I have proved that it functions, but it may need some tweeking of the base resistors to get more current to the motors.  Here is the proof video:


Nice minimalist design

Nice minimalist design dolabra. Splitting the power supply isn’t normally that viable, but for your tiny pager motors it could work quite well.

I’m guessing you’ll have two such bridges & motors for moving the bot around? If so, consider installing one motor ‘backwards’ so that when the bot is moving forwards (or backwards) one bridge will have the PNP active and the other will have the NPN active. That way you won’t wear out one battery much faster than the other.

Yes, that is the plan. I’m

Yes,  that is the plan. I’m hoping that there is enough torque for the motors to drag the batteries around.

I think that is a problem

I think that is a problem with your design.

According to the datasheet, based on the current flowing through it, Q1 have a Vce of 0.2V - 1.7V. When you open Q1 by provding a low voltage to his base, Q1 emitter will be somewhere around 0.2V if the current is small so Q1 will close because base voltage will be lower then emiter voltage. Then the emiter voltage will rise again to 1.5V (through the motor) and Q1 will open again and the process repeats. If the current is higher Q1 will have a bigger Vce and the cycle will have a higher frequency.

For cr1cx I have used a design very simmilar to the one mentioned by you for BigTrak and the current through the motors was low because of the BJT’s Vce. So I have switched to relays.

For efficiency, use FETs, see OddBot’s design.


**i am not following **
I am having some issues with current and it is proppably due to the Vce drop but I don’t follow your explanation. Q2 is a PNP so it should be conducting when the emiter voltage is higher than the base voltage. But then again I may not be thinking straight

In your drawing Q1 is

In your drawing Q1 is PNP.

When the input pin is in the tri-state condition both Q1 and do not conduc current so the Q1’s emitter potential is 1.5V through the motor. If the input pin goes low (max 0.6V according to microchip’s datasheets) Q1 will conduct current because Vbe is -0.9V.

If the current through Q1 is like 150mA then Q1’s emiter will be 0.4V (from the datasheet). Now Vbe will be 0.2V and Q1 will stop conducting current. Q1 emitter will go to 1.5V through the motor and the process will repeat makeing it oscillate.

Basically, Q1 will not oscillate when conducting only if his emitter potential will not go bellow 1.3V which is not a feasible condition leaving you with only 0.2V for the motor.

I think that  FET transistors may solve the problem.


How are fets going to behave in the tri-state mode?   Will the tri-state leave the fets in an “undefined” state?

You’ll need to add an

You’ll need to add an appropriate pull-up/down resistor to the gate of each FET, which will hold it in the off state when you set the control pin to high-Z/tri-state.