🛠 Servo moteur sur PWM0 (GPIO18) : 50 Hz et 2,5 à 12,5 %
Objetivos
Controlar un servo de ángulo clásico con el PWM de hardware del CM1. En BCM2835, el canal PWM0 se enruta en modo alternativo al GPIO18. Un servo estándar espera un periodo de 20 ms (50 Hz) y lee la posición según el ancho de pulso: aproximadamente 1 ms en el centro, con un rango útil que va de 0,5 ms (2,5 % de ciclo de trabajo) a 2,5 ms (12,5 %). Se configura el PWM mediante el overlay del device tree pwm y luego a través de sysfs/pigpio, evitando el PWM por software que presenta jitter.
Material
- Un Compute Module 1 sobre una IO Board
- 1 servo de ángulo (SG90/MG90S) alimentado por separado a 5 V si se requiere par motor
- GPIO18 (pin 12 de J6) hacia el cable de señal, con masas comunes
Código completo
# Activer le PWM matériel
echo 'dtoverlay=pwm-28' | sudo tee -a /boot/config.txt
sudo reboot
# Pilotage pigpio (daemon PWM matériel)
sudo pigpiod
pigs p 18 0 # arrêt
pigs p 18 64 # ~1,56 % -> butée gauche (50 Hz)
pigs p 18 128 # ~3,1 % -> centre
pigs p 18 256 # ~6,25 %
pigs p 18 512 # ~12,5 % -> butée droite
# Balayage doux
for d in 64 96 128 160 192 224 256; do pigs p 18 $d; sleep 0.3; done
Verificación esperada
El servo se posiciona con precisión en cada consigna y mantiene su posición sin zumbido excesivo. El rango útil se extiende entre pigs p 18 64 (0,5 ms/2,5 %) y pigs p 18 512 (2,5 ms/12,5 %) para una salida de 8 bits a 50 Hz; por encima del 12,5 %, el servo llega al tope y consume más corriente. El PWM de hardware no presenta los huecos del método por software durante los accesos a la tarjeta SD.
Errores frecuentes
- Usar el PWM por software (modo
pwmsin hardware): los microcortes hacen temblar el servo; verificar que el overlay esté activo (ls /sys/class/pwm). - Alimentar el servo desde los 3,3 V del CM1: insuficiente, el SoC se reinicia al arrancar el motor; alimentar con 5 V externo y masa común.
- Ciclo de trabajo fuera de rango: por encima del 12,5 % o por debajo del 2,5 %, el servo se bloquea en el tope y se calienta.
- Confundir PWM0 (GPIO18) y PWM1 (GPIO13): el cableado en modo alternativo difiere, consultar la tabla de funciones del BCM2835.
- Olvidar la masa común entre la alimentación del servo y el CM1: el servo vibra aleatoriamente.
Otros tutoriales para esta placa
- Flasher l'eMMC du CM1 avec rpiboot et le jumper J4
- Premier boot : Bullseye legacy, rails 3,3 V et ordre des alimentations
- Première LED sur GPIO17 : banques, courants et broches réservées
- BME280 sur I2C0 (GPIO2/3) : activer i2c_arm et lire l'ID 0x60
- Caméra officielle sur le connecteur FPC CSI du CM1
- Boot sans EEPROM : fallback USB et bootcode.bin sur eMMC
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash