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
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]);
}
}
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!
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.
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?
Wenn Sie einen aber als Schalter verwenden, stellen Sie sicher, dass ein Basiswiderstand vorhanden ist.
Stellen Sie sicher, dass der Schalter für die Last geeignet ist.
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.
Lernen Sie, einen Schaltplan zu zeichnen.
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 ......
Markus Müller
Markus Müller
mrbaozi
brhans
mrbaozi