domingo, 9 de febrero de 2014

Intel Galileo. Esquema

Hola!! En esta entrada voy a seguir con mi auto-regalo de reyes, la placa Arduino compatible Intel Galileo. En concreto en esta entrada os voy a contar como la gente de Intel, ha solucionado el asunto de las entradas y salidas de la placa Galileo. Pero antes tenemos que ver el problema, para que luego podáis leer la solución.
El problema está muy claro, el SOC de Intel no es capaz de proporcionar a su salida apenas coriente, y menos aún le podemos pedir que nos genere una señal PWM. Además, los procesadores, o el SOC QUARK que monta la Galileo, son integrados puramente digitales, es decir, es impensable, e innecesario, que un procesador digital acepte entradas analógicas. Sin embargo, la gente de Intel, se las ha arreglado para que todo esto sea posible, es decir, tenemos salidas que son capaces de dar hasta 10mA, o absorber hasta 25mA, algo muy superior a los uA que puede dar el procesador. También es posible generar a la salida señales PWM de frecuencia y ciclo de trabajo variable, incluso con esta placa, es posible leer señales analógicas y leer el resultado digital equivalente. 
Para ver como han solucionado, lo primero es ver el diagrama de bloques que nos ofrece Intel sobre su placa.

Lo primero que se ve es que ningún conector de entrada/salida va directamente, sino que pasan antes por unos bloques llamados GPIO PWM, ó ADC ó MUX. Esto ya nos da una idea, y es que existen otros elementos que son los encargados de hacer la faena de los GPIO. Estos elementos se comunican con el QUARK mediante I2C, que si que incorpora el QUARK, al igual que lo hace el ARM de la RPi.
El primero de los bloques que vamos a ver es ADC. Para este bloque, la gente de Intel ha montado en la Galileo un conversor ADC de 12 bits y con comunicación I2C, el AD7298. Este conversor cuenta con 8 entradas single-ended que admiten una entrada de 0 a 2,5 voltios. Para aumentar este rango hasta 5 voltios, lo que hacen es introducir un divisor de tensión en la entrada de forma que pasamos del rango de 0-5 hasta 0-2,5. La velocidad de conversión del ADC es de hasta 1MSPS, un valor realmente algo para tratarse de un conversor con comunicación serie. Para no perder entradas y salidas digitales, cosa que ocurre con las placas Arduino, la gente de Intel permite al usuario que los canales analógicos puedan ser utilizados como entradas o salidas digitales, aunque cabe destacar que esto no es posible hacerlo directamente desde el IDE. Para poder tener 2 tipos de entrada en un mismo PIN, es necesario un conmutador, un multiplexor, a la entrada. Para esta función la gente de Intel ha escogido el TS5A23159, el cual es un multiplexor analógico. la señal de control del multiplexor es comandada directamente desde salidas del QUARK, puesto que son solo señales de control. Pero si vemos el diagrama de arriba nos damos cuenta de que no hay solo un bloque MUX, para que sepamos que multiplexor debemos modificar y en que valor se debe establecer para que a la salida tengamos la señal que deseamos, INTEL nos proporciona este documento, en el cual vemos, en primer lugar que dos señales están a la entrada del multiplexor, que señal del SOC está llevada al pin de control, y que valor corresponde a cada señal de entrada, así pues solo debemos ir siguiendo la señal desde el QUARK hasta la salida, e ir activando o desactivando los "interruptores" necesarios.
Por ultimo, quedan los bloques que aparecen como GPIO PWM. Estos bloques van a ser los encargados de sacar por los pines las señales digitales que deseemos, tanto señales estáticas, como señales PWM. Para esta función se ha elegido un expansor de puertos con comunicación I2C del fabricante CYPRESS, el CY8C9540A. Este integrado proporciona hasta 40 pines de entrada-salida, además de 6 módulos PWM que podemos configurar como deseemos hasta una frecuencia de 93kHz. Este expansor, además de los puertos incorpora también una memoria EEPROM.
Todos estos son los integrados que podemos encontrar en la placa Intel Galileo. En la próxima entrada veremos como controlar todos los periféricos desde la linea de comandos de Linux.

No hay comentarios:

Publicar un comentario