Carte Contrôleur Moteur NEMA23

Réf : MOTOR-NEMA23-OBS  |  Session 5 — Avril 2026

Commande automatisée 100% remote d'un toit coulissant d'observatoire astronomique. STM32 + TMC4361A + TMC2160, CAN bus, rampes S-curve matérielles, PCB 6 couches 24V/2A.

Objectif du projet

Motorisation complète d'un toit plat coulissant d'observatoire astronomique (course 2000 mm, 2 panneaux indépendants), avec fonctionnement 100% remote sans aucune intervention manuelle sur site. La monture allemande impose un telescope en position park horizontal ; la mécanique intègre un pignon mobile côté Nord avec système guillotine (descente 500 mm, contrepoids, 2× NEMA17).

Deux cartes moteur identiques pilotent chacune un panneau via un NEMA23 (2A RMS). Elles sont supervisées par un ESP32 maître sur CAN bus, lui-même connecté en WiFi/MQTT pour les interfaces ASCOM et INDI.

Architecture système

  • ESP32 maître : WiFi/MQTT, ASCOM/INDI, séquençage, OTA flash STM32, 2× TMC2209 (guillotine NEMA17), CAN maître
  • 2× Carte moteur : STM32F103C8T6 + TMC4361A + TMC2160 + pont H DMHT6016LFJ, CAN esclave
  • CAN bus daisy-chain : ESP32 → Carte 1 (JP3 ouvert) → Carte 2 (JP3 = 120Ω fin de ligne)
  • Alimentation : 24V/5A partagée, buck TPS5430 24V→3,3V sur chaque carte

Avancement

  • ✅ Architecture complète validée — 5 sessions de conception
  • ✅ Schématique KiCad vérifié, corrections post-revue identifiées
  • ✅ Pinout STM32 / TMC4361A / TMC2160 vérifié sur datasheets
  • ✅ Protections pont H, alimentation, inversion polarité finalisées
  • 🔲 Application des corrections dans KiCad — routage PCB en cours
  • 🔲 Firmware STM32 (CAN, SPI, homing, rampes S-curve)
  • 🔲 Firmware ESP32 maître (CAN, séquençage, INDI/ASCOM)

Vue 3D du PCB

PCB 6 couches — Carte moteur NEMA23

Vue 3D du circuit imprimé généré sous KiCad. On distingue le STM32F103C8T6, le TMC4361A (QFN-40), le TMC2160-TA (TQFP-48), les deux boîtiers DMHT6016LFJ (pont H quad MOSFET), le buck TPS5430DDA, le transceiver CAN SN65HVD230 et l'ensemble des connecteurs.

Vue 3D PCB carte moteur NEMA23 observatoire — KiCad 6 couches

PCB 6 couches — Carte contrôleur NEMA23 — Vue 3D KiCad — Avril 2026

Composants principaux

Nomenclature carte moteur

Réf Composant Référence Rôle
U1MCUSTM32F103C8T6 (LQFP-48)CAN natif + SPI + GPIO
U2Motion controllerTMC4361A-LA (QFN-40)Rampes S-curve hardware
U3Gate driverTMC2160-TA (TQFP-48)Pilotage MOSFETs, StealthChop/SpreadCycle
Q1, Q2Pont H (×2)DMHT6016LFJ (V-DFN5045-12)Quad N-MOSFET, 1 boîtier = 1 phase
U4CAN transceiverSN65HVD230 (SOIC-8)3,3V, 1 Mbps
U5Capteur optiqueITR9608-FFourche photo-interrupteur, homing
U6Buck converterTPS5430DDA (SOIC-8 PowerPAD)24V → 3,3V, 500 mA max
Q3Protection inversionSI4435DDY (SO-8)P-MOSFET + Zener 12V
Y1Quartz8 MHz (3,2×2,5 mm SMD)Horloge STM32 (PLL ×9 = 72 MHz)
Y2OscillateurSG-210STF 16 MHz CMOSHorloge TMC4361A

Chaîne d'alimentation

24V → Protection → Pont H + 3,3V logique

La protection contre l'inversion de polarité est assurée par un P-MOSFET SI4435DDY dont la grille est clampée à −12V par une Zener BZX84C12 (VGS max ±20V). En sortie, deux alimentations sont dérivées :

  • 24V protégé : directement vers VS TMC2160 (bulk 100 µF) et les deux boîtiers DMHT6016LFJ
  • 3,3V logique : TPS5430DDA — R1=34kΩ / R51=20kΩ → VOUT=3,30V, L1=47 µH, D9=B340, C_boot=10 nF, C_in=10 µF, C_out=2×22 µF

Budget courant 3,3V ≈ 165 mA : STM32 (30), TMC4361A (50), TMC2160 VCC_IO (10), SN65HVD230 (10), oscillateur (2), ITR9608-F LED (21), LEDs status (15), pull-ups (5), marge.

Chaîne de commande moteur

STM32 → TMC4361A → TMC2160 → DMHT6016LFJ → NEMA23

Le STM32 configure les paramètres de mouvement via SPI (PA4–PA7) vers le TMC4361A qui génère les rampes S-curve en hardware. Le TMC4361A pilote directement le TMC2160 via son propre bus SPI interne et les signaux STEP/DIR. Le TMC2160 commande enfin les grilles des MOSFETs DMHT6016LFJ avec les protections de la Fig. 3.5 du datasheet :

  • 8× Rg 22Ω (gate resistors, ≤3 mm des MOSFET)
  • 4× condensateurs bootstrap 470 nF (Fig. 3.8)
  • 2× Rsense 75 mΩ 2512 → Imax = 2 A RMS, connexion Kelvin
  • 4× R'G 0,68Ω + 4× SS14 (anti-undershoot BMA/BMB)
  • 4× filtre RC 47Ω + 2,2 nF (SRAH/SRAL, SRBH/SRBL)
  • 4× snubber 1 nF/100V sur sorties moteur

Profil de mouvement

  • Poulie 20 dents, pas 3 mm → 60 mm/tour
  • 51 200 µsteps/tour (200 pas × 256 µsteps)
  • Course 2 000 mm → 1 706 667 µsteps
  • Vmax ≈ 200 mm/s, Amax ≈ 100 mm/s² → trajet ≈ 11,4 s
  • Zone décélération S-curve : 30–40 cm

Capteurs — Sécurité positive

Principe : fil coupé = LOW = STOP

Tous les capteurs utilisent un pull-down : une rupture de câble ou une déconnexion génère un LOW qui déclenche l'arrêt immédiat (sécurité positive, opposé à la sécurité par défaut HIGH).

Pin Capteur Type Filtre RC
PA0ITR9608-F (sur carte)Fourche optique, homing
PA1Réserve J9Extensible10 kΩ + 100 nF
PA2Contact NC — J6Fin de course mécanique OUVERT10 kΩ + 100 nF
PA3Contact NC — J7Fin de course mécanique FERMÉ10 kΩ + 100 nF

Communication

CAN bus daisy-chain — 1 Mbps

Le bus CAN relie les deux cartes moteur à l'ESP32 maître en topologie daisy-chain. Chaque carte dispose de deux borniers (J8a IN / J8b OUT) sur les mêmes nets CANH/CANL. La terminaison 120Ω est activée uniquement sur la dernière carte (JP3 fermé). L'adressage CAN est configuré par jumpers JP1/JP2 (2 bits, 4 adresses possibles).

Protection ESD : D4 PESD2CANFD24V-U au plus près de J8a. Transceiver SN65HVD230, Rs → GND (mode haute vitesse).

OTA UART (J4) — Flash STM32 par ESP32

L'ESP32 maître peut flasher le firmware STM32 à distance via la liaison UART. Séquence : ESP32 force BOOT0=HIGH via J4 pin 3, pulse NRST, le bootloader ROM démarre sur UART1 (PA9/PA10), flash réalisé, puis BOOT0=LOW et nouveau pulse NRST pour redémarrer en mode application. SW1 permet aussi le flash local en appuyant sur le bouton BOOT0.

PCB 6 couches

Empilement et règles de layout critiques

Couche Fonction Contenu
1 TopSignal + composantsSense Kelvin (sans via), quartz, SPI, gates, CAN
2GND plan continuRéférence couche 1
33,3V planAlimentation logique
424V + GND partielZone puissance + fill GND
5GND plan continuRéférence couche 6
6 BottomSignal + puissancePistes puissance, routage overflow
  • Pistes Kelvin (SRAH/SRAL/SRBH/SRBL/BMA/BMB) : même couche, pas de via
  • Rg 22Ω : au plus près du DMHT6016LFJ (<3 mm)
  • Quartz 8 MHz : garde GND annulaire + vias couture, zone exclusion 1 mm
  • Exposed pads TMC2160 + TMC4361A : vias thermiques vers GND (min. 9)
  • Séparation GNDA/GNDD : point unique de connexion sous le TMC2160

7 indicateurs LED de diagnostic

Réf Couleur Signal Comportement
D11Rouge+24V présentAllumée en permanence
D12Verte+3,3V présentAllumée en permanence
D1JaunePB12 — CAN actifClignote à chaque trame
D2BleuePB13 — MotorAllumée pendant mouvement
D3RougePB14 — FaultAllumée sur erreur driver
D13VertePA9 — TX OTAActive LOW sur UART
D14JaunePA10 — RX OTAActive LOW sur UART

Schéma électronique KiCad

Schéma complet — Session 5 — Avril 2026

Le schéma complet au format PDF (exporté depuis KiCad) couvre l'intégralité de la carte moteur NEMA23 : alimentation, protection d'inversion, STM32, TMC4361A, TMC2160, pont H DMHT6016LFJ avec protections Fig. 3.5, capteurs, CAN bus, interface OTA et indicateurs LED.

Télécharger le schéma KiCad (PDF)

Session 5 — 10 avril 2026 — 5 sessions de conception

Un projet d'observatoire robotisé ?

Ce contrôleur NEMA23 est développé dans le cadre d'un projet d'observatoire astronomique personnel. Contactez-nous si vous souhaitez en savoir plus sur ce type de solution sur mesure.

Nous contacter