Parpadeo aleatorio en los LED WS2812B

Estoy tratando de conducir una tira de LED WS2812B con un Beaglebone Black (revC). Debido a que los LED esperan una señal de datos a 5 V y las salidas BBB a 3,3 V, se requiere algún tipo de cambio de nivel.

Sin embargo, cuando se usa un chip 74LVC245 o 74AC245 para ajustar el nivel de voltaje, la tira comienza a parpadear de manera errática, como si la señal estuviera corrupta o no estuviera en el nivel correcto.

La tira funciona si la conecto directamente a la salida de 3,3 V porque 3,3 V es lo suficientemente alta como para registrarse como uno, pero la señal se desvanece después de unos 160 LED y se reanuda el comportamiento aleatorio.

Cosas que he probado:

  • Conectando 3.3V y GND a los cambiadores de nivel y confirmando que la salida es de 5V y GND, respectivamente.
  • Agregar un capacitor de 100uF entre las líneas de alimentación y tierra para suavizar la fuente de alimentación.
  • Tocando el plano de tierra. Encontré esto por accidente, pero parece que puedo solucionar el problema del parpadeo tocando el plano de tierra del circuito. Sospeché que esto se debió a que introduje capacitancia en el circuito, por lo que intenté agregar un capacitor de suavizado.
  • Alimentando los LED tanto desde la misma fuente de alimentación de 5V a 2A, como desde diferentes fuentes de alimentación.

En total, estoy perplejo. Ya he probado todo lo que se me ocurre, pero nada ha funcionado.

La familia LVC es para 1.8-3.3V excepto para piezas PicoGate
Tocar fue algo que también me ayudó en mi caso. De todos modos, traducir 3V3 a 5V con transistor solo fue demasiado pobre. Tuve que usar 74ACT como se indica a continuación. Esto solucionó mi problema con el comportamiento errático de WS2812B.

Respuestas (2)

Si echa un vistazo a la hoja de datos 74AC245, límites garantizados de V_iH, especifica 3,15 V para 4,5 V Vcc y 3,85 V para 5,5 V Vcc. Debe utilizar la familia 74ACT con niveles de entrada TTL (0,8 V V_iL, 2,0 V V_iH independientemente de Vcc).

En otras palabras: no es posible una interfaz fiable entre la lógica CMOS de 3,3 V y 5 V. Pero entre 3,3 V CMOS y TTL (que siempre es de 5 V) es fácil.

O utilice un traductor de suministro dual .

Esto fue todo, gracias! Al leer las hojas de datos de los dos chips, no me había dado cuenta de que estaban diseñados para cambiar a 3.3V. Después de pedir un chip familiar 74ACT y probarlo, funcionó bien.

La línea de datos en una cadena de chips WS2812B no es un bus compartido como podría parecer. En su lugar, cada WS2812B retransmite cada bit que recibe por la línea con el voltaje Vcc completo, por lo que realmente no hay ningún "desvanecimiento" con respecto al voltaje a medida que avanza por una cadena. Si los primeros píxeles ven suficiente voltaje para ver el bit, todos los demás píxeles aguas abajo también deberían verlo.

Primero, me aseguraría de tener suficiente potencia inyectada a lo largo de la cadena. Puede probar esto moviendo la cuerda tenuemente con menos de, digamos, 20 de brillo para los tres colores. Si funciona bien con los colores tenues, es casi seguro que no tenga suficiente energía para llegar al final de la cadena debido a la caída de voltaje en las líneas eléctricas (no en las líneas de datos). Esas cadenas de PCB flexibles tienen una resistencia relativamente alta, y los chips WS2812B pueden usar hasta 0,25 vatios cada uno, por lo que la caída de voltaje a lo largo de una cadena de píxeles puede ser lo suficientemente alta como para que los píxeles al final no tengan suficiente energía cuando la corriente lo exige (y por lo tanto, la caída de voltaje en las líneas eléctricas) aumenta. La forma más fácil de solucionar esto es agregar cables que van desde la tira hasta la fuente de alimentación cada 2 metros más o menos.

Si todavía tiene descamación al final de la cuerda incluso usando colores tenues, entonces el siguiente lugar en el que miraría es en el momento de la señal que sale del Beagle-Bone. Es posible que no tenga suficiente espacio entre sus bits como se describe aquí...

http://wp.josh.com/2014/05/16/por-que-debe-dar-a-sus-bits-de-neopixel-espacio-para-respirar/

Una forma de probar esto es conectar la cadena a un Arduino y usar un código probado para intentar controlarlo. Si esto funciona, miraría la sincronización de la señal en el BeagleBone e intentaría agregar tal vez 100 ns de baja después de cada bit.

Informe de nuevo con lo que encuentre!