Pasar del hardware basado en Arduino a crear tus propias PCB con microcontroladores parece de entrada un proceso increíblemente intimidante. Sin embargo, saber cómo hacerlo te abre un amplio abanico de oportunidades de proyectos, además de permitirte desarrollar habilidades prácticas de electrónica.
En este artículo, veremos todo lo necesario para empezar a crear tus propios diseños de hardware basados en microcontroladores personalizados. Verás que en realidad no es muy complicado, ya que los fabricantes de microcontroladores han trabajado duro en los últimos años para que la curva de aprendizaje sea menos pronunciada y para que sus dispositivos sean cada vez más accesibles. Esto es así tanto desde un punto de vista eléctrico como desde el ─no menos importante─ aspecto de la programación.
Posteriormente, analizaremos cómo diseñar el microcontrolador y los circuitos relacionados en una PCB utilizando Altium Designer.
Como ocurre con casi cualquier tipo de circuito integrado, hay una cantidad increíblemente grande de microcontroladores entre los que elegir. ¿Cómo puedes elegir el microcontrolador que mejor se adapte a tu diseño de PCB?
Existe una gran diversidad de fabricantes (Texas Instruments, STMicroelectronics, Espressif, entre otros), encapsulados (BGA, QFN, LQFP, etc.), tamaños de flash y RAM, velocidades de núcleo y muchos otros parámetros a decidir.
Para serte sincero, a menos que tus necesidades sean sumamente concretas, las opciones disponibles entre los fabricantes de microcontroladores no suelen variar demasiado en términos de capacidades de interfaz y rendimiento. Cualquiera de las principales marcas cubrirá perfectamente tus expectativas.
Para la mayoría de mis proyectos de hardware, suelo quedarme con la línea de microcontroladores STM32 de STMicrolectronics (descargo de responsabilidad: no tengo ninguna relación ni ningún tipo de acuerdo con STMicroelectronics, simplemente me gustan sus productos).
Los motivos de esta elección son: su cadena de herramientas, que es muy sencilla de usar (STM32CubeIDE), que te permite planificar el pinout y que viene con una capa de abstracción de hardware (HAL, por sus siglas en inglés) para un desarrollo sencillo del firmware, y su gran cartera de microcontroladores de diferentes capacidades. Además, su depurador (STLink) es económico y fácil de usar.
Te recomiendo encarecidamente que busques en los sitios web de los distribuidores y fabricantes, identifiques la familia de microcontroladores que se adapte mejor a lo que tú necesitas y te quedes con ella. De esta manera, solo necesitarás un tipo de depurador, los diseños de hardware serán muy similares de un proyecto a otro y cada vez te sentirás más familiarizado con el proceso de desarrollo de firmware y no tendrás que ir "saltando" entre diferentes cadenas de herramientas.
Una ventaja adicional de ir más allá de los diseños basados en Arduino es poder usar depuradores. Los depuradores son interfaces de programación especializadas que te permiten cargar código, así como depurar programas en tiempo real. Puedes, por ejemplo, establecer puntos de ruptura, supervisar variables, etc., todo sin tener que imprimir en una consola en serie.
Hay depuradores de uso general que son compatibles con varios productos de diferentes fabricantes. Sin embargo, en general, cada fabricante ofrecerá un depurador determinado para sus microcontroladores. Para dispositivos STM32, por ejemplo, estaríamos hablando del depurador ST-Link.
El depurador se conecta al microcontrolador normalmente a través del cabezal de la PCB que presenta los pines de depuración y programación para tal fin. Esta interfaz puede ser de depuración por cable en serie (SWD) o JTAG, cualquiera de ellos son imprescindibles para el desarrollo profesional de firmware.
Una vez que te hayas decidido por una familia de microcontroladores y por un depurador compatible, seguro que estarás deseando ponerte a crear hardware de verdad para un proyecto personalizado.
Crear el diagrama esquemático y las conexiones habituales requeridas para un microcontrolador suele ser un proceso sencillo y estandarizado.
Lo primero de todo es alimentar al microcontrolador. Por lo general, un microcontrolador solo precisará de un único carril de alimentación, que en la mayoría de los casos será de +3,3 V.
Echa un vistazo a la imagen anterior en la que se muestra una sección de la fuente de alimentación de un microcontrolador STM32H7 de gran potencia. Los pines de entrada de la fuente de alimentación al microcontrolador se denominan VDD (así como VBAT) y son el carril de tensión digital. Cada pin VDD requiere de un condensador de desacoplamiento de 100 nF situado cerca de los pines VDD y VSS (o GND) correspondientes.
Además, el microcontrolador que hayas elegido puede tener periféricos analógicos, como un convertidor de analógico a digital, que también requieran energía. Para esta entrada de corriente (VDDA y VREF+), necesitamos realizar algún filtrado en forma de filtro PI, ya que la sección analógica será más sensible al ruido que la parte digital del microcontrolador. Esto se puede ver en la imagen de arriba con C216, FB200 (una perla de ferrita) y C216.
Tu microcontrolador podría tener reguladores internos que necesiten ser derivados externamente mediante otros condensadores de desacoplamiento. En el caso de este IC STM32H7, a esos pines se les llama VCAP. El valor de 2,2 uF por pin se extrajo de la hoja de datos correspondiente.
Hay dos métodos principales para cargar código en el microcontrolador. El primero es a través de una sonda de depuración y de SWD o JTAG y el segundo es a través de un cargador de arranque. En el caso de los microcontroladores STM32, el cargador de arranque permite al usuario cargar código a través de UART, I2C, USB e interfaces similares (en función del dispositivo) sin necesidad de un depurador.
Para habilitar el cargador de arranque, debemos activar el pin BOOT0 antes de encender el microcontrolador.
Para ejecutar el programa, debemos desactivar el pin BOOT0 antes de volver a encender el dispositivo. Por lo tanto, es una buena idea permitir que el estado de BOOT0 se pueda alternar a través de, por ejemplo, un conmutador.
En el microcontrolador solo se programará a través de un depurador, por lo que podrás desactivar BOOT0 (anclándolo a tierra) de forma permanente.
Como interfaz de depuración, he optado por utilizar SWD para este diseño, ya que es una interfaz de dos hilos (datos: SWDIO y reloj: SWCLK). Además, expongo la señal SWO (de la pista), lo que me permite trazar variables en tiempo real, y la línea NRST (restablecimiento, lógica invertida) que, cuando se desactiva, reinicia el hardware del microcontrolador.
Las señales se conectan a un cabezal de depuración con una protección ESD opcional, pero muy recomendable, en forma de diodos TVS.
Aunque la mayoría de los microcontroladores contendrán un oscilador interno que puede ser suficiente para un gran número de diseños, generalmente vale la pena añadir un cristal externo (es decir, un oscilador) al microcontrolador.
Para los dispositivos STM32 en particular, existen dos tipos de osciladores. Externo de alta velocidad (HSE, con fines de temporización general) y externo de baja velocidad (LSE, para el reloj en tiempo real). En general, la mayoría de mis proyectos requieren del oscilador HSE.
La imagen anterior muestra el método altamente contrastado de conectar un cristal externo al microcontrolador. La frecuencia máxima y mínima permitidas del cristal se encuentran en la hoja de datos del microcontrolador.
Tendrás que añadir condensadores de carga (C200 y C201, en este ejemplo) que dependerán de la capacidad de carga proporcionada en la hoja de datos del cristal. Una vez que tengas la capacidad de carga del cristal, réstale de 3 a 5 pF de capacitancia parásita y finalmente multiplica ese número por dos para llegar al valor de capacitancia requerido.
El papel de la resistencia de alimentación (R214, en este caso) es evitar la sobrecarga del cristal, que puede llevar a la creación de armónicos no deseados. Un valor del orden de 10 ohmios suele ser suficiente.
Con estas conexiones instaladas y, por supuesto, con una fuente de alimentación adecuada para el riel VDD, el microcontrolador tiene todo lo que necesitas para arrancar y programarse. Sin embargo, en este estado resulta poco útil, ya que no lo hemos conectado a ningún periférico.
Para los dispositivos STM32, puedes usar la hoja de datos para ver qué pines pueden llevar a cabo cada una de las funciones (I2C, UART, etc.) o puedes usar la extremadamente útil y gratuita cadena de herramientas STM32CubeIDE de STMicroelectronics. Esto te permite ver rápidamente qué periféricos están disponibles y configurar una distribución de pines para el hardware.
Dado que la planificación de la distribución de los pines depende mucho de cada proyecto, no cubriremos los detalles en este artículo. Si tienes curiosidad sobre este tema, no te pierdas el vídeo en el que se detallan todos los pasos necesarios.
En la próxima entrada del blog, crearemos un sencillo esquema de pines y repasaremos la mejor manera de diseñar una PCB con microcontroladores (por ejemplo, la mejor ubicación para los condensadores de desacoplamiento, el oscilador de cristal y el cabezal de depuración).