Settings for LoveRPi PoE HAT with PWM Fan Controller

Can anyone suggest the proper settings for the dtoverlay command when using a Noctua NF-A4x10?

When I first installed the fan, it would not run using just dtoverlay=i2c-fan,emc2301, so support suggested adding some parameters, such as minpwn, maxpwm, etc. I got the fan to run using:

dtoverlay=i2c-fan,emc2301,minpwm=10,maxpwm=50,midtemp=50000,maxtemp=70000

However, the fan never seems to change speeds with these settings, and the CPU temp is down to about 30F. Any suggestions for the correct parameters? I’m new to this, so it’s probably something simple.

Can you take a picture of your fan and how it is connected to the board?


Photos are posted above. I’ve removed the POE hat from the RPi4B, but this is how it was attached. The fan is a Noctua NF-A4x0, specifically designed for 5V PWM. The wire colors match the pins, black=ground, yellow=5V, green=RPM, blue=PWM. Note that I did have to trim the lugs off the fan connector as the plastic tab on the POE was too wide, but the plug fits snugly. Hope this helps diagnose the issue.

There’s a test script that runs in bash to configure the fan. GitHub - LoveRPi/emc2301-bash: EMC2301 Library and Daemon in Bash

You can use it to check which PWM level is needed for the fan to start. The EMC2301 internally handles startup voltage bump (extra PWM/voltage to get the fan moving) vs static RPM PWM/voltage already.

Sorry for all the questions, I’m new to RPi’s and linux. Can you post step by step instructions on how to install and run these files to determine and set proper fan performance? I’ve tried running the emc2301.sh and daemon.sh scripts, but the terminal window closes and I don’t see any output. I’ve also tried running both INI files, but they do not seem to change anything. Also, do I need to enable the I2C parameter in config.txt? Thanks for the continued help.

There’s no need for precise tuning if you just want the fan speed to vary with the temperature. Using the regular overlay with the temperature settings is sufficient for simplistic control.

The script is for tuning the fan if you understand the concepts. You have to read through the datasheets to tune the fan manually for precise behavior.