G_. Do you want to re-invent the wheel.
Fans are perfectly happy with PWM.
One logic mosfet and two gate resistors (220ohm/100k) is all you need.
And maybe a 1N4004 kickback diode.
If your fans have RPM outputs, feed that back into your Arduino.
Two PWM frequencies are used to make speed control less noisy.
~30herz and ~25khz. One being just below, and the other one just above our hearing.
Use 30herz for normal fans. 25Khz is used for 4-pin CPU fans with inbuild speed control.
You can use TWO mosfets if your fans are too noisy at low speed.
One that switches the fan negatives directly to ground, and one that switches the fans to ground via a suitable drain resistor (~22ohm/10watt).
Drive the mosfets from separate Arduino outputs, and choose which fet to use in your sketch.
You could also use two fets per fan and have an RPM feedback loop for each fan.
Leo..