Test Station Setup

Gérer le freinage régénératif sur un banc

Empêchez le freinage régénératif de faire monter la tension du bus d'un banc moteur : décélération en rampe, résistance de freinage et limite mesurée.

JJulien Buteau
advanced10 min de lecture27 octobre 2026

Quand un moteur brushless ralentit plus vite que les frottements et la traînée ne peuvent l'arrêter, l'ESC renvoie l'énergie cinétique du rotor sur le bus continu. Sur une batterie, cette énergie recharge le pack. Sur une alimentation de laboratoire à découpage, elle n'a nulle part où aller, et la tension du bus monte. Apprenez pourquoi cela se produit, ce que cela met en danger, comment le corriger sur le banc, et comment faire du pic de tension du bus une mesure avec une limite dans TofuPilot.

Pourquoi la décélération renvoie du courant

Un moteur à aimants permanents qui tourne est un générateur. Sa force contre-électromotrice est proportionnelle à la vitesse. Un ESC moderne pilote les phases en redressement synchrone (les deux MOSFET de chaque demi-pont sont commutés activement), donc lorsque la vitesse commandée passe sous la vitesse réelle, la force contre-électromotrice dépasse la tension moyenne appliquée par l'ESC et le courant s'inverse. Il circule du moteur vers le bus, à travers l'ESC. C'est ce courant inversé qui freine le rotor.

L'énergie disponible est l'énergie cinétique du rotor :

rotor-energy.txt
E = 1/2 x J x w^2w = rpm x 2 x pi / 60Example values: J = 5e-5 kg.m^2 (rotor with propeller), 22,600 rpm  w = 2,367 rad/s  E = 0.5 x 5e-5 x 2,367^2  ->  140 J

Une partie de cette énergie est perdue dans la résistance des bobinages, les commutations de l'ESC et, avec une hélice, la traînée aérodynamique. Le reste revient sur le bus. Plus la décélération est rapide, plus la part qui revient est grande, car les pertes ont moins de temps pour l'absorber :

regen-power.txt
P_average = E / t_decel  140 J over 2.0 s  ->  70 W  140 J over 0.1 s  ->  1,400 W

Pourquoi une alimentation de laboratoire laisse monter le bus

Une alimentation à découpage unidirectionnelle peut fournir du courant mais ne peut pas en absorber. Quand l'ESC renvoie du courant, l'étage de sortie de l'alimentation cesse de conduire et la charge renvoyée s'accumule dans les capacités présentes sur le bus : les condensateurs d'entrée de l'ESC et les condensateurs de sortie de l'alimentation. La tension monte jusqu'à ce que l'énergie soit absorbée :

bus-rise.txt
E_absorbed = 1/2 x C x (V_max^2 - V_0^2)Example value: C = 1,000 uF total on the bus, supply set to 25.2 V  rise to 36.6 V  ->  E = 0.5 x 0.001 x (36.6^2 - 25.2^2) = 0.35 J

Moins d'un demi-joule suffit à faire monter le bus de 11,4 V. Sur un banc équipé d'un moteur 3115 de 1250KV, d'un ESC 4-en-1 BLHeli_32 et d'un bus 6S nominal, des échelons de gaz sans hélice ont porté le bus à 36,6 V, soit 45 % au-dessus des 25,2 V d'un pack 6S pleinement chargé. Une batterie à la même place absorbe le courant sous forme de charge, et la tension bouge à peine.

Ce que cela met en danger

ÉlémentMode de défaillance
Alimentation de laboratoireLa protection contre les surtensions (OVP) se déclenche et coupe la sortie ; le bus s'effondre en plein test et l'ESC décroche
Étage de sortie de l'alimentationL'énergie inverse répétée sollicite des condensateurs de sortie qui ne sont pas conçus pour l'absorber
ESCMOSFET et condensateurs d'entrée exposés au-delà de leur tension nominale
Autres charges du busContrôleur de vol, BEC, capteurs et télémétrie reçoivent aussi la surtension
Données de testUn run qui se termine sur un déclenchement OVP enregistre un événement d'alimentation, pas une propriété de l'unité

Vérifiez la tension d'entrée maximale dans la fiche technique de l'ESC et le seuil OVP de l'alimentation. Le pic du bus doit rester sous les deux, avec une marge.

Correctif 1 : décélérer en rampe

Le correctif le moins coûteux consiste à ralentir plus doucement. Étaler la même énergie cinétique sur une durée plus longue maintient la puissance renvoyée sous ce que les pertes absorbent, et peu d'énergie atteint le bus.

Cela suppose de maîtriser le profil de gaz. La commande MAV_CMD_DO_MOTOR_TEST d'ArduPilot ne peut pas changer le gaz pendant un test, donc un profil par paliers construit avec elle impose un arrêt et un redémarrage à chaque niveau. L'arrêt est une consigne de décélération instantanée, le pire cas pour la régénération. Piloter le DShot directement depuis un microcontrôleur permet au test de commander une vraie rampe descendante.

La rampe est une modification de procédure, pas de matériel. C'est la première chose à essayer, et le seul correctif qui réduit aussi les pics de courant à l'accélération.

Correctif 2 : ajouter de la capacité

Plus de capacité absorbe plus d'énergie pour la même montée en tension. Cela fonctionne pour de petites énergies et des pics rapides, et échoue pour l'énergie d'un rotor :

capacitance.txt
C = 2 x E / (V_max^2 - V_0^2)Absorb 140 J between 25.2 V and 27.0 V:  C = 2 x 140 / (27.0^2 - 25.2^2) = 2.98 F

Trois farads de condensateurs électrolytiques ne sont pas un composant de banc réaliste. Ajoutez de la capacité à faible ESR près de l'ESC pour amortir les pics de commutation, et utilisez l'un des correctifs suivants pour l'énergie elle-même.

Correctif 3 : hacheur de freinage et résistance

Un hacheur de freinage connecte une résistance de puissance sur le bus quand la tension dépasse un seuil, et la déconnecte sous un seuil plus bas. La résistance transforme l'énergie renvoyée en chaleur. Dimensionnez-la à partir du seuil et du courant régénéré crête :

brake-resistor.txt
R <= V_on / I_regen_peakExample values: V_on = 26.5 V, V_off = 26.0 V, I_regen_peak = 20 A  R <= 1.33 Ohm  ->  choose 1.2 Ohm  P_peak = V_on^2 / R = 26.5^2 / 1.2  ->  585 WAverage power, upper bound (all energy returned):  140 J per deceleration x 6 decelerations per minute / 60 s  ->  14 W

La résistance doit avoir une puissance moyenne supérieure à la valeur calculée et une tenue en impulsion pour P_peak. Montez-la à un endroit où sa température de surface ne peut brûler personne ni enflammer quoi que ce soit. Une diode TVS sur le bus est un écrêteur de dernier recours utile pour les transitoires rapides, mais elle est dimensionnée pour des impulsions, pas pour des joules répétés : choisissez sa tension d'écrêtage sous la tension nominale de l'ESC et au-dessus de la tension de pleine charge, et ne comptez pas sur elle pour absorber l'énergie.

Correctif 4 : alimentation bidirectionnelle ou batterie en parallèle

Une alimentation continue bidirectionnelle (source-puits, ou régénérative) absorbe le courant inverse à une tension fixée, soit dans des charges internes, soit en le renvoyant sur le secteur. Vérifiez que sa capacité d'absorption couvre la puissance régénérée crête, pas seulement la moyenne.

Une batterie en parallèle de l'alimentation de laboratoire absorbe aussi l'énergie renvoyée sous forme de charge. L'alimentation couvre la charge moyenne, le pack couvre les pics et la régénération. Deux conditions s'appliquent :

  • Le pack doit rester sous la pleine charge, sinon l'énergie absorbée surcharge les cellules. Réglez la consigne de l'alimentation sous la tension de pleine charge du pack.
  • L'alimentation doit tolérer une sortie réalimentée. Lisez son manuel, et ajoutez une diode série si ce n'est pas le cas.
CorrectifCoûtTraite l'énergieTraite les picsModifie la procédure
Décélération en rampeNulOui, en l'évitantOuiOui
Capacité supplémentaireFaiblePetites énergies seulementOuiNon
Hacheur et résistance de freinageMoyenOuiEn partieNon
Alimentation bidirectionnelleÉlevéOuiSelon la vitesse de régulationNon
Batterie en parallèleMoyenOuiOuiNon

Mesurer le pic du bus avec une limite

La régénération est invisible pour un test qui n'enregistre que des valeurs stabilisées. Faites du pic du bus une mesure numérique avec une limite, et lancez la décélération avec plusieurs durées de rampe pour trouver la plus courte qui reste sous la limite. La procédure ci-dessous déclare deux phases qui appellent la même fonction avec des durées de rampe différentes, exécutées l'une après l'autre car elles partagent un seul moteur :

procedure.yaml
50 lines
name: Regeneration Checkversion: 0.1.0config:  DSHOT_PORT:    required: true  MONITOR_PORT:    required: trueexecution:  workers: 1plugs:  - name: DShot Driver    key: motor    python: plugs.dshot_driver:DshotDriver    with:      port: "{config.DSHOT_PORT}"      motor_index: 0  - name: Bus Monitor    key: bus_monitor    python: plugs.bus_monitor:BusMonitor    with:      port: "{config.MONITOR_PORT}"main:  - name: Decel Ramp 2 s    key: decel_2s    python: phases.decel:decel_test    with:      hold_throttle: 70.0      ramp_s: 2.0    measurements:      - name: Bus Voltage Max        unit: V        validators:          - operator: "<="            expected_value: 26.0  - name: Decel Ramp 0.5 s    key: decel_0_5s    python: phases.decel:decel_test    with:      hold_throttle: 70.0      ramp_s: 0.5    measurements:      - name: Bus Voltage Max        unit: V        validators:          - operator: "<="            expected_value: 26.0

La limite de 26,0 V est un exemple : la pleine charge 6S plus une petite marge, sous l'OVP de l'alimentation et la tension nominale de l'ESC. Fixez la vôtre à partir des mêmes trois valeurs sur votre banc.

Une relecture SCPI moyenne sur plusieurs millisecondes et manque le pic. Le plug de surveillance du bus dialogue avec un microcontrôleur qui échantillonne le bus avec son ADC et mémorise le maximum. Le protocole est un exemple ; adaptez-le à votre firmware :

plugs/bus_monitor.py
23 lines
import serialclass BusMonitor:    def __init__(self, port):        self._ser = serial.Serial(port, 115200, timeout=1.0)    def arm_peak(self):        # Protocole d'exemple : "ARM" remet à zéro la mémoire de pic, le firmware répond "OK"        self._ser.write(b"ARM")        self._ser.readline()    def read_peak(self):        # Protocole d'exemple : "PEAK?" renvoie la tension de bus la plus haute depuis ARM        self._ser.write(b"PEAK?")        return float(self._ser.readline().decode().strip())    def __del__(self):        self._ser.close()

La phase monte en rampe, maintient, arme la mémoire de pic, redescend en ramp_s et enregistre le pic. Le plug DshotDriver est celui du guide sur le dimensionnement de l'alimentation d'un banc moteur :

phases/decel.py
25 lines
import timeSTEP_S = 0.02def ramp(motor, start, end, duration):    steps = max(1, int(duration / STEP_S))    for i in range(1, steps + 1):        motor.set_throttle(start + (end - start) * i / steps)        time.sleep(duration / steps)def decel_test(measurements, log, motor, bus_monitor, hold_throttle, ramp_s):    try:        ramp(motor, 0.0, hold_throttle, 2.0)        time.sleep(3.0)  # laisser la vitesse se stabiliser        bus_monitor.arm_peak()        ramp(motor, hold_throttle, 0.0, ramp_s)        time.sleep(0.5)  # capter la fin du transitoire    finally:        motor.set_throttle(0.0)    peak = bus_monitor.read_peak()    measurements.bus_voltage_max = peak    log.info(f"Deceleration over {ramp_s} s: bus peak {peak:.2f} V")

Chaque run enregistre le pic du bus pour chaque durée de rampe, rattaché au numéro de série de l'unité. Sur le dashboard, la carte de contrôle de bus_voltage_max montre si un correctif matériel (une résistance de freinage, un pack en parallèle) a déplacé le pic, et s'il reste stable d'une unité et d'un poste à l'autre. Une fois une durée de rampe validée, gardez cette phase en production et retirez les phases de caractérisation.

Pièges courants

Supposer qu'une alimentation de laboratoire se comporte comme une batterie. Une alimentation à découpage unidirectionnelle ne peut pas absorber de courant. Le bus monte à chaque décélération.

Relever l'OVP de l'alimentation pour supprimer les déclenchements. La surtension atteint toujours l'ESC et toutes les autres charges du bus. Corrigez plutôt le chemin de l'énergie.

Compter sur la capacité pour l'énergie du rotor. Des joules d'énergie cinétique demandent des farads. Utilisez la capacité pour les pics, une résistance ou un puits pour l'énergie.

Utiliser une diode TVS comme résistance de freinage. C'est un écrêteur d'impulsions. Des décélérations répétées la font surchauffer.

Mettre en parallèle un pack plein. L'énergie absorbée surcharge les cellules. Gardez le pack sous la pleine charge.

Mesurer le bus avec une relecture lente. La relecture SCPI moyenne et efface le pic. Utilisez un ADC à mémoire de pic ou un oscilloscope.

Arrêter et relancer le test moteur pour changer le gaz. Chaque arrêt est un échelon de décélération depuis la pleine vitesse. Utilisez une rampe.

Points clés

  • La décélération transforme le moteur en générateur ; l'ESC renvoie du courant sur le bus.
  • Une alimentation à découpage unidirectionnelle ne peut pas absorber ce courant, donc la tension du bus monte ; 36,6 V ont été mesurés sur un bus 6S nominal avec des échelons de gaz et sans hélice.
  • Décélérez d'abord en rampe ; cela ne coûte rien et réduit à la fois la régénération et les pics d'accélération.
  • Pour l'énergie restante, utilisez un hacheur et une résistance de freinage, une alimentation bidirectionnelle, ou une batterie en parallèle maintenue sous la pleine charge.
  • Enregistrez le pic du bus comme une mesure avec une limite sous l'OVP de l'alimentation et la tension nominale de l'ESC.

Plus de guides

Mettez ce guide en pratique