Una fábrica de PCBs no necesita tu archivo `.kicad_pcb`. Necesita coordenadas matemáticas 2D (vectores) que controlen sus máquinas de fotolitografía y láseres. El estándar universal para esto es el formato Gerber (RS-274X).
La placa no se exporta como una sola imagen, sino que se "despedaza" en capas individuales. El fabricante apilará y procesará químicamente cada una de estas capas para construir tu hardware paso a paso.
Al hacer clic en el botón "Plot" (Trazar) en KiCad, generarás una colección de archivos. Los más críticos para una placa de 2 capas son:
Tu diseño inicial es la Revisión 1.0. Pero en 6 meses lanzarás la Revisión 1.1 con una mejor fuente de poder. El firmware en C que escribas será el mismo para ambos, pero necesita saber en cuál placa está corriendo para configurar los pines correctamente.
Una técnica de hardware industrial consiste en reservar 2 o 3 pines GPIO (ej. HW_REV_0 y HW_REV_1). En el diseño PCB de la versión 1.0, unes ambos a GND en el cobre (0-0). En la PCB versión 1.1, unes uno a 3.3V y otro a GND (0-1). El firmware lee estos pines al arrancar y ajusta su comportamiento automáticamente según la tarjeta física que le tocó.
Ejercicio 1: Escribe la rutina de booteo (arranque) Bare-Metal en C que lee los pines físicos de "Hardware Revision" anclados en el cobre de la PCB, permitiéndole al software autoconfigurarse dinámicamente.
#include <stdint.h>
#include <stdbool.h>
// --- 1. DEFINICIONES DE HARDWARE BARE-METAL ---
volatile uint32_t *GPIOB_IDR = (volatile uint32_t *)0x40020410; // Input Data Register Port B
// El Arquitecto rutó los pines PB0 y PB1 en KiCad específicamente para identificar la placa
#define PIN_HW_REV_0 0
#define PIN_HW_REV_1 1
extern void log_imprimir(const char* msg);
extern void inicializar_lcd_v1(void);
extern void inicializar_lcd_v2_i2c(void);
// --- 2. DETECCIÓN DE VERSIÓN DE PCB (HARDWARE-FIRMWARE INTERLOCK) ---
void detectar_hardware_pcb(void) {
// Leemos el estado eléctrico (3.3V o 0V) de los pines de revisión
// Extraemos los bits 0 y 1 y los combinamos en un número binario (0 al 3)
uint8_t bit_0 = (*GPIOB_IDR & (1 << PIN_HW_REV_0)) ? 1 : 0;
uint8_t bit_1 = (*GPIOB_IDR & (1 << PIN_HW_REV_1)) ? 1 : 0;
uint8_t revision_placa = (bit_1 << 1) | bit_0;
// Autoconfiguración basada en la soldadura del PCB
switch (revision_placa) {
case 0: // Binario 00 -> Revisión 1.0 (Placa Prototipo)
log_imprimir("Boot: Hardware Rev 1.0 detectado.");
inicializar_lcd_v1(); // Usa LCD paralela antigua
break;
case 1: // Binario 01 -> Revisión 1.1 (Placa de Producción)
log_imprimir("Boot: Hardware Rev 1.1 detectado.");
inicializar_lcd_v2_i2c(); // Usa nueva LCD I2C
break;
default:
log_imprimir("ERR: Placa no reconocida. Abortando.");
while(1); // Detener el sistema por seguridad
}
}
int main(void) {
// Lo primero que hace el firmware es "mirar su propio cuerpo"
detectar_hardware_pcb();
while(1) {
// Lógica metrológica principal...
}
return 0;
}
Objetivo del día: Exportar Gerbers y liberar el diseño para manufactura (Release to Manufacturing - RTM).
Abre tu archivo final en KiCad. Presiona `File -> Fabrication Outputs -> Gerbers`. Marca las casillas de F.Cu, B.Cu, F.Silkscreen, F.Mask, B.Mask y Edge.Cuts. Haz clic en "Plot". Luego ve a `Generate Drill Files` y exporta los archivos EXCELLON.
¡Felicidades! Al hacer esto, tu Despachador de Gas LP deja de ser un concepto matemático en tu computadora y se convierte en un paquete de datos de manufactura. Empaqueta todos estos archivos generados en un solo `.zip`. Con este archivo, ahora tienes la capacidad de cotizar la fabricación de la placa con proveedores locales de PCBs en Guadalajara para obtener tu primer prototipo rápido, o enviarlo a fábricas internacionales para una producción de ensamble en masa. Has dominado el diseño de hardware.