Test Types & Methods

Imagerie thermique en test de production

Détectez brasures résistives et courts-circuits avec une caméra IR sous courant continu, en enregistrant températures et images à chaque unité.

JJulien Buteau
intermediate10 min de lecture27 octobre 2026

Une brasure fissurée, un sertissage avec des brins manquants ou un court-circuit partiel sur un rail d'alimentation dissipe plus de puissance que ses voisins quand le courant le traverse. Ce guide montre comment faire passer un courant continu connu dans une carte, prendre une image infrarouge, extraire la température maximale de chaque zone d'intérêt comme une mesure, et la comparer à une unité de référence avec TofuPilot.

Ce que détecte l'imagerie thermique

Une brasure sur un chemin de courant se comporte comme une résistance. La puissance qu'elle dissipe vaut :

joule-heating.txt
P = I² × RExample values, 20 A through a power joint:  good joint,    R = 0.5 mΩ  ->  P = 20² × 0.0005 = 0.2 W  cracked joint, R = 5 mΩ    ->  P = 20² × 0.005  = 2.0 W

Les valeurs de l'exemple sont illustratives, mais le rapport tient : une brasure dix fois plus résistante dissipe dix fois plus de puissance au même courant, et chauffe nettement plus que les bonnes brasures voisines. Une caméra infrarouge voit toute la carte d'un coup, donc une image contrôle chaque brasure du chemin de courant.

DéfautSignature thermique sous courant continu
Brasure fissurée, sèche ou insuffisante sur un chemin de courantPoint chaud sur la brasure, plus chaud que les brasures homologues de l'unité de référence
Sertissage avec brins manquants, fil sous-dimensionnéTronçon chaud le long du fil ou au fût de sertissage
Court-circuit partiel entre railsPoint chaud à l'emplacement du court-circuit, avec un courant d'alimentation au-dessus du nominal
Shunt ou piste manquant ou de mauvaise valeurRépartition de température anormale le long du chemin
Composant de puissance mal reporté thermiquementComposant plus chaud que sur l'unité de référence à dissipation égale

L'imagerie thermique complète la mesure électrique de la même brasure. Une chute de tension en 4 fils donne la résistance du chemin sous forme d'un seul nombre. L'image montre quelle brasure de ce chemin en est responsable.

Prérequis

  • Une caméra infrarouge qui fournit des données radiométriques (une température par pixel) via un SDK ou une API Python, pas seulement un JPEG colorisé
  • Un montage qui tient la caméra et la carte à distance et orientation fixes, pour que chaque zone d'intérêt soit toujours aux mêmes coordonnées en pixels
  • Une alimentation continue programmable avec limitation de courant, ou une alimentation et une charge électronique, pour imposer un courant connu dans le chemin
  • Une unité de référence (golden unit) : une carte aux brasures vérifiées, qui sert à fixer les températures de référence
  • Un moyen de maîtriser l'émissivité des surfaces mesurées (étape 1)

Étape 1 : maîtriser l'émissivité

Une caméra infrarouge calcule la température à partir de l'énergie rayonnée, en supposant une émissivité pour la surface. Le métal nu (brasure, cuivre étamé, bornes nickelées) a une émissivité faible et reflète son environnement : la caméra lit alors autant le reflet de l'opérateur, de la lampe ou du plafond que la brasure elle-même. Deux brasures à la même température peuvent afficher plusieurs degrés d'écart parce que l'une est plus brillante.

SurfaceÉmissivitéLecture caméra
Brasure nue ou brillante, cuivre étaméFaible, variable selon la finitionPeu fiable, dominée par les reflets
Vernis épargne, corps de composants en époxy, isolant de filÉlevéeExploitable
Peinture noire mate ou ruban haute émissivitéÉlevée, connueExploitable et répétable

Trois façons d'obtenir une lecture exploitable, par ordre de préférence en production :

  1. Mesurer une surface à haute émissivité à côté de la brasure. Le vernis épargne autour d'une pastille ou l'isolant à côté d'un sertissage chauffe par conduction. La lecture est plus basse que sur la brasure elle-même, mais constante d'une unité à l'autre.
  2. Appliquer un revêtement noir mat ou un ruban haute émissivité là où le procédé le permet, par exemple sur une borne recouverte plus tard au montage.
  3. Peindre l'unité de référence et les échantillons de mise au point pour caractériser les vraies températures de brasure, puis les corréler avec la lecture sur la surface à haute émissivité utilisée en production.

La comparaison avec l'unité de référence n'annule l'erreur d'émissivité que si les deux unités présentent la même surface. Une brasure brillante sur une unité et mate sur une autre est un écart de mesure, pas un défaut.

Étape 2 : fixer le courant et le timing

Utilisez un courant modéré et connu. Le but est de rendre visible une brasure résistive, pas de la solliciter : un courant assez fort pour endommager une brasure faible dégrade aussi les bonnes. Choisissez un courant qui produit un échauffement de quelques degrés sur les bonnes brasures, bien à l'intérieur de leurs caractéristiques.

La température monte ensuite vers un régime établi avec une constante de temps τ fixée par l'inertie thermique de la carte et ses chemins d'évacuation. Après un temps t, l'échauffement a atteint une fraction 1 - e^(-t/τ) de sa valeur finale :

settling.txt
t = 3τ  ->  1 - e^-3 = 95.0 % of the final riset = 5τ  ->  1 - e^-5 = 99.3 % of the final rise

Mesurez τ sur l'unité de référence : relevez la température d'une zone chaque seconde après la mise sous courant, et ajustez la courbe. Deux stratégies en découlent :

StratégieInstant de captureCompromis
Régime établiEnviron 5τ après la mise sous courantContraste maximal entre bonnes et mauvaises brasures, temps de cycle le plus long
Transitoire fixeUn instant fixe plus court que le régime établiTemps de cycle plus court ; contraste plus faible et timing strictement identique sur chaque unité

Les deux conviennent si le timing est le même sur l'unité de référence et sur chaque unité de production. La température ambiante décale toutes les lectures, donc enregistrez l'échauffement au-dessus de l'ambiante plutôt que la température absolue.

Étape 3 : définir les zones d'intérêt

Avec la carte en position fixe, chaque brasure occupe le même rectangle de pixels sur chaque image. Définissez une zone d'intérêt (ROI) par brasure ou par groupe de brasures identiques, sous forme de bornes en pixels [x0, y0, x1, y1]. Prenez la température maximale de chaque ROI : un point chaud est un pic, et une moyenne sur la zone le dilue.

Ajoutez une ROI sur une zone qui ne porte pas de courant, comme un coin non alimenté de la carte, comme référence d'ambiante.

Étape 4 : écrire le plug caméra

Le plug caméra acquiert une image radiométrique, calcule le maximum de chaque ROI, enregistre une image en fausses couleurs pour le rapport, et ne renvoie que les nombres. L'image radiométrique reste dans le processus du plug, parce que les arguments et résultats des méthodes de plug sont sérialisés entre processus et qu'une image radiométrique complète est un grand tableau.

plugs/ir_camera.py
22 lines
import matplotlib.pyplot as pltimport numpy as npclass IRCamera:    def __init__(self, serial):        self.serial = serial        # Ouvrir ici la caméra avec le SDK du fabricant et régler l'émissivité        # des surfaces à haute émissivité que vous mesurez.    def _grab_frame(self):        # Remplacer par l'appel du SDK qui renvoie une image radiométrique        # sous forme de tableau 2D de températures en degrés Celsius.        raise NotImplementedError("connect the camera SDK")    def capture(self, rois, image_path):        frame = np.asarray(self._grab_frame(), dtype=float)        plt.imsave(image_path, frame, cmap="inferno")        maxima = {}        for name, (x0, y0, x1, y1) in rois.items():            maxima[name] = float(frame[y0:y1, x0:x1].max())        return maxima

Étape 5 : écrire la phase et la procédure

La phase impose le courant, attend le temps d'établissement, capture, coupe le courant, joint l'image et enregistre une mesure par ROI.

procedure.yaml
57 lines
name: Power Path Thermal Inspectionversion: 1.0.0plugs:  - name: IR Camera    key: ir_camera    python: plugs.ir_camera:IRCamera    scope: station    with:      serial: "{config.IR_CAMERA_SERIAL}"  - name: Power Supply    key: psu    python: plugs.psu:PowerSupply    with:      address: "{config.PSU_ADDRESS}"config:  IR_CAMERA_SERIAL:    required: true  PSU_ADDRESS:    required: truemain:  - name: Thermal Image Under DC Current    python: phases.thermal_image:thermal_image    timeout: 5m    with:      current_a: 10      settle_s: 90      rois:        ambient: [10, 10, 40, 40]        battery_pad_pos: [120, 200, 160, 240]        battery_pad_neg: [120, 260, 160, 300]        phase_pad_a: [400, 180, 430, 210]    measurements:      - name: Supply Current        unit: A        validators:          - operator: ">="            expected_value: 9.8          - operator: "<="            expected_value: 10.2      - name: Battery Pad Pos Rise        unit: °C        validators:          - operator: "<="            expected_value: 8.0      - name: Battery Pad Neg Rise        unit: °C        validators:          - operator: "<="            expected_value: 8.0      - name: Phase Pad A Rise        unit: °C        validators:          - operator: "<="            expected_value: 6.0

Le courant, le temps d'établissement, les bornes en pixels et les limites ci-dessus sont des valeurs d'exemple pour une carte et un montage. Fixez-les à partir de l'unité de référence et des données de production.

phases/thermal_image.py
23 lines
import osimport tempfileimport timedef thermal_image(ir_camera, psu, measurements, attach, log, current_a, settle_s, rois):    psu.set_current(current_a)    psu.output_on()    try:        time.sleep(settle_s)        measurements.supply_current = psu.read_current()        image_path = os.path.join(tempfile.gettempdir(), "thermal_image.png")        maxima = ir_camera.capture(rois, image_path)    finally:        psu.output_off()    attach.file(image_path, "thermal_image.png")    ambient = maxima.pop("ambient")    log.info(f"Ambient reference: {ambient:.1f} C")    for name, temperature in maxima.items():        # battery_pad_pos -> measurements.battery_pad_pos_rise        setattr(measurements, f"{name}_rise", temperature - ambient)

Le bloc try/finally coupe le courant même si la capture échoue. L'image est jointe au run, donc un ingénieur qui analyse une unité en échec voit où se trouve le point chaud, pas seulement quelle ROI a dépassé sa limite.

Étape 6 : comparer à l'unité de référence

Passez l'unité de référence plusieurs fois en début de poste ou après toute modification du montage, de la caméra ou du courant. Ses lectures vérifient le poste : si l'unité de référence dérive, c'est le montage qui a changé, pas le produit.

Fixez les premières limites à partir de l'échauffement de l'unité de référence plus une marge, puis affinez-les à partir de la distribution des unités de production une fois assez de runs enregistrés. Dans TofuPilot, chaque mesure de ROI a une carte de contrôle et un Cpk sur l'ensemble des unités, donc une brasure qui tourne régulièrement près de sa limite apparaît avant de commencer à échouer. Pour la méthode, voir comment fixer des limites de mesure à partir des données de production et ce qu'est la MSP.

Une unité qui échoue sur une ROI, avec un courant d'alimentation normal, désigne une brasure résistive à cet endroit. Une unité avec un courant d'alimentation élevé et un point chaud hors du chemin attendu désigne un court-circuit.

Pièges courants

Mesurer du métal brillant. Une émissivité faible et variable transforme des reflets en lectures de température. Mesurez une surface à haute émissivité ou revêtez la zone mesurée.

Utiliser un fort courant pour rendre les défauts évidents. Un courant qui chauffe une brasure faible au point de l'endommager sollicite aussi les bonnes. Utilisez le plus faible courant qui donne un échauffement net sur l'unité de référence.

Timing incohérent. Une capture prise 60 s après la mise sous courant n'est pas comparable à une capture à 90 s. Fixez le temps d'établissement dans la procédure.

Moyenner sur la ROI. Un point chaud occupe quelques pixels. Utilisez le maximum.

Limites en température absolue. L'ambiante change au cours de la journée et d'un poste à l'autre. Limitez l'échauffement au-dessus d'une ROI de référence d'ambiante.

Montage ou caméra qui bouge. Si la carte se décale, les ROI ne couvrent plus les brasures. Utilisez des pions de centrage et vérifiez l'image de l'unité de référence après toute modification mécanique.

Points clés

  • Sous un courant continu connu, une brasure résistive dissipe plus de puissance (P = I² × R) et apparaît comme un point chaud.
  • L'émissivité est la principale source d'erreur : mesurez des surfaces à haute émissivité ou appliquez un revêtement mat.
  • Capturez à un instant fixe, idéalement proche du régime établi (environ 5τ), et enregistrez l'échauffement au-dessus de l'ambiante.
  • Extrayez la température maximale par ROI comme une mesure, et joignez l'image au run.
  • Gardez l'image radiométrique dans le plug et ne renvoyez que les valeurs des ROI.
  • Vérifiez le poste avec une unité de référence, puis fixez les limites à partir des données de production.

Plus de guides

Mettez ce guide en pratique