Estoy tratando de construir un control de atenuación para una tira de 24V RGBW-LED usando potenciómetros como entradas analógicas. Es bastante similar al ejemplo analogWrite () en el sitio web de arduino (arduino.cc/en/Reference/Analogwrite), pero con cuatro entradas y salidas en lugar de una.
Estoy usando el IDE de Arduino con el gestor de arranque optiboot (optiboot_atmega328_pro_8MHz.hex) para compilar y flashear los chips utilizando avrdude desde los pines GPIO de una Raspberry Pi. Los fusibles están configurados para:
efuse: 0x05
hfuse: 0xd6
lfuse: 0xe2
Configuración
Código
intRGBW_LED[4]={10,9,5,6};intRGBW_POT[4]={A5,A4,A3,A2};intRGBW_VAL[4]={0,0,0,0};voidsetup(){for(inti=0;i<4;++i){pinMode(RGBW_LED[i],OUTPUT);pinMode(RGBW_POT[i],INPUT);}}voidloop(){for(inti=0;i<4;++i){RGBW_VAL[i]=0;analogRead(RGBW_POT[i]);//readonceanddiscardfor(intj=0;j<5;++j)//thencalculatemeantoavoidflickering{RGBW_VAL[i]+=analogRead(RGBW_POT[i]);}RGBW_VAL[i]/=20;//divideby5formean,thenby4toscaletooutputrange[0,255]analogWrite(RGBW_LED[i],RGBW_VAL[i]);}}
Problemas
- Parpadeoaleatorioensalidas(diferentes)alactivarpotenciómetros
- Elcontrolador"se bloquea" aleatoriamente y debe reiniciarse cuando se giran simultáneamente las macetas para rojo / verde y azul / blanco. Esto no parece suceder en otras combinaciones.
- El controlador se calienta (creo que está en el lado de los pines de salida) cuantos más potenciómetros enciendo "encendido". Esto también hace que el microcontrolador se bloquee y sea necesario reiniciarlo.
Lo que he hecho hasta ahora
La configuración parece funcionar bien siempre y cuando solo esté girando un potenciómetro. También he solucionado más o menos el problema 1 calculando la media en el código y escribiéndolo en los pines de salida. Me parece más una solución alternativa, pero al menos es funcional. Si hay una solución adecuada, soy todo oídos.
Elproblema 2 parece estar relacionado con los mismos relojes PWM que se ejecutan en los pines 5/6 y 9/10, ya que la atenuación simultánea en diferentes combinaciones de pines parece funcionar. Dado que necesito cuatro controles PWM para RGBW y el Atmega328p solo tiene tres relojes PWM independientes, no puedo "engañar" a este.
No tengo idea de lo que está pasando con el problema 3 . He intentado usar una fuente de alimentación separada (VCC de la Raspberry Pi) para el controlador (por lo tanto, bajé el regulador de voltaje y separé los circuitos), eso no cambió nada. He intentado eliminar la fuente de 24 V y la tira de LED - mismo resultado. Lo único que impidió que los pines se calentaran fue la eliminación de los transistores, pero estoy bastante seguro de que están conectados correctamente y, como también sucede sin la fuente de 24 V, no puedo imaginar que la corriente esté fuera de especificación.
He intentado modificar el código agregando retrasos, regulando el valor máximo de analogWrite () y cambiando la potencia a los potenciómetros antes y después de leerlos conectándolos a una salida digital en lugar de VCC, todo en vano.
También he intentado usar un chip Atmega328p diferente (tengo algunos por ahí) por si acaso, y definitivamente no es debido a un chip defectuoso.
Cualquier ayuda sería apreciada! ¡Muchas gracias!
EDITAR:
He incluido el siguiente diagrama del circuito. Tenga en cuenta que omití el regulador de voltaje y usé fuentes de alimentación separadas de 5V y 24V. He probado el circuito con ambas configuraciones y no hay diferencia. Como se indicó anteriormente, incluso puedo desconectar la fuente de 24 V y la tira de LED (cortar la línea dibujada a mano en el diagrama) y el calentamiento sigue ocurriendo.