Preguntas de velocidad del globo POV

Estoy planeando crear un globo POV LED RGB solo físicamente más grande que ese.

Planeo usar 64 LED RGB, que requieren 3 pines por LED para un total de 192 salidas. Obviamente voy a necesitar algunos registros de desplazamiento. He buscado en 74HC595 (8 bits) y requeriría 24 de estos chips para manejar todos estos LED.

Estoy planeando poner estos registros de desplazamiento en serie con 6 por canal desde mi microcontrolador.

El 74HC595 tiene una frecuencia de conmutación de 100 MHz.

Me han dicho que tendré que hacer girar el Globo a unas 1500 RPM (25 por segundo)

El plan es usar un Arduino para el microcontrolador pero estoy abierto a sugerencias.

Mis preguntas son:

  • ¿Existe un chip más adecuado que el 74HC595 para este proyecto?
  • Además del Arduino, ¿hay un microcontrolador más adecuado para este proyecto?
  • No quiero apagar los LED del microcontrolador, así que voy a necesitar alimentación externa. ¿Cómo haría para hacer esto?
  • Con 6x 74HC595 en serie, ¿qué tan rápido podría cambiar todos los colores de los LED en este canal?
  • Con 12x 74HC595 en serie, ¿qué tan rápido podría cambiar todos los colores de los LED en este canal?
@davidcary, ¿eres el mismo David Carrie que conocí en Vancouver Hack space (VHS) el año pasado?
Ojalá lo fuera: las fotos de ese espacio que veo en Internet se ven increíbles. Me gustaría iniciar un espacio así en Tulsa. Por desgracia, no he estado en Canadá en años.
@davidcary aquí hay uno en Tulsa, parece más software que hardware, pero sería un buen comienzo. hackerspaces.org/wiki/Free_Information_Exchange_Foundation

Respuestas (3)

1. Un montón de chips 74HC595 funcionarán muy bien. Otros chips que también funcionarían igual de bien y quizás un poco mejor se enumeran en: ¿Qué chip SIPO es mejor, 74HC4094 o 74HC595 u otro?

2. El Arduino es una excelente opción para la creación de prototipos, especialmente si se siente cómodo usando gcc. Tal vez sería más rápido usar uno por ahora. Por desgracia, sospecho que pronto escribirá código para esta pantalla POV que necesita más RAM de la que Arduino tiene disponible; en ese momento, (a) use uno o más trucos para reducir la RAM necesaria, o (b) agregue algunos RAM externa, o (c) transferir el código a algún otro microcontrolador con más RAM (¿quizás el ATMEGA1284?).

El Parallax Propeller es una excelente opción para una pantalla POV de alta resolución: tiene un orden de magnitud más de RAM interna (32 KB de RAM) que el ATmega238 en Arduino. (¿Hay algo que pueda hacer para respaldar la transferencia de gcc a Propeller?)

Algunas personas prefieren "píxeles cuadrados". Seguro que ya sabes que la distancia alrededor del ecuador de una esfera es el doble que la distancia de polo a polo (el ecuador de la Tierra es un poco más del doble). Dado que tiene 64 píxeles desde el polo sur hasta el polo norte, puede elegir recargar una nueva "línea" vertical de píxeles 2*64 = 128 veces por revolución para obtener 128 "píxeles cuadrados" en el ecuador. La forma más sencilla de hacerlo es almacenar el fotograma completo sin comprimir en la RAM. Eso requiere 64*128 píxeles * 3 bits/píxel = 24 576 bits = 3 072 bytes, más unos pocos bytes de RAM para otras variables del programa. Por desgracia, el Atmel ATmega328 en Arduino solo tiene 2 048 bytes de RAM.

Pantallas POV anterioresmicrocontroladores usados ​​con un orden de magnitud (!) menos RAM que esto. Así que la gente ha desarrollado una variedad de trucos que puedes usar para solucionar esto. Un truco: solo encienda la mitad "frontal" del globo durante el tiempo que puede ver los LED, luego apague todos los LED (o déjelos en un color constante) durante la mitad "posterior" que no puede ver directamente ver los LED. Eso reduce a la mitad la cantidad de RAM que necesita, por lo que cabe en el Arduino. Si no te gusta ese truco, hay otros trucos que puedes usar que son menos obvios. Otro truco: Guarda la imagen en la memoria flash del programa. El Arduino tiene suficiente memoria de programa flash para almacenar varios marcos de 3 072 bytes. Otro truco más: use texto ASCII para almacenar el texto que desea mostrar, luego use la memoria de programa flash para almacenar la "ROM del generador de caracteres" datos. Estoy bastante seguro de que hay otros trucos POV...

3. Si estuviera construyéndolo, alimentaría el Arduino y los chips 74HC595 desde una gran fuente de alimentación, y alimentaría el motor que hace girar el POV desde una fuente de alimentación separada.

Solo después de que tuviera todo ese trabajo, consideraría un sistema de suministro de energía separado más complicado. (En principio, si tiene una fuente de alimentación conmutada "roja" separada cuyo +V solo está conectado a chips 74HC595 que a su vez solo están conectados a LED rojos, puede ajustar independientemente su voltaje de salida para minimizar la potencia total y la producción de calor de el sistema, pero parece innecesariamente complicado.)

4. y 5. Quizás la forma más sencilla para que el Arduino controle la pantalla POV es conectar en cadena los 24 chips 74HC595 en una sola cadena larga y luego usar la biblioteca SPI de Arduino . Eso requiere 192 pulsos de reloj para registrar la nueva columna de datos, y luego un pulso en el RCLK (también conocido como pulso de trama, SS, etc.) para comenzar a mostrar esos nuevos datos. De acuerdo con un tutorial de interfaz Arduino a SPI , la velocidad de reloj SPI más rápida es la velocidad del sistema / 4. Por lo tanto, el Arduino de 16 MHz puede generar un SPI CLK de 4 MHz. Si lo actualiza con un cristal de 20 MHz, puede obtener un SPI CLK de 5 MHz. Si puede obtener su programa lo suficientemente rápido para mantenerse al día con el hardware SPI, puede sacar una nueva columna, en el mejor de los casos, en 5 MHz / 193 pulsos, por lo que la velocidad máxima teóricamente posible es de 25 907 columnas/segundo.

A la frecuencia de actualización estándar de una película de dibujos animados de 24 fotogramas por segundo (que parpadea notablemente, le gustaría algo mejor) y a 128 columnas/fotograma para obtener píxeles "cuadrados" en el ecuador (es posible que desee más para obtener una mejor resolución) , eso da 24 cuadros/segundo * 128 columnas/cuadro = 3072 columnas/segundo.

Hay casi un orden de magnitud de espacio para respirar entre "la velocidad que desea": 3072 columnas/segundo, y "la velocidad que es completamente imposible en el hardware de Arduino": 25 908 columnas/segundo. Con suerte, eso te da suficiente espacio.

Algunas personas piensan que puede obtener una frecuencia de actualización de columna más rápida reorganizando los chips 74HC595 en 2 o más cadenas y cargando todas las cadenas en paralelo. Algunas personas son así: ven pines sin usar en el Arduino y están ansiosos por usarlos para algo . Pero puede ser contraproducente: el hardware SPI solo está conectado a un conjunto de pines en el Arduino, por lo que las cadenas enganchadas a cualquier otro pin deben cargarse con un software de "golpe de bits" emulado, que invariablemente será más lento y use más tiempo de CPU que el hardware SPI incorporado.

Tenga en cuenta que para obtener colores que no sean solo apagado, blanco, rojo, verde, azul, amarillo, cian y fucsia, deberá hacer su propio PWM si solo está usando un bit de registro de desplazamiento para controlar cada componente LED . Deberá utilizar PWM cada bit a medida que cambia cada grupo, por lo que deberá tener esto en cuenta para su frecuencia de actualización, y también hará que su código sea un poco más complejo.

Alternativamente, podría usar un IC como el TI TLC5947, que hará 24 canales de PWM, según los bits que cambie. http://focus.ti.com/lit/ds/symlink/tlc5947.pdf

Con esta solución, necesitaría cambiar 12 bits (en lugar de 1) para cada canal, pero se encargará del PWM por usted, por lo que puede ser una solución que valga la pena.

Secundo esto. Esta familia de controladores LED es realmente agradable: elimina la necesidad de resistencias limitadoras de corriente y facilita el uso de suministros separados. La parte de 24 salidas se alinearía muy bien con sus LED. Tal vez considere un chip con múltiples E/S SPI.
¿Funciona PWM en una pantalla POV giratoria?
@davidcary Sí, puede usar PWM en una pantalla POV
Todas las pantallas giratorias mecánicas que he visto hasta ahora dan como máximo los 8 colores: CMYK + RGB + W que mencionaste. Los ~ 7000 kbits/segundo para obtener un color completo (en lugar de ~ 600 kbits/segundo para obtener 8 colores) parece difícil para un Arduino, pero podría ser una característica adicional interesante.

Digamos que necesita 500 actualizaciones por rotación. Eso es 500*192*25 'cambios' por segundo, eso es solo una frecuencia de cambio de 2,4 MHz, dividida por 6 canales = frecuencia de cambio de 400 kHz.

Esto se puede lograr con arduino (se prefiere 20Mhz), pero requiere una programación y sincronización cuidadosas.

Así que para sus preguntas:

1) Supongo que no. Los registros de 8 bits requerirían un enrutamiento de PCB complicado

2) Si tuviera 24 salidas, sería más fácil. Además, para una pantalla tan grande, sería bueno tener suficiente memoria interna para almacenar framebuffer para facilitar la programación. Como mínimo, necesitaría una memoria de 16 kb, que no es algo que pueda encontrar en los AVR de 8 bits. Los ARM de rango medio pueden ser mejores, pero más difíciles de desarrollar.

3) Bueno, no lo eres. Está utilizando energía de 595, no son muy potentes, pero suficientes en el caso más simple (consulte la hoja de datos para el modelo específico que tiene).

4,5) Más rápido de lo necesario :-)