Pruebas de Producción y Calibración en Masa de Módulos Bluetooth

Cada módulo Bluetooth enviado a un cliente pasa por una línea de pruebas de producción. La diferencia entre un módulo que funciona «la mayoría de las veces» y uno que cumple las especificaciones en todas las condiciones de temperatura, voltaje y desajuste de antena no es el firmware, es el proceso de prueba. Este artículo desglosa el flujo de trabajo estación por estación, los parámetros clave de calibración y la economía de rendimiento frente a cobertura.

La Línea de Producción de Cuatro Estaciones

Una línea de producción típica de módulos BLE tiene cuatro estaciones obligatorias. Omitir cualquiera crea un punto ciego que las devoluciones en garantía eventualmente expondrán:

Estación Función Tiempo de Ciclo Fallo Detectado
1. ICT / Visual Abierto/corto, colocación de componentes, calidad de soldadura ~8 s Tombstoning, puentes, pasivos faltantes
2. Programación FW Grabar aplicación + bootloader, escribir MAC, escribir ajuste XTAL ~15 s Flash corrupta, variante incorrecta, chip en blanco
3. Calibración RF Offset de frecuencia, potencia TX, offset RSSI, ajuste de cristal ~25 s Offset ±40 kHz, error de potencia 3 dB, pérdida de sensibilidad
4. Prueba Funcional Advertising, conexión, lectura/escritura GATT, GPIO, ADC, corriente ~20 s Fuga IO, deriva de corriente en reposo, enlace inestable

Tiempo total de ciclo: ~68 segundos por módulo. Con estaciones paralelas y fixtures multi-unidad, el rendimiento alcanza 200–400 módulos/hora en una sola línea.

Calibración de Frecuencia del Cristal — Los 25 Segundos Más Críticos

El cristal de 32 MHz es el corazón de cada conexión BLE. Sin calibración, una tolerancia inicial de ±40 ppm se traduce en un offset de portadora de ±96 kHz a 2.402 GHz, suficiente para violar la especificación BLE (±150 kHz máximo) cuando se añaden temperatura y envejecimiento. La calibración reduce esto a ±10 ppm o mejor.

Procedimiento de calibración para series nRF52/nRF53:

// Paso 1: Configurar DUT en TX de portadora continua en canal 0 (2402 MHz)
// Paso 2: El analizador de espectro mide la frecuencia real f_meas
// Paso 3: Calcular valor de ajuste
// f_target = 2402.000 MHz, f_meas del SA

int32_t offset_hz = f_meas - 2402000000;  // offset con signo en Hz
int32_t trim_ppb = (offset_hz * 1000) / 2402;  // convertir a ppb

// Registro XTAL nRF52: complemento a dos de 16 bits, LSB = 0.5 ppm
// 0.5 ppm a 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;

// Guardar permanentemente en UICR
NRF_UICR->XTALFREQ = (uint16_t)trim_value;

// Paso 4: Volver a medir para verificar f_error < ±2 kHz

Para módulos que usan un cristal estándar de 32.768 kHz para el reloj de reposo, se aplica el mismo principio, pero la calibración se realiza midiendo el reloj de 32 MHz contra una referencia disciplinada por GPS, derivando luego el ajuste de 32k de la relación.

Calibración de Potencia TX: Por Qué el Auto-Ajuste No Es Suficiente

La mayoría de los SDKs de chipsets proporcionan una configuración de potencia TX en dBm como un valor entero de registro. Pero la potencia radiada real depende del diseño de PCB, tolerancias de la red de adaptación, eficiencia de la antena e incluso la carcasa plástica. Un módulo configurado a "0 dBm" puede realmente radiar entre -2 y +3 dBm en un lote de producción.

Potencia TX Objetivo Rango de Valor de Registro Salida Medida Registro Calibrado
+4 dBm 0x04–0x0C +2.1–+5.8 dBm Lookup por unidad
0 dBm 0x00–0x04 -1.5–+1.9 dBm Lookup por unidad
-8 dBm 0xFFF8–0xFFFC -9.2–-6.7 dBm Lookup por unidad
-20 dBm 0xFFEC–0xFFF0 -22.1–-18.3 dBm Lookup por unidad

El host de calibración barre el registro de potencia TX a través de 4–5 valores, mide cada uno con un medidor de potencia o analizador de espectro, construye una tabla de interpolación lineal y almacena el mapeo registro-a-dBm en la flash interna del módulo. En tiempo de ejecución, el firmware de aplicación lee esta tabla para alcanzar objetivos de potencia exactos, crítico para la localización por dirección AoA/AoD donde las diferencias de potencia entre rutas de antena deben ser < 0.5 dB.

Economía de Producción: Cobertura de Pruebas vs. Costo

Cada segundo de prueba cuesta dinero. Un fabricante por contrato cobra $0.02–$0.05 por segundo de tiempo de línea. Para un módulo con BOM de $3.50, una prueba de 68 segundos añade $1.36–$3.40 al costo, potencialmente duplicando el precio unitario. La decisión de ingeniería es dónde trazar la línea.

Elemento de Prueba Tiempo Añadido Cobertura Riesgo al Omitir
Calibración RF 3 canales +8 s Planicidad de potencia entre canales Bajo — típicamente dentro de 0.5 dB
Calibración offset RSSI +5 s Precisión RSSI ±1 dB Medio — afecta estimación de distancia
Medición corriente reposo +4 s Fugas, pasivos defectuosos Alto — valores atípicos drenan baterías
Verificación VSWR antena +3 s Desintonización de antena, error de ensamblaje Alto — pérdida de 3 dB invisible en prueba funcional
Ciclo de temperatura +120 s Deriva del cristal, fatiga de soldadura Solo muestreo — no por unidad

Regla de oro para pruebas de producción: nunca omitir la corriente de reposo y el VSWR de antena. Estos detectan defectos físicos (puentes de soldadura en condensadores de carga del cristal, desajuste de antena por PCB desalineado) que las pruebas funcionales de advertising no detectarán. Un módulo que anuncia correctamente pero consume 800 µA en reposo en lugar de 2 µA generará una devolución en garantía que cuesta 10× más que el tiempo de prueba ahorrado.

Automatización: De Manual a Totalmente Automatizado

Una celda de prueba completamente automatizada consiste en:

  • Fixture de prueba: Cama de pines pogo para alimentación, UART/SWD y RF (conmutador coaxial a SMA)
  • Instrumentación: Analizador de espectro (Rigol RSA3030N o similar), fuente de alimentación programable con lectura de µA (Keithley 2280S o similar)
  • Recinto blindado: Aislamiento >60 dB a 2.4 GHz (JRE 0806 o personalizado)
  • PC host: Script Python controlando instrumentos vía SCPI/VISA, DUT vía serial
  • Base de datos MES: Registra cada número de serie con todas las mediciones para trazabilidad

Orquestador de pruebas Python — esqueleto:

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

Optimización de Rendimiento: Ajuste Basado en Datos

Después de 10,000 módulos, la base de datos de producción revela patrones. Un histograma de valores de ajuste XTAL muestra la distribución de tolerancia de fabricación del cristal. Si el ajuste medio es -8 (es decir, los cristales son consistentemente 128 Hz rápidos), el diseño de PCB puede tener exceso de capacidad parásita en los pines del cristal — reduzca los condensadores de carga externos de 12 pF a 10 pF y la distribución se centrará. Este tipo de retroalimentación de lazo cerrado separa un rendimiento del 92% de uno del 98.5%, y a 100k unidades/mes, esa diferencia del 6.5% significa 6,500 rechazos menos.

Conclusión

Las pruebas de producción no son un centro de costos, son la última revisión de ingeniería que recibe un módulo antes de llegar al cliente. Una estación de prueba bien diseñada detecta offsets de cristal antes de que se conviertan en caídas de conexión, mide la corriente de reposo antes de que sea una queja de duración de batería, y verifica la salida RF antes de que sea un problema de alcance. Invierta los 68 segundos. La alternativa es un fallo en campo que cuesta días de depuración, una línea parada y una reputación dañada que ninguna calibración puede reparar.

Los módulos Bluetooth son tan fiables como el proceso que los envía. Pruebe a fondo, calibre con precisión, registre todo.