Conception d'un bras robotique 3 axes contrôlé par WiFi via ESP32

  1. Architecture du système et sélection matérielle

Le contrôle d'un bras manipulateur miniature à trois degrés de liberté via WiFi repose sur une boucle de contrôle temps réel embarquée classique. Le système hôte (application mobile ou interface web) transmet les commandes de mouvement via le protocole WiFi, tandis que le contrôleur reçoit, décode ces instructions et pilote trois servomoteurs pour exécuter les angles correspondants. Ce système impose des contraintes strictes en matière de temps réel, de fiabilité de communication et de gestion de l'énergie, nécessitant une approche matérielle rigoureuse.

Le choix s'est porté sur la puce ESP32-WROOM-32. Contrairement à une architecture distribuée combinant un STM32 et un module ESP8266 externe, l'ESP32 intègre nativement la pile protocolaire, l'ordonnancement des tâches et la génération PWM sur une seule puce. Cette intégration élimine les latences et la complexité de gestion des tampons liées à la transmission UART. À une fréquence de 80 MHz, le microcontrôleur maintient aisément un cycle de contrôle de 20 ms, parfaitement adapté au rafraîchissement des servomoteurs standards.

Le bras lui-même est structuré en trois axes : rotation de la base (lacet), inclinaison du bras principal (tangage) et extension de l'avant-bras (roulis). Chaque articulation est motorisée par un servomoteur de type SG90 ou MG90S. Une règle absolue dans ce design est l'indépendance de l'alimentation des servomoteurs. Ils doivent être alimentés par une source externe de 5V/2A. L'utilisation de la broche 3.3V de l'ESP32 est proscrite, car les pics de courant lors du démarrage des moteurs (pouvant atteindre 800 mA) provoquent des chutes de tension susceptibles de réinitialiser le module RF.

La conception du circuit imprimé (PCB) applique une séparation stricte entre les domaines de puissance, de signal et de radiofréquence. Un convertisseur abaisseur DC-DC (comme le MP1584EN) fournit le 5V aux moteurs. Le cœur de l'ESP32 est placé au centre, avec des pistes RF éloignées des signaux numériques. Les sorties PWM sont isolées par des optocoupleurs (PC817 couplés à des transistors 2N2222) pour empêcher le bruit électrique des servomoteurs de perturber le plan de masse du microcontrôleur. Cette isolation matérielle s'avère bien plus efficace qu'un simple filtrage logiciel.

  1. Configuration de l'environnement ESP-IDF et paramètres fondamentaux

Pour ce projet, la version 4.4.4 de l'ESP-IDF est privilégiée. Les versions 5.x, bien que modernisées, activent par défaut le support de la PSRAM, ce qui fragmente la mémoire heap et nuit à la prédictibilité des tâches temps réel. La version 4.4.4 offre une gestion mémoire plus stable pour le contrôle précis des servomoteurs.

2.1 Installation de la chaîne de compilation

Le processus d'installation sous Ubuntu nécessite une attention particulière à la compatibilité des versions pour éviter les erreurs de symboles indéfinis lors de l'édition des liens.

# Mise à jour et installation des dépendances système
sudo apt update && sudo apt install -y git wget flex bison gperf python3-pip cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0

# Téléchargement et extraction de la toolchain Xtensa pour ESP32
URL_TOOLCHAIN="https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_4_0-esp-2021r2-linux-amd64.tar.gz"
wget $URL_TOOLCHAIN -O /tmp/xtensa_toolchain.tar.gz
mkdir -p $HOME/esp_outils && tar -xzf /tmp/xtensa_toolchain.tar.gz -C $HOME/esp_outils
export PATH="$HOME/esp_outils/xtensa-esp32-elf/bin:$PATH"

2.2 Initialisation de l'IDF et création du projet

# Récupération du dépôt ESP-IDF (branche v4.4.4)
git clone --branch v4.4.4 --recursive https://github.com/espressif/esp-idf.git ~/esp/esp-idf
cd ~/esp/esp-idf
./install.sh esp32
. ./export.sh

# Création de la structure du projet
NOM_PROJET="bras_robotique_3axes"
idf.py create-project $NOM_PROJET
cd $NOM_PROJET

Le fichier sdkconfig généré doit être modifié pour optimiser les performances temps réel :

  • CONFIG_FREERTOS_UNICORE=y : Force l'exécution sur un seul cœur. Cela évite les latences d'interruption imprévisibles liées à la migration des tâches entre les cœurs, réduisant le gigue du cycle PWM à moins de ±0.5 μs.
  • CONFIG_ESP32_DEFAULT_CPU_FREQ_80=y : Verrouille la fréquence du CPU à 80 MHz. Une fréquence plus élevée (240 MHz) génère des interférences harmoniques avec la porteuse PWM, dégradant la qualité du signal WiFi.
  • CONFIG_SPIRAM_SUPPORT=n : Désactive la PSRAM, inutile ici et qui consommerait inutilement de la mémoire heap.

2.3 Allocation des GPIO et contraintes électriques

Le choix des broches pour les signaux PWM doit éviter les pins réservées au flash SPI (GPIO6-11), les entrées seules (GPIO34-39) et les pins de boot (GPIO3, 9, 10). Les broches GPIO18, GPIO19 et GPIO21 sont sélectionnées pour leur compatibilité avec le périphérique LEDC. Chaque ligne de signal est protégée par une résistance de 1 kΩ en série et un condensateur céramique de 100 nF en parallèle vers la masse, formant un filtre passe-bas RC pour atténuer les bruits haute fréquence.

  1. Implémentation du service réseau WiFi et conception du protocole

La transmission fiable des commendes de télécommande est critique. Plutôt que d'utiliser des protocoles lourds comme MQTT ou HTTP, un protocole de diffusion UDP léger est implémenté. L'UDP offre une latence de bout en bout stable (15-25 ms), permet le contrôle de plusieurs apparelis simultanément et évite l'accumulation de commandes due aux mécanismes de retransmission TCP dans les environnements à réseau faible.

3.1 Configuration du mode WiFi

L'ESP32 est configuré en mode SoftAP plutôt qu'en mode Station. Le bras robotique crée ainsi son propre point d'accès (par exemple, SSID: "RoboArm_AP", mot de passe: "12345678"). Cette approche permet à l'appareil de contrôle de se connecter directement sans passer par un routeur local, éliminant ainsi les délais de transfert et les attentes ARP. Cette connexion directe garantit une réactivité maximale lors des premières secondes de l'association WiFi.

Étiquettes: ESP32 ESP-IDF FreeRTOS Servomoteur WiFi

Publié le 24 juin à 20h23