Espero que alguien aquí tenga algo de experiencia con el controlador PCA 9685 PWM (16 canales, interfaz I2c). Hasta ahora todo funciona bastante bien después de conectar el circuito correctamente. Estoy usando un controlador LED Picobuck para controlar este LED RGB de alta potencia .
El PCA9685 permitió una frecuencia PWM de entre 40 Hz y aproximadamente 1500 Hz. El valor predeterminado es 200 Hz. Después de configurar esta frecuencia, puedo elegir el intervalo de pulso activado y desactivado entre 0 y 4096 (que es la resolución del pulso). Entonces, si quiero que el LED brille al máximo, puedo configurar Encendido = 0 y Apagado = 4095. Esto funciona bien y obtengo un buen LED sólido.
Sin embargo, si empiezo a atenuar uno de los LED para decir el 25% de su brillo, configuraré On = 0, Off = 1000. Esto atenúa el LED pero a veces comienza a parpadear. He probado muchas combinaciones diferentes de tiempos de encendido/apagado y frecuencias PWM. Incluso a 1000 Hz parpadea y empeora cuando empiezo a usar los 3 componentes RGB.
Conduzco el Picobuck con una fuente separada de 12 V CC y tiene un disipador de calor. ¿Necesito una resistencia o un condensador en algún lugar del circuito para detener el parpadeo? Todo lo que estoy tratando de hacer es que el LED se pueda atenuar de 0 a 100 % sin ningún parpadeo, para poder combinar los colores rojo, verde y azul.
Aquí hay una imagen de la configuración, no hay componentes adicionales, solo la placa PCA9685, Picobuck y el LED RGB. Los cables rojo/negro del Picobuck van a un suministro separado de 12 V CC.
Tuve el mismo problema que el OP y encontré esta publicación en los foros de NXP que describe bien mi problema (¿y creo que el problema del OP?). En cualquier caso, esta página de ESE es uno de los primeros sitios que aparece al buscar PCA9685 flickering LEDs
, por lo que pensé en agregar mi solución aquí. Del foro NXP:
Mirando la hoja de datos ( http://www.nxp.com/docs/en/data-sheet/PCA9685.pdf ) fig. 11 en la página 20 esto se ve de acuerdo con el diseño, el problema es que cada vez que LEDn_ON > LEDn_OFF y el registro LEDn_OFF se actualizan, el dispositivo salta una fase de salida completa, apagando la salida independientemente de los registros; mire el ciclo vacío entre "registro (s) actualizado(s) en este ciclo" y "producto(s) actualizado(s) en este ciclo". No hay ciclo vacío cuando LEDn_ON < LEDn_OFF como se ve en la fig. 10 en la página anterior.
Entonces, no es un problema eléctrico, o un problema con el Picobuck (estoy usando MOSFET simples), es un problema con el chip PCA9685 en sí mismo: mantener la salida apagada durante (¿el resto de?) un ciclo cada vez que el deber se cambia si se cumplen ciertas condiciones de registro y si el flanco ascendente no está sincronizado con el temporizador interno del chip.
El comentario final de este cartel fue:
¿Hay alguna forma de evitar este tipo de comportamiento y seguir beneficiándose del equilibrio de carga de salida?
Alerta de spoiler: al momento de escribir esto, aún no hay respuesta , pero esto me llevó a investigar e intentar apagar lo que sea que sea este "equilibrio de carga". Estoy usando esta biblioteca para manejarla, y después de buscar en la fuente, intenté cambiar la declaración del objeto PCA9685 que se encuentra en la muestra de esto:
PCA9685 pwmController;
a esto:
PCA9685 pwmController(Wire, PCA9685_PhaseBalancer_None);
Y... ¡ Suave como la mantequilla!
Entonces, ¿qué es el equilibrio de carga y por qué debería importarme?
Bueno, parece ser una forma de escalonar el flanco ascendente de la señal PWM en cada canal, presumiblemente para aliviar los cambios de corriente instantáneos de los 16 canales que aumentan a la vez y potencialmente disminuyen a la vez si el brillo/deber de cada canal es igual. . Las otras opciones en la biblioteca son *_Lineal , que escalona las formas de onda con un retraso fijo para cada canal desde el anterior, *_Weaved , que intercala los retrasos en los canales, "equilibrando mejor las primeras salidas" (lo que sea que eso signifique) y * _Count que no está implementado por la biblioteca y funciona exactamente igual que *_None .
Cualquier escalonamiento de la fase da como resultado un parpadeo tan pronto como se cambian los niveles, y esto también puede tener un efecto en rangos de ciclos de trabajo particulares basados en la frecuencia PWM.
Las implicaciones, supongo, son un consumo de energía inestable y una EMI más fuerte. Supongo que esto significa que la energía debe almacenarse en un búfer con un buen límite considerable, pero no estoy seguro de qué hacer (si es que hay algo) con respecto a la EMI potencial: ¿es un problema? ¿Hay algún otro problema a tener en cuenta al desactivar el equilibrio de fase? Si alguien más técnico puede comentar sobre esto, estaría muy agradecido.
Desde la página que vinculaste para tu PicoBuck:
This PicoBuck supports PWM control so long as the signal is above a minimum of ~1.5V and each LED is driven to ~350mA.
Lo que podría estar sucediendo aquí es que hay una capacitancia (ya sea un límite intencional o una capacitancia parásita... lo más probable es que sea un límite) entre su salida PWM de onda cuadrada y la entrada correspondiente a su PicoBuck.
Posibles soluciones:
Intente agregar un NPN y un disparador schmitt/P-FET (o un amplificador operacional con multiplicador de alto voltaje) entre la salida PWM y la entrada del PicoBuck para "cuadrar" la forma de onda de la señal lo más cerca posible de un limpio +5V/ Onda cuadrada de 0V, señal de baja impedancia.
Aquí hay un ejemplo que usa alrededor de $ 2 en componentes por LED:
Verifique si hay irregularidades en el voltaje de suministro en los pines de suministro de su controlador PWM, o lo mismo para el PicoBuck. Sospecho que su aviso de "empeora [ting] cuando [usted] usa los 3 componentes RGB" es más probable que sea más notable debido a la proximidad/comparación visual, en lugar de afectar la salida 'real'. Sin embargo, desde que lo mencionó, verificar si hay problemas de voltaje de suministro sería el primer lugar para buscar algo que pueda causar eso.
Al leer la hoja de datos de AL8805 (el chip en PicoBuck), hay dos modos de controlarlo: PWM o un voltaje de control constante. Es posible que el parpadeo se deba a que el chip se confunde con lo que estás intentando hacer.
Un par de cosas de solución de problemas para probar:
Experimental: si el control de voltaje constante funciona y no puede hacer que PWM funcione, coloque un gran capacitor entre la entrada PicoBuck y tierra, y tal vez una pequeña resistencia para limitar la corriente. La idea es suavizar la señal PWM en un voltaje de control correspondiente. Descargo de responsabilidad: no probado, podría freír el controlador PWM. Mirando la hoja de datos parece poco probable, pero proceda con precaución.
La hoja de datos de referencia: http://cdn.sparkfun.com/datasheets/Components/LED/AL8805.pdf
Daniel
Jon
Daniel
Robherc KV5ROB
Jon
pcdev
Jon
pcdev
pcdev