🛠 Servo moteur sur PWM0 (GPIO18) : 50 Hz et 2,5 à 12,5 %

Raspberry Pi Compute Module 1 (CM1) · intermediaire · Schéma : IMG-cm1-intermediaire-1-servo-pwm-gpio18.svg — Un servo moteur branché sur GPIO18 du Compute Module 1, avec le chronogramme PWM 50 Hz annoté des impulsions 0,5 ms à 2,5 ms correspondant à 2,5 % à 12,5 % de rapport cyclique

Objectifs

Piloter un servo d'angle classique avec le PWM matériel du CM1. Sur BCM2835, le canal PWM0 est routé en alternate sur GPIO18. Un servo standard attend une période de 20 ms (50 Hz) et lit la position sur la largeur d'impulsion : 1 ms environ au centre, la plage utile s'étend de 0,5 ms (2,5 % de rapport cyclique) à 2,5 ms (12,5 %). On configure le PWM via le device tree overlay pwm puis en sysfs/pigpio, sans PWM logiciel qui jittere.

Matériel

Code complet

# 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

Vérification attendue

Le servo se place nettement sur chaque consigne et tient sa position sans bourdonnement excessif. La plage utile s'étend entre pigs p 18 64 (0,5 ms/2,5 %) et pigs p 18 512 (2,5 ms/12,5 %) pour une sortie 8 bits à 50 Hz ; au-delà de 12,5 %, le servo bute et consomme. Le PWM matériel ne présente pas les trous de la méthode logicielle pendant les accès SD.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels