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.