Con el siguiente tutorial damos comienzo a una nueva sección dedicada a las FPGAs.
A grandes rasgos una FPGA o Field Programmable Gate Array es un dispositivo programable que contiene bloques lógicos, es decir, puertas lógicas, que podemos programar a voluntad para implementar desde sencillos circuitos digitales hasta complejos microprocesadores.
FPGAs hay muchas, pero este tutorial y los sucesivos están basados en la IceZUM Alhambra, una FPGA diseñada y fabricada en España.
Dos de los creadores de esta maravilla de la electrónica son Eladio Delgado y Juan González-Gómez (Obijuan). En su página de GitHub, Obijuan va publicando una serie de tutoriales para acercar las FPGAs a los makers.
En ellos vas a encontrar todo lo necesario para iniciarte en este mundillo, desde como instalar Icestudio hasta sencillos circuitos ¡Hola Mundo! con la IceZUM Alhambra.
Si es tu primer acercamiento a las FPGAs y quieres saber más, echa un vistazo a esta entrada de Luis LLamas.
No voy a entrar en como instalar Icestudio, o como conectar y configurar la IceZUM Alhambra. Obijuan lo ha explicado fantásticamente bien tanto en sus tutoriales en GitHub como en su canal de YouTube.
Mi propósito es compartir los tutoriales que voy haciendo con la IceZUM Alhambra, de igual manera que lo vengo haciendo con los que hago con Arduino. Así que sin más rodeos vamos al lío.
Vamos a empezar esta serie de tutoriales encendiendo ledes externos a la tarjeta.
La IceZUM tiene un total de 32 pines de E/S, de los cuales ocho funcionan a 3,3V y el resto a 5V.
Los pines de 5V están por duplicado en formato macho y hembra. Los de color blanco son macho y los de color negro hembra. Ambos están numerados de D0 a D13 en el lado derecho y de DD0 a DD5 en el lado izquierdo.
Conectamos un led en el pin D7 como muestra el esquema.
Este código hace que el pin D7 pase de 0 a 1 cada segundo.
Los terminales GPIO están directamente conectados a la FPGA, son ocho pines macho de color amarillo y se nombran del GP0 al GP7. La máxima corriente que suministran es de 8 mA pero se recomienda no sobrepasar los 6mA.
Conectamos un led en el pin GP0 según el esquema.
Este código hace que el pin GP0 pase de 0 a 1 cada segundo.
Vamos a ir un paso más allá. Para qué conformarnos con un led pudiendo encender una tira de ledes.
Los pines de salida de la IceZUM no tienen ni tensión ni corriente suficiente para alimentar una tira de ledes, así que vamos a ayudarnos de un transistor MOSFET.
Concretamente voy a utilizar un MOSFET Driver Module cuyo funcionamiento explique en otro tutorial para Arduino.
El módulo se alimenta con una fuente externa de 12V.
Unimos la masa del módulo con la masa de la IceZUM y llevamos la señal de control al pin D11.
El bit que bombeamos con el corazón llega hasta el driver y éste dispara la puerta del MOSFET, encendiendo la tira de ledes a la frecuencia de bombeo que hayamos seleccionado.
Para terminar este tutorial voy sustituir la tira de ledes de un solo color por una tira RGB. Bombearemos bits a distintas frecuencias múltiplos de 1Hz de manera que habrá veces que coincidan encendidos dos o más colores primarios dando lugar a vistosas combinaciones.
Para controlar la tira RGB voy a emplear el módulo del ejemplo anterior y un driver que tengo por casa, que también usé en este tutorial para Arduino.
Empleamos una fuente externa de 12V para alimentar la tira RGB y la IceZUM Alhambra a través de los pines VIN y GND.
Durante las pruebas que hice observé que el circuito no funciona si la IceZUM está conectada al PC. Una vez cargado el sketch, desconectar la IceZUM y alimentarla usando la fuente de 12V de la tira de ledes.
En paralelo con cada led de la tira RGB he conectado uno de los ledes internos de la IceZUM para ver en todo momento el estado de las salidas.
En el siguiente vídeo se puede ver el resultado
Seguro que alguno pensará que el circuito es demasiado complicado para controlar un simple tira de ledes y no le falta razón.
Todo lo anterior se puede simplificar eliminando el driver que dispara el MOSFET y conectando cada MOSFET directamente a la IceZUM como muestra el siguiente esquema.
En este ejemplo de aplicación estamos controlando cargas pequeñas, de 12V y unos cientos de mA y no tiene porque haber problemas. Pero qué pasa si queremos controlar cargas de 400V y 5A como fuentes conmutadas o inverters para motores.
Tener 400V pegaditos a la IceZUM no es una buena idea. En caso de fallo catastrófico del MOSFET -léase cortocircuito- podemos irnos despidiendo de nuestra querida FPGA. Por eso se utiliza un driver entre la IceZUM y el MOSFET, para aislar y proteger el circuito de control, del circuito de potencia. También se pueden utilizar optoacopladores para disparar MOSFETS, puedes ver el tutorial aquí.
La mayoria de nosotros rara vez trabajará con tensiones tan altas, pero la vida da muchas vueltas y los caminos del maker son inescrutables, así que ahí lo dejo por si acaso.
¡Eso es todo amigos!
Colección de tutoriales de Obijuan en GitHub y en YouTube
Consigue tu IceZUM Alhambra en alhambrabits.com