servo-angle.ino
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).