RPI HW PWM fan control

Bruce Labitt bdlabitt at gmail.com
Sat Mar 20 10:45:32 EDT 2021


Apparently one cannot control both pwm outputs simultaneously.  When one of
the pwm outputs was disabled, the service does work correctly after a
reboot.  The bcm2835 driver which is used by this project apparently
silently fails!  It sure would be nice if the applet logged this
somewhere.  This was a devil to find...  There was an oblique reference to
silent failing in the bcm2835 library documentation, which gave me a clue.

On Fri, Mar 19, 2021 at 5:05 PM Bruce Labitt <bdlabitt at gmail.com> wrote:

> I found a project on
> https://gist.github.com/alwynallan/1c13096c4cd675f38405702e89e0c536 for a
> hardware controlled pwm fan for the RPI4.  This should have low resource
> usage, as compared to software controlled pwm.  I don't have a Noctua type
> pwm fan, but I made a simple circuit with a resistor, a transistor and a
> flyback diode to drive a brushless DC motor from the GPIO pin.  The
> circuit, cobbled together on some perf board, works great.
>
> This project works, but doesn't.  By that I mean, if one makes and
> installs the program along with a systemd service it works.  However, the
> fan control does not survive a reboot.  More accurately, the service is
> relaunched after boot - I can see it with # systemctl | grep pi_fan_hwpwm,
> but the actual pin is not being controlled.  The SW thinks it is
> controlling the pwm pin output, but there is NO physical control of the
> pin.  As the core temp gets hotter and hotter the PWM duty factor
> increases, as designed, but no signal is at the GPIO#18 pin.
>
> The pi_fan_hwpwm.service is
> [Unit]
> Description=Hardware PWM control for Raspberry Pi 4 Case Fan
> After=syslog.target
>
> [Service]
> Type=simple
> User=root
> WorkingDirectory=/run
> PIDFile=/run/pi_fan_hwpwm.pid
> ExecStart=/usr/local/sbin/pi_fan_hwpwm
> Restart=on-failure
>
> [Install]
> WantedBy=multi-user.target
>
> Multi-user.target.wants has pi_fan_hwpwm.service in its directory.  The
> service does start.  However the actual control of the pin is somehow being
> prevented.  Even if I stop and start the service, the pin is not controlled.
>
> I've turned off i2c, spi and audio in /boot/config.txt  There's some
> "mumbling" about doing things like this, both in the source of
> pi_fan_hwpwm.c and in the header of bcm2835.h.
>
> This project includes bcm2835.h to control the pwm.  If I use the example
> file found in bcm2835-1.68/examples/pwm/pwm.c and compile it, it controls
> the fan.  If I then stop and start the fan service (after running ./pwm
> once) the fan pwm service now controls the fan physically.  Comparing the
> code in pwm.c and pi_fan_hwpwm.c reveals similar structure and
> initialization.  Have to say, this has been perplexing.
>
> Besides giving up, which I have seriously considered, anyone got any
> suggestions to make this work?  Was hoping to use the HW controlled fan on
> my RPI4 NAS.
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.gnhlug.org/pipermail/gnhlug-discuss/attachments/20210320/c25b08af/attachment.html 


More information about the gnhlug-discuss mailing list