💾 Archived View for home.gegeweb.org › rpi › pi_fan_hwpwm.gmi captured on 2022-04-29 at 11:25:06. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2021-11-30)
-=-=-=-=-=-=-
Ce programme [1] pilote le ventilateur du boîtier Raspberry Pi 4 [2] avec une modulation matérielle à largeur d'impulsion (PWM [3]).
Si vous utilisez le boitier officiel du Raspberry Pi 4 [4], le ventilateur officiel pour ce boitier est une bonne solution de refroidissement.
Cependant… dans ce cas le ventilateur fonctionne en permanence (et n'est pas silencieux !) sauf à utiliser l'option de microprogramme suivante dans /boot/config.txt, le ventilateur connecté comme préconisé sur la broche GPIO 14 (fil bleu).
dtoverlay=gpio-fan,gpiopin=14,temp=80000
Avec l'option ci-dessus, le ventilateur se met en route lorsque la température du processeur atteint 80°C.
Avec ce programme, le ventilateur fonctionne donc plus silencieusement et l'unité centrale connaît des cycles thermiques plus doux qu'avec l'option de microprogramme.
Ce programme consomme mois de 0,1 % d'un cœur en fonctionnement, contre 12 % pour le logiciel PWM. Seules deux broches GPIO exposées sont capables de PWM matériel (GPIO 13 et GPIO 18) et une d'entre elles (GPIO 13) interfère avec le support du ventilateur, donc la broche GPIO 18 est le meilleur choix.
Le fil bleu du ventilateur doit être déplacé de deux emplacements sur la broche GPIO 18.
Le programme fonctionne en tant que root et crée deux fichiers pour la surveillance :
/run/pi_fan_hwpwm.pid
et
/run/pi_fan_hwpwm.state
Ce dernier fichier contient trois nombres, par exemple "1337, 68.95, 74.3", qui représentent les boucles d'environ une seconde depuis le démarrage, la température du processeur lissée et le niveau de PWM en pourcentage. Le PWM fonctionne à une fréquence de 20 kHz, ce qui est généralement acceptable pour les ventilateurs et n'est pas gênant pour les animaux de compagnie ou les enfants.
Le programme a été testé par l'auteur du logiciel avec un Raspberry pi 4 sous Ubuntu 20.04 64 bits et Raspbian Pi OS Lite 32 bits. Pour ma part je l'utilise sous Raspberry Pi OS (buster) 64 bits, machine utilisée en « desktop ».
Les options pour /boot/config.txt suggérées dans le code source ne sont pas nécessaires.
Ce programme utilise la librairie C pour Broadcom BCM 2835 [5] utilisée dans les Raspberry Pi, son installation est relativement simple :
cd wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.68.tar.gz tar zxvf bcm2835-1.68.tar.gz cd bcm2835-1.68 ./configure make sudo make install
cd sudo apt install -y git stress-ng git clone https://gist.github.com/1c13096c4cd675f38405702e89e0c536.git cd 1c13096c4cd675f38405702e89e0c536 make sudo make install
stress-ng -c 4 -t 3m -q & watch -n1 cat /run/pi_fan_hwpwm.state
CC = gcc RM = rm -f CFLAGS = -Wall LIBS = -lbcm2835 TARGET = pi_fan_hwpwm all: $(TARGET) $(TARGET): $(TARGET).c $(CC) $(CFLAGS) -o $(TARGET) $(TARGET).c $(LIBS) install: $(TARGET) install $(TARGET) /usr/local/sbin cp $(TARGET).service /etc/systemd/system/ systemctl enable $(TARGET) ! systemctl is-active --quiet $(TARGET) || systemctl stop $(TARGET) systemctl start $(TARGET) uninstall: clean systemctl stop $(TARGET) systemctl disable $(TARGET) $(RM) /usr/local/sbin/$(TARGET) $(RM) /etc/systemd/system/$(TARGET).service $(RM) /run/$(TARGET).* @echo @echo "To remove the source directory" @echo " $ cd && rm -rf ${CURDIR}" @echo clean: $(RM) $(TARGET)
/* / / pi_fan_hwpwm.c, alwynallan@gmail.com 12/2020, no license / latest version: https://gist.github.com/alwynallan/1c13096c4cd675f38405702e89e0c536 / / Need http://www.airspayce.com/mikem/bcm2835/index.html / / Compile $ gcc -Wall pi_fan_hwpwm.c -lbcm2835 -o pi_fan_hwpwm / / Disable $ sudo nano /boot/config.txt [Raspbian, or use GUI] / $ sudo nano /boot/firmware/usercfg.txt [Ubuntu] / # dtoverlay=gpio-fan,gpiopin=14,temp=80000 <- commented out, reboot / enable_uart=0 <- needed? not Ubuntu / dtparam=audio=off <- needed? not Ubuntu / dtparam=i2c_arm=off <- needed? not Ubuntu / dtparam=spi=off <- needed? not Ubuntu / / Run $ sudo ./pi_fan_hwpwm -v / / Forget $ sudo ./pi_fan_hwpwm & / $ disown -a /
[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
1. Hardware PWM Controller for the Raspberry Pi 4 Case Fan
3. Modulation de largeur d'impulsion (Wikipedia)
5. C library for Broadcom BCM 2835 as used in Raspberry Pi
________________________________________________________________________________