As for the tach signal, I've been trying to figure out why Nominal Animal suggests such a complicated circuit.
If you trust all your fans have open collector tach outputs, and that their PWM input doesn't have a pull-up (or pull-up equivalent circut) to higher than your logic voltage, then you do not need the MOSFETs. I don't trust the fans that much.
I get that. And whatever trust I have comes from the same place as yours: the Intel spec document. It clearly states that the output of the tach signal is open collector. It also states that the specified circuit to drive the PWM input should be open collector. I know there's huge risk in trying to second guess someone else's intentions, but I'm still going to guess that those specs were made to eliminate any issues with different logic levels. Likewise, the spec that there will be two pulses per rev in the tach signal is purely practical: the Hall sensors used for commutation in these little BLDC motors output two pulses per revolution. Intel just wanted to make it easy for fan manufacturers to make fans that work with a minimum of cost and complexity.
So, using an open collector/drain transistor makes good sense when designing a circuit that might work with fans from unknown sources. OTOH, it is my firm belief that the spec that "Motherboard will have a pull up to 12V" is an error. Possibly it was intended to say "Motherboard will have a pull up to
no more than 12V." That tells the fan manufacturers that they can use transistors with max Vds of at least 12V and not have to worry. Specifying that every motherboard will have a pull up to 12V makes no sense at all.
I have no hard evidence, but I'm willing to bet lunch money for a week that spec as written is a mistake.
"Instead, I use less than 0.50€ worth of components (from Mouser) per fan, to make sure that no matter what kind of circuit shenanigans the fan contains, my circuit will deal with it properly.
I get that too. And, obviously, if I were asked to design a commercial circuit where there was no way to know what fan might be attached, then I would always include the open collector drive for the PWM. OTOH, I would not bother with the complicated tach circuit and instead just trust that the fan has an open collector output on that pin as the Intel spec calls for.
But that's a 'serious' design with PCBs etc. In this case we're talking to a hobbyist who is likely prototyping on a wireless breadboard and possibly moving eventually to proto board. For them, it's not the cost of the components but the effort involved in building the circuit, and then troubleshooting it because they put it together wrong. The Intel document says that there will be a pull up on the PWM input to no more than 5.25V (IIRC) but they encourage new designs to pull up to 3.3V. In those cases, it will not damage the 5V MCU to drive the pin directly, thereby reducing circuit complexity greatly. However, I also suggested that your open drain circuit is more robust.
I still recommend to everyone that no more than a simple pull up is required on the tach signal.
This is my logic: I don't want to tell others what the minimum circuit is that may or may not work with specific situations; instead, I want to show how to do it reliably, without risking your MCU.
I get that too. However I also recognize that designing to specific requirements is not a bad thing. If I ask a contractor about building a footbridge across a small ravine that will only need to support me and my dog, and the contractor comes back with a design that can support military vehicles, then I will look for a different contractor.