Hardware y software de sistemas embebidos
Un sensor que duerme a 2 µA dura más de dos años con una pila CR2032. Si un periférico queda encendido y el reposo sube a 50 µA, la misma pila dura cuatro meses.
01Una computadora que nadie ve
Un sistema embebido es una computadora dedicada a una tarea dentro de un producto: el control de un lavarropas, la unidad de un airbag, un medidor de gas, un marcapasos. No se ve como computadora y casi nunca se reprograma, pero tiene procesador, memoria, periféricos y software. Lo que lo distingue es el conjunto de restricciones: costo por unidad, consumo, tamaño, tiempos de respuesta garantizados y años de funcionamiento sin que nadie lo reinicie.
La tecnicatura presenta las familias de microcontroladores, sus periféricos y las interrupciones. Acá se ve cómo se diseña el sistema completo.
02El hardware
| Bloque | Qué hay que decidir |
|---|---|
| Procesador | Microcontrolador, procesador con sistema operativo o FPGA, según la carga y el costo |
| Memoria | Flash para el programa y SRAM para los datos, con margen para actualizaciones |
| Reloj | Oscilador RC interno (barato, ±1 %) o cristal (±20 ppm, necesario para USB, CAN o un reloj de hora) |
| Alimentación | Regulador lineal o conmutado, supervisión de tensión (brown-out) y secuencia de encendido |
| Reset y vigilancia | Circuito de reset confiable y perro guardián (watchdog) que reinicia si el software se cuelga |
| Entradas y salidas | Protección contra descargas y sobretensiones en todo lo que sale de la placa |
| Plataforma | Cuándo conviene |
|---|---|
| Microcontrolador (Cortex-M, AVR, RISC-V) | Control y adquisición con tiempos garantizados, consumo de microamperes en reposo |
| Procesador de aplicaciones con Linux | Interfaz gráfica, redes complejas, gigabytes de memoria; arranque de segundos |
| FPGA o SoC con FPGA | Procesamiento paralelo a velocidades que el software no alcanza |
03El software
El programa de un microcontrolador arranca sin sistema operativo que lo prepare. El código de
arranque ubica la tabla de vectores, inicializa la pila, copia las variables inicializadas de la flash a
la RAM, pone en cero las demás y recién entonces llama a main. De ahí en más hay tres
estructuras posibles:
| Estructura | Cómo funciona | Límite |
|---|---|---|
| Lazo principal | Un while(1) que consulta y atiende todo en orden | El tiempo de respuesta es la duración de la vuelta completa |
| Primer plano y fondo | Las interrupciones atienden lo urgente y dejan marcas; el lazo principal hace el resto | Las rutinas de interrupción tienen que ser cortas y compartir datos con cuidado |
| Sistema operativo de tiempo real | Tareas independientes con prioridades y un planificador | Más memoria y complejidad; se ve en la unidad de RTOS |
Encima del hardware se organiza el código en capas: controladores que conocen los registros, una capa de
abstracción (HAL) que los esconde y la aplicación, que no debería saber en qué microcontrolador corre. Dos
detalles del lenguaje C se vuelven críticos: volatile en toda variable que modifica una
interrupción o el hardware, para que el compilador no la guarde en un registro, y el acceso atómico a los
datos compartidos entre una interrupción y el lazo principal.
04Consumo y batería
Un nodo con batería pasa casi todo el tiempo dormido: despierta, mide, a veces transmite y vuelve a dormir. La corriente promedio es la carga de cada estado dividida por el período:
Un microcontrolador que despierta periódicamente, mide durante 10 ms a 5 mA y cada tanto transmite por radio durante 5 ms a 20 mA. La barra reparte la carga consumida entre los estados; el gráfico de abajo muestra la forma de la corriente, con la escala de tiempo deformada para que los pulsos se vean.
05Desarrollo, depuración y confiabilidad
El programa se compila en una computadora para otro procesador (compilación cruzada) y se graba y depura a través de una interfaz JTAG o SWD, que permite detener el procesador, recorrer el código paso a paso y leer la memoria sin modificar el programa. Para los problemas de tiempos, el osciloscopio y el analizador lógico son tan necesarios como el depurador: un pin que cambia al entrar y salir de una interrupción mide su duración real.
Un sistema que tiene que funcionar años sin atención se diseña para fallar bien: el perro guardián reinicia un programa colgado, la supervisión de tensión evita que corra con alimentación insuficiente, las actualizaciones remotas tienen una imagen de respaldo, y las guías de codificación como MISRA C restringen las construcciones del lenguaje más propensas a errores.
06En el laboratorio
Con una resistencia de 10 Ω en serie con la alimentación de un microcontrolador y un osciloscopio, medir la corriente en reposo y durante los despertares. Calcular la vida de una CR2032 y compararla con el laboratorio.
Poner un pin en alto al entrar a una rutina de interrupción y en bajo al salir, y medir con el osciloscopio su duración y su variación.
Habilitar el watchdog, provocar un lazo infinito a propósito y verificar que el sistema se reinicia y registra la causa del reinicio.
07Errores frecuentes
- Olvidar
volatile. El compilador optimiza la lectura de una bandera y el lazo nunca ve el cambio que hizo la interrupción. - Rutinas de interrupción largas. Retrasan a todas las demás; la interrupción marca y el lazo procesa.
- Dejar un periférico encendido en reposo. Un conversor o un pin flotante pueden multiplicar por veinte la corriente de reposo.
- Desactivar el watchdog para depurar y no volver a activarlo.
08Autoevaluación
Un sensor consume 3 µA de promedio. ¿Cuánto dura una CR2032 de 225 mAh, usando el 80 %?
\( 180\ \text{mAh} / 3\ \mu\text{A} = 60\,000 \) h, casi 7 años, sin contar la autodescarga.
¿Qué carga consume un despertar de 10 ms a 5 mA?
50 µC, o 0,0139 µAh.
¿Por qué una variable modificada en una interrupción se declara volatile?
Para que el compilador la lea de la memoria cada vez, en lugar de suponer que no cambió desde la última lectura.
¿Cuándo hace falta un cristal en lugar del oscilador RC interno?
Cuando se necesita exactitud de frecuencia: comunicaciones como USB o CAN, un reloj de hora o mediciones de tiempo precisas.
09Para ampliar
- Elecia White. Making Embedded Systems. 2.ª ed., O'Reilly, 2024. El diseño de sistemas embebidos desde la arquitectura del software hasta el consumo, con mucha experiencia práctica.
- Joseph Yiu. The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors. 3.ª ed., Newnes, 2014. El procesador de casi todos los microcontroladores actuales, con el arranque, las interrupciones y los modos de bajo consumo.
- Jack Ganssle. The Art of Designing Embedded Systems. 2.ª ed., Newnes, 2008. Cómo se organiza un proyecto embebido para que funcione y se pueda mantener.