Atmega328p PWM Überhitzung und Flackern

Ich versuche, eine Dimmsteuerung für einen 24-V-RGBW-LED-Streifen mit Potentiometern als analogen Eingängen zu bauen. Es ist dem analogWrite()-Beispiel auf der Arduino-Website (arduino.cc/en/Reference/AnalogWrite) ziemlich ähnlich, aber mit vier Ein- und Ausgängen anstelle von einem.

Ich verwende die Arduino IDE mit dem Optiboot-Bootloader (optiboot_atmega328_pro_8MHz.hex) zum Kompilieren und flashe die Chips mit avrdude von den GPIO-Pins eines Raspberry Pi. Die Sicherungen sind eingestellt auf:

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

Aufstellen

Fritzing-Diagramm meiner Schaltung

Code

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]);
  }
}

Probleme

  1. Zufälliges Flackern an (verschiedenen) Ausgängen beim Drehen von Potentiometern
  2. Der Controller "stürzt" zufällig ab und muss zurückgesetzt werden, wenn gleichzeitig die Potis für Rot/Grün und Blau/Weiß gedreht werden. Dies scheint bei anderen Kombinationen nicht der Fall zu sein.
  3. Der Controller erwärmt sich (ich glaube, er befindet sich auf der Seite der Ausgangspins), je mehr Potentiometer ich "einschalte". Dies führt auch dazu, dass der Mikrocontroller abstürzt und zurückgesetzt werden muss.

Was ich bisher gemacht habe

Das Setup scheint gut zu funktionieren, solange ich nur ein Potentiometer drehe. Ich habe auch Problem 1 mehr oder weniger "gelöst" , indem ich den Mittelwert im Code berechnet und auf die Ausgangspins geschrieben habe. Es scheint mir eher ein Workaround zu sein, aber zumindest ist es funktional. Wenn es eine passende Lösung gibt, bin ich ganz Ohr.

Problem 2 scheint mit denselben PWM-Takten zusammenzuhängen, die auf den Pins 5/6 und 9/10 laufen, da das gleichzeitige Dimmen auf verschiedenen Pin-Kombinationen zu funktionieren scheint. Da ich für RGBW vier PWM-Regler benötige und der Atmega328p nur drei unabhängige PWM-Taktgeber hat, kann ich diesen aber nicht "betrügen".

Ich habe keine Ahnung, was mit Problem 3 los ist . Ich habe versucht, eine separate Stromquelle (VCC vom Raspberry Pi) für den Controller zu verwenden (wodurch der Spannungsregler fallen gelassen und die Schaltkreise getrennt wurden), das hat nichts geändert. Ich habe versucht, die 24-V-Quelle und den LED-Streifen zu entfernen - dasselbe Ergebnis. Das einzige, was verhindert hat, dass die Stifte heiß wurden, war das Entfernen der Transistoren, aber ich bin mir ziemlich sicher, dass sie richtig verdrahtet sind, und da dies auch ohne die 24-V-Quelle passiert, kann ich mir nicht vorstellen, dass der Strom außerhalb der Spezifikation liegt.

Ich habe versucht, den Code zu modifizieren, indem ich Verzögerungen hinzufügte, den maximalen analogWrite()-Wert regulierte und die Potentiometer vor und nach dem Lesen mit Strom versorgte, indem ich sie an einen digitalen Ausgang anstelle von VCC anschloss - alles ohne Erfolg.

Ich habe auch versucht, für alle Fälle einen anderen Atmega328p-Chip zu verwenden (ein paar liegen herum), und es liegt definitiv nicht an einem fehlerhaften Chip.

Jede Hilfe wäre willkommen! Vielen Dank!

BEARBEITEN:

Den Schaltplan habe ich unten beigefügt. Beachten Sie, dass ich den Spannungsregler weggelassen und separate 5-V- und 24-V-Stromquellen verwendet habe. Ich habe die Schaltung mit beiden Konfigurationen getestet und es gibt keinen Unterschied. Wie oben erwähnt, kann ich sogar die 24-V-Quelle und den LED-Streifen abziehen (die handgezeichnete Linie im Diagramm abschneiden) und es tritt immer noch eine Erwärmung auf.

Schaltplan

Hallo! Leider ist es sehr schwer, die tatsächliche Verbindung der Transistoren aus Ihrem Schaltplan zu erraten. Würde es Ihnen etwas ausmachen, es als richtigen Schaltplan zu exportieren, damit wir es eindeutig lesen können? Beim Atmega ist es sogar noch wichtiger, denn stellen Sie sich vor, wir kennen normalerweise nicht alle Pin-Funktions-zu-Pin-Nummernzuordnungen auswendig, sodass Ihr Schaltplan es wirklich schwer macht zu verstehen, was hier passiert. Ein Schaltplan erleichtert das Verständnis für Elektronikexperten!
(und vor allem sind hier alle tatsächlichen Arten von Komponenten wichtig, da sie das tatsächliche Verhalten unter Last bestimmen. Ohne einen richtigen Schaltplan mit annotierten Komponenten ist dies einfach nicht sinnvoll zu beantworten.)
In Ordnung, tut mir leid, ich arbeite daran :)
Sie haben diese NPN-BJTs so angeschlossen, als wären sie MOSFETs. Sie sind nicht. Fügen Sie Reihenbasiswiderstände hinzu !!!!! Deshalb überhitzt dein armes Mikro!
@brhans Willst du wissen warum? Weil ich anfangs MOSFETs verwendet habe !!! Danke für den Hinweis, jetzt funktioniert alles :)

Antworten (3)

Zufälliges Flackern an (verschiedenen) Ausgängen beim Drehen von Potentiometern

Sie schreiben kontinuierlich die PWM-Ausgangsregister. Tu das nicht.
Fügen Sie stattdessen einen Tiefpassfilter hinzu und lesen Sie regelmäßig Analoga. Zum Beispiel alle 10 Millisekunden. Legen Sie dies in den Filter und verwenden Sie den Ausgang des Filters für Ihre PWM.

Der beste Zeitpunkt zum Aktualisieren der PWM-Werte ist bei Timer-Überlauf (Neuladen). Sehen Sie, ob Sie diesen Interrupt erhalten können.

Der Controller "stürzt" zufällig ab und muss zurückgesetzt werden, wenn gleichzeitig die Potis für Rot/Grün und Blau/Weiß gedreht werden. Dies scheint bei anderen Kombinationen nicht der Fall zu sein.

Der Controller erwärmt sich (ich glaube, er befindet sich auf der Seite der Ausgangspins), je mehr Potentiometer ich "einschalte". Dies führt auch dazu, dass der Mikrocontroller abstürzt und zurückgesetzt werden muss.

Die sind verwandt.
Sie haben die Basiswiderstände an den Transistoren vergessen, daher überlasten Sie wahrscheinlich die Ausgangspins.

Außerdem sehe ich überhaupt keine Kondensatoren. Dies kann zu erheblichen Schaltgeräuschen aus der PWM der LEDs führen, wodurch sich der Chip unregelmäßig verhält. Sie haben diesen Teil ausgelassen, aber sind Sie sicher, dass alles richtig ist?

Oh Mist, es waren die Transistoren! Das Hinzufügen von Vorwiderständen zu den Ausgangspins behebt alles. Ich werde mich mit der Implementierung einer besseren PWM-Steuerung befassen, aber im Moment waren die Widerstände das eigentliche Problem. Vielen Dank!
  1. Wenn Sie einen aber als Schalter verwenden, stellen Sie sicher, dass ein Basiswiderstand vorhanden ist.

  2. Stellen Sie sicher, dass der Schalter für die Last geeignet ist.

  3. Stellen Sie in Ihrem Code sicher, dass Sie genügend Zeit haben, damit die pwm vollständig ausgeführt werden kann. Fügen Sie dort beispielsweise eine Verzögerung ein. Oder verwenden Sie zentriertes PWM. Oder Sie stoßen auf Störungen.

  4. Lernen Sie, einen Schaltplan zu zeichnen.

Schaltplan habe ich hinzugefügt. Ich habe zuvor versucht, Verzögerungen unterschiedlicher Länge (bis zu 100 ms) hinzuzufügen, und es schien keinen Unterschied zu machen. Werde es nochmal versuchen.

Ich fürchte, Sie haben Ihr Mikro getötet. Atmega muss überhaupt nicht aufheizen. Wenn dies der Fall ist, bedeutet dies, dass Atmega beschädigt ist. Ich habe sogar einen (ich habe ihn durch zu großen Stromfluss getötet und das ist hier auch der Fall, denke ich), der sich von selbst auf etwa 90-100 ° C erwärmt, dann aufhört, etwas abkühlt - wieder startet (das ursprüngliche Programm fortsetzt) , hört wieder auf ......

Woher weißt du, dass es getötet wurde? Was ist, wenn er einfach zu viel Strom aus den Stiften zieht? Da er den BJT-Transistor falsch verwendet hat.
Nicht schwer zu erraten. Zum Aufheizen -> mehr als der doppelte Strom muss durch den uC max fließen, denn der Atmega beträgt 200mA. Also lass uns 500mA quess. Dadurch steigt die Temperatur um etwa 10 Grad. 5mA für Atmega selbst. 495 mA für 4 Ausgänge - 124 mA / Pin - dreimal über dem maximal zulässigen Wert. Das ist tödlich für die uC. Es kann funktionieren, ist aber zu 100% beschädigt