>This board has a Fintek F71878AD, a perfectly capable Super IO controller that can read temperatures, control fan PWM, and monitor fan speeds, but MSI just didn't connect it to the board.
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?
MSI shipped a genuinely good motherboard and forgot to wire one chip, so PWM doesn't work. Instead of tossing the board or living with the noise, I decided to make lemonade.
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).
That might work for the PWM signal, however you'd still need some electronics as the fan has internal pull-up to 5V and expects it to be pulled low by the PWM signal.
But a small circuit with a Schmitt-trigger inverter IC and some resistors and capacitors might do the trick, for example.
Ironic, the day after the launch of Artemis II that people are using microcontrollers far more powerful than the original Apollo 11 navigation computer to control a single fan in their PCs now.
One could go farther and complain that it's a waste of a microcontroller at all to control a fan when an analog circuit for fan speed vs temperature would work fine.
I've built 4 different fan controllers for my companies' embedded board so far.
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.
This looks really good! I am trying to do the same thing for cooling 11th gen Intel laptop motherboards with micro RP2050 board but came to the conclusion that I should just do it with ESP32 as mine has some limitations.
Would you mind sharing more technical review of what you created?
RP2050 would work, as it also has the necessary built-in peripherals. ESP32 would add wifi and better ESPHome support. I suggest you stay away from the ESP8266, as it needs to do PWM in software and struggles with the 25kHz output frequency.
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.
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.
>This board has a Fintek F71878AD, a perfectly capable Super IO controller that can read temperatures, control fan PWM, and monitor fan speeds, but MSI just didn't connect it to the board.
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.
> even asked LLMs.
LLM failed this person :(
MSI shipped a genuinely good motherboard and forgot to wire one chip, so PWM doesn't work. Instead of tossing the board or living with the noise, I decided to make lemonade.
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).
Could you use an audio out port for creating the signal and ditch the Arduino?
That might work for the PWM signal, however you'd still need some electronics as the fan has internal pull-up to 5V and expects it to be pulled low by the PWM signal.
But a small circuit with a Schmitt-trigger inverter IC and some resistors and capacitors might do the trick, for example.
What if Windows crashes? It's better to attach a thermal sensor to the heatsink, I think.
Just send a heartbeat every few milliseconds and set fan speed to 100% if it died. Bonus: You get an audible indicator that the system crashed.
Ironic, the day after the launch of Artemis II that people are using microcontrollers far more powerful than the original Apollo 11 navigation computer to control a single fan in their PCs now.
One could go farther and complain that it's a waste of a microcontroller at all to control a fan when an analog circuit for fan speed vs temperature would work fine.
I've built 4 different fan controllers for my companies' embedded board so far.
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()
This looks really good! I am trying to do the same thing for cooling 11th gen Intel laptop motherboards with micro RP2050 board but came to the conclusion that I should just do it with ESP32 as mine has some limitations.
Would you mind sharing more technical review of what you created?
RP2050 would work, as it also has the necessary built-in peripherals. ESP32 would add wifi and better ESPHome support. I suggest you stay away from the ESP8266, as it needs to do PWM in software and struggles with the 25kHz output frequency.
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.