Chapitre 4 / 8 — Prototype « Made In Zion », version roue de skate
Électronique de Commutation, Calibration et Récupération d'Énergie
MOSFET IRLZ44N, bip-mètre Hall SS49E, snubber Zener
Rejet de la commutation mécanique
À une vitesse de rotation de 750 tr/min avec une configuration multipolaire, la fréquence de
commutation atteint 100 à 200 Hz. À ce régime, les micro-switches ou rupteurs mécaniques s'usent
et s'arcent quasi instantanément — c'est exactement la limite chiffrée dans les premières
versions de cette page, où un relais reed (≈1 ms de commutation) plafonnait le régime autour de
750 tr/min pour rester fiable. Le pilotage du prototype réel est donc confié exclusivement au
transistor MOSFET de puissance canal N IRLZ44N (logic level), commandé par
l'ESP32 : sa commutation en microsecondes ne borne plus le régime électroniquement.
⚠️ Conséquence pour le gouverneur de vitesse — en supprimant le plafond
électronique imposé par le relais, ce choix supprime aussi le seul filet — même imparfait —
qui limitait involontairement l'emballement. Voir Tests
& sécurité — pas de gouverneur naturel : le frein de Prony (ou une charge contrôlée
équivalente) devient plus que jamais la seule limite de vitesse du système, à engager dès la
première mise sous tension.
Composants
MCU : Arduino Nano ESP32 (recommandé pour la télémétrie sans fil —
suivi RPM/tension en direct) ou Nano classique.
1 MOSFET IRLZ44N par bobine (logic level, canal N), monté en interrupteur
bas-côté, commandé directement par une broche ESP32 (avec résistance de grille).
1 capteur Hall linéaire SS49E (boîtier TO-92S) par module, pour la
calibration au bip-mètre — voir plus bas.
1 buzzer piézo partagé, piloté par l'ESP32 pendant la phase de
calibration.
1 diode de blocage 1N4007 + 1 diode Zener de puissance 24V
(1N5359B) par bobine — réseau de récupération d'énergie (snubber), voir plus bas.
2 balais récupérés (porte-balais + charbons d'un petit moteur DC de
voiture radiocommandée) + 2 anneaux de cuivre au moyeu — amènent le courant du MOSFET rotor
(côté fixe) aux bobines rotor, sans électronique embarquée sur la partie tournante. Voir
plus bas.
1 aimant témoin (petit, faible, jamais masqué), fixé sur le rotor, +
1 sonde Hall dédiée sur le stator — signal de synchronisation fiable,
indépendant des aimants principaux qui sont eux-mêmes masqués pendant l'approche. Voir plus
bas.
ESP32 → MOSFET IRLZ44N → bobine ; à l'ouverture, la diode 1N4007 + Zener 24V renvoient le pic inductif vers +Vcc au lieu de le dissiper
La calibration par bip-mètre Hall
Pour régler précisément le courant d'annulation calibré à 0,11 A (pertes
Joule minimes de ≈0,07 W par bobine), le prototype réel n'utilise pas de gaussmètre coûteux
mais un capteur linéaire SS49E relié à l'ESP32. Ce « bip-mètre » acoustique
traduit l'intensité du champ magnétique en son : lorsque le courant d'annulation est parfait, le
champ net tombe à zéro (B = 0 T) et le buzzer indique le point de consigne
(silence, ou changement de tonalité selon le montage).
SS49E + ESP32 + buzzer : un gaussmètre acoustique fait maison
Le réseau de coupure et de récupération (snubber Zener)
Pour éviter l'effet de freinage magnétique (effet Lenz) lors de la coupure du circuit — tout
en protégeant le MOSFET des surtensions de rupture (back-EMF) — le circuit intègre une diode de
blocage 1N4007 et une diode Zener de 24V. Ce réseau assure une coupure nette (style moteur à
impulsions) et recycle l'énergie inductive d'ouverture directement vers l'alimentation/batterie,
au lieu de la dissiper en chaleur — sans aucune usure d'arc électrique, contrairement à un
contact mécanique.
Compromis assumé vis-à-vis de la « boucle ouverte » — une version antérieure
de cette page exigeait une coupure galvanique totale (relais, sans aucun composant en
parallèle) pour respecter à la lettre le principe d'annulation de InfiniX — Pour les Nuls
(Chapitre 4). Le snubber Zener n'est pas une coupure galvanique parfaite : au moment de
l'ouverture, la diode 1N4007 + Zener offrent un chemin de conduction dès que la tension
dépasse le seuil de 24V, le temps d'évacuer l'énergie stockée dans la bobine vers +Vcc. C'est
un chemin transitoire et dirigé vers l'alimentation — pas une boucle locale bobine/diode qui
entretiendrait indéfiniment un courant induit — mais ce n'est pas non plus un circuit ouvert
à 100 % pendant toute la phase révélée. Retenu ici parce que la commutation mécanique
(relais) est incompatible avec 100-200 Hz en continu ; à documenter au banc (voir Tests) pour mesurer l'écart réel avec la version
relais.
Logique de commande
Un seul MCU, côté stator (fixe), pilote l'ensemble : ses 8 canaux stator, plus un 9e
canal partagé qui alimente toutes les bobines rotor à travers les balais (voir plus bas).
Contrairement à la version précédente, le déclenchement ne vient pas d'une
lecture directe des 8 SS49E de chaque module : ces aimants sont masqués pendant l'approche, donc
peu détectables au bon moment (voir Le capteur aveugle). Le
timing réel est prédit à partir de l'aimant témoin, jamais masqué — code
complet dans cette section.
⚠️ Une seconde couche de sécurité, logicielle — en plus du générateur de
récupération et de sa résistance de délestage (charge physique, voir Tests & sécurité), le MCU mesure le régime en
direct à partir du top de l'aimant témoin et bascule toutes les bobines
(stator et rotor, puisque le même MCU pilote les deux) en roue libre logicielle
dès qu'un seuil est dépassé : toutes restent ON en permanence, plus aucune impulsion de
répulsion n'est produite, le système décélère sous l'effet du frottement et du générateur.
C'est une coupure douce (on ne rompt jamais un courant établi), pas un arrêt brutal — et un
état par défaut sûr au démarrage : tant que le firmware n'a pas confirmé une mesure RPM
valide, les bobines démarrent masquées (ON), jamais révélées. Cette sécurité logicielle
vient en plus du délestage physique, jamais à sa place : un bug ou un reset peut
toujours la contourner, pas une résistance qui chauffe.
Interruptions matérielles (ou
échantillonnage rapide en timer) recommandées plutôt qu'une lecture en boucle, pour ne rater
aucun front à haut régime, et un filtrage (moyenne glissante) sur la mesure de période pour
éviter les bascules intempestives dues au bruit d'une seule lecture. Seuils à caler
expérimentalement, sous la marge de synchronisation
calculée plus haut.
Où placer les sondes Hall
Les 8 SS49E permanents vont uniquement sur la plaque stator (fixe, câblage
simple vers le MCU). Chaque sonde doit détecter l'aimant du rotor qui
approche, pas l'aimant du stator juste à côté (déjà masqué/révélé par sa propre bobine — il
fausserait la lecture).
Même rayon que les modules, une sonde par module (8 au total).
Décalée de quelques mm par rapport au centre du module, dans le sens de
rotation — pas pile dessus. Elle capte ainsi l'aimant rotor qui arrive, en avance sur
l'alignement parfait, sans être noyée par le champ du module stator immédiatement voisin.
C'est le même principe de placement que les sondes Hall d'un moteur BLDC classique, entre
les pôles plutôt que dessus.
Face de détection affleurante à la surface de la plaque stator qui fait
face au rotor — dans un petit perçage à côté du module, pas dans l'entrefer lui-même (elle
serait écrasée à l'assemblage).
Fils routés par l'arrière de la plaque stator vers le MCU — aucune liaison tournante
nécessaire de ce côté, la plaque est fixe.
Côté rotor, pas de sonde permanente : la calibration de ses modules se fait avec un
SS49E portable, tenu à la main pendant le bobinage et lors des contrôles
périodiques (voir Tests — endurance) —
pas besoin de câblage puisque le rotor n'a pas de MCU à lui.
Décalage volontaire de la sonde, dans le sens de rotation, pour anticiper le passage de l'aimant rotor
Liaison rotor : balais récupérés
Le rotor porte ses propres bobines de compensation (annulation symétrique des deux côtés,
voir Assemblage — le rotor), mais pas d'électronique à lui
— pas de MCU, pas de batterie embarquée. Un seul MOSFET, côté stator, pilote toutes les
bobines rotor à la fois (câblées en parallèle, elles se masquent/révèlent toutes ensemble),
à travers deux simples contacts glissants au niveau du moyeu.
✓ Récupérés, pas fabriqués — le porte-balais et les charbons d'un petit
moteur à courant continu de voiture radiocommandée (ou de n'importe quel jouet à moteur DC
bon marché) sont déjà prêts à l'emploi : ressort de contact, charbon, rien à fabriquer.
Conçus pour encaisser plusieurs ampères à plusieurs milliers de tr/min, ils sont largement
surdimensionnés pour nos quelques centaines de mA à 750 tr/min maximum — l'usure attendue
ici est négligeable sur la durée de vie du démonstrateur. À confirmer au banc (voir Tests — endurance), pas à supposer, mais
c'est un bon point de départ.
2 anneaux de contact en cuivre (bande adhésive ou tronçon de tube
cuivre), collés et isolés autour du moyeu tournant — un par fil de la bobine rotor.
2 balais récupérés, montés sur un petit support fixe (le truck ou la
plaque stator), qui pressent en permanence sur les anneaux.
Le courant vient directement du MOSFET/snubber du canal rotor (même circuit que les
canaux stator, voir Composants) — juste redirigé vers les balais
au lieu d'une bobine locale fixe.
Anneaux tournants au moyeu, balais fixes en contact permanent — même principe qu'un moteur à charbons, juste utilisé à l'envers
Le capteur aveugle : synchroniser sans voir l'aimant masqué
Un problème sérieux, pas un détail : la sonde Hall d'un côté est censée annoncer l'arrivée de
l'aimant de l'autre côté — mais cet aimant est justement masqué (annulé à
~0T) pendant toute son approche, exactement pour éviter l'interaction prématurée. Résultat :
pendant la phase où on aurait le plus besoin de la détecter, l'approche ne produit presque
aucun signal — et au moment où le champ redevient détectable (la révélation), c'est déjà trop
tard pour s'en servir comme déclencheur, l'événement a déjà eu lieu.
✓ Solution : un aimant témoin, jamais masqué — petit, faible (bien plus
faible qu'un N42 de propulsion, pour ne pas réintroduire de réluctance notable), fixé sur le
rotor à une position connue, détecté par une sonde Hall dédiée sur le
stator. N'étant jamais compensé, il donne un signal franc et fiable, une fois par tour. À
partir de ce top, le MCU mesure la période réelle de rotation et prédit —
plutôt qu'il ne détecte — le moment d'alignement des 8 modules principaux, qui restent
masqués tout le long de leur approche comme prévu. Le canal rotor (via les balais) suit la
même prédiction : il se révèle chaque fois qu'une position quelconque atteint son alignement.
Les 8 SS49E du stator restent utiles pour
la calibration (bip-mètre) — et peuvent en plus servir de secours au tout premier démarrage à
la manivelle (voir Assemblage — démarrage manuel) : à très
basse vitesse, avant que l'aimant témoin n'ait donné une première période fiable, le masquage
n'est pas encore critique et un signal résiduel peut suffire à amorcer.
const uint8_t INDEX_PIN = A7; // aimant témoin (rotor), jamais masqué : 1 top par tour
const uint8_t ROTOR_MOSFET = 19; // canal partagé, vers les balais
unsigned long lastTop = 0, period = 0;
void loop() {
static bool wasIndex = false;
bool indexNow = (analogRead(INDEX_PIN) > INDEX_THRESHOLD);
if (indexNow && !wasIndex) {
unsigned long now = micros();
period = now - lastTop;
lastTop = now;
currentRPM = 60.0e6 / period; // 1 top par tour => RPM = 60 / T(s)
}
wasIndex = indexNow;
// ... sécurité roue libre inchangée, basée sur currentRPM ...
bool anyAligned = false;
if (period > 0) {
unsigned long elapsed = micros() - lastTop;
for (uint8_t i = 0; i < 8; i++) {
// position attendue du module i : i/8 de tour après le top
unsigned long expected = (unsigned long)((i / 8.0) * period);
bool nearAlignment = (abs((long)(elapsed - expected)) < REVEAL_WINDOW);
bool coilOn = freewheelMode ? true : !nearAlignment; // masqué sauf près de l'alignement prédit
digitalWrite(MOSFET_PINS[i], coilOn ? HIGH : LOW);
anyAligned |= nearAlignment;
}
}
// canal rotor (balais) : révélé si une position quelconque est alignée
digitalWrite(ROTOR_MOSFET, (freewheelMode || !anyAligned) ? HIGH : LOW);
}
Code illustratif, à affiner (gestion du
premier tour sans mesure, filtrage de period, interruptions plutôt que boucle) — mais le
principe compte : on planifie le cycle des aimants masqués à partir d'un signal qui, lui, ne
l'est jamais.