🛠 Surveiller température et fréquence CPU, piloter le ventilateur PWM
Objectifs
Instrumenter la ROCK 3B (4× Cortex-A55 jusqu'à 2,0 GHz, RK3568 en 22 nm) : lire les températures des zones thermiques, observer la fréquence réelle sous charge, et comprendre le connecteur ventilateur 2 broches 1,25 mm (5 V PWM). Repères de température officiels : édition Community 0–60 °C, édition Industrial (RK3568J) −40–85 °C. >
Matériel
- Radxa ROCK 3B sous Radxa OS, alimentation PD 12 V / 2 A (un mauvais alimenteur simule un bridage thermique)
- Dissipateur adhésif et/ou ventilateur 5 V sur le connecteur 2 broches 1,25 mm
sudo apt install stress-ng bc
Code complet
# 1. Zones thermiques et températures (milli-°C)
paste <(for z in /sys/class/thermal/thermal_zone*/type; do cat $z; done) \
<(for z in /sys/class/thermal/thermal_zone*/temp; do echo "scale=1;$(cat $z)/1000"|bc; done)
# 2. Fréquence réelle des cœurs sous charge
(stress-ng --cpu 4 --timeout 60s &) ; sleep 5
while sleep 2; do grep -H . /sys/devices/system/cpu/cpufreq/policy*/scaling_cur_freq; done
# 3. Politiques et seuils thermiques
grep . /sys/class/thermal/thermal_zone*/policy 2>/dev/null
sudo dmesg | grep -i -e thermal -e throttle
# 4. Ventilateur 2 broches : sous Radxa OS, vérifier rsetup (fan/thermal) ou
# le contrôle PWM manuel du bus correspondant (pwmchip) — >
# l'exposition exacte du connecteur fan varie entre images constructeur.
ls /sys/class/pwm/
Vérification attendue
Sous stress-ng --cpu 4, scaling_cur_freq monte vers 2,0 GHz puis se stabilise ; sans dissipateur la fréquence retombe et dmesg peut afficher des messages de limitation. Avec dissipateur/ventilateur, la température plafonne plus bas et la fréquence tient plus longtemps. Les valeurs brutes de temp sont en milli-degrés (53000 = 53 °C).
Erreurs fréquentes
- Oublier la division par 1000 sur
/sys/class/thermal/thermal_zone*/tempet paniquer devant « 53000 °C ». - Échantillonner la fréquence une seule fois : c'est une valeur instantanée, il faut boucler pendant la charge.
- Accuser le thermique alors que l'alimentation est trop faible : re-tester avec l'alimenteur PD recommandé 12 V / 2 A.
- Inverser la polarité du ventilateur 1,25 mm ou tirer plus de courant que le connecteur 5 V ne peut fournir.
- Dépasser la plage de l'édition Community (60 °C ambiants max) dans une armoire fermée : c'est le cas d'usage de l'édition Industrial à 85 °C.
Autres tutoriels pour cette carte
- Faire clignoter une LED via le GPIO avec libgpiod
- Lire un bouton poussoir en Python avec python3-libgpiod
- Premier réseau : Ethernet double gigabit, Wi-Fi optionnel et SSH
- Installer et booter le système sur un SSD NVMe (M.2 M-Key)
- Interroger un capteur I2C sur le connecteur 40 broches
- Routeur / passerelle réseau double Gigabit avec OpenWrt et PoE
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash