🛠 Variation d'intensité d'une LED avec le PWM

ODROID-C4 (Hardkernel) · intermediaire · Schéma : IMG-odroid-c4-intermediaire-1-odroidc4-pwm-led.svg — LED avec résistance de 330 Ω reliée à une broche PWM du connecteur 40 broches de l'ODROID-C4 et au GND, signal carré illustré.

Objetivos

Hacer variar la intensidad de un LED externo en el ODROID-C4 utilizando la salida PWM del SoC Amlogic S905X3 (el conector de 40 pines expone hasta 6 canales PWM). Aprenderás a exportar un canal a través de /sys/class/pwm, a razonar en términos de periodo (ns) y ciclo de trabajo (duty_cycle), y a escribir una respiración (breathing) en bash.

Material

Código completo

#!/usr/bin/env bash
# respiration.sh - fade d'une LED sur pwmchip0 / channel 0
# Adapter le numéro de chip/canal selon le brochage confirmé.
CHIP=/sys/class/pwm/pwmchip0
sudo sh -c "echo 0 > $CHIP/export" 2>/dev/null || true
sleep 0.3
CH=$CHIP/pwm0
sudo sh -c "echo 20000 > $CH/period"      # période 20 kHz (50 µs)
sudo sh -c "echo 1 > $CH/enable"
for step in $(seq 0 20 100) ; do          # montée 0 -> 100 %
  duty=$(( 20000 * step / 100 ))
  sudo sh -c "echo $duty > $CH/duty_cycle"
  sleep 0.05
done
for step in $(seq 100 -20 0) ; do         # descente 100 -> 0 %
  duty=$(( 20000 * step / 100 ))
  sudo sh -c "echo $duty > $CH/duty_cycle"
  sleep 0.05
done
sudo sh -c "echo 0 > $CHIP/unexport"

Verificación esperada

El LED aumenta progresivamente su luminosidad y luego disminuye en aproximadamente un segundo, sin parpadeo perceptible (20 kHz). cat $CH/duty_cycle sigue los valores escritos. Después de ejecutar el script, pwmchip0 ya no contiene la carpeta pwm0 (canal liberado). Si $CHIP no existe, lista ls /sys/class/pwm/ y verifica que el overlay PWM esté activado en /boot/armbianEnv.txt (overlay_add=).

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales