Test Station Setup

Dimensionner l'alimentation d'un banc moteur

Dimensionnez une alimentation ou un pack LiPo pour un banc moteur brushless : budget de courant, câblage, précharge et suivi du bus à chaque run.

JJulien Buteau
intermediate10 min de lecture27 octobre 2026

Un banc de test de moteurs brushless a besoin d'une source d'énergie qui tient la tension du bus pendant chaque pic de courant que le test produit. Apprenez à établir un budget de courant à partir du nombre de moteurs et de la charge, à choisir entre alimentation de laboratoire, batterie et solution hybride, à dimensionner le câblage et la précharge, et à enregistrer la tension et le courant du bus à chaque run avec TofuPilot.

Établir le budget de courant

Dimensionnez la source à partir de deux valeurs : le courant continu que le banc consomme pendant l'étape de test la plus longue, et le courant crête qu'il consomme pendant les transitoires. Les deux sont proportionnels au nombre de moteurs qui tournent en même temps.

current-budget.txt
I_continuous = motors x I_motor_steadyI_peak       = motors x I_motor_peakP_source     = V_bus_max x I_continuous   (add margin for peaks)

Le tableau ci-dessous reprend des valeurs mesurées sur un moteur 3115 de 1250KV piloté par un ESC 4-en-1 BLHeli_32 de 100 A sur un bus 6S, sans hélice. Les valeurs avec hélice sont une estimation pour une hélice courante à plein gaz, pas une mesure.

ConditionPar moteur4 moteurs
Sans hélice, 25 % de gaz (8 350 tr/min)0,65 A2,6 A
Sans hélice, 70 % de gaz (22 600 tr/min)2,65 A10,6 A
Sans hélice, 100 % de gaz (31 000 tr/min)3,5 à 4,5 A14 à 18 A
Sans hélice, échelon de gaz au lieu d'une rampepics jusqu'à 10 Ajusqu'à 40 A s'ils sont simultanés
Avec hélice, plein gaz (estimation)60 à 80 A240 à 320 A

Deux conclusions en découlent :

  • Sans hélice, la charge est faible. Quatre moteurs à plein gaz consomment 18 A en continu, soit environ 450 W à 25,2 V (6S pleine charge). Une alimentation 24 V, 25 A, 600 W suffit, à condition que le test applique des rampes de gaz et non des échelons.
  • Avec hélice, la charge change de catégorie. Un moteur à 70 A sur un bus de 25,2 V représente 1,76 kW. Quatre moteurs à 70 A sur un bus nominal de 22,2 V représentent 6,2 kW. Les alimentations de laboratoire de cette puissance sont des appareils industriels ; une seule alimentation de 2,4 kW coûte déjà plusieurs centaines d'euros.

Les pics d'échelon comptent autant que les valeurs stabilisées. Un échelon de gaz demande à l'ESC d'accélérer le rotor d'un coup, et le pic de courant vaut plusieurs fois le courant stabilisé. 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, ce qui produit précisément ces pics. Piloter le DShot directement depuis un microcontrôleur permet au test d'appliquer des rampes et garde le pic proche du courant continu.

Choisir la source

SourcePoints fortsLimites
Alimentation de laboratoire (à découpage)Tension stable, limitation de courant, relecture à distance en SCPINe peut pas absorber de courant, donc la régénération fait monter le bus ; la limitation de courant fait chuter la tension sur les pics
Pack LiPoCourant crête très élevé, absorbe la régénérationTension dépendante de l'état de charge, chute sous charge, risque d'incendie, recharge entre les sessions
Hybride (alimentation en parallèle du pack)L'alimentation couvre la moyenne, le pack couvre les pics et absorbe la régénérationL'alimentation doit tolérer une sortie réalimentée, le pack doit rester sous la pleine charge, plus de câblage

Une alimentation de laboratoire convient à la caractérisation sans hélice et aux essais d'endurance à faible puissance. Un pack convient aux essais avec hélice, où les pics atteignent des dizaines d'ampères par moteur. Une solution hybride convient aux longs essais avec hélice où le pack seul se déchargerait trop vite. Consultez le manuel de l'alimentation avant de la mettre en parallèle d'une batterie : certains appareils ne sont pas conçus pour une sortie réalimentée et demandent une diode série, qui ajoute sa propre chute de tension.

Lire correctement le taux de décharge C

Le taux C indiqué sur l'étiquette d'une LiPo multiplie la capacité pour donner un courant de décharge maximal :

c-rating.txt
I_label = C x capacity5,000 mAh, 50C  ->  50 x 5 A = 250 A

La valeur de l'étiquette n'est pas le courant que le pack maintient à une tension exploitable. Ce qui limite le pack, c'est sa résistance interne, qui fixe la chute de tension et la chaleur dissipée dans les cellules :

pack-sag.txt
V_sag  = I x R_packP_heat = I^2 x R_packExample value: R_pack = 15 mOhm (6 cells x 2.5 mOhm)  70 A  ->  V_sag = 1.05 V,  P_heat = 74 W 280 A  ->  V_sag = 4.2 V,   P_heat = 1,176 W

Mesurez la résistance interne de vos propres packs avec le chargeur ou avec un échelon de charge, et dimensionnez à partir de cette valeur, pas de l'étiquette. Un pack qui descend jusqu'au seuil de coupure basse tension de l'ESC pendant une étape de test invalide le test, même si son étiquette annonce dix fois le courant.

Dimensionner connecteurs et câbles

Chaque milliohm du circuit de puissance coûte de la tension et de la chaleur aux courants d'un essai avec hélice. La résistance du cuivre par mètre est une propriété fixe de la section :

SectionRésistanceAller-retour de 2 m à 70 A
12 AWG5,21 mOhm/m0,73 V de chute, 51 W
10 AWG3,28 mOhm/m0,46 V de chute, 32 W
8 AWG2,06 mOhm/m0,29 V de chute, 20 W

La chute vaut I x R x length, la chaleur I^2 x R x length. Le courant admissible dépend de l'isolant et du regroupement des conducteurs, prenez donc la valeur du fabricant du câble. Gardez les câbles d'alimentation courts et torsadés pour réduire l'inductance de boucle, ce qui limite aussi les surtensions sur les échelons de courant.

Choisissez les connecteurs d'après le courant continu donné par le fabricant, avec une marge sur I_continuous, et vérifiez que chaque sertissage et chaque soudure du circuit tiennent le même courant. Un connecteur utilisé à sa limite chauffe, sa résistance de contact augmente, et l'échauffement s'entretient.

Ajouter une précharge ou un connecteur anti-étincelle

Les ESC portent de gros condensateurs d'entrée. Branchés directement sur un pack chargé, seule la résistance du pack et des câbles limite le courant d'appel :

precharge.txt
Direct connection, example values:  25.2 V / 20 mOhm         ->  1,260 A theoretical peakThrough a 10 Ohm pre-charge resistor, C = 2,000 uF (example value):  I_peak = 25.2 V / 10 Ohm  ->  2.5 A  tau    = R x C            ->  20 ms  5 x tau                   ->  100 ms to reach 99% of the bus voltage

Le branchement direct crée un arc au connecteur et use ses contacts. Utilisez un connecteur anti-étincelle, qui se ferme d'abord à travers une résistance intégrée avant le contact principal, ou un circuit de précharge : une résistance en parallèle d'un contacteur ou d'un interrupteur qui se ferme après cinq constantes de temps. La même logique s'applique à une alimentation de laboratoire dont la sortie est déjà active : activez la sortie après avoir raccordé le banc, pas avant.

Enregistrer la tension et le courant du bus à chaque run

La tension et le courant du bus font partie du résultat de test. Un moteur qui passe sur un pack neuf et échoue sur un pack qui chute présente un problème d'alimentation, pas un problème de moteur, et seule une trace du bus enregistrée permet de les distinguer.

La procédure ci-dessous amène un moteur à 70 % de gaz en rampe, maintient, puis redescend, tout en échantillonnant la relecture de l'alimentation. La trace est enregistrée comme une mesure multidimensionnelle, avec une limite de tension minimale et une limite de courant maximal sur des agrégations.

procedure.yaml
49 lines
name: Motor Bench Power Checkversion: 0.1.0config:  PSU_ADDRESS:    required: true  DSHOT_PORT:    required: trueplugs:  - name: Bench Supply    key: psu    python: plugs.bench_supply:BenchSupply    scope: station    with:      address: "{config.PSU_ADDRESS}"  - name: DShot Driver    key: motor    python: plugs.dshot_driver:DshotDriver    with:      port: "{config.DSHOT_PORT}"      motor_index: 0main:  - name: Throttle Profile    python: phases.run_profile    timeout: 30s    measurements:      - name: Bus Trace        x_axis:          legend: Time          unit: s        y_axis:          - legend: Bus Voltage            key: bus_voltage            unit: V            aggregations:              - type: min                validators:                  - operator: ">="                    expected_value: 21.5          - legend: Bus Current            key: bus_current            unit: A            aggregations:              - type: max                validators:                  - operator: "<="                    expected_value: 4.0

Les limites (21,5 V et 4,0 A) sont des valeurs d'exemple. Fixez-les à partir d'une base de runs conformes sur votre propre banc. Le plug d'alimentation relit la tension et le courant avec des requêtes SCPI standard :

plugs/bench_supply.py
import pyvisaclass BenchSupply:    def __init__(self, address):        self._rm = pyvisa.ResourceManager()        self._inst = self._rm.open_resource(address)        self._inst.timeout = 2000  # ms    def measure_voltage(self):        return float(self._inst.query("MEAS:VOLT?"))    def measure_current(self):        return float(self._inst.query("MEAS:CURR?"))    def __del__(self):        self._inst.close()

Le plug moteur dialogue avec un microcontrôleur qui génère les trames DShot300. Le protocole ligne est un exemple ; remplacez-le par celui de votre firmware de banc :

plugs/dshot_driver.py
20 lines
import serialclass DshotDriver:    def __init__(self, port, motor_index):        self._ser = serial.Serial(port, 115200, timeout=0.5)        self._motor = motor_index    def set_throttle(self, percent):        # Protocole d'exemple : "T <moteur> <pourcentage>", le firmware répond une ligne        self._ser.write(f"T {self._motor} {percent:.1f}".encode())        self._ser.readline()    def __del__(self):        try:            self.set_throttle(0.0)        finally:            self._ser.close()

La phase interpole le profil de gaz, échantillonne le bus à chaque pas et ramène toujours le moteur à zéro :

phases/run_profile.py
33 lines
import time# (temps en s, gaz en %) : rampe montante, maintien, rampe descendantePROFILE = [(0.0, 0.0), (2.0, 70.0), (6.0, 70.0), (8.0, 0.0)]def throttle_at(t):    for (t0, p0), (t1, p1) in zip(PROFILE, PROFILE[1:]):        if t0 <= t <= t1:            return p0 + (p1 - p0) * (t - t0) / (t1 - t0)    return 0.0def run_profile(measurements, log, motor, psu):    times, volts, amps = [], [], []    start = time.monotonic()    try:        while (t := time.monotonic() - start) <= PROFILE[-1][0]:            motor.set_throttle(throttle_at(t))            times.append(round(t, 3))            volts.append(psu.measure_voltage())            amps.append(psu.measure_current())            time.sleep(0.05)    finally:        motor.set_throttle(0.0)    trace = measurements.bus_trace    trace.x_axis = times    trace.y_axis.bus_voltage = volts    trace.y_axis.bus_current = amps    trace.y_axis.bus_voltage.aggregations.min = min(volts)    trace.y_axis.bus_current.aggregations.max = max(amps)    log.info(f"{len(times)} samples, min {min(volts):.2f} V, max {max(amps):.2f} A")

Une relecture SCPI prend quelques millisecondes par requête et moyenne sur le temps d'intégration de l'appareil : elle montre la chute de tension et le courant stabilisé, pas les pics de quelques microsecondes. Pour capter les pics d'échelon et de régénération, ajoutez un ADC de mesure de courant ou un oscilloscope sur le bus et enregistrez son pic comme une mesure numérique séparée.

Sur le dashboard, chaque run conserve la trace rattachée au numéro de série de l'unité. La carte de contrôle du minimum de bus_voltage d'un run à l'autre montre un pack qui vieillit ou un connecteur qui se dégrade avant qu'il ne provoque un échec, et le Pareto des échecs sépare les échecs liés à l'alimentation des échecs moteur.

Pièges courants

Dimensionner sur le seul courant stabilisé. Les échelons de gaz produisent des pics de plusieurs fois la valeur stabilisée. Appliquez des rampes, ou dimensionnez la source pour les pics.

Se fier à l'étiquette du taux C. Dimensionnez à partir de la résistance interne mesurée et de la chute qu'elle produit au courant de test.

Tester avec hélice sur une alimentation dimensionnée pour des essais sans hélice. Le courant augmente d'un ordre de grandeur ; l'alimentation passe en limitation de courant et le bus s'effondre.

Mettre une alimentation en parallèle d'un pack sans lire son manuel. Certaines sorties ne tolèrent pas d'être réalimentées. Ajoutez une diode série ou choisissez une alimentation prévue pour cet usage.

Brancher un pack chargé sans précharge. L'arc du courant d'appel use le connecteur à chaque branchement.

Ignorer la régénération. Une alimentation à découpage ne peut pas absorber l'énergie restituée à la décélération, et la tension du bus monte. Voir le guide sur la gestion du freinage régénératif sur un banc de test.

Points clés

  • Établissez le budget en nombre de moteurs x courant, séparément pour le continu et la crête, avec et sans hélice.
  • Une alimentation de 600 W couvre quatre moteurs sans hélice ; les essais avec hélice atteignent des kilowatts par moteur.
  • Le courant réel d'un pack est limité par sa résistance interne et sa chute de tension, pas par l'étiquette du taux C.
  • Dimensionnez les câbles avec I x R x length et utilisez une précharge ou un connecteur anti-étincelle sur les gros packs.
  • Enregistrez la trace de tension et de courant du bus à chaque run, avec des limites, pour séparer les problèmes d'alimentation des défauts de l'unité.

Plus de guides

Mettez ce guide en pratique