Electrical – How to drive low impedance load with arduino and transistor

arduinocurrentliposwitchestransistors

I'm building a device which is powered with a small 3.7 v lipo battery. It is regulated down to 3.3 volts and powering an arduino mini. The arduino has to switch an inductive load on for about half a second. The inductor has only 5 ohms of resistance. The lipo battery provides enough current when connected directly. I have attempted to make a simple NPN transistor switch to activate the load with the arduino signal. I use direct unregulated power from the battery, through the load into the BJT collector, but so far most transistors have failed to allow necessary current to be switched. Few components is a requirement because this device has to be small

Best Answer

I'll agree that the Arduino will more likely be able to drive a MOSFET transistor into saturation, but I don't think that's the only problem. Once you do get the transistor to turn on, the large current draw will cause the battery voltage to drop below the 3.3V needed by the Arduino. This will cause the Arduino to let the transistor turn off. Then the battery voltage will recover, the Arduino will reset and the whole process will repeat over and over and over ...

Measure the actual voltage across the battery when connected to the inductive load. If it stays high enough (3.3V + dropout of voltage regulator) then replace the NPN with a MOSFET and live a long and happy life. If not, then you have more work to do.

You didn't say what the inductive load is but I'll guess that it's something mechanical like a relay or solenoid, all of which have similar electrical behavior. The first thing to understand about them is that they require some minimum amount of current to operate them. The full battery voltage might not be required to push that minimum amount of current through them.

The most obvious solution is a series resistor. As it stands the current (following the inductive transient) is limited only by the 5 ohm resistance of the load. Add more resistance to lower the current. If you're lucky there will be some value of added resistance that still allows enough current to flow to operate the load, but not so much to drop battery voltage below what's needed to keep the Arduino alive.

The more sophisticated solution is to use the Arduino to PWM the transistor to maintain the necessary current. For this you will need to add a freewheeling diode across the load. These are sometimes called clamp or flyback diodes, but I called it a freewheeling diode in this case because it allows the inductor to continue conducting after the transistor is turned off. It let's the transistor freewheel as in the figure on the right.

enter image description here

So the idea is, you use the Arduino to turn the transistor on and off at something like 10kHz (PWM) and adjust the duty cycle so that the current is only as high as it needs to be through the the relay or solenoid or whatever the inductive load is.

The next step up in sophistication is to implement a so-called peak-and-hold controller. This takes advantage of the fact that relays and solenoids typically require a large current to actuate them, but then comparatively less current to hold them. In your case you need to keep the load actuated for about half a second, but depending on the device, you can probably reduce the current after some small fraction of that time. With the PWM controller you simply reduce the duty cycle after, say 100 ms, to reduce the current.

The actual currents and times will need to be determined from datasheets or experimentation or both.