Im trying to design a 8 channel PWM controlled solenoid driver circuit

Thread Starter

James Nolan

Joined Oct 13, 2019
I'm trying to design a solenoid circuit for a pneumatic valve system, needs to control 8 valves, around 3 amps current draw each. Its going to be controlled by an Arduino Due and I want it to be PWM controlled for fast response time. Iv been browsing the internet for a suitable IC and have found lots of options, none of witch are particularly appealing. I want the circuit to be able to go into a low current mode after initial inrush current. Anyone got any suggestions for IC's or reference designs?


Joined Mar 14, 2008
I want the circuit to be able to go into a low current mode after initial inrush current.
Here's solenoid driver that initially outputs full voltage for fast response, and then goes to a low-power PWM mode to hold it in place.

The LTspice simulation is shown below.
It uses a 555 to generate the PWM signal and Schmitt-trigger inverter gates to generate a clean pulse from the slow RC rise-time of the PWM delay circuit.
The output is turned fully on for a time determined by the R2C3 time-constant.
It then goes to the PWM output mode with the duty-cycle determined by pot U2.
Typically you would adjust the duty-cycle just high enough to keep the solenoid pulled in.

Note to be sure and add a 10kΩ pull-down resistor to each gate so the MOSFET stays off when not selected by the mux.



Joined Mar 10, 2018
All valves get the same PWM signal, or do you need 8 separate
independent PWM channels each driving individual power interface ?
With detection for individual valve open to initiate low power mode
for that valve ?

If independent what triggers each PWM to initiate open valve ?

What controls the duty cycle of the PWM ? Or is it fixed, one value
to open valve, another to go to low power hold open value ?

Any need for circuitry for stuck valve, to detect and attempt to correct ?

Regards, Dana.
Last edited:

Thread Starter

James Nolan

Joined Oct 13, 2019
They all need 8 seperate independent PWM channels, PWM frequency is fixed.

The system will be used mainly in binary mode, but I want the option of PWM so I can control the angle of the valves if needed.
so the low power hold is mostly for the binary operation. The circuit crutschow gave me could probably work for what im looking to do. Id just have to modify it to be able to change the pwm duty cycle after the initial inrush.


Joined Oct 7, 2019
"TCA6507 Low-Voltage 7-Bit I2C and SMBus LED Driver With Intensity Control and Shutdown"
There is a class of ICs for driving LEDs. Some have built-in PWM dimming. This might not be the right part but I can find 200+ LED drivers in the 6-12 LED range that use PWM.
I think your computer can talk I2C or SPI to the IC which has many outputs, each could drive a power MOSFET and the solenoid.

Strange idea, good luck. RonS.
" PCA9551 8-bit I2C-bus LED driver with programmable blink rates"
Last edited:


Joined Mar 10, 2018
Here is a single chip solution, 8 PWMs on chip, a scanning SAR to read trimmer pots
so that you can set initial PWM duty cycle. Also 8 inputs to indicate valve is open,
could be contacts, or optical or resistive indication. PSOC can handle that with other
analog and digital onchip capabilities.

Board would look like -

Actual size much smaller than pic. Its a $ 10 board. Left portion snaps off after
you have finished code and debug development.

Project looks like -


Everything but power mostfet drive for Valves on one chip.

Code maybe 30 lines or so.

As you can see most of the resources (right hand window) still left for
other tasks.

If you have trigger inputs, analog or digital, easy to add more pins to
handle that.

Note because of COM capabilities it has, I2C, UART, version with USB, SPI,
you could use that to set valve PWMs and eliminate the pots. More code

Timing accuracy of PWMs ~ 2% over T and V(without using a xtal, << 1% with

PSOC Creator is IDE, it and compiler free.

Regards, Dana.
Last edited:


Joined Mar 10, 2018
Additional comment.

After you drag a PSOC component onto design canvas, you double click it
and perform basic config. Then to do the coding right click component,
open datasheet, there is a section describing all the function APIs written to
use in your code. Basically makes programming pretty easy.

Regards, Dana.