N-Channel vs P-Channel. Choosing a MOSFET for Arduino.

Arduino pins can directly turn ON very low power components like small LEDs. MOSFETs are great if you need to switch ON and OFF more powerful devices that also may use higher input voltage than Arduino's 5V.

So, which type of MOSFET should you use? If you need to turn ON a device that consumes more power than an Arduino pin can provide, then you should use a Logic Level Enhancement-Type N-Channel MOSFET. It's easy to wire it up to be OFF by default and switched ON when Arduino pin goes HIGH. I have used 30N06L MOSFET to switch ON 12V motors and lamps.

A photo of a 30N06L MOSFET

In this article, I will talk about different types of MOSFETs, and give the reasons why I think you most likely want to use an N-Channel MOSFET:

Logic leve N-Channel and P-Channel MOSFETs

  • N-Channel MOSFET IRFZ44N
  • P-Channel MOSFET IRF4905

What Kinds of MOSFETs There Are?

MOSFET can be either Enhancement-Type or Depletion-Type and N-Channel or P-Channel. Roughly speaking, we have four different kinds:

  • Enhancement-Type N-Channel
  • Enhancement-Type P-Channel
  • Depletion-Type N-Channel
  • Depletion-Type P-Channel

All MOSFETs have Gate (G), Source (S), and Drain (D) pins. The voltage between Gate and Source (Vgs) determines if the current is flowing through Source and Drain or not. Each kind has its own logic of when the MOSFET is turned ON or OFF. I will explain it in detail in the next two chapters.

Symbols for MOSFETs:

N-Channel MOSFET Gate-Source voltage
P-Channel MOSFET Gate-Source voltage

A MOSFET is classified as Logic Level MOSFET if it gets fully turned on with Vgs in the range of 3 to 5 volts. If you use a 5V Arduino board, then all Logic Level MOSFETs should be OK. If you are using a 3.3V board, then you have to check that the MOSFET you are using is compatible with 3.3V switching.

Normal MOSFETs typically need Vgs to be 10V or more to be fully ON.

Enhancement-Type MOSFET vs Depletion-Type MOSFET?

Every MOSFET is either Enhancement-Type or Depletion-Type.

Of the two types, the more common Enhancement-Type is not conducting electricity, when Vgs (voltage between Gate and Source) is zero - "Normally OFF." Depletion-Type is logical inversions of that, and is conducting when Vgs is zero - "Normally ON."

For example, an Enchantment-Type N-Channel MOSFET with a pull-down resistor will be OFF while your Arduino pin is not initialized as output (the first few seconds on startup). But a Depletion-Type will be ON in the same conditions.

When deciding between those two types, you have to think of what do you want to happen while your controller board is not actively driving the MOSFET Gate. If you don't know, then pick the Enchantment-Type. It's easy to put a 10k resistor between the Gate and the Source, which makes it OFF by default.

In the rest of the article, all the examples are about Enhancement-Type MOSFETs. Everything also applies to the Depletion-Type, just the ON/OFF status would be inverted.

N-Channel MOSFET vs P-Channel MOSFET

The main difference between an N-Channel and a P-Channel MOSFET is that N-Channel usually goes to the Ground (-) side of the load (the device you are powering), and P-Channel to the VCC (+) side.

N-Channel MOSFET with load
P-Channel MOSFET with load

But why do you have to connect one to the negative and the other to the positive side?

Enhancement-Type ("Normally OFF") N-Channel MOSFET starts to conduct if Gate value is sufficiently higher than Source. For Logic Level MOSFETs, it's typically 3 to 5 volts. If you connect the Source to the Ground, then you can use a voltage between Ground (-) and VCC (+) to activate it.

N-Channel MOSFET with load on the GND side

If you decided to connect it to the VCC side of the load, then the value of the Source would also be very close to VCC. It means that you need to apply a higher voltage than VCC to the Gate to active the MOSFET. Typically you don't have this higher voltage readily available, and it makes more sense to connect the Source of an N-Channel MOSFET to Ground.

N-Channel MOSFET with load on the VCC side

Enhancement-Type ("Normally OFF") P-Channel MOSFET is like an upside-down N-Channel MOSFET. It starts to conduct if Gate value is sufficiently lower than Source. If you connect the Source of a P-Channel MOSFET to VCC, then you can use a voltage between VCC (+) and Ground (-) to turn it ON and OFF.

P-Channel MOSFET with load on the VCC side

Connecting it to the negative side of the load has a similar problem that the N-Channel MOSFET had. Only this time, Source would be too close to Ground. You would need to apply a negative voltage (compared to Ground) to the Gate to activate it.

P-Channel MOSFET with load on the GND side

It is easy to remember: you should connect the Source pin of an N-Channel MOSFET to the negative output of your power supply, and the Source pin of a P-Channel MOSFET to the positive output of your power supply.

The same rules apply to Depletion-Type N-Channel and P-Channel MOSFETs. Only ON and OFF state is inverted.

Why Prefer an N-Channel MOSFET to a P-Channel MOSFET?

Functionally you could design your circuit in a way that you could use either of them. If you have an Arduino that runs on 5V and the device you are turning ON also runs on 5V, then it doesn't even matter. You could use an N-Channel or P-Channel MOSFET as long as you wire it accordingly.

Then why prefer N-Channel over P-Channel?

  • You can have a Common Ground between the 12V power source and your Arduino.

    With a P-Channel MOSFET, you have to create a Common VCC instead of a Common Ground. But it's standard practice to have a Common Ground between connected devices and modules. You can easily have that with an N-Channel MOSFET.

  • You can power your Arduino from the same 12V power source by connecting the Arduino's barrel jack or the Vin pin to the power supply.

    The negative input of the barrel connector leads directly to Arduino Ground. When you are using an N-Channel MOSFET as a power switch, then that is not a problem. The Grounds are connected anyways. With a P-Channel MOSFET, we can't connect the negative output of the power supply to the Arduino Ground since the 5V pin has to be pulled up to the positive output of the power supply. By also connecting the Grounds, you will send 12 volts through the Arduino.

  • N-Channel MOSFETs are more efficient than P-Channel MOSFETs.

    It comes down to physics. N-Channel MOSFETs use electron flow as the charge carrier. P-Channel MOSFETs use hole flow as the charge carrier, which has less mobility than electron flow. And therefore, they have higher resistance and are less efficient. In other words, a P-Channel MOSFET will get hotter than an N-Channel MOSFET with higher loads.

There are use-cases where P-Channel MOSFET is preferred or even required. For example the Arduino self-power-off circuit needs both: https://circuitjournal.com/arduino-auto-power-off