🛠 Variation d'intensité d'une LED avec PWM (sysfs pwm)

Orange Pi 5 Plus (Rockchip RK3588) · intermediaire · Schéma : IMG-orangepi-5-plus-intermediaire-1-opi5p-pwm-led.svg — LED sur une broche PWM du connecteur 40 broches de l'Orange Pi 5 Plus avec graphique d'allure du signal PWM et respiration lumineuse

Objectifs

Faire « respirer » une LED en faisant varier le rapport cyclique d'un signal PWM via l'interface sysfs /sys/class/pwm. Le connecteur 40 broches multiplexe des sorties PWM, et la LED verte de statut de la carte est elle-même pilotée en PWM (pwm2 en mainline) ; le ventilateur 5 V du connecteur dédié est aussi régulé en PWM (palier ventilateur à 55 °C, plein régime à 65 °C dans le device-tree mainline).

Matériel

Code complet

# 1. Trouver le contrôleur PWM exposé (pwmchipN)
cat /sys/class/pwm/pwmchip*/uevent 2>/dev/null
# Attacher le canal 0 du premier contrôleur (adapter le numéro à votre carte) :
echo 0 | sudo tee /sys/class/pwm/pwmchip0/export

P=/sys/class/pwm/pwmchip0/pwm0
echo 20000000 | sudo tee $P/period        # période 20 ms -> 50 Hz
echo 0 | sudo tee $P/duty_cycle           # 0 % : LED éteinte
echo 1 | sudo tee $P/enable               # activer la sortie

# 2. Respiration : montée 0 -> 100 % puis descente, par pas de 1 %
while :; do
  for d in $(seq 0 200000 20000000); do echo $d | sudo tee $P/duty_cycle >/dev/null; sleep 0.02; done
  for d in $(seq 20000000 -200000 0);  do echo $d | sudo tee $P/duty_cycle >/dev/null; sleep 0.02; done
done
# Stop : Ctrl-C, puis echo 0 | sudo tee $P/enable
# Nettoyage : echo 0 | sudo tee /sys/class/pwm/pwmchip0/unexport

Vérification attendue

La LED monte puis descend en luminosité de façon continue (respiration d'environ 1,6 s par cycle). cat $P/duty_cycle suit les valeurs écrites ; la fréquence reste à 50 Hz (période 20 000 000 ns) quelle que soit la luminosité.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels