Test de Production et Étalonnage en Série des Modules Bluetooth

Chaque module Bluetooth expédié à un client passe par une ligne de test de production. La différence entre un module qui fonctionne « la plupart du temps » et un module conforme aux spécifications quelles que soient la température, la tension et la désadaptation d’antenne n’est pas le firmware, c’est le processus de test. Cet article détaille le flux de travail station par station, les paramètres clés d’étalonnage et l’économie du débit par rapport à la couverture.

La Ligne de Production à Quatre Stations

Une ligne de production typique de modules BLE comporte quatre stations obligatoires. En omettre une seule crée un angle mort que les retours sous garantie finiront par exposer :

Station Fonction Temps de Cycle Défaut Détecté
1. ICT / Visuel Ouvert/court-circuit, placement des composants, qualité de soudure ~8 s Tombstoning, ponts, composants passifs manquants
2. Programmation FW Flasher application + bootloader, écrire MAC, écrire trim XTAL ~15 s Flash corrompue, mauvaise variante, puce vide
3. Étalonnage RF Offset de fréquence, puissance TX, offset RSSI, trim du quartz ~25 s Offset ±40 kHz, erreur de puissance 3 dB, perte de sensibilité
4. Test Fonctionnel Advertising, connexion, lecture/écriture GATT, GPIO, CAN, courant ~20 s Fuite IO, dérive du courant de veille, liaison instable

Temps de cycle total : ~68 secondes par module. Avec des stations parallèles et des montages multi-unités, le débit atteint 200–400 modules/heure sur une seule ligne.

Étalonnage de la Fréquence du Quartz — Les 25 Secondes Les Plus Critiques

Le quartz 32 MHz est le cœur de chaque connexion BLE. Sans étalonnage, une tolérance initiale de ±40 ppm se traduit par un offset de porteuse de ±96 kHz à 2,402 GHz — suffisant pour violer la spécification BLE (±150 kHz max) lorsque la température et le vieillissement s’ajoutent. L’étalonnage réduit cela à ±10 ppm ou mieux.

Procédure d’étalonnage pour les séries nRF52/nRF53 :

// Étape 1 : Configurer le DUT en TX porteuse continue sur le canal 0 (2402 MHz)
// Étape 2 : L'analyseur de spectre mesure la fréquence réelle f_meas
// Étape 3 : Calculer la valeur de trim
// f_target = 2402.000 MHz, f_meas depuis le SA

int32_t offset_hz = f_meas - 2402000000;  // offset signé en Hz
int32_t trim_ppb = (offset_hz * 1000) / 2402;  // convertir en ppb

// Registre XTAL nRF52 : complément à deux 16 bits, LSB = 0,5 ppm
// 0,5 ppm à 32 MHz = 16 Hz
int16_t trim_value = (int16_t)(offset_hz / 16);
if (trim_value > 32767) trim_value = 32767;
if (trim_value < -32768) trim_value = -32768;

// Stocker de façon permanente dans UICR
NRF_UICR->XTALFREQ = (uint16_t)trim_value;

// Étape 4 : Re-mesurer pour vérifier f_error < ±2 kHz

Pour les modules utilisant un quartz standard 32,768 kHz pour l'horloge de veille, le même principe s'applique — mais l'étalonnage se fait en mesurant l'horloge 32 MHz par rapport à une référence disciplinée par GPS, puis en dérivant le trim 32k du rapport.

Étalonnage de la Puissance TX : Pourquoi l'Auto-Réglage Ne Suffit Pas

La plupart des SDKs de chipsets fournissent un réglage de puissance TX en dBm sous forme de valeur entière de registre. Mais la puissance rayonnée réelle dépend de la conception du PCB, des tolérances du réseau d'adaptation, de l'efficacité de l'antenne et même du boîtier plastique. Un module réglé sur « 0 dBm » peut en réalité rayonner entre -2 et +3 dBm sur un lot de production.

Puissance TX Cible Plage de Valeur de Registre Sortie Mesurée Registre Étalonné
+4 dBm 0x04–0x0C +2,1–+5,8 dBm Table par unité
0 dBm 0x00–0x04 -1,5–+1,9 dBm Table par unité
-8 dBm 0xFFF8–0xFFFC -9,2–-6,7 dBm Table par unité
-20 dBm 0xFFEC–0xFFF0 -22,1–-18,3 dBm Table par unité

L'hôte d'étalonnage balaie le registre de puissance TX sur 4–5 valeurs, mesure chacune avec un wattmètre ou un analyseur de spectre, construit une table d'interpolation linéaire et stocke la correspondance registre-à-dBm dans la mémoire flash interne du module. À l'exécution, le firmware applicatif lit cette table pour atteindre des objectifs de puissance exacts — critique pour la localisation par direction AoA/AoD où les différences de puissance entre les chemins d'antenne doivent être < 0,5 dB.

Économie de Production : Couverture de Test vs. Coût

Chaque seconde de test coûte de l'argent. Un sous-traitant facture 0,02–0,05 $ par seconde de temps de ligne. Pour un module avec une nomenclature de 3,50 $, un test de 68 secondes ajoute 1,36–3,40 $ au coût — pouvant potentiellement doubler le prix unitaire. La décision d'ingénierie consiste à déterminer où tracer la limite.

Élément de Test Temps Ajouté Couverture Risque si Omis
Étalonnage RF 3 canaux complet +8 s Planéité de puissance inter-canaux Faible — généralement dans 0,5 dB
Étalonnage offset RSSI +5 s Précision RSSI ±1 dB Moyen — affecte l'estimation de distance
Mesure du courant de veille +4 s Fuite, passifs défectueux Élevé — les valeurs aberrantes déchargent les batteries
Vérification VSWR d'antenne +3 s Désaccord d'antenne, erreur d'assemblage Élevé — perte de 3 dB invisible au test fonctionnel
Cycle de température +120 s Dérive du quartz, fatigue des soudures Échantillonnage uniquement — pas par unité

Règle d'or pour les tests de production : ne jamais omettre le courant de veille et le VSWR d'antenne. Ceux-ci détectent les défauts physiques (ponts de soudure sur les condensateurs de charge du quartz, désadaptation d'antenne due à un PCB mal aligné) que les tests fonctionnels d'advertising ne verront pas. Un module qui annonce correctement mais consomme 800 µA en veille au lieu de 2 µA générera un retour sous garantie coûtant 10× plus que le temps de test économisé.

Automatisation : Du Manuel au Entièrement Automatisé

Une cellule de test entièrement automatisée se compose de :

  • Montage de test : Lit de broches à ressort pour l'alimentation, UART/SWD et RF (commutateur coaxial vers SMA)
  • Instrumentation : Analyseur de spectre (Rigol RSA3030N ou équivalent), alimentation programmable avec lecture de courant en µA (Keithley 2280S ou équivalent)
  • Enceinte blindée : Isolation >60 dB à 2,4 GHz (JRE 0806 ou sur mesure)
  • PC hôte : Script Python contrôlant les instruments via SCPI/VISA et le DUT via série
  • Base de données MES : Enregistre chaque numéro de série avec toutes les mesures pour la traçabilité

Orchestrateur de test Python — squelette :

import pyvisa, serial, sqlite3, time

class ModuleTester:
    def __init__(self, sn):
        self.sn = sn
        self.rm = pyvisa.ResourceManager()
        self.sa = self.rm.open_resource('TCPIP::192.168.1.100::INSTR')
        self.psu = self.rm.open_resource('USB0::0x05E6::0x2280::12345::INSTR')
        self.dut = serial.Serial('/dev/ttyUSB0', 115200, timeout=1)
        self.db = sqlite3.connect('production.db')

    def measure_frequency_offset(self, channel=0):
        freq = 2402 + channel * 2  # MHz
        self.dut.write(b'AT+CWTX=%d\r\n' % channel)
        time.sleep(0.1)
        self.sa.write(f'FREQ:CENT {freq}MHZ')
        self.sa.write('INIT:IMM')
        offset = float(self.sa.query('CALC:MARK:X?')) - freq * 1e6
        return int(offset)

    def measure_sleep_current(self):
        self.dut.write(b'AT+SLEEP\r\n')
        time.sleep(0.5)
        current = float(self.psu.query('MEAS:CURR?'))
        return current * 1e6  # µA

    def calibrate_and_store(self):
        offset = self.measure_frequency_offset()
        trim = offset // 16
        self.dut.write(f'AT+XTALTRIM={trim}\r\n'.encode())

        offset2 = self.measure_frequency_offset()
        if abs(offset2) > 2000:
            raise Exception(f"XTAL cal failed: {offset2} Hz offset")

        i_sleep = self.measure_sleep_current()
        if i_sleep > 5.0:
            raise Exception(f"Sleep current {i_sleep:.1f} µA exceeds 5 µA limit")

        self.db.execute(
            'INSERT INTO test_results VALUES (?, ?, ?, ?)',
            (self.sn, offset2, trim, i_sleep)
        )
        self.db.commit()
        return True

Optimisation du Rendement : Ajustement Basé sur les Données

Après 10 000 modules, la base de données de production révèle des tendances. Un histogramme des valeurs de trim XTAL montre la distribution de la tolérance de fabrication des quartz. Si le trim moyen est de -8 (c'est-à-dire que les quartz sont systématiquement 128 Hz trop rapides), le PCB peut avoir une capacité parasite excessive sur les broches du quartz — réduisez les condensateurs de charge externes de 12 pF à 10 pF et la distribution se recentre. Ce type de rétroaction en boucle fermée sépare un rendement de 92 % d'un rendement de 98,5 %, et à 100k unités/mois, cette différence de 6,5 % représente 6 500 rejets en moins.

Conclusion

Les tests de production ne sont pas un centre de coûts — c'est la dernière revue d'ingénierie qu'un module reçoit avant d'atteindre le client. Une station de test bien conçue détecte les offsets de quartz avant qu'ils ne deviennent des pertes de connexion, mesure le courant de veille avant qu'il ne devienne une plainte sur l'autonomie, et vérifie la sortie RF avant qu'elle ne devienne un problème de portée. Investissez les 68 secondes. L'alternative est une défaillance sur le terrain qui coûte des jours de débogage, une ligne à l'arrêt et une réputation endommagée qu'aucun étalonnage ne peut réparer.

Les modules Bluetooth ne sont aussi fiables que le processus qui les expédie. Testez minutieusement, étalonnez avec précision, enregistrez tout.