01 · Punto de partida
Miles de chips, pocas familias
En los temas anteriores trabajamos con ejemplos concretos, como el STM32F103 o el ATmega328P. Pero en un proyecto real alguien tiene que decidir qué chip usar, y el catálogo de cualquier fabricante tiene cientos de modelos. La buena noticia es que esa variedad se organiza en familias: grupos de chips que comparten núcleo, periféricos, herramientas y filosofía, y que difieren solo en cantidad de memoria, número de pines y algunos extras.
Elegir una familia es una decisión mayor que elegir un modelo. El modelo se puede cambiar con relativo poco esfuerzo dentro de la familia (más memoria, otro encapsulado); cambiar de familia suele significar reescribir la capa de bajo nivel, reaprender las herramientas y revalidar el producto. Por eso conviene pensarlo bien al principio.
Una advertencia sobre los números: los valores de memoria, consumo y precio de este tema son órdenes de magnitud típicos y cambian con cada modelo y con el tiempo. Sirven para comparar familias, no para dimensionar un diseño: eso se hace con la hoja de datos del chip concreto.
02 · Criterios
Qué comparar
Las hojas de datos tienen docenas de parámetros, pero casi toda la decisión se apoya en un puñado de criterios. Los técnicos son los que ya viste en el tema 2; a ellos se suman otros que no figuran en el datasheet y que a menudo pesan más:
| Criterio | Pregunta que responde |
|---|---|
| Núcleo y frecuencia | ¿Alcanza la capacidad de cálculo, con o sin punto flotante? |
| Memoria (flash y RAM) | ¿Entra el firmware con margen, y puede crecer? |
| Periféricos | ¿Tiene los que necesito (ADC de buena resolución, USB, CAN, temporizadores avanzados) en la cantidad necesaria? |
| Conectividad | ¿Trae Wi-Fi, Bluetooth, Thread o hay que agregar un módulo externo? |
| Consumo | ¿Cuánto gasta activo y dormido, y cuánto tarda en despertar? |
| Costo y disponibilidad | ¿Cuánto cuesta en el volumen previsto y hay stock a largo plazo? |
| Ecosistema | ¿Hay SDK, documentación, ejemplos, comunidad, depuradores baratos y bibliotecas maduras? |
| Longevidad y soporte | ¿El fabricante garantiza producción por 10 años o más? ¿Hay alternativas compatibles? |
| Seguridad | ¿Ofrece arranque seguro, cifrado por hardware, protección de lectura? |
| Conocimiento del equipo | ¿Ya sabemos usarlo? El tiempo de aprendizaje también cuesta. |
Los últimos criterios se subestiman. Un chip excelente en el papel pero con documentación pobre, herramientas inestables o escasez crónica puede costar meses. Y el criterio más importante en la práctica es el segundo bloque: el ecosistema y el conocimiento del equipo. Cada familia que sigue se entiende mejor mirando qué tiene de excepcional en esos aspectos.
03 · Familia 1
AVR: la sencillez de 8 bits
Los AVR (hoy de Microchip, que compró Atmel en 2016) son microcontroladores de 8 bits con arquitectura Harvard y un rendimiento cercano a una instrucción por ciclo de reloj. Se hicieron famosos con el Arduino Uno, que usa un ATmega328P: 32 KB de flash, 2 KB de SRAM, 1 KB de EEPROM, hasta 20 MHz (16 MHz en la placa) y un ADC de 10 bits.
- Fortalezas. Muy simples de entender: pocos registros y periféricos claros. Tolerantes: admiten alimentación de 1,8 a 5,5 V y manejan 5 V directamente. Consumo en reposo muy bajo (del orden de décimas de microamperio en el sueño más profundo). Barato, abundante, con muchísima documentación y bibliotecas.
- Límites. Poca RAM y flash; sin punto flotante por hardware y aritmética de 32 bits lenta. Pocos núcleos de comunicación avanzados y sin USB ni red integrados en el ATmega328P. Reloj modesto.
- Variantes. Los ATtiny son versiones de 6 a 20 pines por centavos para tareas mínimas; las series AVR más nuevas (como AVR128DA) amplían memoria y periféricos.
Cuándo conviene. Aprendizaje, productos sencillos y de bajo volumen (un temporizador, un controlador de riego), y diseños que necesitan 5 V y robustez. Cuándo no: cuando se necesitan comunicaciones complejas, más de unos pocos KB de RAM o cálculo numérico exigente.
04 · Familia 2
ARM Cortex-M: el estándar de 32 bits
ARM no fabrica chips: licencia el diseño del núcleo (los Cortex-M0+, M3, M4, M7 del tema 3) a decenas de fabricantes, que le agregan memoria y periféricos. El resultado es la familia más grande y más usada en productos nuevos: STM32 (STMicroelectronics), nRF52 (Nordic), SAM (Microchip), LPC y Kinetis (NXP), RA (Renesas) y muchos otros.
Su ventaja distintiva es la compatibilidad entre fabricantes. Todos comparten el mismo núcleo, el mismo controlador de interrupciones (NVIC), el mismo temporizador del sistema, la misma interfaz de depuración (SWD) y las mismas bibliotecas base (CMSIS, definidas por ARM). El código de bajo nivel y las herramientas son en gran parte reutilizables. Esa uniformidad es la razón por la cual este curso usa Cortex-M como ejemplo principal.
- Fortalezas. Enorme variedad: desde el Cortex-M0+ de centavos hasta el M7 de cientos de MHz. Herramientas profesionales y gratuitas. Ecosistema inmenso de RTOS, pilas de comunicaciones y bibliotecas. Buenos modos de bajo consumo en las series diseñadas para eso.
- Límites. Complejidad: manuales de referencia de más de mil páginas, relojes y periféricos con muchas opciones. Cada fabricante tiene su propio SDK (HAL de ST, SDK de Nordic) con filosofías distintas, de modo que el código de alto nivel no es portable entre fabricantes sin una capa de abstracción propia.
Dentro de ST, por ejemplo, la familia STM32 se divide en subfamilias: F0 y G0 (económicas, M0/M0+), F1 (M3, la del «Blue Pill»), F4 (M4F, con punto flotante), L (bajo consumo), H7 (alto rendimiento) y las de conectividad inalámbrica. Nordic se especializa en Bluetooth Low Energy con la serie nRF52, muy usada en dispositivos a pila.
Cuándo conviene. Casi siempre que el producto va a escala o vive muchos años: la combinación de variedad, herramientas y continuidad es difícil de igualar. Cuándo no: prototipos muy rápidos donde la curva de aprendizaje pesa más que todo lo demás.
05 · Familia 3
ESP32: la conectividad integrada
La familia ESP32, de Espressif, trajo el Wi-Fi y el Bluetooth al precio de un microcontrolador común. El modelo original (2016) tiene dos núcleos Xtensa a 240 MHz, unos 520 KB de SRAM, flash externa (típicamente 4 MB), Wi-Fi y Bluetooth clásico más BLE. Hoy hay una familia completa:
| Variante | Núcleo | Conectividad | Rasgo distintivo |
|---|---|---|---|
| ESP32 | 2 × Xtensa LX6 | Wi-Fi, Bluetooth clásico y BLE | La original y la más difundida |
| ESP32-S2 | 1 × Xtensa LX7 | Wi-Fi | USB nativo, sin Bluetooth |
| ESP32-S3 | 2 × Xtensa LX7 | Wi-Fi y BLE 5 | USB nativo e instrucciones para aprendizaje automático |
| ESP32-C3 | 1 × RISC-V | Wi-Fi y BLE 5 | Económica, núcleo abierto RISC-V |
| ESP32-C6 | 1 × RISC-V | Wi-Fi 6, BLE 5 y 802.15.4 (Zigbee, Thread) | Redes de hogar inteligente |
- Fortalezas. Conectividad integrada a bajo precio, mucha RAM y velocidad, un SDK maduro (ESP-IDF, basado en FreeRTOS) y compatibilidad con Arduino y MicroPython. Se vende en módulos ya certificados para radio, lo que ahorra meses de homologación.
- Límites. Su consumo en sueño profundo (del orden de 10 µA) es mayor que el de las series ultrabajas, y con la radio activa se miden decenas a cientos de miliamperios. El conversor analógico del ESP32 original es poco lineal y ruidoso. Algunos pines tienen restricciones (pines que condicionan el arranque, otros solo de entrada, un ADC que no funciona con el Wi-Fi activo). Y la flash externa vuelve la arquitectura más lenta de lo que sugiere la frecuencia.
Cuándo conviene. Productos conectados a Wi-Fi o Bluetooth, prototipos de IoT, domótica, dispositivos con interfaz web. Cuándo no: dispositivos a pila que deben durar años, o diseños sin conectividad, donde se paga una radio que no se usa.
06 · Familia 4
RP2040: potencia barata y el bloque PIO
El RP2040 es el primer microcontrolador propio de Raspberry Pi (2021), llegó con la placa Pico. Tiene dos núcleos Cortex-M0+ a 133 MHz, 264 KB de SRAM, USB 1.1, un ADC de 12 bits, 30 pines de propósito general y cuesta alrededor de un dólar. No incluye flash: usa una memoria externa por bus QSPI (2 MB en la Pico, hasta 16 MB) y su bootloader grabado en ROM aparece en el PC como una unidad USB a la que se copia un archivo UF2 (tema 5).
Su rasgo más original es el PIO (programmable I/O): ocho pequeñas máquinas de estados programables, en dos bloques de cuatro, que ejecutan un mini programa de instrucciones propias directamente sobre los pines. Permiten implementar protocolos que el chip no trae (un bus de LED WS2812, VGA, un protocolo serie particular) con temporización exacta y sin cargar los núcleos.
- Fortalezas. Mucha RAM y velocidad por poco dinero, el PIO, SDK en C/C++ muy claro, MicroPython de primera clase, documentación excelente, y una placa con depuración SWD barata.
- Límites. Sin radio integrada (la Pico W agrega un módulo Wi-Fi externo). Sin unidad de punto flotante (la ROM trae rutinas rápidas). Su consumo en reposo (cientos de microamperios) es mucho mayor que el de las series de bajo consumo, por lo que no es la mejor opción para pilas. Sin flash propia: depende de un chip externo.
En 2024 apareció el RP2350, sucesor con dos núcleos Cortex-M33 (o RISC-V, a elección), 520 KB de SRAM y funciones de seguridad. Cuándo conviene: proyectos de aprendizaje, producción de bajo costo con mucha E/S o protocolos especiales, instrumentos y dispositivos conectados por USB. Cuándo no: dispositivos a batería de larga duración.
07 · Otras opciones
Otras opciones
Las cuatro familias anteriores no agotan el mercado. Conviene conocer de nombre otras que aparecen en productos y en ofertas de trabajo:
- PIC (Microchip): muy extendidos en la industria, con una enorme variedad de modelos de 8, 16 y 32 bits y una larga trayectoria.
- MSP430 (Texas Instruments): 16 bits, diseñado desde el comienzo para consumo ultrabajo.
- RISC-V: una arquitectura de juego de instrucciones abierta, sin licencia. Cada vez más presente (ESP32-C, CH32V, GD32V y otros), gana terreno en chips económicos.
- Renesas RA, RL78 y RX: fuertes en automoción e industria.
- SoC con Linux: los procesadores de aplicaciones (Cortex-A) del tema 4, cuando el producto lo necesita.
Para el aprendizaje de este curso nos alcanza con las cuatro de las secciones anteriores: la lógica de elección es la misma para cualquier otra.
08 · Resumen
Cuadro comparativo
| Rasgo | AVR (ATmega328P) | ARM Cortex-M (STM32F103 / nRF52840) | ESP32 | RP2040 |
|---|---|---|---|---|
| Núcleo | AVR de 8 bits | Cortex-M3 / Cortex-M4F | 2 × Xtensa de 32 bits | 2 × Cortex-M0+ |
| Frecuencia | 16 a 20 MHz | 72 MHz / 64 MHz | Hasta 240 MHz | 133 MHz |
| Flash | 32 KB | 64 a 128 KB / 1 MB | Externa, 4 MB típica | Externa, 2 MB típica |
| RAM | 2 KB | 20 KB / 256 KB | 520 KB | 264 KB |
| Punto flotante | No | No / Sí (M4F) | Sí (simple precisión) | No (rutinas en ROM) |
| Radio integrada | No | No / BLE | Wi-Fi y Bluetooth | No |
| USB | No | Sí | No (sí en S2 y S3) | Sí |
| Reposo profundo | ≈ 0,1 µA | ≈ 2 µA | ≈ 10 µA | Cientos de µA |
| Precio del chip (orden) | US$ 2 | US$ 2,5 / US$ 5 | US$ 3 (módulo) | US$ 1 |
| Punto fuerte | Simplicidad y robustez | Variedad y continuidad | Conectividad | Costo, RAM y PIO |
| Punto débil | Recursos escasos | Complejidad; SDK por fabricante | Consumo con radio | Sin radio; reposo alto |
Dos cosas llaman la atención. Primero, no hay una fila ganadora: cada familia gana en una cosa y pierde en otra. Segundo, los mejores valores no coinciden con lo que muchos esperan: el chip más viejo y más pequeño (AVR) es el que menos consume dormido, y el más potente en frecuencia (ESP32) no lo es en reposo. El «mejor microcontrolador» no existe: existe el más adecuado para cada producto.
09 · Criterios no técnicos
Más allá de la hoja de datos
Cuando varios chips cumplen los requisitos técnicos, la decisión se apoya en factores que no están en las tablas:
- Disponibilidad y cadena de suministro. Entre 2020 y 2022 la escasez mundial de componentes dejó proyectos parados porque un chip concreto no se conseguía durante un año. Hoy se consideran un criterio de diseño: ¿cuántos distribuidores lo venden, hay varias fuentes, existe un reemplazo compatible?
- Longevidad. Para productos que viven 10 o 15 años (medidores, industria, automoción), muchos fabricantes publican programas que garantizan la producción de ciertas familias durante una década o más. Un chip «de moda» puede quedar discontinuado antes.
- Ecosistema y herramientas. Un depurador barato, ejemplos que funcionan, una comunidad que contesta y bibliotecas mantenidas valen semanas de trabajo.
- Del prototipo a la producción. Un prototipo en una placa de desarrollo (Arduino Uno, Blue Pill, una placa Nucleo de ST con depurador incluido, un ESP32 DevKit, una Pico) no es el producto. En producción se diseña la placa propia alrededor del chip, con los componentes del tema 3, y se cambia de un módulo cómodo a un chip suelto más barato. Conviene elegir una familia que ofrezca ese camino sin reescribir todo.
- Certificaciones. Un módulo de radio precertificado (Wi-Fi, Bluetooth) evita meses y mucho dinero de homologación; un chip de radio suelto, no.
- Seguridad. Si el producto debe resistir ataques o actualizarse de forma segura, necesita arranque seguro, almacenamiento de claves y protección de lectura (temas 42 y 43).
10 · Práctica en C
La misma idea en cuatro SDK
Para ver cuánto cambia el código entre plataformas, este es el mismo trabajo (encender un LED) en el entorno de cada una:
// Arduino (AVR y muchas otras placas)
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
// SDK de la Raspberry Pi Pico (RP2040)
gpio_init(25);
gpio_set_dir(25, GPIO_OUT);
gpio_put(25, 1);
// ESP-IDF (ESP32)
gpio_reset_pin(GPIO_NUM_2);
gpio_set_direction(GPIO_NUM_2, GPIO_MODE_OUTPUT);
gpio_set_level(GPIO_NUM_2, 1);
// HAL de STM32 (Blue Pill: LED en PC13, enciende con nivel bajo)
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitTypeDef g = { .Pin = GPIO_PIN_13, .Mode = GPIO_MODE_OUTPUT_PP, .Speed = GPIO_SPEED_FREQ_LOW };
HAL_GPIO_Init(GPIOC, &g);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
La estructura se repite en los cuatro: configurar el pin como salida y escribir su nivel. Lo que cambia son los nombres, la forma de designar el pin (un número, una constante, un puerto y un bit) y los detalles, como el paso previo de darle reloj al puerto en STM32, que ya conocés del tema 3. Fijate que el ejemplo de Arduino oculta justamente eso. Esa diferencia es el motivo por el cual conviene envolver estas llamadas en una capa propia:
// interfaz de la capa de abstracción de hardware (hal_led.h)
void led_iniciar(void);
void led_encender(void);
void led_apagar(void);
// La aplicación solo usa estas tres funciones. Cada plataforma las implementa
// en su propio archivo: hal_led_avr.c, hal_led_pico.c, hal_led_esp32.c...
Con esa separación, migrar el producto a otro chip es escribir un archivo nuevo con las mismas tres funciones, y compilar el que corresponda. Es la base de lo que veremos en los temas 10 y 11.
11 · Analogía con programación
Un selector de plataforma en Python
Elegir plataforma es, en buena parte, filtrar una tabla por requisitos y desempatar por costo. El programa guarda las siete plataformas del laboratorio (con valores aproximados), define los requisitos de un sensor de campo con Bluetooth y a pila, y lista qué requisito incumple cada candidata. Al final elige la más barata entre las que cumplen todo.
Python en tu navegador. Los bloques son editables: cambiá los valores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar.
PLATAFORMAS = [ # flash y RAM en KB; sleep en µA; precio en US$ (aproximados)
dict(nombre="ATmega328P", flash=32, ram=2, radio="ninguna", usb=False, fpu=False, sleep=0.1, precio=2.0),
dict(nombre="STM32F103", flash=64, ram=20, radio="ninguna", usb=True, fpu=False, sleep=2, precio=2.5),
dict(nombre="STM32 bajo consumo",flash=256, ram=64, radio="ninguna", usb=True, fpu=True, sleep=1, precio=4.0),
dict(nombre="RP2040", flash=2048, ram=264, radio="ninguna", usb=True, fpu=False, sleep=200, precio=1.0),
dict(nombre="ESP32", flash=4096, ram=520, radio="wifi", usb=False, fpu=True, sleep=10, precio=3.0),
dict(nombre="ESP32-C3", flash=4096, ram=400, radio="wifi", usb=False, fpu=False, sleep=5, precio=2.0),
dict(nombre="nRF52840", flash=1024, ram=256, radio="ble", usb=True, fpu=True, sleep=2, precio=5.0),
]
REQ = dict(flash=64, ram=16, radio="ble", usb=False, fpu=False, sleep=5, precio=6.0)
NIVEL_RADIO = {"ninguna": 0, "ble": 1, "wifi": 2} # el Wi-Fi también trae BLE
def faltas(p, r):
f = []
if p["flash"] < r["flash"]:
f.append("flash")
if p["ram"] < r["ram"]:
f.append("RAM")
if NIVEL_RADIO[p["radio"]] < NIVEL_RADIO[r["radio"]]:
f.append("conectividad")
if r["usb"] and not p["usb"]:
f.append("USB")
if r["fpu"] and not p["fpu"]:
f.append("punto flotante")
if p["sleep"] > r["sleep"]:
f.append("reposo")
if p["precio"] > r["precio"]:
f.append("precio")
return f
cumplen = []
for p in PLATAFORMAS:
f = faltas(p, REQ)
print(f"{p['nombre']:20s}", "cumple" if not f else "falla: " + ", ".join(f))
if not f:
cumplen.append(p)
if cumplen:
mejor = min(cumplen, key=lambda p: (p["precio"], p["sleep"]))
print(f"\nLa más barata que cumple todo: {mejor['nombre']} (US$ {mejor['precio']})")
else:
print("\nNinguna cumple todo: hay que relajar algún requisito.")
Resultado: el ATmega328P falla en flash, RAM y conectividad; el STM32F103 y el STM32 de bajo consumo, en conectividad; el RP2040, en conectividad y reposo; el ESP32, en reposo (10 µA contra el límite de 5). Cumplen el ESP32-C3 y el nRF52840, y se elige el ESP32-C3 por precio (US$ 2 contra 5). Probá sleep=10 en los requisitos: el ESP32 también cumple, pero el C3 sigue ganando. Probá radio="ninguna", flash=16, ram=2 y sleep=1000: cumplen las siete y gana el RP2040. Probá radio="wifi" junto con usb=True: no queda ninguna, porque el ESP32-S3 (que sí tiene ambos) no está en la lista.
La última prueba es la más instructiva: los datos que cargás determinan el resultado. Un selector es tan bueno como la tabla en la que se apoya, y también tan bueno como los requisitos que le das. Si olvidás un requisito (la temperatura de trabajo, la disponibilidad), el programa elegirá sin ese criterio, igual que una persona.
12 · Exploración interactiva
Elegir la plataforma
Definí los requisitos de tu producto y el laboratorio filtra las siete plataformas. Las que cumplen todo aparecen resaltadas y se marca la más barata; las que no, indican qué requisito incumplen. Los datos son aproximados y sirven para entrenar el criterio, no para elegir un componente real.
Requisitos del producto
Cambiá los requisitos para ver qué plataformas cumplen.
Recorrido guiado
- Con los valores iniciales (BLE, 64 KB, 16 KB de RAM, 5 µA, US$ 6) cumplen el ESP32-C3 y el nRF52840, y se marca el C3 por precio. Fijate por qué falla cada una de las otras.
- Bajá el reposo máximo a 1 µA: ni el C3 ni el nRF cumplen, y no queda ninguna con BLE. Para ese consumo hay que relajar la conectividad, o buscar un chip de radio ultrabajo que esta lista no incluye.
- Poné Wi-Fi y dejá el reposo en 5 µA: solo el ESP32-C3 lo logra. Subí el reposo a 20 µA y se suma el ESP32.
- Elegí No necesito conectividad, reposo indiferente, 16 KB de flash y 2 KB de RAM: cumplen las siete. La más barata es el RP2040, pero el ATmega328P también sirve: acá el criterio decisivo ya no es técnico sino el ecosistema y el conocimiento del equipo.
- Pedí Wi-Fi y USB a la vez: ninguna cumple. Es una combinación real que existe (el ESP32-S3 tiene ambos), pero no está en la lista: relajá un requisito o ampliá la búsqueda.
- Marcá punto flotante con precio de US$ 1,50: no queda ninguna. Con US$ 3, cumple el ESP32 si el reposo lo permite. Cada requisito que agregás achica la lista.
Desafío: por qué el RP2040 no gana nunca en bajo consumo
Con el reposo en 5 µA el RP2040 queda fuera por un factor de 40 (200 µA). Pero su ventaja es otra: sus 264 KB de RAM, su velocidad y su precio de US$ 1. Un dispositivo conectado por USB a una fuente de alimentación (un instrumento, un adaptador) no necesita dormir, y para él el RP2040 es una elección excelente. La misma plataforma es buena o mala según qué requisito domine, y el selector solo la deja ver si los requisitos están bien definidos.
13 · Método de trabajo
Método para elegir
- Escribí los requisitos medibles (tema 2): memoria con margen, plazos, consumo, conectividad, entorno, costo objetivo y volumen.
- Descartá por requisitos duros. Sin radio integrada no hay Wi-Fi sin módulo externo; sin USB no hay dispositivo USB; con un reposo mayor que el presupuesto de la batería no hay vuelta atrás.
- Armá una lista corta de dos o tres candidatas, de familias distintas si es posible.
- Compará lo no técnico: disponibilidad en el volumen previsto, longevidad, herramientas, ejemplos, conocimiento del equipo, certificaciones y seguridad.
- Hacé una prueba de concepto con una placa de desarrollo de cada candidata: lo más riesgoso del proyecto (la radio, el consumo, la lectura del sensor) corriendo en horas y no en semanas.
- Calculá el costo total: chip, componentes de apoyo, módulos externos, desarrollo y certificación, no solo el precio del microcontrolador.
- Prevé la salida. Anotá qué se reescribe si hay que cambiar de chip y cuál sería el reemplazo.
- Documentá la decisión con las alternativas descartadas y por qué.
Si hay empate técnico, desempatá con una regla práctica: la plataforma que tu equipo ya domina. El tiempo de aprender un chip nuevo rara vez se compensa con una diferencia de un dólar.
14 · Comprensión
Confusiones frecuentes
«Arduino es un microcontrolador»
Arduino es una plataforma: placas, un entorno y una biblioteca. Una placa Arduino Uno usa un ATmega328P (AVR), pero el nombre también se aplica a placas con ARM, ESP32 y RP2040. Distinguir entre la plataforma de desarrollo, la familia de chips y el modelo evita muchos malentendidos.
«Más bits y más MHz son siempre mejores»
Un procesador de 32 bits y 240 MHz no es mejor para un dispositivo que debe pasar años con una pila: su consumo y su costo pueden ser innecesarios. El chip adecuado es el que cumple los requisitos con margen, no el de mayor número.
«El ESP32 sirve para todo»
Es excelente para dispositivos conectados, pero su consumo con radio activa y en sueño profundo lo descarta en aplicaciones de pila de larga duración, y su ADC y sus restricciones de pines complican algunos diseños. Es una herramienta muy buena para un tipo de problema.
«Si funciona en la placa de desarrollo, ya elegí bien»
La placa de desarrollo trae regulador, programador, LED y otros componentes que el producto no tendrá. Un consumo medido en la placa suele ser muy superior al del chip solo. La elección se valida con un prototipo que se parezca al producto.
«Un chip más barato siempre ahorra dinero»
Si cuesta más tiempo de desarrollo, falta de herramientas o riesgo de suministro, el ahorro de unos centavos se evapora. En volúmenes bajos pesa más el ecosistema; en volúmenes enormes, el precio del chip.
«Cambiar de familia es un detalle»
Cambia el SDK, el modo de configurar relojes y periféricos, el depurador, el comportamiento de las interrupciones y las pruebas de producción. Con buenas capas cuesta semanas; sin ellas, el proyecto entero.
15 · Práctica guiada
Predecí antes de comprobar
1. Una familia para cada producto
Proponé una familia para cada producto y justificá: (a) un temporizador de riego a pila que debe durar 5 años; (b) un sensor ambiental que publica datos por Wi-Fi cada minuto, alimentado por enchufe; (c) un adaptador USB que implementa un protocolo serie inusual con temporización exacta; (d) un controlador de motor industrial que debe producirse y mantenerse 15 años.
Ver solución
(a) AVR o un Cortex-M de bajo consumo: su reposo es de décimas a pocos µA. (b) ESP32 (o ESP32-C3): la conectividad integrada resuelve el Wi-Fi y no hace falta ahorrar al máximo. (c) RP2040: USB y el bloque PIO para generar el protocolo con precisión sin cargar el procesador. (d) Un Cortex-M de una subfamilia con programa de longevidad, por el soporte a largo plazo y las herramientas profesionales.
2. Autonomía con reposo alto
Un sensor a pila de 1000 mAh pasa casi todo el tiempo dormido. Con un chip que consume 200 µA dormido, ¿cuánto dura la pila (ignorando la actividad)? ¿Y con uno que consume 2 µA?
Ver solución
200 µA = 0,2 mA: 1000 / 0,2 = 5000 h ≈ 208 días (menos de 7 meses). Con 2 µA = 0,002 mA: 1000 / 0,002 = 500.000 h ≈ 57 años en teoría (en la práctica el límite lo pone la autodescarga de la pila y la actividad). La diferencia de cien veces en el reposo es la que decide, no la potencia del núcleo.
3. ¿Alcanza la RAM?
Un producto necesita 40 KB de RAM con un margen del 25 %. ¿Cuánta RAM mínima debe tener el chip? ¿Alcanza un STM32F103 de 20 KB? ¿Y un nRF52840 de 256 KB?
Ver solución
Con un uso máximo del 75 % de la RAM (margen del 25 %): 40 / 0,75 ≈ 53,3 KB como mínimo. El STM32F103 (20 KB) no alcanza; el nRF52840 (256 KB) sobra, y usaría solo el 16 % de su RAM, con lugar para crecer.
4. Costo total de un prototipo a producción
Un chip A cuesta US$ 1,00 pero requiere un módulo de radio externo de US$ 2,50. El chip B cuesta US$ 3,20 e incluye la radio. ¿Cuál es más barato por unidad? ¿Qué otro factor puede inclinar la balanza?
Ver solución
A: 1,00 + 2,50 = US$ 3,50. B: US$ 3,20, más barato por unidad, y además ocupa menos espacio y no necesita diseñar la parte de radio. El factor que puede cambiar el resultado: la homologación, que con un módulo precertificado es mucho más simple, y el ecosistema de cada opción.
5. Elegir con restricciones contradictorias
Un cliente pide Wi-Fi, 3 años con una pila de botón y un precio de US$ 2 por chip. Con los datos del laboratorio, ¿qué ocurre? ¿Qué alternativas le plantearías?
Ver solución
Con Wi-Fi activo la corriente es de decenas de miliamperios, incompatible con una pila de botón de unos 200 mAh si la radio se usa con frecuencia. Se puede reducir el uso de la radio (sueño profundo y transmisiones esporádicas, por ejemplo cada hora), o cambiar de tecnología: BLE o una red de baja potencia para el último tramo y una puerta de enlace con Wi-Fi. Es un caso donde la conversación con el cliente vale más que la tabla de chips.
6. Aislar la plataforma
Escribí la interfaz mínima en C (solo las declaraciones) para que una aplicación pueda leer un botón y encender un LED sin saber en qué chip corre.
Ver solución
Por ejemplo, en hal_io.h: void io_iniciar(void);, bool boton_presionado(void);, void led_encender(void); y void led_apagar(void);. La aplicación solo incluye ese archivo; un hal_io_stm32.c o un hal_io_pico.c implementan las cuatro funciones para cada chip. Cambiar de plataforma es reemplazar un archivo.
16 · Síntesis
Ideas para recordar
- Los miles de microcontroladores se agrupan en familias con núcleo, periféricos y herramientas comunes; elegir familia es una decisión mayor que elegir modelo.
- AVR es simple, robusto y de muy bajo consumo, pero con pocos recursos; ARM Cortex-M es el estándar de 32 bits por su variedad, sus herramientas y su continuidad; ESP32 integra Wi-Fi y Bluetooth con mucha RAM; RP2040 ofrece potencia y RAM baratas más el bloque PIO, sin radio y con reposo alto.
- No existe un chip mejor en todo: cada familia gana en algunos criterios y pierde en otros.
- Además de los criterios técnicos pesan la disponibilidad, la longevidad, el ecosistema, las certificaciones, la seguridad y lo que el equipo ya domina.
- Un prototipo en placa de desarrollo no es el producto: el consumo y el costo reales se evalúan con un prototipo parecido al producto final.
- El mismo trabajo se escribe distinto en cada SDK; envolver el hardware en una capa propia permite cambiar de chip sin reescribir la aplicación.
- Se descarta por requisitos duros, se compara una lista corta, se hace una prueba de concepto, se calcula el costo total, se prevé la salida y se documenta la decisión.
- Un selector automático es útil pero depende de los datos y de los requisitos que se le den; olvidar un requisito equivale a elegir sin él.
¿Listo para el tema 7?
Antes de avanzar, elegí un producto que te interese y justificá la familia que usarías con tres razones técnicas y una no técnica; explicá por qué un chip de bajo costo con reposo alto no es adecuado para una pila; y dibujá la interfaz mínima de una capa de hardware para tu producto. Si podés justificar las tres respuestas, cerraste el bloque de fundamentos.
En el próximo bloque entramos en el firmware propiamente dicho. El tema 7 empieza por preguntar qué es: de main() al binario, qué secciones lo forman y cómo se lee el archivo de mapa que genera el enlazador.