Bluetooth-Modul Produktionstest und Serienkalibrierung
Jedes Bluetooth-Modul, das an einen Kunden ausgeliefert wird, durchläuft eine Produktionstestlinie. Der Unterschied zwischen einem Modul, das „meistens funktioniert“, und einem, das die Spezifikation über Temperatur, Spannung und Antennenfehlanpassung hinweg erfüllt, liegt nicht in der Firmware, sondern im Testprozess. Dieser Artikel analysiert den stationsweisen Arbeitsablauf, die wichtigsten Kalibrierungsparameter und die Wirtschaftlichkeit von Durchsatz versus Testabdeckung.
Die Vier-Stationen-Produktionslinie
Eine typische BLE-Modul-Produktionslinie hat vier obligatorische Stationen. Das Auslassen einer einzigen erzeugt einen blinden Fleck, den Garantierücksendungen irgendwann aufdecken werden:
| Station | Funktion | Zykluszeit | Erkannter Fehlermodus |
|---|---|---|---|
| 1. ICT / Visuell | Unterbrechung/Kurzschluss, Bauteilplatzierung, Lötqualität | ~8 s | Tombstoning, Brücken, fehlende Passivbauteile |
| 2. Firmware-Flashen | App + Bootloader flashen, MAC schreiben, XTAL-Trim schreiben | ~15 s | Beschädigter Flash, falsche Variante, leerer Chip |
| 3. HF-Kalibrierung | Frequenzoffset, TX-Leistung, RSSI-Offset, Quarz-Trim | ~25 s | ±40 kHz Offset, 3 dB Leistungsfehler, Empfindlichkeitsverlust |
| 4. Funktionstest | Advertising, Verbindung, GATT Read/Write, GPIO, ADC, Strom | ~20 s | IO-Leckstrom, Ruhestromdrift, instabile Verbindung |
Gesamtzykluszeit: ~68 Sekunden pro Modul. Mit parallelen Stationen und Multi-Up-Vorrichtungen erreicht der Durchsatz 200–400 Module/Stunde auf einer einzelnen Linie.
Quarzfrequenz-Kalibrierung — Die Kritischsten 25 Sekunden
Der 32-MHz-Quarz ist das Herzstück jeder BLE-Verbindung. Ohne Kalibrierung entspricht eine anfängliche Toleranz von ±40 ppm einem Trägeroffset von ±96 kHz bei 2,402 GHz — genug, um die BLE-Spezifikation (max. ±150 kHz) zu verletzen, wenn Temperatur und Alterung hinzukommen. Die Kalibrierung reduziert dies auf ±10 ppm oder besser.
Kalibrierungsverfahren für nRF52/nRF53-Serie:
// Schritt 1: DUT auf kontinuierlichen Träger-TX auf Kanal 0 (2402 MHz) setzen
// Schritt 2: Spektrumanalysator misst tatsächliche Frequenz f_meas
// Schritt 3: Trim-Wert berechnen
// f_target = 2402.000 MHz, f_meas vom SA
int32_t offset_hz = f_meas - 2402000000; // vorzeichenbehafteter Offset in Hz
int32_t trim_ppb = (offset_hz * 1000) / 2402; // in ppb umrechnen
// nRF52 XTAL-Trim-Register: 16-Bit Zweierkomplement, LSB = 0,5 ppm
// 0,5 ppm bei 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;
// Dauerhaft in UICR speichern
NRF_UICR->XTALFREQ = (uint16_t)trim_value;
// Schritt 4: Neu messen zur Verifizierung f_error < ±2 kHz
Für Module, die einen standardmäßigen 32,768-kHz-Quarz für den Sleep-Takt verwenden, gilt das gleiche Prinzip — aber die Kalibrierung erfolgt durch Messung des 32-MHz-Takts gegen eine GPS-disziplinierte Referenz und anschließende Ableitung des 32k-Trim-Werts aus dem Verhältnis.
TX-Leistungskalibrierung: Warum Auto-Tune Nicht Ausreicht
Die meisten Chipsatz-SDKs bieten eine TX-Leistungseinstellung in dBm als ganzzahligen Registerwert. Die tatsächlich abgestrahlte Leistung hängt jedoch vom PCB-Layout, den Toleranzen des Anpassnetzwerks, der Antenneneffizienz und sogar dem Kunststoffgehäuse ab. Ein auf „0 dBm" eingestelltes Modul kann in einer Produktionscharge tatsächlich zwischen -2 und +3 dBm abstrahlen.
| Ziel-TX-Leistung | Registerwert-Bereich | Gemessene Ausgabe | Kalibriertes Register |
|---|---|---|---|
| +4 dBm | 0x04–0x0C | +2,1–+5,8 dBm | Pro-Gerät-Lookup |
| 0 dBm | 0x00–0x04 | -1,5–+1,9 dBm | Pro-Gerät-Lookup |
| -8 dBm | 0xFFF8–0xFFFC | -9,2–-6,7 dBm | Pro-Gerät-Lookup |
| -20 dBm | 0xFFEC–0xFFF0 | -22,1–-18,3 dBm | Pro-Gerät-Lookup |
Der Kalibrierungshost durchläuft das TX-Leistungsregister in 4–5 Schritten, misst jeden Wert mit einem Leistungsmesser oder Spektrumanalysator, erstellt eine lineare Interpolationstabelle und speichert die Register-zu-dBm-Zuordnung im internen Flash des Moduls. Zur Laufzeit liest die Anwendungsfirmware diese Tabelle, um exakte Leistungsziele zu erreichen — entscheidend für AoA/AoD-Richtungsbestimmung, bei der Leistungsunterschiede zwischen Antennenpfaden < 0,5 dB betragen müssen.
Produktionswirtschaftlichkeit: Testabdeckung vs. Kosten
Jede Testsekunde kostet Geld. Ein Auftragsfertiger berechnet $0,02–$0,05 pro Sekunde Linienzeit. Bei einem Modul mit einer Stückliste von $3,50 fügt ein 68-Sekunden-Test $1,36–$3,40 zu den Kosten hinzu — was den Stückpreis potenziell verdoppelt. Die technische Entscheidung liegt darin, wo die Grenze gezogen wird.
| Testelement | Zusätzliche Zeit | Abdeckung | Risiko bei Auslassung |
|---|---|---|---|
| Vollständige 3-Kanal-HF-Kal. | +8 s | Leistungsflachheit zwischen Kanälen | Niedrig — typischerweise innerhalb 0,5 dB |
| RSSI-Offset-Kalibrierung | +5 s | ±1 dB RSSI-Genauigkeit | Mittel — beeinflusst Entfernungsschätzung |
| Ruhestrommessung | +4 s | Leckströme, defekte Passivbauteile | Hoch — Ruhestrom-Ausreißer entladen Batterien |
| Antennen-VSWR-Prüfung | +3 s | Antennenverstimmung, Montagefehler | Hoch — 3 dB Effizienzverlust im Funktionstest unsichtbar |
| Temperaturzyklus | +120 s | Quarzdrift, Lötstellenermüdung | Nur Stichprobe — nicht pro Einheit |
Goldene Regel für Produktionstests: Ruhestrom und Antennen-VSWR niemals auslassen. Diese erkennen physische Defekte (Lötbrücken an Quarz-Lastkondensatoren, Antennenfehlanpassung durch falsch ausgerichtete PCB), die funktionale Advertising-Tests übersehen. Ein Modul, das einwandfrei advertised, aber im Sleep 800 µA statt 2 µA verbraucht, erzeugt eine Garantierücksendung, die das 10-fache der eingesparten Testzeit kostet.
Automatisierung: Von Manuell zu Vollautomatisch
Eine vollautomatische Testzelle besteht aus:
- Testvorrichtung: Federkontaktstift-Bett für Strom, UART/SWD und HF (Koaxialschalter zu SMA)
- Instrumentierung: Spektrumanalysator (Rigol RSA3030N oder ähnlich), programmierbares Netzteil mit µA-Stromauslesung (Keithley 2280S oder ähnlich)
- Geschirmtes Gehäuse: >60 dB Isolierung bei 2,4 GHz (JRE 0806 oder kundenspezifisch)
- Host-PC: Python-Testskript zur Steuerung der Instrumente via SCPI/VISA und des DUT via seriell
- MES-Datenbank: Protokolliert jede Seriennummer mit allen Messwerten zur Rückverfolgbarkeit
Python-Test-Orchestrator — Grundgerüst:
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
Ausbeuteoptimierung: Datengesteuertes Trimmen
Nach 10.000 Modulen offenbart die Produktionsdatenbank Muster. Ein Histogramm der XTAL-Trim-Werte zeigt die Verteilung der Quarz-Fertigungstoleranz. Wenn der mittlere Trim-Wert -8 beträgt (d.h. die Quarze sind konsistent 128 Hz zu schnell), kann das PCB-Layout überschüssige parasitäre Kapazität an den Quarz-Pins aufweisen — reduzieren Sie die externen Lastkondensatoren von 12 pF auf 10 pF und die Verteilung verschiebt sich zur Mitte. Diese Art von Closed-Loop-Feedback trennt eine Ausbeute von 92 % von 98,5 %, und bei 100k Einheiten/Monat bedeutet dieser Unterschied von 6,5 % 6.500 weniger Ausschuss.
Fazit
Produktionstests sind kein Kostentreiber — sie sind die letzte technische Überprüfung, die ein Modul erhält, bevor es den Kunden erreicht. Eine gut konzipierte Teststation erkennt Quarz-Offsets, bevor sie zu Verbindungsabbrüchen werden, misst den Ruhestrom, bevor er zur Beschwerde über die Batterielebensdauer wird, und überprüft die HF-Ausgabe, bevor sie zum Reichweitenproblem wird. Investieren Sie die 68 Sekunden. Die Alternative ist ein Feldausfall, der Tage der Fehlersuche, einen Linienstillstand und einen beschädigten Ruf kostet, den keine Kalibrierung reparieren kann.
Bluetooth-Module sind nur so zuverlässig wie der Prozess, der sie ausliefert. Testen Sie gründlich, kalibrieren Sie präzise, protokollieren Sie alles.