La primera entrada de la CPU había finalizado diciendo que las comunicaciones por radio a través de un transceptor eran lentas para lo que necesitamos, decidimos entonces utilizar otra alternativa sin tener que modificar mucho nuestro sistema. Buscamos y encontramos un módulo RS232-Bluetooth que nos ofrecía unas transferencias de 2Mb/s, parecía bastante adecuado.
Desde el punto de vista del robot y del PC seguía siendo un RS232, en el PC conectamos bluetooth por USB ya que nuestro ordenador no veía con bluetooth.
Comenzamos con la pruebas de transmisión y efectivamente el bluetooth es muy rápido, pero .....,
resulta que una vez que el modulo recibe un paquete de datos espera entre 200ms y 300ms antes de empezar la transmisión, eso significa que si el robot le envía un mensaje al PC el módulo tarda sobre 300ms, el PC recibe el mensaje, lo procesa y da una respuesta que tarda otra vez !300ms! en llegar al robot, solamente en los retardos hemos empleado !600ms!, inaceptablemente lento, con los retardos era más lento que el transceptor.
Investigamos la forma de eliminar los retardos y no encontramos solución, parecía que era algo propio del módulo y del protocolo bluetooth.
Y ahora que hacemos, ¿como comunicamos el robot y el PC?. ¿Podríamos hacero por WIFI?, sería ideal, transmisiones muy rápidas. Pero entonces tendríamos que encontrar algún sistema RS232-ethernet-wifi, y buscando en la red encontramos el WIPORT, funcionaba muy bien, pero...., electrónicamente muy frágiles, le cambiamos la configuración por defecto y el wiport murió, escribimos a la casa pidiendo soporte y no nos solucionaron el problema. Era ideal si hubiera funcionado.
Empezamos a plantearnos cambiar el controlador PIC por otro que tuviera salida ethernet, pero entonces tendríamos que modificar la arquitectura del robot. Buscamos controladores basados en micro ARM y hay una gama interesantísima de placas para usarlas en robots, tienen compiladores y entornos de programación gratuitos y muchas ampliaciones, funcionan bajo el SO Linux.
Y en esas estabamos cuando en una página de placas controladoras ARM veo un anuncio de XMOS,
http://www.xmos.com/products/development-kits/xc-2-ethernet-kit, accedo a el y encuentro unos nuevos chips diseñados especialmente para controlar elementos de hardware y que parecía la respuesta perfecta a nuestras plegarias.
Esta placa tenía salida ethernet, se programaba en C, C++ y XC (XC es un C escrito específicamente para estos micros y cuya característica más importante es la de carecer de punteros) en un entorno de desarrollo gratuito basado en eclipse, con lo cual corría en cualquier sistema operativo.
Existen varias tipos de chips XMOS, estos micros son "alucinantes", el que tiene la placa ethernet contiene 4 núcleos, tiene tanta potencia que es capaz de hacer una ethernet por software, manejando uno de los núcleos todas las señales y los protocolos ethernet y TCP/IP, como demo viene grabado un servidor WEB en la flash.
Cada uno de los núcleos es capaz de ejecutar 8 tareas simultaneamente sin cargar ningún sistema operativo, cada tarea tiene su propio juego exclusivo de registros , es como si cada cpu fueran ocho.
Las tareas se comunican entre si por medio de canales de comunicaciones definidos por software.
Recomiendo leer la documentación que suministra XMOS.
Con este controlador no hubo necesidad de cambiar la arquitectura de nuestro robot, utilizamos cada una de las tareas como si se tratara de un controlador con un PIC, con lo cual la capacidad de esta placa es de 8 tareas x 4 núcleos = 32 tareas o 32 placas controladoras como la que teníamos, en realidad es más potente que esos 32 pic juntos.
En lugar del bus I2C tenemos los canales de comunicaciones y la ethernet como el sustituto del RS232.
El funcionamiento es impresionante por su elegancia y rápidez.
El consumo de la placa es aproximandemente 500mA a 5V = 2,5 W. bastante contenido.
Para conectar los sensores al controlador diseñamos un placa que nos expande los buses, esta placa la enviamos a fabricar a http://www.custompcb.com/ que ofrece un servicio rápido (en 15 días desde el envio por correo electrónico del diseño a la recepción en casa) y aceptable de precio (80€ por 6 placas).
Existen dos placas como esta, cada uno de los núcleos (1, 2 y 3) tiene dos conectores, con lo cual el número de puertos y conectores es el doble del de la foto.
Podemos tener por núcleo (excepto el 0):
8 puertos de I/O de 1 bit.
2 puertos de I/O de 8 bits o 1 puerto de 16 bit, o 4 puertos de 4 bits o 1 puerto de 8 bits y 2 de 4 bits.
Algunos de estos puertos están ocupados en el núcleo 2 por el conector ethernet (4 bits creo).
Cada conector de la placa tiene además pines de +5V y GND.
No hay comentarios:
Publicar un comentario