Quality & Process Control

Unités bonnes au banc, en panne sur le terrain

Comprenez pourquoi des unités passent le test de production mais défaillent sur le terrain, et comment réinjecter chaque retour dans le test.

JJulien Buteau
intermediate9 min de lecture27 octobre 2026

Une unité qui passe tous les tests de production puis tombe en panne chez le client signifie que le test n'a pas exercé la condition qui l'a cassée, ou qu'il l'a mesurée et laissée passer. Ce guide présente les quatre causes habituelles (lacunes de couverture, limites trop larges, défauts intermittents, mesure de la mauvaise grandeur), comment les distinguer, et comment réinjecter chaque retour terrain dans le test avec TofuPilot.

Symptômes et causes probables

SymptômeCause probableSection
L'unité retournée repasse le test de production au bancLes conditions de test diffèrent de l'usage : charge, vibration, température, duréeCause 1
Les résultats d'origine de l'unité retournée étaient dans les limites mais loin de la populationLimites trop largesCause 2
La panne ne se reproduit pas, ou apparaît et disparaîtDéfaut intermittent, mesuré seulement au reposCause 3
Le test déclare bonne une fonction qui ne marche pas en usageLa mesure est un indicateur indirect qui ne représente pas la fonctionCause 4
Plusieurs retours partagent un lot, une période ou un posteChangement de procédé que le test ne couvre pasCause 1 ou 2, puis la ligne

La première vérification est la même pour tout retour : retrouver les résultats de test d'origine de l'unité par son numéro de série. Sans cet historique, chaque cause ci-dessus est une supposition.

Cause 1 : le test tourne dans des conditions que l'unité ne voit jamais en usage

Un test au banc est en général statique et court : alimentation nominale, température ambiante, à vide ou faible charge, quelques secondes par mesure. L'usage est dynamique et long. Un défaut qui n'apparaît que dans l'une des conditions d'usage passe le banc.

ConditionTest au bancUsageDéfaut qui n'apparaît qu'en usage
CourantÀ vide ou faible chargePleine charge, pics, transitoires de régénérationBrasures et sertissages résistifs, pistes sous-dimensionnées, MOSFET mal reportés
VibrationAucuneContinue, large bandeBrasures fissurées sur composants lourds et fils, connecteurs, visserie desserrée
TempératureAmbianteDémarrages à froid, boîtiers chauds, cyclesComposants marginaux, fatigue des brasures, marges de timing
DuréeQuelques secondesPlusieurs heuresEmballement thermique, dérive lente, usure
TransitionsConsignes stablesÉchelons, démarrages, arrêtsAppels de courant, dépassements, surtension du bus à la décélération

Un exemple tiré du test de moteurs et d'ESC donne l'ordre de grandeur de l'écart. Sur un banc mesuré, un moteur brushless de taille 3115 sans hélice consommait 3,5 à 4,5 A à plein gaz sur une batterie 6S. Avec une hélice typique, le même moteur consommerait selon estimation 60 à 80 A à plein gaz. Un test sans hélice sollicite donc le chemin de puissance à environ 4 / 70 ≈ 6 % de son courant d'usage. Une brasure assez résistive pour surchauffer à 70 A dissipe I²R, soit (4 / 70)² ≈ 0,3 % de cette puissance à 4 A, et passe. Voir le test de moteurs et d'actionneurs pour des montages de test en charge.

Que faire

  • Listez les conditions d'usage du produit et marquez celles que le test de production couvre.
  • Pour chaque condition non couverte, choisissez entre l'ajouter au test (une charge, une étape de vibration, un point de température) et la couvrir par un déverminage comme la vibration aléatoire ou le cyclage thermique.
  • N'essayez pas de couvrir les conditions d'usage par la surcontrainte. Un courant très supérieur à l'usage, appliqué pour « griller » les brasures faibles, est destructif et dégrade aussi les bonnes brasures.

Cause 2 : limites trop larges

Des limites recopiées d'une fiche technique, ou élargies pour supprimer de faux échecs, peuvent laisser passer des unités nettement anormales par rapport à la population. Une unité au bord d'une limite large est souvent celle qui porte un défaut.

Comparez les mesures d'origine de l'unité retournée à la distribution de toutes les unités de la même référence :

Position de l'unité retournéeInterprétationAction
Près du centre de la distributionLe test n'a pas vu le défautLacune de couverture : cause 1, 3 ou 4
Dans la queue, dans les limitesLe test a vu une valeur anormale et l'a acceptéeResserrer la limite vers la population
Hors limitesL'unité aurait dû échouerVérifier un retest après échec, une dérogation, ou une limite modifiée après le run

Dans TofuPilot, chaque mesure a une carte de contrôle et un Cpk sur l'ensemble des runs. Placer la valeur de l'unité retournée sur cette carte répond à la question en un coup d'œil. Pour fixer les limites à partir de la distribution plutôt que de la fiche technique, voir comment fixer des limites de mesure à partir des données de production, et pour surveiller la dérive dans le temps, ce qu'est la MSP.

Cause 3 : défauts intermittents mesurés au repos

Une brasure sèche ou fissurée peut afficher une résistance normale au repos, parce que les surfaces fissurées se touchent encore. Elle s'ouvre sous vibration, flexion ou dilatation thermique. Une lecture unique au repos la laisse passer à chaque fois.

Mesurez la même grandeur pendant que l'unité est sollicitée, et enregistrez la variation, pas une seule valeur :

  • Faites vibrer, tapotez ou fléchissez l'ensemble pendant la mesure.
  • Échantillonnez en continu et enregistrez l'écart maximal à la moyenne, pas seulement la moyenne.
  • Utilisez une connexion 4 fils (Kelvin) pour les faibles résistances : contacts de courant et de mesure séparés, sinon la résistance de contact des pointes domine et sa propre variation masque la brasure.

La phase ci-dessous échantillonne la résistance d'une brasure pendant qu'un pot vibrant tourne, et enregistre la moyenne et l'écart crête :

procedure.yaml
28 lines
name: Power Lead Joint Checkversion: 1.1.0plugs:  - name: Shaker Controller    key: shaker    python: plugs.shaker:ShakerController  - name: Micro-ohmmeter    key: ohmmeter    python: plugs.ohmmeter:MicroOhmmetermain:  - name: Battery Lead Resistance Under Vibration    python: phases.joint_vibration:joint_vibration    timeout: 5m    with:      duration_s: 60    measurements:      - name: Joint Resistance Mean        unit: mΩ        validators:          - operator: "<="            expected_value: 0.8      - name: Joint Resistance Max Deviation        unit: mΩ        validators:          - operator: "<="            expected_value: 0.1
phases/joint_vibration.py
20 lines
import statisticsimport timedef joint_vibration(shaker, ohmmeter, measurements, log, duration_s):    samples = []    shaker.start()    try:        deadline = time.monotonic() + duration_s        while time.monotonic() < deadline:            samples.append(ohmmeter.read_milliohm())            time.sleep(0.05)    finally:        shaker.stop()    mean = statistics.fmean(samples)    deviation = max(abs(s - mean) for s in samples)    log.info(f"{len(samples)} samples, mean {mean:.3f} mOhm, max deviation {deviation:.3f} mOhm")    measurements.joint_resistance_mean = mean    measurements.joint_resistance_max_deviation = deviation

Les limites et la durée sont des valeurs d'exemple. Une bonne brasure donne une lecture stable sous vibration ; une brasure fissurée présente des pics, que la mesure d'écart attrape même quand la moyenne reste normale.

Cause 4 : mesurer la mauvaise grandeur

Un test peut mesurer une grandeur facile qui est corrélée à la fonction sur les unités saines et ne l'est plus sur les unités défectueuses.

Mesure indirecteCe qu'elle manqueMesure qui représente la fonction
Le moteur tourne (booléen)Surconsommation, commutation irrégulière, phase faibleCourant et vitesse à des points de gaz définis, par phase
Tension présente sur un rail à videEffondrement du rail en chargeTension du rail au courant de charge nominal
Le lien de communication répond une foisTaux d'erreur dans le tempsNombre de paquets et d'erreurs sur une durée fixe
Contrôle visuel d'une brasureFissure interne, mouillage insuffisantChute de tension de la brasure à courant connu, comparée à une unité de référence

Enregistrez des valeurs, pas des booléens. Un succès booléen cache à quel point l'unité était proche de l'échec, et ne donne rien à quoi comparer un retour.

Réinjecter les retours terrain dans le test

Chaque retour est un cas de test que le test de production a raté. La boucle ci-dessous le transforme en modification du test.

  1. Identifiez l'unité par son numéro de série et ouvrez son historique de test. Dans TofuPilot, chaque run est enregistré sous le numéro de série de l'unité, avec chaque mesure, ses limites, le poste et la version de la procédure.
  2. Enregistrez l'analyse du retour comme un run sur le même numéro de série. Passez la procédure de production, ou une procédure d'analyse de défaillance dédiée, sur l'unité retournée, et marquez-la avec des métadonnées de run pour pouvoir filtrer ces runs :
phases/mark_return.py
def mark_return(run):    run.metadata["context"] = "field_return"    run.metadata["rma"] = "RMA-0001"  # votre référence de retour
  1. Classez la cause avec les tableaux ci-dessus : lacune de couverture, limite trop large, intermittent, mauvaise mesure.
  2. Modifiez le test : ajoutez la mesure ou la condition, ou resserrez la limite. Incrémentez la version de la procédure, enregistrée avec chaque run, pour comparer les résultats avant et après la modification.
  3. Vérifiez sur l'unité retournée. Le test modifié doit faire échouer l'unité retournée. Sinon, la modification ne traite pas le défaut.
  4. Surveillez les données de production. Une nouvelle mesure ou une limite plus serrée fait d'abord baisser le rendement au premier passage. Vérifiez sur le Pareto des défaillances que les nouveaux échecs sont bien le défaut, et non le test. Si le rendement baisse de façon inattendue, voir pourquoi le rendement baisse.

Pièges courants

Clore un retour en « aucun défaut trouvé » après un seul test au banc. Le test au banc est celui qui a déjà laissé passer l'unité. Reproduisez les conditions d'usage avant de conclure.

Élargir les limites pour réduire les faux échecs sans regarder la distribution. Cela laisse aussi passer les unités de la queue, qui sont les pannes terrain probables.

Enregistrer des booléens au lieu de valeurs. Un retour ne peut pas être comparé à une population qui n'a jamais été mesurée.

Surcontraindre pour compenser une couverture manquante. Un fort courant ou une contrainte extrême appliqués à chaque unité endommagent les unités saines. Utilisez des déverminages dont les niveaux sont fixés pour ne pas consommer la vie des unités saines.

Modifier le test sans le vérifier sur l'unité retournée. Sans cette vérification, rien ne montre que le nouveau test aurait attrapé la panne.

Points clés

  • Démarrez chaque analyse de retour à partir des résultats d'origine de l'unité, retrouvés par numéro de série.
  • Les tests au banc sont en général statiques et courts ; les pannes en usage viennent de la charge, de la vibration, de la température, de la durée et des transitions.
  • Une unité retournée dans la queue de la distribution désigne des limites trop larges ; une unité proche du centre désigne une lacune de couverture.
  • Les défauts intermittents demandent une mesure pendant la vibration ou la flexion, enregistrée comme une variation, avec des connexions Kelvin pour les faibles résistances.
  • Mesurez la fonction, enregistrez des valeurs, et réinjectez chaque retour comme une modification du test vérifiée sur l'unité retournée.

Plus de guides

Mettez ce guide en pratique