8/15/2018

CAN bus + Teensy


Saludos,

bueno hace mucho que no público, y bla bla bla bla. No os voy a contar mi vida... Hoy vengo a hablaros de un proyecto en el que estoy trabajando control de la iluminación de un suelo interactivo. El suelo en si ya existía, pero la iluminación de cada baldosa estaba hecha con 3 lámparas de Neon, un RGB sencillo pero muy caro en consumo eléctrico.  La nueva versión esta pensada hacerse con Leds.

Exactamente los test y pruebas las estamos haciendo con WS2811, hubiera preferido usar Neopixels, pero una confusión me hizo pedir estos, la diferencia más gorda es que el neopixel lo controlas led a led, y con la tira de WS2811 va de tres en tres, los rimeros funcionan a 3V y los segundos necesitan 12v.

Para el control de los leds me base en este proyecto desarrollado con la placa teensy 3.2, la librería OctoWs2811 no funciona en Arduino, pero podéis controlar los leds con la misma librería de Adafruit Neopixel. Empleando un teensy y colocándoles un resistencia a la salida de 100 ohms  la salida del teensy me daba para controlar 48 puntos de luz, 144 leds. Para conseguir encender mas leds seria necesario colocar un bufer  a 5v. Los dos intentos que ha he hecho a este respecto han fracaso.

VPWM0 son 5V y el transistor que regula la conmutación BC547
Driver 74LS07D


El primer montaje funciona y la salida es igual que la entrada, pero a 5V con la corriente que proporciona el LM7805, pero dee introducir un cierto retraso que hace que los leds WS2811 no se enteren de la señal que reciben. El segundo montaje debería ser con el 74HTC245, pero en su lugar encontré el 74LS07D que yo pensé que era equivalente, hay que leerse bien los datasheets, porque el comportamiento que tiene es totalmente diferente, sin entrar en detalle los leds no responden, por lo tanto, no funciona.

Llegado a este punto pensé 48 puntos de luz por salida no está nada mal…

Disposición aproximada de las baldosas




Cada baldosa mide 76cm de diámetro y 15,5 cm de alto, llevan un difusor y un cristal de unos 4 cm de grosor, cada baldosa incluye 3 sensores de presión, en total hemos colocado 120. El suelo forma parte de una sala interactiva que tendrá 4 pantallas donde se proyectaran, convirtiéndola en una especie de holocubierta, para hacer experimentos de realidad mixta, VR … Y si puedo hacer una adaptación del Heroquest.





Test con una tira de 48 puntos de luz



Empleando el StadarTest de Neopixel probamos como se vería una de las baldosas y como se hacia la transición, este test está hecho con los leds pegados a la base de la baldosa y empelando una fuente de 3A de corriente a 12 V.  Con una fuente de estas características se pueden alimentar a 96 puntos de luz 288 leds sin problema, con tres baldosas 432 la ultima baldosa fallaba cuando se le envía el color blanco, los tres RGB encendidos.

Pero para la instalación final queríamos un patrón uniforme para “poder hacer algunas animaciones” en las baldosas, las comillas es debido al difusor las animaciones deberían ser muy simples. Hemos optado por hacer un patron  que nos permita colocar los leds de forma uniforme.


Diseño en Sketchup y disposisón de los WS2811


En realidad este post no venía a comentar el proyecto entero, simplemente para controlar las 120 baldosas teníamos que escoger un método de control que nos permitiera control, velocidad de respuesta y protegido a interferencias, y actualizable, este ultimo punto en principio era importante, no me quería ver levantado baldosa por baldosa para instalar la nueva versión de la librería o corregir un error. Baraje la opción de emplear una raspberry pi 3, la librería de neopixel esta desarrollada en Python pero solo me limitaba a usar los pines PWM0 y PWM1. El tiempo de respuesta a  hacer funcionar la librería era alto, unos 5 segundos hasta que comenzaba a funcionar el standtest, la conexión seria mediante cables ethernet, el numero de baldosas que controlaría cada placa seria 2 y en el mejor de los casos 4 usando las dos salidas simultáneamente, si era posible hacerlo. Los sensores de presión irían conectado a una placa que enviaría la información a la raspberry pi mediante I2C.


Con los teensy el control era muy rápido y robusto, había realizado mas pruebas y con la librería OctoWS2811 podría conectar 16 baldosas por teensy, 8 lineas de 38 leds + 16 placas de i2c con la información de los sensores de presión…. Pero como se comunicarían entre ellas, RS232, RS485, I2C, Ethernet… Finalmente opte por Can Bus, es un protocolo normalizado, con inmunidad a interferencias y protocolo para detectar y corregir errores. Además el teensy tiene de serie un puerto para el bus can, lo que lo hacia el candidato excelente para testear.

Siguiendo esta guía, y empleando la librería flexcan, me hice con mis plaquitas  SN65HVD230 o similar por amazon, diseñe la paca en Eagle para integrar todo lo necesario y me lleve un fiasco cuando era imposible enviar nada, no funcionaban. O no he sido capaz de hacerlo funcionar. La otra placa que compre a la desesperada fue la MCP2515, especial para Arduino y que, al conectarla a un teensy, desaprovecharía su bus can, en realidad solo necesitaría el MCP2551, y es posible que lo compre en un futuro y o integre a la placa final.


SN65HVD230
MCP2515


Diferencias entre las placas muchas, las primeras son un simple conversor de niveles eléctricos al protocolo del bus, pero todas las pacas vienen con la resistencia de 120 Ohms conectada, Este protocolo debe tener una resistencia al principio y al final, pero si quieres conectar tres de estas plaquitas, debes quitar la resistencia en la placa del medio. La segunda, placa gestión el bus can, con un conversor de niveles el MCP2510 el U1, esta placa incluye un jumper que te permite colocar la resistencia o no. Por otro lado requiere de unos cuantos cables mas que las primeras.

Teensy 3.2
MCP2515
Pin digital
Int
13
SCK
11
SI
12
SO
10
CS
GND
GND
VIN
VCC


Para emplear esta placa utilice la librería MCP2515 de Arduino y conseguí que entre los dos teensy se enviaran mensajes el siguiente paso era comprobar que podría controlar los 2280 puntos de luz del suelo de forma fluida, no es que deba cambiarse con mucha frecuencia pero si es necesario, que la transición no tenga demasiado delay.


Editado: La librería ha sido modificada si tenéis problemas con la nueva, podéis usar MCP_CAN_lib-master.zip  
                                                                                                                                                                       

A continuación, os dejo unos vídeos de unas pruebas que hecho, ahora toca depurar código para gestionar mejor los paquetes de información, numero de mensajes, etc. Y hacer unos nuevos prototipos para probar “in situ”.




Test de la baldosa con 19 leds en disposición.




Test de control secuencia RGB a 1000Kbaudios y a 500Kbaudios


En estos dos últimos test el teensy de control esta enviando los 2280 mensajes, que supuestamente leerán los teensy distriubuidos, como solo disponía de una tira de leds de 7 leds la secuencia con la que envió el mensaje es primero enciendo el primer punto de luz de todas las baldosas, después el segundo y así hasta 19. La forma que tienen de encenderse los leds es representativo de como se encendería todo el suelo.


Anakleto.

No hay comentarios:

Publicar un comentario