Not getting enough power out of 2N3904 transistor to motors

Hello,

Im using an Uno board mounted to an RC car and using its 9v rechargeable batteries as power. I have outputs 6, 9, 10 and 11 wired to an H-bridge of 2N3904 transistors in order to turn on the small dc motors to move forward or backward. The problem that I am finding is that even though I've got the 9v wired into the emitters, and the collectors to ground, the base voltage isn't enough to turn on the transistors completely.

Any suggestions as to how I can get full power to the dc motors? Thanks.

Im not an authority on this and I'm very likely wrong but you could try to connect it to an external power source and hook it up through a breadboard

optical_sensor_array:
The problem that I am finding is that even though I've got the 9v wired into the emitters, and the collectors to ground, the base voltage isn't enough to turn on the transistors completely.

I hope not. As described, that's awful.
Can you post a schematic of what you've done?

optical_sensor_array:
Im using an Uno board mounted to an RC car and using its 9v rechargeable batteries as power.

Picture or such of the car please. Is this a 9.6V NiMH battery?

optical_sensor_array:
I have outputs 6, 9, 10 and 11 wired to an H-bridge of 2N3904 transistors in order to turn on the small dc motors to move forward or backward.

Those are small signal NPN transistors; given that most 9.6 VDC R/C cars have a fairly hefty motor, I doubt they have anywhere near the current capability needed to drive the motor. Without at least a picture or information on the motor, it's impossible to tell though. Have you measure the current needs of the motor (running and stall)?

optical_sensor_array:
The problem that I am finding is that even though I've got the 9v wired into the emitters, and the collectors to ground, the base voltage isn't enough to turn on the transistors completely.

Multiple problems:

  1. From your description, you have those transistors wired "upside down", based on your description - I'm surprised they aren't smoking.
  2. Do you have a schematic of your circuit?
  3. Base resistors?

optical_sensor_array:
Any suggestions as to how I can get full power to the dc motors? Thanks.

I'm wondering why you are even using an external h-bridge - was there something wrong with the h-bridge on-board the R/C receiver of the car itself?

Also - did you happen to read this "mega-thread"?:

http://arduino.cc/forum/index.php/topic,86883.0.html

I dunno what kind of car or such you have - maybe the above wouldn't help you, but I've found that most toy R/C cars made in the past decade or so use that same chipset; it's become like a de-facto standard for cheap R/C toys.

First, 2N3904 are low-current transistors. They don't have enough current gain at the currents your motors will need.

Second, if you wire the transistors correctly, the upper transistors in the h-bridge will be in the emitter-follower configuration. So even if you used more suitable transistors, you would get a maximum of about 4V across the motor.

The best way to drive a 9V motor from an Arduino is to use an h-bridge chip with mosfet outputs. Unfortunately, most of them are only available in SMD packages, but you can use an SMD adapter if you need to.

Ok, I lied. I don't know why I said the transistors were wired like that, they have 9v going to collector, then emitter through the motor then to ground. The reason I am using these transistors is because I had purchased a pack of 100 from a hobby pack so I have a lot laying around, and also as a learning process in starting with the basics and building circuits from scratch.

Either way, what I've noticed is if I send the 9v through the base of the transistor, it allows all of the collector voltage through (full power to motors), but with just the small signal from the arduino outputs, not much goes through.

And yes, the car uses 6 1.5v nimh batteries

Here's a quick sketch of the motor portion of the schematic:

schematic (1.6 MB)

With that kind of connection, your motor is getting just 5v when it is on.

You will need a phase shifter for the upper npns.

Driving the lower transistors like that without resistors between the base and the Arduino is a good way to damage both the transistor and the Arduino.

If you have any PNP transistors, you could use the attached circuit for each side of the H-bridge. Like your existing circuit, if you accidentally set both output pins HIGH at the same time, you will short out the 9V supply and probably blow the transistors.

dc42:
Driving the lower transistors like that without resistors between the base and the Arduino is a good way to damage both the transistor and the Arduino.

When I attached a 1k resistor (per a schematic I was using as reference) the transistor was barely getting a signal. Who knows, maybe I've already damaged the arduino outputs, but I'm still getting a weak signal out? In any case, it looks like ill be needing some pnps shortly.

Thanks for the schematic, I plan to eventually use PWM outputs to smooth out the speed of the motors, will this setup be suitable for that?

These are excellent choices for high current applications:

http://www.redrok.com/PNP_Darlington_TIP127_-100V_-5A_Hfe1000_TO-220.pdf

LarryD:
These are excellent choices for high current applications:

http://www.adafruit.com/datasheets/TIP120.pdf
http://www.redrok.com/PNP_Darlington_TIP127_-100V_-5A_Hfe1000_TO-220.pdf

Thanks for the suggestion! Luckily my work was kind and generous enough to donate two of each for my h-bridge!

LarryD:
These are excellent choices for high current applications:

http://www.adafruit.com/datasheets/TIP120.pdf
http://www.redrok.com/PNP_Darlington_TIP127_-100V_-5A_Hfe1000_TO-220.pdf

Darlingtons like those can carry a reasonable amount of current and have enough gain, but that comes at the price of a high saturation voltage (typically 2V or more at an amp or two) and running hot. You are better off with an ordinary medium-current transistor (not a 2N3904 or other low-current transistor) for switching current up to about 0.5A, and a mosfet above that.

optical_sensor_array:

dc42:
Driving the lower transistors like that without resistors between the base and the Arduino is a good way to damage both the transistor and the Arduino.

When I attached a 1k resistor (per a schematic I was using as reference) the transistor was barely getting a signal.

That's because (a) 1K is OK for switching a relay but is too high a value when you want to switch a few hundred mA, as you need to for a motor; and (b) 2N3904 is the wrong sort of transistor for switching a few hundred mA, its gain is too low at these currents.

dc42:
Driving the lower transistors like that without resistors between the base and the Arduino is a good way to damage both the transistor and the Arduino.

If you have any PNP transistors, you could use the attached circuit for each side of the H-bridge. Like your existing circuit, if you accidentally set both output pins HIGH at the same time, you will short out the 9V supply and probably blow the transistors.

Actually you can drive an H-bridge with two pins rather than four if cross-connected thus:

The only issue is that very short spikes of current will flow as it is switching (choosing the right values for
R5 and R6 controls the peak currents though).

Don't forget those free-wheel diodes - here I used a bridge rectifier to get 4 diodes in one package, a neat trick.