An Arduino Nano generates the 25kHz PWM signal, and a companion Windows application reads CPU temp and sends the duty cycle over serial. The Arduino firmware is open source (MIT).
But a small circuit with a Schmitt-trigger inverter IC and some resistors and capacitors might do the trick, for example.
Using Arduino and serial is a smart way to go here. Still, it’s worth remembering: the Pico W has built-in WiFi, so you don’t have to lean on serial if you don’t want to. You could have your temp-reading app send control signals over HTTP instead. No need to tie up the USB port, and the connection isn’t killed if someone yanks the cable.
And yes, big agreement on the watchdog or failsafe. Any fan controller that doesn’t ramp up to 100% if it loses connection is just waiting for trouble. Fire risk is real.
We work in very hot greenhouses, so fans (and peltiers) are essential. And proper thermal sensors. I check 4 different ones. Esp. needed is also a humidity sensor, because we don't want it to cool down below the dew point.
It's PWM, controlled via mraa. mraa_pwm_write()
However the bane of analog circuits was that they age, so a control circuit that works perfectly today will drift and no longer work as intended after some years.
The second problem is that analog circuits need adjustments to set them at the exact desired parameters.
Adjustments can be done either by using an adjustable element in the circuit, e.g. an adjustable resistor or capacitor or inductor, or by measuring many resistors and/or capacitors and/or inductors and selecting the ones with the right values to be used by your device.
Redoing periodically the adjustments also solves the aging problem. However, both the initial adjustment and any periodic readjustments need a lot of work, so they are no longer acceptable in the industry.
When doing something for yourself, you may make an analog controller and the initial adjustment would not be a problem, but even in this case it would be annoying to keep track and remember something like having to readjust a fan controller every 6 months, to be sure that it still works as intended.
is not true. There is a diagram available for this mobo and U32 (F71889AD) is connected over LPC (modern serial ISA version). Its a full Super IO and it cant be _not connected_ as it also provides keyboard/mouse, serial and printer ports.
The problem must lie elsewhere, most likely bad BIOS.
>Here's what I knew:
> Windows can read CPU temperature directly from the CPU's internal thermal diode, completely bypassing the useless Super IO chip.
why not read temperature directly from Fintek using HwInfo?
https://www.hwinfo.com/forum/threads/faulty-sensor-readings-... and yes it also works on 970 https://forum-en.msi.com/index.php?threads/msi-970-cpu-temps...
not to mention MSI Command Center can read those sensors AND set FAN speeds/curves, and most likely also SpeedFan.
> asked LLMs
LLM failed this person :(
Would you mind sharing more technical review of what you created?
From my experience: ESP32/RP2040 work without additional circuitry which works with most fans, but for protection, you want to add level shifters. Not all fans pull up the PWM pin to 3.3V, the spec allows for 5V.
Shameless plug, hopefully this is allowed here.
I built something like that, that allows fan control via WiFi. First I built it only for myself, but since the spare boards from PCBA quickly sold, I decided to keep it stocked.
Short gist: 12V Input, ESP32S2, ESPHome-based. Has 4 PWM-fan outputs, onboard temperature & humidity sensor and Qwiic expansion port.
The ESPHome code & schematic is on Github: https://github.com/zeroflow/wifi-fancontroller
If you want one, it's available on Elecrow for $35,99: https://www.elecrow.com/wifi-fancontroller1.html
If you want to build it by yourself, the schematic is in the hardware folder. And if you don't want to use ESPHome - there is no firmware lock, you find the pin assignment on the product page and can write your own firmware if you so desire.