Atmega328p PWM sobrecalentamiento y parpadeo

1

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

  1. Parpadeoaleatorioensalidas(diferentes)alactivarpotenciómetros
  2. 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.
  3. 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.

El

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

    
pregunta mrbaozi

3 respuestas

3
  

Parpadeo aleatorio en (diferentes) salidas al activar potenciómetros

Está escribiendo continuamente los registros de salida PWM. No hagas esto.
En su lugar, agregue un filtro de paso bajo y lea los análogos regularmente. Cada 10 milisegundos por ejemplo. Ponga esto en el filtro y use la salida del filtro para su PWM.

El mejor momento para actualizar los valores de PWM es el desbordamiento del temporizador (recargar). Vea si puede obtener esta interrupción.

  

El controlador "se bloquea" aleatoriamente y debe reiniciarse cuando se giran simultáneamente los potes 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.

Esos están relacionados.
Olvidó las resistencias base en los transistores, por lo que probablemente esté sobrecargando los pines de salida.

Además, no veo condensadores en absoluto. Esto puede hacer un ruido de conmutación significativo desde el PWM de los LED para hacer que el chip se comporte de forma errática. Ha omitido esta parte, pero ¿está seguro de que todo esto es correcto?

    
respondido por el Jeroen3
0
  1. Si está utilizando un pero, como interruptor, asegúrese de que haya una resistencia de base.

  2. Asegúrese de que el interruptor sea adecuado para la carga.

  3. En tu código, asegúrate de tener tiempo suficiente para que el pwm ejerza plenamente. Por ejemplo, inserte un retraso allí. O para usar el centro alineado pwm. O te encuentras con fallos.

  4. Aprende a dibujar un esquema.

respondido por el dannyf
-3

Me temo que has matado a tu micro. Atmega no tiene que calentarse en absoluto. Si es así significa que la atmega está dañada. Incluso tengo uno (lo he matado por un flujo de corriente demasiado grande y creo que es el caso aquí) que se calienta en torno a los 90-100 ° C y luego se detiene, se enfría un poco - comienza de nuevo (continúa el programa original) , se detiene de nuevo ......

    
respondido por el P__J__

Lea otras preguntas en las etiquetas