Parpadeo en el controlador PWM PCA9685 con LED RGB de 3 W y Picobuck

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.

ingrese la descripción de la imagen aquí¿Qué estoy haciendo mal?

Algunas fotos de la configuración experimental serían útiles. Puede intentar acortar sus cables y medir algunos voltajes y formas de onda para nosotros.
@Daniel Agregué una foto de la configuración que tengo. De todo lo que he leído sobre el PCA9685, así es como debería configurarse. El Picobuck solo controla los LED en función de un valor PWM. Casi funciona, el brillo funciona, el color funciona solo que a veces hay un parpadeo.
Es difícil decir mucho, pero es posible que desee mover su terreno al PicoBuck desde el desglose de Raspberry Pi al desglose de PWM. Si su suministro de alta potencia no está aislado, debe considerar cómo eso también puede influir en las cosas.
Esos son algunos CONDUCTORES LARGOS... cuanto más largo sea el cable y más 'bucles' tenga, mayor será la inductancia del cable (resistencia a las corrientes cambiantes). Además de las 2 resistencias y 2 transistores por LED en el circuito de mi respuesta, es posible que desee acortar esos cables (los más importantes son los cables de PWM a PicoBuck) y tal vez agregar un condensador a cada salida de LED del picobuck.
Por cierto, esos son solo cables de puente estándar de macho a hembra. Quería probar que el circuito funciona antes de soldar permanentemente cables más pequeños para empaquetar la lámpara. @RobhercKV5ROB
Tengo exactamente este problema en este momento, la misma placa PWM pero usando MOSFET para conducir LED de 3W. ¿Descubriste cuál era el problema o encontraste una solución?
@pcdev lo siento, nunca pude averiguar cuál es el problema. Construí un circuito permanente sin esos cables de puente (así que solo cables cortos soldados). Jugando con la configuración de PWM, pude reducir el parpadeo, pero no desapareció por completo con un brillo MUY bajo. Puedo enviarte mi código fuente cuando esté en casa si quieres.
@Mangist hmm, gracias por eso. Acabo de encontrar esta publicación que parece sugerir que en realidad es una falla en el propio PCA9685 con ciertos valores de LEDn_ON y LEDn_OFF que conducen a ciclos perdidos. ¿Qué biblioteca PCA9685 usó? Estoy usando este , tal vez haya algo que pueda modificarse allí.
Encontré más información y logré resolver mi problema desactivando el equilibrio de fase. Esto puede tener otras implicaciones, pero por ahora se ajusta a mis propósitos. Vea mi nueva respuesta a continuación.

Respuestas (3)

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.

¿Estoy usando esta biblioteca para Node.js y no hay una opción de balance de fase? github.com/101100/pca9685/blob/master/src/pca9685.ts
Hmmmm, interesante, no había visto eso antes. ¿Está utilizando el mismo valor onStep para todos los canales (preferiblemente 0)? ¿A qué método llamas para cambiar el deber? Otra cosa que noté fue que algunos canales parpadean más que otros, presumiblemente porque están apagados por más tiempo durante el reinicio del ciclo, mientras que otros no parecen parpadear mucho. ¿Estás notando eso?

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.

  • Cuando baja el ciclo de trabajo para obtener salidas realmente bajas, puede tomar varios pulsos para cargar suficientemente la tapa a> = 1.5V.
  • Esto puede formar efectivamente otro oscilador (similar a un osc de diente de sierra) donde la tapa se carga durante varios ciclos de pulso antes de alcanzar el voltaje de umbral del PicoBuck y "disparar" el PicoBuck para que parpadee el LED, hasta una frecuencia lo suficientemente baja como para causar un parpadeo visible como el ciclo de trabajo alcanza valores suficientemente bajos.

Posibles soluciones:

  • Si hay un capacitor fácilmente removible en su salida PWM, retírelo (o al menos reemplácelo con uno de valor significativamente menor).
  • 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:Ejemplo de amplificador de onda cuadrada

  • 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.

No hay otros componentes en el circuito (ver la foto que agregué). No estoy seguro de qué es un disparador Schmitt/P-FET, pero puedo leer un poco y ver si eso ayuda. Desafortunadamente, no tengo un osciloscopio para probar la onda cuadrada. El suministro de 12 V al Picobuck es constante en lo que respecta a un multímetro, pero eso es todo lo que sé. ¡Tengo experiencia en software y finalmente siento cómo debe ser para los muchachos que hacen preguntas allí! Lo siento, esto es bastante nuevo para mí, soy un principiante con la electrónica.
@Mangist a [Scmitt Trigger] ( en.wikipedia.org/wiki/Schmitt_trigger ) es un dispositivo digital que se 'activa' cuando su entrada analógica sube o baja más allá de un umbral preestablecido; cambiando así un voltaje de entrada que cambia lentamente a un patrón de onda cuadrada abrupto de encendido/apagado. Un [P-FET, P-MOSFET o P-Channel FET/MOSFET] ( en.wikipedia.org/wiki/MOSFET ) es un tipo de transistor que a menudo se usa como un "interruptor de estado sólido" en los circuitos; cuando el voltaje de su pin de 'puerta' baja con respecto al pin de fuente. Agregaré un diagrama de circuito rápido a mi respuesta para ayudar un poco.
@Mangist, ¿alguna actualización para nosotros, o está atascado esperando que se envíen las piezas?
El objetivo de usar el Picobuck era eliminar la necesidad de circuitos adicionales. Se supone que solo debe controlar los LED en función de la entrada PWM. Puede que tenga que intentar construir ese circuito de arriba y ver si detiene el parpadeo. Intentaré verificar el voltaje de suministro con mi multímetro, pero no tengo un osciloscopio. Cambiaré a usar una batería de 9V que será más estable.

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:

  1. Pruebe el enfoque de control constante: en lugar de usar el controlador PWM, aumente 1 V con un divisor de voltaje y utilícelo como entrada PicoBuck.
  2. ¿Qué tan elegante es tu multímetro? Si tiene configuraciones de retención para el voltaje mínimo/máximo, colóquelo entre GND e IN1 del PicoBuck y verifique que el voltaje mínimo sea lo suficientemente bajo y el máximo lo suficientemente alto (consulte las Condiciones de funcionamiento recomendadas en la hoja de datos). Y si tiene True RMS, mida el voltaje promedio para ver si está en el estadio de béisbol correcto.

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

No estoy seguro de cómo aumentar 1V con un divisor de voltaje. Solo estoy usando el método PWM basado en el PCA9685 que genera un PWM @ 3.3V. Eso debería ser más que el umbral de 1,5 V para que Picobuck lo acepte como una entrada PWM. Mi multímetro no tiene esas funciones de mínimo/máximo, pero tengo acceso a un osciloscopio, excepto que el tipo que sabe cómo usarlo está ausente. Voy a probar lo que sugieres y pondré un condensador grande entre Picobuck y GND. ¿Alguna sugerencia sobre uF? ¿El capacitor no suavizaría la señal PWM y anularía el punto de usar PWM?
Un divisor de voltaje es algo simple: coloque dos resistencias en serie entre tierra y 3,3 V. El voltaje entre las resistencias es entonces R1/(R1+R2). Lo sugiero para tratar de reducir el origen del problema. Si sigue parpadeando, entonces el problema está en el PB o en el LED.
Un osciloscopio es incluso mejor. Para el capacitor, hagamos algunos cálculos. Digamos que la frecuencia que tiene es de 1000 Hz y estamos dispuestos a permitir una ondulación del 5%. Eso significa que la constante de tiempo RC T = RC debe ser tal que exp(-0.001 / T) > 0.95. Dado que log(0.95) es aproximadamente -0.05, obtenemos 0.001 / T < 0.05 y al resolver T obtenemos T > 0.02. Pruebe, por ejemplo, con una resistencia de 1 kOhm y un límite de 22 uF en serie. O 100 ohmios y 220 uF. Lo que tengas a mano en ese estadio.
¿Está diciendo que coloque un condensador y una resistencia en serie y luego conéctelos entre el pin de entrada Picobuck y tierra? ¿Como PWM----Cap----Resistor----Gnd?