Solenoid driving.

Good afternoon all,

Please forgive my blatant lack of electronic skills, but I was hoping I might be able to get a little advice from people who know more than I do! I have an Arduino pro Mini board, that I am quite happy programming. I want to use it to control some fluid flow solenoids, in order to stop them burning out. I am operating the solenoids direct from a a 12v power supply, and I need to incorporate some kind of solenoid saver functionality. basically this means that when the solenoid is initially opened, the full 12v is used. When it is open I need to reduce the power to it so that the amount of heat build up is minimised, and the solenoids don't burn up.

I thought about doing this by using a PWM output controlling a switch. That way I can have the duty cycle at 100% to begin with, then ramp it down accordingly. What I am struggling with, is a circuit to control the switching of the solenoid. I have done basic transistor switches before, but nothing that is capable of being driven by a PWM signal and controlling a 12v, up to 15A, output.

So, can anyone recommend any sample circuits that I could use to do this? Or, could you recommend some online resources for learning about high power PWM driver circuits? I always prefer to use something tried and tested, so if anyone knows of an successful existing circuit that I can copy from, I would be grateful.

Many thanks in advance,
Andy

Just to clarify, are you trying to switch a single 12V 15A solenoid (!) or a bank of 12V solenoids which when taken together may draw up to 15A? And if so, how many amps would one solenoid draw (maximum)?

--
The Ruggeduino: compatible with Arduino UNO, 24V operation, all I/O's fused and protected

I think your idea of using a pwm output to control the current to a solenoid is a very good one. The gap between pull-in and drop out leaves a lot of energy to be saved. I would suggest that you use a logic level N-channel mosfet transistor as the switching device. Below is a nice cheap one that should work well. You may have to see if the transistor will require a heat sink or not. 12 amps sounds like a awful lot for a flow solenoid, but only you can tell us that or give us a link to the valve. Of course you need one transistor and one arduino pwm output pin for each solenoid you are controlling. Note that most flow solenoids are rated for continous current operation and won't 'burn out' just because you leave them 100% on, however the datasheet for the solenoid valve should state if that's the case for your valves or not.

Here is a nice transistor:

Also avalible in a module kit form for easy wiring:

And a typical wiring diagram:

Note that the "raw" voltage is your +12vdc external power supply. Also note that you must wire the negative from the 12v supply to a arduino ground pin. And the control input signal wires to a arduino pwm output pin of your choice.

Lefty

Hi Folks,

Apologies if I missed some info out, but to clarify, I will have a bank of three solenoids, individually measured as pulling 15Amps when powered by a 12v supply (the current does drop off to about 8 amps when the solenoid valve opens). The valves are designed for controlling the flow of liquid Nitrous Oxide at a pressure of up to 1000psi, and they have an orifice diameter of 0.125", hence the rather high power requirement to get the valve open. Once the valve is open though, the flow of Nitrous Oxide helps keep it open. The valves I have are designed for intermittent operation, bursts of 10-15 seconds at a time., hence my need to be able to reduce the power to them to reduce the heating. I'll be holding the valve open for about 3 minutes at most.

Thanks for the link to the sparkfun part, it looks ideal to my very untrained eye! One thing I did notice, is on the circuit diagram, there was no diode across the load (ie. the solenoid). I presume I will need to put something here to prevent the inductive kickback causing an issue? I remember from a physics class at school about needing a diode across the coils on a relay, otherwise the transistor switching it on and off failed when the coil was turned off. Also, is there any other bits of electronics that I should consider to help protect against faults? I know a lot of motor speed controllers have opto-isolated inputs in the Radio Control model world.

Thanks again!
Andy

That Sparkfun MOSFET isn't really up to handling 15A! It will dissipate over 10W carrying 15A, necessitating a large heatsink or at least a fan-cooled intermediate heatsink. There are MOSFETs with 0.005 ohm or less on resistances that will be much better choice - must be "logic-level" to interface directly to the Arduino.

I'm a little worried by the high currents though, since the MOSFET output voltage swing is capacitively coupled back to the gate and high-current MOSFETs have much larger capacitances - you have to ensure the design isn't going to inject voltages back into the gate that can damage the Arduino - an intermediate NPN transistor and a non-logic-level MOSFET might be a wiser design.

@bigandy
I'm involved with some rather grunty 12 and 24v DC solenoids.
These draw large amounts of current while they pull in, and the current drops off in the 'holding' position (ie fully pulled in)

I'd check on the rating for the ones you have, they could be continuous rated when fully activated.

Another option that might suit, is to pull them in at full volts, then hold them at a lower voltage.
MarkT is right about using some beefier Mosfets, SDB85N03L are relatively cheap and are rated at 80A for Automotive use.

Oatley use them in a high power Motor controller, but use a voltage greater than the motor voltage to control them.
http://secure.oatleyelectronics.com//product_info.php?cPath=94&products_id=206&osCsid=e4c01a4e8e3558fe43349c255cb4b785
I have the full cct if its any use.

Mark

Some industrial relays have an economizer circuit, when the relay is "pulled in" a circuit with a resistor powers the relay coil at a reduced current level. They do it to reduce heat and extend the life of the coil.

For your solenoid you could have two FET channels. The first would power the solenoid to open it and the second would come one with a resistor in series. After the a preset time you would drop out the first FET full power circuit and run on the second resistor and FET power circuit.

You will need to know how much current your solenoid requires to stay open and size your resistor accordingly.

It is not as efficient as PWM but, it would be easy to implement and troubleshoot.

Mark