🛠 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

Objetivos

Hacer « respirar » un LED variando el ciclo de trabajo de una señal PWM a través de la interfaz sysfs /sys/class/pwm. El conector de 40 pines multiplexa salidas PWM, y el LED verde de estado de la placa está controlado por PWM (pwm2 en mainline); el ventilador de 5 V del conector dedicado también está regulado por PWM (velocidad mínima del ventilador a 55 °C, velocidad máxima a 65 °C en el device-tree mainline).

Material

Código completo

# 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

Verificación esperada

El LED sube y baja de luminosidad de forma continua (respiración de aproximadamente 1,6 s por ciclo). cat $P/duty_cycle sigue los valores escritos; la frecuencia permanece en 50 Hz (período de 20 000 000 ns) independientemente de la luminosidad.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales