Transistor issue

Hello everyone, first post :slight_smile:

I'm planning on making a H bridge for reverse motor control, so to get started, I bought a few transistors to play with. For reference, the transistor has BC546 written on its flat part, so shoving that into Google brings up this datasheet:

My first plan (just to get the hang of working with transistors) was to have the positive lead from my 9v battery connected to the collector, the base connected to pin 6 from the arduino, and the emitter connected to one end of the motor. The remaining ends of the motor and the battery both go to ground, which goes to the GND slot in my arduino. I anticipated that switching the battery on without powering the arduino whatsoever would have no effect on the motor, since the lack of current flowing through the base would not allow any current at all to flow through from the collector to the emitter, and then to the motor. Conversely, sending a signal down from the arduino to the base (with the battery on) should have turned the motor on due to the current flowing into the base.

However, I noticed that even when the base was NOT connected to pin 6 and both grounds from the motor and the battery were also not connected to the arduino, (in other words, the arduino is completed separated from the circuit) the motor begins to turn at some frequency when the battery is in the 'on' position. That is, instead of continuous power, the motor turns on, then off, then on, and so forth. I approximate the time between consecutive ons to be between about 0.4 of a second.

This makes absolutely no sense to me, because at school I always thought that no current would flow through from the collector to the emitter if no current flowed through the base. So if anyone could shed some light on this issue, it would be greatly appreciated.

Thanks :slight_smile:

Can you show us a schematic? Your description leaves a lot of questions that can best be answered with a schematic of how you have things hooked up.

I apologize for an incomplete post, I have edited it to make a little more sense
It would help your attempt to have tried some of the examples provided in your IDE.. First. Doing so gives you a familiarity with properly using a port pin, the processor pins are Not indestructible. It's a good idea to follow some of those sometimes silly little exercises - Understand that they are there for a good reason and follow as many as you can find parts to do so...
Do them and understand why they work - This is really important as it is both microcontroller training, it is electronics training, it is Programming training And it is what you need most to work well with the Arduino product.
What I was trying to say is it is a good idea to get some familiarity with basic electronics first. Your connection to the Arduino was not the proper method to drive a transistor which is what Patduino was trying to point out. Your issue with the transistor conducting was most likely a floating base lead that is picking up a stray signal and conducting. This was in part why I advised you to study some basics first. Make a drawing (it's good practice and a good thing to learn to draw schematics) so you can post it here for commentary. I apologize for my rather terse note in the beginning... BUT you still need a little electronics training first. You have some data from an experiment and no way to understand it without some more training. There is an application called Fritzing that can be downloaded free from this forum that will help you with the schematic drawing and for making drawings of breadboards as well.
{Heavily Edited RKJ}

Bob

This makes absolutely no sense to me

Due to interference.

Hi SprinterDrift,

Welcome to the forums, and congrats on your first post...

You'll need to include a 1k or 2.2k resistor inline between the GPIO pin and transistor base to limit current flow. (These are common values you should be able to use for all of your future projects as you get the hang of them...)

The intermittent operation you describe is most likely caused by the fact that the voltages are floating - not tied together, and varying enough to trigger the transistor switch.

Pat

That transistor is way too small to switch a motor, it is rated at 100mA max continuous collector current.

@ dhenry... so what else is new?

Bob

Sorry if I wasn't clear enough.
I've posted a schematic on imgur:

http://imgur.com/Nh4qa

My problem is that even when the base is NOT connected to the arduino, the motor is still turning intermittently when the battery is on.
@Patduino, dhenry: I thought it was some kind of interference, could you please elaborate more, or perhaps link me to a page where it explains what is going on? I'm not exactly sure what voltage floating is. Also, advice on how to stop this would be appreciated.

To add to the confusion, a short while ago I attempted the circuit again, however, this time I attached the transistor base to arduino pin 7, and both the grounds (the negative battery end and the ground motor end) to the GND pin on the arduino.

Circuit here: Imgur: The magic of the Internet

My first impression was that this circuit was working, that is, sending a signal down pin 7 (digitalwrite(forw,HIGH)) made the motor turn on, whereas sending a LOW signal down pin 7 keeps the motor off. However, when I switched the battery off, the motor kept turning under the command of the arduino, meaning that this entire time, the motor was being powered by the signal from pin 7 instead of the power from the battery! :frowning:

For reference I'm using one of those old blocky Lego technic motors.

The problem is your are using the npn transistor improperly to switch the motor, both the collector and base current flow thru the emitter, so the base drive current is apparently powering your small motor, what you need to do to properly switvh the motor is to connect the motor + to the battery positive, the motor - to the transistor collector, and the transistor emitter to the battery -
then connect the battery - to your arduino ground, and wire a resistor between the transistor base and the arduino pin, now when you output high it will turn on fully, and turn off fully when outputtting low

For more information on using the transistor just google transistor as switch and you will find various schematics on the proper wiring
just remember your transistor is npn(switches negative), which is different from pnp (switches positive)
also because you are driving a dc motor you should have a flyback diode(google that too for examples) to prevent damage to your transistor

Do as winner says, but you also need to connect a diode in parallel with the motor to catch the back emf when you turn it off. And use a transistor with a greater current carrying capacity.

Okay,

First, those transistors have typical gain ranging from 150 - 270. This means almost any EMI in the area will cause the transistor to turn on, at least a little. The base needs to be connected to something, so the first circuit is a no go. 2nd, the next circuit you show is also a common collector circuit, which is probably not ideal for your needs, and it would need to have a base resistor to limit the base current. Setting it up as a common emitter would allow you get a little more potential across the motor too. Finally, the transistor is not up to the task of running even a tiny motor. You almost certainly need a bigger transistor and I would recommend a Darlington arrangement which is basically 2 transistors, althogh you can buy power Dalingtons in a single device.

See the attached schematic. It will handle a motor that draws up to 10A and is pretty cheap.

Circuit here: Imgur: The magic of the Internet

You want the motor / load to be on the collector of your switch.

Emitter switching is OK in some cases but you switch mostly via the collector.

@Patduino, dhenry: I thought it was some kind of interference, could you please elaborate more, or perhaps link me to a page where it explains what is going on? I'm not exactly sure what voltage floating is. Also, advice on how to stop this would be appreciated.

Connect a 10k resistor from the base to ground. That'll keep the base voltage 0 when not connected to the Arduino. It's a good idea to keep it there even when it is connected. Voltage floating just means that the base isn't tied directly to any voltage source, so the voltage fluctuates in value, sometimes it has enough to trigger your transistor. The 10k pull-down resistor will tie it to ground so it won't do that. Google pull-down resistor for more. This is a very common problem.

Also, when you connect the Arduino GPIO pin to the base, put a 1k resistor in between them.

BillO:
... I would recommend a Darlington arrangement which is basically 2 transistors, althogh you can buy power Dalingtons in a single device.

See the attached schematic. It will handle a motor that draws up to 10A and is pretty cheap.

  1. The flyback diode is on the wrong place in that schematic, it doesn't protect the transistor when the motor switches off. For that, you need a flyback diode connected in parallel with the motor.

  2. IMO darlingtons should almost never be used, because they have high saturation voltage. If the motor draws a substantial current, this results in a lot of power being dissipated in the darlington, so it will get hot and need a heatsink. A power mosfet is a much better solution in such a case. If the current is not so high (say 500mA or less), then a single transistor will do the job more efficiently and with less heat generation than a darlington, especially if the transistor is a high gain low saturation type such as the ZTX851.

dc42:

  1. The flyback diode is on the wrong place in that schematic, it doesn't protect the transistor when the motor switches off. For that, you need a flyback diode connected in parallel with the motor.

Agreed. Thanks for catching this, maybe a bit too early on Sunday for me. Updated schematic attached.

  1. IMO darlingtons should almost never be used, because they have high saturation voltage. If the motor draws a substantial current, this results in a lot of power being dissipated in the darlington, so it will get hot and need a heatsink.

Not sure I agree it would be a factor in this particular case but generally, I do agree.

A power mosfet is a much better solution in such a case.

I agree. The MOSFET would be my first choice as a switch like this. We were talking about transistors though.

If the current is not so high (say 500mA or less), then a single transistor will do the job more efficiently and with less heat generation than a darlington, especially if the transistor is a high gain low saturation type such as the ZTX851.

Yes, very true. The ZTX851 looks like a pretty good choice.

For what it's worth, the updated schematic now shows the ZTX851.

I agree. The MOSFET would be my first choice as a switch like this. We were talking about transistors though.

When did a MOSFET stop being classified as being a transistor? That's what the T in MOSFET is all about! :smiley:

Lefty

Another thing you should learn about is the proper way to figure out the transistor base current, comes in handy when designing something
You take the switching current and divide it by the minimum hfe(gain) of the transistor and maybe add 5/10percent
thhen you take your base voltage(5v from arduino) minus .7v(the voltage drop acrosss the transistor) and divide that by the number figured out from the current, that will be your resistor to fully saturate the transistor with that load to minimize losses and without wasting extra saturation current or even worse not fully saturating the transistor and creating extra heat

divide it by the minimum hfe(gain) of the transistor

hFE is a concept for linear amplification and has very little meaning for switching applications. Typically, you design a circuit assuming the switcher is driven to saturation: Ic / Ib < 10.

retrolefty:

I agree. The MOSFET would be my first choice as a switch like this. We were talking about transistors though.

When did a MOSFET stop being classified as being a transistor? That's what the T in MOSFET is all about! :smiley:

Lefty

Touche!