servo-angle.ino

Arduino Portenta H7 · Fichier : servo-angle.ino · Langage : Arduino · Usage : Piloter un servo avec la bibliothèque Servo sur Portenta

La bibliothèque Servo du core Mbed génère l'impulsion 50 Hz en matériel sur les timers du H7. Un balayage 0-180° complet valide la chaîne avant de l'intégrer à un bras robotisé piloté par RPC.

Matériel requis

Une Arduino Portenta H7 (module ST STM32H747 double cœur Cortex-M7 @ 480 MHz + M4 @ 240 MHz, 8 Mo SDRAM, connecteur haut-density), alimentée par USB-C ou 5 V. 1 servo d'angle (SG90/MG90S) + alimentation externe 5 V.

Câblage

Signal sur D13 (voir schéma carrier), + sur 5 V externe, masses communes. Le 5 V de la carte ne doit pas alimenter plusieurs servos.

Fonctionnement

myservo.write(angle) convertit l'angle en largeur d'impulsion gérée par le timer ; la boucle de balayage tourne à 50 pas/s.

Exécution

Arduino IDE avec le core « Arduino Mbed OS Portenta Boards » : choisir « Portenta H7 » (cœur M7), le port USB-C puis Téléverser. Le sélecteur M7/M4 du mode DFU permet de charger aussi le cœur M4.

Variantes

Commander l'angle depuis le M4 ou le Linux d'une X8, ou enchaîner une séquence de positions stockée en flash.

servo-angle.ino

// Balayage servo sur D13 avec la lib Servo du core Mbed.
#include <Servo.h>

Servo myservo;
int angle = 0, sens = 1;
unsigned long t0 = 0;

void setup() {
  myservo.attach(13);
  myservo.write(0);
  Serial.begin(9600);
}

void loop() {
  if (millis() - t0 < 20) return;
  t0 = millis();

  myservo.write(angle);
  angle += sens;
  if (angle >= 180) sens = -1;
  if (angle <= 0) sens = 1;
}

// Le core Portenta implemente Servo sur les timers Mbed :
// la frequence du signal reste a 50 Hz quelle que soit la
// frequence du CPU (avantage sur un emulation par delay).

← Retour à la fiche