¿Porqué están tan de moda las FPGA’s?

Las s FPGA ( Field Programmable Gate Array ),han venido par quedarse .A medida que los FPGA se abaraten y popularicen, podemos incluso imaginar sistemas híbridos FPGA y procesador (o incluso totalmente FPGA) donde el software puede reconfigurar el hardware, creando o deshaciendo procesadores, o memoria, en función de las necesidades.


Realmente  las FPGA’s  o matriz de puertas programables (del inglés field-programmable gate array) no son un invento reciente  pues fueron inventadas ya hace unos años allá por  el año 1984 por Ross Freeman y Bernard Vonderschmitt, co-fundadores de Xilinx.

Esencialmente internamente están formadas por  una enorme matriz  compuesta  por un gran número de pequeños bloques  formados por puertas lógicas y  biestables síncronos  (de hecho del orden de cientos de miles hasta millones de ellas según el  modelo) y justo en la intersección de esos  hay conmutadores digitales   que  son los que precisamente se  configuran  modificando la   matriz de conexiones  para realizar una determinad tarea tal  y como se haría con un circuito digital

Estos bloques individuales están constituidos por elementos lógicos como puertas AND,OR,NOR   que les permiten adoptar distintas funciones de transferencia.

El inter-conexionado de una FPGA  por tanto esta  cero cuando esta  está sin configurar, de modo que necesitamos  habilitar e puentes de  conexiones  en determinadas partes  y en otras deshabilitarlas , función que hacemos mandándoloe  una ráfaga de bits ( o bit stream )

 

Juntos, los distintos bloques, unidos por las conexiones que programamos, hacen que físicamente se constituya un circuito digital, de forma similar a como haríamos en una placa de prototipos (protobard)  con  elementos discretos  por ejemplo de la serie c-mos y con mucho cableado físico   sujeto a errores y poca fiabilidad.

Estos arreglos de matrices con cientos de miles hasta millones   de puertas programables sencillas como AND,OR,NOR   y  biestables , nos dan una gran ventaja a la hora de implementar un circuito lógico pues en vez de invertir en conexiones físicas susceptibles de fallar , es mucho mas eficiente realizarlo  con una FPGA  donde  pueden estar todas estas puertas pero incluidas en un chip pequeño, el cual lo configuraremos  para realizar esas conexiones  programando  las  compuertas para un determinado fin , y cuando ya no sea necesario  es posible reprogramarlo para otro cometido

Como vemos la enorme libertad  en la interjección de dichos bloques confiere a las FPGA una gran flexibilidad y versatilidad que llega hasta tal punto  que incluso  son  capaces de emular microprocesadores  de varios núcleos ( en función del tipo de FPGA)  ,

Hay proyectos de pequeños procesadores que pueden ser configurados en un FPGA. Ejemplos son MicroBlaze y PicoBlaze de Xlinx, Nios y Nios II de Altera, y los procesadores de código abierto LatticeMicro32 y LatticeMicro8.  !Incluso existen proyectos para emular procesadores históricos en FPGA, como el famos procesador del Apollo 11 Guidance Computer que llevo  el hombre a la Luna.

Todo esto pues puede explicar porque se están poniendo de moda pues permiten sobre una misma pastillas realizar diferentes circuitos   que incluso pueden ser actualizados  para mejorar su rendimiento su necesidad de  cambiar el hardware

Un aspecto a destacar  es  dado que su funcionamiento es básicamente cableado permite  velocidades  altisimas de reloj desde Mhz  hasta Ghz, pudiendo hacer procesamiento de señales de alta frecuencia así como construir circuitos muy rápidos por  lo que vemos ninguna de las placas qeu hay en el mercado  como por ejemplo Ardiuino se aproximan a las FPGA’s

Algunos de los principales fabricantes son Xilinx, Altera (comprado por Intel en 2015), MicroSem, Lattice Semiconductor o Atmel, pero  recientemente otros grandes players como Arduino  también han entrado en este lucrativo negocio del hardware  con el modeloMKR Visor  basada en un chip de Intel , el  modelo  Cyclone 10CL016j,

Programación

Los FPGA no se “programan” en el sentido estricto  como estamos familiarizados usando lenguaje como Processing C, C++,  Python,etc  pues  usan   HDL ( Hardware Description Language. ) ,es decir un tipo diferente de lenguaje descriptivo usado también en el diseño de chips y SoC

Para empeorar las cosas una de las claras  desventajas de las FPGA es que estos lenguajes HDL  son especificos  para cada FPGA por lo que  cada fabricante diseña su propia forma de hacer síntesis sobre esta

Los lenguajes HDL tienen una curva de aprendizaje grande debido a que tiene un grado de abstracción muy bajo pues piensese que  describen diseños de circuitos digitales de modo que los fabricantes proporcionan herramientas comerciales para programar sus propios FPGA. Estas herramientas no son gratuitas, o lo son sólo para algunos modelos de FPGA del fabricante y como vemos están unidos a la arquitectura de un único fabricante.

Con el desarrollo de los FPGA han aparecido otros lenguajes que permiten un mayor nivel de abstracción, similar a C, Java, Matlab. ejemplo son System-C, Handel-C, Impulse-C, Forge, entre otros.

Con la evolución en el desarrollo de las FPGA también han aparecido herramientas centradas en la programación gráfica de las FPGA, como LabVIEW FPGA, o el proyecto Open Source IceStudio  desarrollado por Jesús Arroyo Torrens.

Afortunadamente hace unos  años hubo un investigador   proveniente de la docencia llamado   Clifford Wolf que tras un hercúleo trabajo de ingeniería inversa con su proyecto ice storm a lo largo de tres años. que  liberó un modelo de  FPGA de  Lattice Semiconductor (el modelo iCE40 LP/HX 1K/4K/8K, ) publicando en la comunidad Open Hardware  su diseño y método de programación ,  así que  hay buenas noticias sobre esa desventaja que existía de programar  la FPGA’s pues es posible programar algunos modelos con herramientas abiertas

 

El coste

Como hemos visto , los lenguajes con los que se configuran ka FPGA  dificultaban  su uso ,pero tras la liberación del modelo de Lattice  se camina hacia herramientas abiertas asi  que uno  de os grandes escollos que deben superar el coste   pues e todavía las FPGA’s tienen un costo muy elevado sobre los microcontroladores pues un microcontrolador arduino clónico lo podemos conseguir  por menos de 10 € , y lamentablemente  una FPGA  es imposible conseguirla   por ese precio pero poco a poco esto esta cambiando con placas que vamos a ver a continuación

El  precio de  una FPGA  puede estar en el rango de 20 a 80€  como vemos muchísimo más caro que un Arduino Nano (16Mhz) o un STM32 (160Mhz) que podemos comprar por 1.5€, un Node Mcu ESP8266 (160Mhz + WiFi) que podemos comprar por 3.5€ o incluso, son mucho más caros que una Orange Pi (Quad 800 Mhz + WiFi), que podemos encontrar por unos 20€.

 

Placa Arduino MKR Vidor 400

El Arduino MKR Vidor 4000 es una nueva clase de desarrollo que combina el alto rendimiento  y flexibilidad de una FPGA con la facilidad de uso del Arduino en un pequeño factor de forma que es el rasgo distintivo de la familia MKR

Esta placa contiene el microcontrolador SAMD21 de Microchip y un Ciclón 10 FPGA ( de INTEL) y cuenta  con 8 MB SDRAM,  2 Mbyte QSPI Flash (1MB para las aplicaciones de usuario), conector Micro HDMi  de alta definiciónI, conector de la cámara MIPI, Wifi  alimentado por el módulo de U-BLOX NINA W102, la clásica interfaz MKR en que todos los pernos están conducido por SAMD21 y FPGA y un conector Mini-PCI Express con hasta 25 pines programables del usuario.

El FPGA contiene elementos de la lógica de 16K, 504Kbit de RAM integrado y multiplicadores de 18 x 18 bits HW 56 para DSP de alta velocidad; Cada pin puede cambiar a más de 150 MHz y puede ser configurado para funciones tales como UARTs, SPI (Q), alta resolución / alta frecuencia PWM, encoder de cuadratura, I2C, I2S, Sigma Delta DAC, etcetera. A bordo de FPGA puede también utilizarse para alta velocidad operaciones de DSP para el procesamiento de audio y video.

El Arduino MKR Vidor 4000 puede ser programado usando el Software de Arduino (IDE),  y ejecutar tanto online como offline

 

 

 IceZUM Alhambra

La IceZUM Alhambra incluye una FPGA iCE40 del fabricante Lattice Semiconductor, cuyo diseño y método de programación fue liberado por Clifford Wolf tras un hercúleo trabajo de ingeniería inversa a lo largo de tres años.
La placa de desarrollo IceZUM Alhambra se desarrolló originalmente en BQlabs y ha sido diseñada por Eladio Delgado en colaboración con Juan González, siempre con la idea de que pudiera ser utilizada en educación.

La placa se puede adquirir a través del grupo #FPGA-Wars que conforma la comunidad en torno a esta placa  lanzando tiradas cortas conforme los usuarios se van apuntando. De momento tiene un coste de 65 euros, con una calidad excepcional y todos los controles de calidad gracias al trabajo de Eladio Delgado pero es de suponer que cuando se fabrique a mayor escala podrá bajar el precio.(al ser hardware libre… en principio cualquiera puede lanzarse a su fabricación.) Tambiédsiponen una IceZUM Alhambra “peregrina” que se va enviando de unas personas a otras para que la puedan probar( esto esta en el grupo #FPGA-Wars.)

Para modificar las conexiones internas de una FPGA se utilizan lenguajes de descripción hardware. Para la IceZUM Alhambra dado su carácter libre y abierto se utiliza Verilog, lenguaje de descripción hardware abierto y podríamos decir que estándar hoy en día.

Pero la maravilla que seguro ayudará a que estudiantes puedan entender mejor el diseño de circuitos digitales se llama Icestudio,  creación de Jesús Arroyo y que me atrevo a comparar con lo que ha supuesto Scratch a la programación.

Con Icestudio en vez de utilizar código de descripción hardware diseñamos directamente, gráficamente, el circuito combinacional. Es seguro que con Icestudio se podrá introducir a la electrónica digital a alumnos cada vez más jóvenes.

 

icezum alhambra icestudio

BQ patrocinó el proyecto conjunto de la IceZUM Alhambra junto con Icestudio y Apio en sus inicios a lo largo de 2016 y ahora el proyecto avanza gracias a sus creadores con el apoyo de la comunidad gracias a su concepto abierto y colaborativo.

Ejemplo

El proyecto IceStorm es un toolkit (formado por IceStorm Tools + Archne-pnr + Yosys) que permite la creación del bitstream necesario para programar un FPGA iCE40 con herramientas open Source.

El trabajo de Clifford se realizó un IceStick, una placa de desarrollo con un FPGA iCE40, por su bajo coste y pequeñas características técnicas, que permitían el trabajo de ingeniería inversa.

el proyecto IceStorm y el Lattice ICE fue el inicio de una revolución en el campo de las FPGA similar a la que empezó Arduino con los procesadores AVR de Atmel, y que ha permitido poner al alcance de los usuarios domésticos pues el resro de FPGA’s requieren inversiones elevadisimas tanto en hw como en sw.

Para terminar , vamos a  ver un  sencillo ejemplo de como configurar (Programar) un FPGA de forma fácil usando Icestudio (HDL) y la ICE40 icestick de lattice, para configurar una alarma de indencios

 

 

 

Una nueva de crear placas de circuito impreso

Si tiene un CNC casero o de origen asiático esta de suerte porque también puede hacer placas de circuito impreso de un modo muy profesional gracias a varias herramientas disponibles que tratamos en este post


Un circuito impreso no es mas que una placa aislante sobre la cual se dibujan “pistas” e “islas” de cobre las cuales formaran el trazado de dicho circuito, partiendo de un plano  creado normalmente desde un esquema eléctrico que se pasa a pcb con un programa de enrutamiento ,aunque obviamente ese se puede hacer de forma manual.

Para empezar tenemos que decidir que material vamos a precisar  pues si se trata de un circuito donde vayan  a estar señales de radio o de muy alta frecuencia tendremos que usar  placas de  fibra de  vidrio o de pertinax, que es un material poco alterable por la humedad o de lo contrario, para la mayoría de las aplicaciones, con placa de fenólico , baquelita , etc pueden  ser  mas que suficiente.

pcb2.PNG

Tradicionalmente los PCB  se realizaban a partir de un método foto-químico : se exponía con luz una placa de cobre cubierta de emulsión fotosensible  con un acetato  transparente que contenida el diseño de las pistas   , luego se revelaba y finalmente se atacaba con  un ácido , el cual  normalmente era cloruro ferrico(FeCI3)   o una disolución de agua oxigenada de 100 volúmenes y   agua fuerte(H2SO4)

Mas modernamente   con las fotocopiadoras o las impresoras láser  , se ha sustituido la placa fotosensible por simplemente una  fotocopia con el diseño del pcb  que se pone cara abajo con la placa virgen y  se plancha el conjunto

plancha.PNG

Después del planchado  se humedece en agua caliente , se retira el papel (con cuidado  de romper la tiras de tinta ) y luego se ataca  finalmente con  un ácido  que también puede ser una disolución de agua oxigenada de 100 volúmenes y   agua fuerte(H2SO4) o  cloruro ferrico(FeCI3).

Este proceso ultimo por cierto requiere que  pulamos con lana de acero o el estropajo de aluminio hasta que quede brillante pues dependiendo de como quede de limpia se pegará mas o menos el toner (de nuestra fotocopia)  en la placa.

pcb1

Hasta ahora hemos descrito como se hacían ( y/o  se siguen haciendo) muchas placas de circuito impreso para uso personal pero ¿y si existiera algún otro método menos engorroso,limpio, eficiente,profesional   y menos peligroso para hacer una placa de circuito impreso?

Pues en efecto se puede hacer   y gracias a una máquina CNC, que no solo  sirve para  crear piezas de todo tipo, sino que también puede servir para hacer placas PCB caseras en muy poco tiempo (por ejemplo diseñadas com EAGLE y  PCB-gcode)

Un programa  muy famoso es bCNC que nos permite controlar un  CNC que funcione a través de arduino y que usen el firmware grbl.  Este programa es el mas completo en cuanto a funciones,  pero quizás  tenga demasiadas opciones que dificultan  que nos centremos en el proceso que vamos buscando , que es el de creación de pcb mediante el pulido de las zonas que no deben conducir con una herramienta  controlada por control numérico

Precisamente  para superar las dificultades  de  bcnc  surge OpenCNCPilot , que es un sencillo programa creado específicamente para crear placas PCB con una maquina  CNC  .

Este programa es gratuito y esta disponible únicamente para windows desde la pagina de github en https://github.com/martin2250/OpenCNCPilot

Podemos ver una descripción general rápida en YouTube:

 

OpenCNCPilot es un emisor de código G compatible con GRBL.

Su característica principal es su capacidad de explorar áreas definidas por el usuario para alabeo y envolver la trayectoria alrededor de la superficie curva . Esto es especialmente útil para grabar superficies metálicas con cortadores en forma de V donde cualquier desviación en la dirección Z resultará en trazas más anchas o más angostas, por ejemplo, para el aislamiento de PCBs donde el alabeo daría lugar a rastros rotos o en corto.

Está escrito en C # y usa WPF para su interfaz de usuario. Lamentablemente, esto significa que no se ejecutará en Linux, ya que Mono no es compatible con WPF. La ventana gráfica 3D se gestiona con HelixToolkit.

 

Instalación y primeros pasos

Para instalar este programa se requiere   .NET 4.6 ,Vaya a la sección de Versiones y descargue los últimos binarios (o compílelo desde la fuente). Descomprima todos los archivos en su disco duro y ejecute “OpenCNCPilot.exe

Asegúrese de utilizar la versión 1.1f de GRBL (las versiones posteriores pueden funcionar pero aún no han sido probadas)

Antes de la primera ejecución, debe seleccionar un puerto serie, el selector está oculto en el menú de configuración al que puede acceder en la pestaña “Máquina”. Aparte de eso, no es necesario modificar ninguna configuración de modo que seleccionado  podra  conectarte a su máquina.

Abra archivos gcode o height map arrastrándolos a la ventana, o usando los botones correspondientes.

Para crear un nuevo mapa de altura, abra la pestaña “Sonda” y haga clic en “Crear nuevo”. Se le pedirá que ingrese las dimensiones.
Asegúrese de ingresar las coordenadas reales, por ejemplo, cuando su trayectoria esté en la dirección X negativa, ingrese “-50” a “0” en lugar de “0” a “50”. Verá una vista previa del área y los puntos individuales en la ventana principal

Para explorar el área, configure su sistema de coordenadas de trabajo ingresando “G92 X0 Y0 Z0” en su origen seleccionado, asegúrese de conectar el A5 de su Arduino a la herramienta y GND a su superficie , y presione “Ejecutar”.

Una vez que haya terminado de explorar la superficie, cargue el archivo gcode que desea ejecutar y presione el botón “Aplicar mapa de altura” en la pestaña “Editar”. Ahora puede ejecutar el código con el botón “Inicio” en la pestaña “Archivo”.

En la ultima version   hay  una opción muy interesante, casi diría que imprescindible, como el autonivelado por malla. Eso permite que la profundidad de corte siempre sea la misma y el resultado quede perfecto.

 

 

 

 

 

 

 

Como construir una maquina CNC a partir de piezas recicladas

veremos como a partir de piezas recicladas podemos construir una maquina CNC multiproposito


A veces las partes viejas de ordenadores pueden ser muy útiles para muchas cosas pero sobre todo es muy destacable    las fuentes de alimentación (tanto de portátiles como  de ordenadores fijos )  de las que tantas veces hemos hablado en este blog , no solo para  usar la salidas de 12 y 5V , sino incluso para hacer asociaciones de  varias fuentes  para generar fuentes con tensiones o intensidades mayores .
El reciclaje de las piezas de un ordenador  no queda en la fuente,  pues hay un sinfín de  otras piezas  útiles  que podemos  reciclar en un viejo ordenador, como por ejemplo:
  •  Las pantallas de los portátiles  que  pueden usarse  con una controladora barata como un  monitor.
  • Las memorias  que pueden utilizarse para otros aparatos electrónicos.
  • Los ventiladores  y radidadores  usados para refrigerar las CPU  nos pueden servir para refrigerar nuestros circuitos o  incluso para otras aplicaciones con celulas de Peltier
  •  Las cajas ATX  tienen un sinfín de aplicaciones
  • De los lectores de CD / DVD podemos usar los motores,la mecánica  y el láser
  • De las viejas disqueteras   podemos usar los motores,la mecánica
  • Tornillos , herrajes ,etc

En el post de hoy a vamos a  ver como es posible construir una maquina  CNC o una impresora 3D     con la mecánica  de dos  o tres lectores dvd ( o incluso incluyendo una disquetera) invirtiendo muy poco dinero, pues tan solo necesitaríamos una mínima  electronica de control aparte.

Las partes hardware que necesitamos son:
  •  3 lectores de CD o DVD que no usemos
  • 1 Arduino (Uno en nuestro caso)
  • 3 controladras de motor paso  a paso
  • Fuente de alimentación  de 5v DC ( nos vale una vieja fuente de PC)
El sofware necesario seria el siguiente:

Ensamblaje

Para empezar  con este proyecto  lo primero  es desmontar  los  lectores de CD o DVD
disco1
Como vemos  ,en su interior vamos a ver encontrar una placa  metálica con un motor paso paso (compuesto por  dos bobinados independientes ) y cuyo eje es un tornillo sin  fin , lo cual es la pieza clave  para   reciclar . Asimismo necesitaremos las carcasas de dos de ellas  y los componentes necesarios para fijarlos al chasis (  el laser  y los otros motores no son necesarias).
Cada motor va a simular cada uno de los ejes de la maquina (X,Y,Z)  por los que en los contactos de cada motor  soldaremos un cablecillo  a cada contacto para hacer las 4  conexiones  con las controladoras ( podemos eliminar el cable de cinta flexible que suelen llevar pues es muy difícil que den la medida).
En este punto es interesante identificar mediante una sencilla de prueba de continuidad con un polímetro   usándolo en modo  resistencia  para  saber cuales son los dos bobinados  ( entre si   no deben tener continuidad )
 cables.JPG
Una vez tengamos el cableado hecho de los motores nos tocaría la parte mecánica la cual quizás sea la parte mas engorrosa  y difícil de llevar a cabo   pues realmente no existe una única solución  a este problema   a la hora de afrontar el ensamblaje  que básicamente  consiste en  fijar los carros con  los motores paso a paso en los tres ejes x, y , z  para formar un único conjunto.
En primer  lugar  , nos centraremos en lo que será el eje Y  . Usando  una carcasa colocaremos uno de los  carros junto con el motor  por medio de  soportes tratando de alinearlo lo mas cercano a uno de los bordes  y centrándolo sobre este.
Los soportes pueden ser metálicos roscados ( se pueden comprar en ferreterias)  o separadores de plástico de los usadas para las placas madre.
ejey
De un modo similar  también fijaremos otro carro con su motor a otras de las carcasas de manera que crearemos para el eje X (obviamente la idea  es montarlo perpendicularmente al montaje del eje y). Asimismo también debemos fijarlos  a una de los bordes en la parte superior y centrados sobre este cuerpo.
Los soportes usados también  pueden ser metálicos roscados ( se pueden comprar en ferreterias)  o separadores de plástico de los usadas para las placas madre.
ejex.png
Ahora nos toca el eje z  que se diferencia   de los dos anteriores  que debe ir colocado sobre  uno de los ejes: más  concretamente el eje x.
El eje Z a diferencia de los otros dos lo instalaremos en una placa  liviana ( por ejemplo de vaquelita ,plástico, metílica,etc  ) para luego  montarla en los soportes del eje X
ejez.png
Una vez que tenemos los tres ejes es hora de  unir  ambas carcasa  por  las  base del eje Y y X  formando un angulo recto.
Normalmente muchos aficionados usan escuadras metálicas   e incluso pequeños perfiles metálicos entre ambas carcasas  : todo depende de lo solido que haya quedado la unión así que  quizás  no sea tan necesario en función de como queden fijadas ambas partes
escuadras1.png
Una vez que hayamos ensamblados  lso tres ejes , nuestro proyecto ha tomando toda su  forma, por  lo que solo nos queda conectar  los motores paso a paso a  los controladores   y estos a la placa Arduino Uno.
Las conexiones de cada motor irán a cada driver  de motor  paso  a paso y las entradas  de estos  a la placa Arduino Uno según las siguientes  conexiones digitales:
  • Eje x: puertos 3 y 6, GND
  • Eje Y : puertos 4 y 7,GND
  • Eje Z: puertos 5 y  8;GND

Asimismo no debemos olvidar las conexiones de alimentacion de la placas de los drivers (+5V) que se recomienda no se obtengan de Arduino  sino directamente desde  la fuente auxiliar

El esquema electrico final seria el  siguiente:
Diagramas
Cuando hayamos  conectado e instalado, lo que quedaría seria ir configurando el software necesario para hacerla funcionar.
En youtube podemos encontrar  miles de videotutoriales  que explican con detalles estos pasos por lo que no lo vamos a repetir aquí
Como pinceladas  dejamos dos vídeos muy claros al respecto para que sirvan  como guía:
Con eso concluimos  de este proyecto, lo cual es la base para diferentes usos como puede ser un plotter , una fresadora o incluso colocando un extrusor una impresora 3D,una grabadora láser , etc
final.png