for my project I want to drive about 12 x IRLl014 FETs with an ESP32. To get more pins I want to put a IO-expander, either a MCP23017 or MC23008 onto the I2C and out onto the gate. I know that driving the IRL directly works with an IO but what about the expander?

The maximum current can be 20mA per IO or 150mA total. So using the 16 channel would get me a really low current to charge the FET?

The FETs either drive SSRs or motors.


simulate this circuit – Schematic created using CircuitLab

I tried to make a simplified schematic. It works like this ESP32 > I2C/MCP23008 or MCP23017 > MOSFET (either IRLL014 or IRF3704). > SSR or Pumps directly I use exactly 12x IRL014 and 4x IRF3704 right now it's set up like this:

FET1-8 on MCP23008_1, FET9-12 on MCP23008_2, PFET1-4 on MCP23008_3

On the load side there is either 24V or 12V depending on the jumper/load (whatever it needs, as I have 12V pumps or 24V pumps). Other than pumps there are also DCAC SSR(RLY1 in the schematic) to switch.

I got some questions there:

  • Would that even work? I don't really know how much current the gate of the FET draws. If every FET draws more than the MCP could deliver for a long while it makes smoke. Would I need a resistor in series to MCP to reduce the maximum current drawn? (And protect from on-off switching currents?)
  • Would I notice the charging times with <20mA?
  • Do I need a level shifter if I power the MCP with 5V?
    • I know I could also just control them with 3v3 Volt but I read that more voltage makes the FET switch better. Is that correct?
  • Do I need to watch anything specific aswell if I set it up like that (something that I didn't thought of)?



1 Answer 1


It should work assuming the pcb layout is done correctly. The gate only draws current when turning on or off. Assuming you’re not expecting to do pwm, then I don’t forsee an issue.

The pulldown resistors can be 10k. How did you come up with 4.6k? They are only to ensure the mosfet remains off during reset/until the expanders are initialised.

A 22R’gate stopper’ resistor in series with the gates is suggested.

Yes, you will need level shifting on I2C.

Driving the mosfets with 5V is preferred.

Have you considered using something like a TPIC6B595?

  • \$\begingroup\$ Thanks for the answer Just some questions . When I suddenly switch on all 8 FETs at the same time wouldnt the current drawn be to much ? 4k6 because we had a 10K before we used the I2C (IO Pin with 3v3) but there was a problem that they didnt turn off complete. We wanted to try a lower resistor to get a faster/ better turn off. Why "only" 22R ? I thought atleast 250R to guarantee <20mA. I thought about using shift registers but never used them. I heard they are faster than I2C but do they have other advantages ? \$\endgroup\$
    – Daniel Do
    Commented Apr 28, 2021 at 16:45
  • \$\begingroup\$ Internally to the chip there are two main limits to the amount of current that can be sourced/sinked - the bond wires and thermal limitations. The gpio mosfets themselves have an on resistance that we could estimate at around 50 Ohms. So whilst the short term peak current may exceed the ratings, it will be for a short time and things won’t get hot enough - especially at the level of power we’re dealing with. The I2C pin probably had a pullup resistor and caused your problem. Why didn’t you measure the voltage? TPIC6B595 has built in mosfet for 500mA sink current. One chip solution. \$\endgroup\$
    – Kartman
    Commented Apr 28, 2021 at 21:58
  • \$\begingroup\$ Waaait what.. I think i didn't read it correct on the first try. That thing is basically 8 mosfets controlled by 3 pins in soic 20 size? Could I really remove all the FETs I have and replace it with this or do I misunderstood? \$\endgroup\$
    – Daniel Do
    Commented Apr 29, 2021 at 8:13
  • \$\begingroup\$ Would there be the same thing for the IRF3704? Something that can drive high current ? \$\endgroup\$
    – Daniel Do
    Commented Apr 29, 2021 at 9:20
  • \$\begingroup\$ Daniel, why do you think i mentioned the TPIC6B595? You wanted 8 open drain outputs - if the current specs are adequate for your application, then it will do what you want although not using I2C. I wanted to drive a number of Omron G2R 24VDC relays from an ESP32 and this is what I chose. Here's a search term so you can Google - 'low side switch' \$\endgroup\$
    – Kartman
    Commented Apr 29, 2021 at 11:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.