Necesito enviar una cadena de bits a un conjunto encadenado de LED RGB, cada uno de los cuales tiene su propio controlador IC. La hoja de datos para ese IC, el WS2811, está aquí .
El protocolo es bastante simple: cada bit, tanto el 1 como el 0, se envían como alto y bajo, con diferentes proporciones de espacio de marca, y luego se enlazan entre sí.
A 400 kbps, el espacio de marca es el siguiente:
- Binario 1: 1.2us alto seguido de 1.3us bajo (cada +/- 150ns)
- Binario 0: 0.5us alto seguido de 2.0us bajo (cada +/- 150ns)
Los datos pueden enviarse a 400kbps o 800kbps. No me molesta cuál uso, pero espero que 400kbps sea más fácil de implementar. (A 800 kbps, los tiempos anteriores se reducen a la mitad).
Mi pregunta: ¿Cómo se podría implementar esto? Probablemente esté usando una MCU PIC de 8 bits a 20MHz (5MIPs) para determinar qué datos se enviarán, y estoy buscando por el equivalente de un USART IC en el que la MCU podría confiar para transmitir datos con la codificación anterior.
Posibles soluciones
Hay tres formas en las que me imagino enviar ese tipo de datos a esa velocidad:
- Encontrar un IC / ASIC que esté dedicado a este propósito.
- Usar una segunda MCU dedicada a recibir datos de la MCU primaria y convertirla directamente a la codificación PWM anterior.
- Creación de un transmisor dedicado a partir de circuitos integrados de lógica TTL / CMOS o similar.
Para el punto 1, no puedo encontrar ningún IC que lo haga. ¿Existen?
Para el punto 2, tengo ideas sobre cómo podría funcionar, pero hasta ahora no tengo soluciones. Una solución: golpear los bits sería muy difícil, ya que debe escribirse en un ensamblador dado los requisitos de tiempo. Otra solución, aunque no es capaz de alcanzar la resolución de 100 ns para que la temporización de la señal PWM coincida con las especificaciones de la hoja de datos, podría configurar el USART en una MCU PIC para transmitir de forma sincrónica, excepto que cada 4 bits transmitidos sería una forma de enviar. un bit PWM. Entonces, para enviar datos PWM de 400 kbps, el USART tendría que ser capaz de 400 x 4 = 1.6Mbps. Luego, para enviar un binario 1 de PWM, el USART enviaría HHLL, y para enviar un binario 0 de PWM, el USART enviaría HLLL. Esto apenas satisfaría los requisitos de tiempo de +/- 150ns, un margen de 25ns. Y no he encontrado un PIC que pueda transmitir tan rápido en serie de todos modos.
Entonces, en este momento, la opción 3 es mi única opción: construir hardware dedicado a partir de circuitos integrados lógicos. Por ejemplo:
- Construya un registro de desplazamiento de 25 bits para generar el PWM, requerido para un solo bit. Luego, los circuitos que llenan el registro en función de si debe transmitirse un 1 o un 0 binarios. Y como esto aún sería muy intensivo en la MCU, agregaría quizás un pestillo de 8 bits en el que la MCU podría escribir, y permitiría que los circuitos adicionales procesaran los 8 bits uno a la vez, para cada uno codificar el bit en el Registro de desplazamiento de 25 bits como ciclo PWM.
- Como en el caso anterior, pero reemplace el registro de desplazamiento de 25 bits con un monoestable que genera un impulso largo o corto, y otro que carga un nuevo bit cada 2.5us.
- Al usar un IC de memoria que actúa como una tabla de búsqueda, tal vez (con circuitos adicionales) se le pueda dar un byte para que transmita desde la MCU y devuelva datos que un circuito podría convertir en datos en serie como salida PWM.
En resumen, ¡no puedo encontrar una buena solución! Parece un montón de trabajo para un problema tan simple. ¿Cómo lo harías?