1 votos

Atmega328p PWM sobrecalentamiento y parpadeo

Estoy intentando construir un control de regulación para una tira de LEDs RGBW de 24V utilizando potenciómetros como entradas analógicas. Es bastante similar al ejemplo de analogWrite() en el sitio web de arduino (arduino.cc/es/Referencia/AnalogWrite), pero con cuatro entradas y salidas en lugar de una.

Estoy usando el IDE de Arduino con el bootloader optiboot (optiboot_atmega328_pro_8MHz.hex) para compilar y flasheo los chips usando avrdude desde los pines GPIO de una Raspberry Pi. Los fusibles están ajustados a:

efuse: 0x05
hfuse: 0xd6
lfuse: 0xe2

Configurar

Fritzing diagram of my circuit

Código

int RGBW_LED[4] = {10, 9, 5, 6};
int RGBW_POT[4] = {A5, A4, A3, A2};
int RGBW_VAL[4] = {0, 0, 0, 0};

void setup()
{
  for (int i = 0; i < 4; ++i)
  {
    pinMode(RGBW_LED[i], OUTPUT);
    pinMode(RGBW_POT[i], INPUT);
  }
}

void loop()
{
  for (int i = 0; i < 4; ++i)
  {
    RGBW_VAL[i] = 0;
    analogRead(RGBW_POT[i]);     // read once and discard
    for (int j = 0; j < 5; ++j)  // then calculate mean to avoid flickering
    {
      RGBW_VAL[i] += analogRead(RGBW_POT[i]);
    }
    RGBW_VAL[i] /= 20;  // divide by 5 for mean, then by 4 to scale to output range [0, 255]
    analogWrite(RGBW_LED[i], RGBW_VAL[i]);
  }
}

Problemas

  1. Parpadeo aleatorio en (diferentes) salidas al girar los potenciómetros
  2. El controlador se "bloquea" aleatoriamente y necesita ser reiniciado cuando se giran simultáneamente los potenciómetros para el rojo/verde y el azul/blanco. Esto no parece ocurrir en otras combinaciones.
  3. El controlador se calienta (creo que es por el lado de los pines de salida) cuanto más potenciómetros encienda. Esto también lleva a que el microcontrolador se cuelgue y necesite ser reiniciado.

Lo que he hecho hasta ahora

La configuración parece funcionar bien siempre y cuando sólo esté girando un potenciómetro. También he "resuelto" más o menos el problema 1 calculando la media en código y escribiéndola en los pines de salida. Me parece más bien una solución, pero al menos es funcional. Si hay una solución adecuada, soy todo oídos.

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 sólo tiene tres relojes PWM independientes no puedo "engañar" a este sin embargo.

No tengo ni idea de lo que está pasando con el problema 3 . He probado a utilizar una fuente de alimentación independiente (VCC de la Raspberry Pi) para el controlador (dejando así de lado el regulador de tensión y separando los circuitos), eso no cambió nada. He probado a quitar la fuente de 24V y la tira de LEDs - mismo resultado. Lo único que evitó que los pines se calentaran fue quitar los transistores, pero estoy bastante seguro de que están cableados correctamente y como también sucede sin la fuente de 24V no puedo imaginar que la corriente esté fuera de las especificaciones.

He intentado modificar el código añadiendo retardos, regulando el valor máximo de analogWrite(), y conmutando la alimentación de los potenciómetros antes y después de la lectura conectándolos a una salida digital en lugar de a VCC, todo ello sin resultado.

También he probado a utilizar un chip Atmega328p diferente (tengo unos cuantos por ahí) por si acaso, y definitivamente no se debe a un chip defectuoso.

Se agradece cualquier ayuda. ¡Muchas gracias!

EDITAR:

He incluido el diagrama del circuito a continuación. Tenga en cuenta que he omitido el regulador de voltaje y he utilizado fuentes de alimentación de 5V y 24V por separado. He probado el circuito con ambas configuraciones y no hay ninguna diferencia. Como ya he dicho, incluso puedo desconectar la fuente de 24V y la tira de LEDs (cortar la línea dibujada a mano en el diagrama) y el calentamiento sigue produciéndose.

Circuit diagram

3voto

JukesOnYou Puntos 398

Parpadeo aleatorio en (diferentes) salidas al girar los potenciómetros

Está escribiendo continuamente los registros de salida PWM. No haga esto.
En su lugar, añada un paso bajo filtrar y leer los análogos de forma regular. Cada 10 milisegundos por ejemplo. Pon esto en el filtro, y usa la salida del filtro para tu PWM.

El mejor momento para actualizar los valores PWM es el desbordamiento del temporizador (recarga). Mira si puedes conseguir esta interrupción.

El controlador se "bloquea" aleatoriamente y necesita ser reiniciado cuando se giran simultáneamente los potenciómetros para el rojo/verde y el azul/blanco. Esto no parece ocurrir en otras combinaciones.

El controlador se calienta (creo que es por el lado de los pines de salida) cuanto más potenciómetros encienda. Esto también lleva a que el microcontrolador se cuelgue y necesite ser reiniciado.

Estos están relacionados.
Has olvidado las resistencias de base de los transistores, por lo que probablemente estés sobrecargando los pines de salida.

Además, no veo ningún condensador. Esto puede hacer que el ruido de conmutación del PWM de los LED's haga que el chip se comporte de forma errática. Usted ha omitido esta parte, pero ¿está seguro de que todo esto es correcto?

0voto

Jeremy Puntos 424
  1. Si se utiliza un pero como interruptor asegúrese de que hay una resistencia de base.

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

  3. En tu código asegúrate de que tienes tiempo suficiente para que el pwm se ejecute completamente. Por ejemplo, inserte un retardo allí. O utilizar el pwm alineado al centro. O te encuentras con fallos.

  4. Aprende a dibujar un esquema.

-3voto

Chris Puntos 214

Me temo que has matado a tu micro. El Atmega no tiene que calentarse en absoluto. Si lo hace significa que el atmega está dañado. Incluso tengo uno (lo he matado por un flujo de corriente demasiado grande y es el caso aquí también creo) que se calienta hasta unos 90-100C entonces se detiene, se enfría un poco - comienza de nuevo (continuando el programa original), se detiene de nuevo ......

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X