🛠 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

Objectives

Make an LED "breathe" by varying the duty cycle of a PWM signal via the sysfs interface /sys/class/pwm. The 40-pin connector multiplexes PWM outputs, and the board's green status LED is itself driven by PWM (pwm2 in mainline); the 5 V fan on the dedicated connector is also PWM-controlled (fan idle at 55 °C, full speed at 65 °C in the mainline device-tree).

Hardware

Complete code

# 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

Expected verification

The LED brightness continuously rises and falls (breathing cycle of approximately 1.6 s). cat $P/duty_cycle follows the written values; the frequency remains at 50 Hz (period 20,000,000 ns) regardless of brightness.

Common errors

Other tutorials for this board

Code examples for this board

← Back to the board 🛠 All tutorials