LED Strip mit Poti steuern

Gast #4827839
Hallo hallo,
ich habe mir heute für meinen Led Strip (12V - GRB) eine Steuerung 
gebaut.
Ich habe einfach 3 Potis parallel geschaltet und dann die Spannung im 
ADC eingelesen. (Nutze Arduino Mega 2560) Die LEDs steuere ich normal 
über Transistoren an...

Jetzt passiert aber was komisches. Ich habe mir einfach mal die Werte 
des ADCs ausgeben lassen. Wenn ich am 1. Poti drehe passiert alles 
normal. Der Strip wird langsam grün...

Wenn ich jetzt aber am 2. oder 3. Poti drehe, leuchten die anderen 
Farben auch(aber nur sehr schwach, aber die Farbe ist nicht mehr 
rein...). Also ich drehe am 2. Poti und es wird rosa oder so was aber 
halt nicht rein Rot.

Die Seriele Ausgabe zeigt das auch an(also das Spannung an den anderen 
Potis abfällt, aber nur sehr schwach).

Hier ein Beispiel:
3.74 - 218.36 - 3.99 oder
16.70 - 16.70 - 254.25

Der Wert von 0 - 1023 wurde schon auf 0 - 256 skaliert.

Aber wie man sieht sind Grün und Blau auch ganz leicht an, obwohl die 
anderen beiden Potis jeweils komplett "aus" sind.
Wie kann das sein und was kann ich machen? Wie gesagt ich habe die Potis 
parallel geschaltet.

Liebe Grüße
Gast
Jau Bild ist der Schaltplan ich hoffe das ist okay so?!?!?

Code:
----------------------------------------------------------------------

int analogPinRed = 0;     // potentiometer wiper (middle terminal) 
connected to analog pin 3
int analogPinBlue = 1;     // potentiometer wiper (middle terminal) 
connected to analog pin 3
int analogPinGreen = 2;     // potentiometer wiper (middle terminal) 
connected to analog pin 3

                       // outside leads to ground and +5V

int val = 0;           // variable to store the value read

float red = 0.0;
float blue = 0.0;
float green = 0.0;

#define REDPIN 3
#define GREENPIN 4
#define BLUEPIN 5

void setup()

{
Serial.begin(9600);
    pinMode(REDPIN, OUTPUT);
  pinMode(GREENPIN, OUTPUT);
  pinMode(BLUEPIN, OUTPUT);

}



void loop()

{

  red = 255 * ((float)(analogRead(analogPinRed))/1023);
  blue = 255 * ((float)(analogRead(analogPinBlue))/1023);
  green = 255 * ((float)(analogRead(analogPinGreen))/1023);

  analogWrite(REDPIN, (int)red);
  analogWrite(BLUEPIN, (int)blue);
  analogWrite(GREENPIN, (int)green);

  Serial.print(red);
  Serial.print(" - ");

  Serial.print(blue);
  Serial.print(" - ");

  Serial.print(green);


  Serial.println("");


}


----------------------------------------------------------------------

Danke im vorraus
Angehängte Dateien:
Gast
Nebenbei:

0 bis 1023 sind 1024 verschiedene Zustände, deshalb durch 1024 teilen.
Aus selben Grund mit 256 multiplizieren.

Dann ist die Umrechnung mathematisch richtig, und als Nebeneffekt ohne 
float in wenigen Taktzyklen berechenbar.

Zu deinem Problem:

Versuch Mal kleine Kondensatoren an den Analogeingängen gegen GND.
Gast
PNPs sind hier ungünstig.
Fließt kaum Strom durch die LEDs fällt nur sehr wenig Spannung darüber 
ab.
Am Emitter liegen somit über 5,7V was dazu führt das der Arduino mit 5V 
Pegeln den PNP nicht zum sperren bringt.

Das Problem müsste aber bei Rot am größten sein.
Wechsel mal auf NPN und beobachte ob das bereits Dein Problem löst.

Warum überhaupt erst den rechenintensivsten Datentyp float nehmen um den 
dann wieder irgendwie auf INT runterzubrechen ?

Der ADC wirft dir INT raus, der PWM erwartet INT also warum so 
kompliziert ?
Gast
Peter schrieb:
> Hi.
> Guck mal hier:
> https://www.arduino.cc/en/Reference/AnalogWrite
>
> Da steht unter "Notes and Known Issues", dass der Pin 5 bei kleinen duty
> cycles nicht komplett abschaltet. Ob das jetzt für deinen Arduino auch
> zutrifft weiß ich nicht, aber vielleicht ist das auch ein Grund.
Das Problem haben die Arduino Maker erkannt.
analogWrite(xxx,0) schaltet PWM ab und setzt den Pin dauerhaft auf 0.
Zumindest für Timer 1 und 2 funktioniert das perfekt.

XxbOoNx98 schrieb:
> red = 255 * ((float)(analogRead(analogPinRed))/1023);
Arduino kennt die Funktion map(). Die wurde für diesen Zweck entworfen.
Zerstörungsgefahr!

Du kannst diese Schaltung so nicht mir PNP aufbauen. So wie Du es gemalt 
hast lassen sich die LEDs im ungünstigsten Fall gar nicht komplett 
abschalten, im abgeschalteten Zustand fließt ein Strom durch die 
Body-Dioden des µC und kann im ungünstigsten Fall auch noch dessen 
Spannungsversorgung anheben (je nach Größe der Widerstände) und 
schlimmstenfalls den µC zerstören.

Low-Side Schalter baut man mit NPN!
Gast
Bernd K. schrieb:
> Low-Side Schalter baut man mit NPN!
Wenn es ein Vorteil ist das UCE nie unter UBE fallen kann und die 
geschaltete Spannung klein genug ist kann man das machen.
In diesem Fall sind NPN oder gleich LL-N-Fets die bessere Wahl.
(Firma: matzetronics)
Es ist ein bekanntes Problem, das zu hochohmige ADC Quellen an z.B. 
Kanal 1 'mitgezogen' werden von z.B. Kanal 0 oder Kanal 2. Das Problem 
löst man am besten mit niederohmigen Quellen oder langsamerer Abtastrate 
oder mit den o.a. Kondensatoren vom Kanaleingang gegen Masse.
Der Sample&Hold Kondensator nach dem Multiplexer wird beim Umschalten 
auf den nächsten Kanal in diesen entladen und zieht ihn deswegen mit.
Gast
Danke erstmal an alle für die Hilfe.

Allgemein an alle: Die Transistoren sind bei mir NPN Transistoren jedoch 
habe ich versehentlich PNP im Schaltplan gezeichnet... Entschuldigung 
dafür...
Gast
Matthias S. schrieb:
> Es ist ein bekanntes Problem, das zu hochohmige ADC Quellen an
> z.B.
> Kanal 1 'mitgezogen' werden von z.B. Kanal 0 oder Kanal 2. Das Problem
> löst man am besten mit niederohmigen Quellen oder langsamerer Abtastrate
> oder mit den o.a. Kondensatoren vom Kanaleingang gegen Masse.
> Der Sample&Hold Kondensator nach dem Multiplexer wird beim Umschalten
> auf den nächsten Kanal in diesen entladen und zieht ihn deswegen mit.

Das scheint mir bis jetzt als hilfreiche Antwort. Ich werde als erstes 
mal versuchen die Taktfrequenz vom Multiplexer zu minimieren. Da ich 
nehmlich keine Zeitkritische Anwendung habe ist das kein Problem.

Wenn das nicht geht!? Wie viel kapazität sollten die Kondensatoren 
haben?

Liebe Grüße
Gast
B. B. schrieb:
> XxbOoNx98 schrieb:
>> red = 255 * ((float)(analogRead(analogPinRed))/1023);
>
> Was ist den gegen
> red = analogRead(analogPinRed)/4);

Ja das stimmt! Bzw. wie ein anderer User bereits geschrieben hat müsste 
es auch eine 256 sein und der cast in float macht natürlich keinen Sinn, 
da der PWMc sowieso ein int bekommt.

Allerdings habe ich das nur gemacht da ich angst hatte das der 
Controller keine Ganzzahldivision schlau von alleine rechnen kann...

aber ich werde dann im Code das ändern zu:
red = analogRead(analogPinRed)/4);
blue = analogRead(analogPinBlue)/4);
green = analogRead(analogPinGreen)/4);

Obwohl 256/1023 nicht ganz 1/4 sind!

Oder aber ich nutze map() wie auch jemand hier meinte:
red = map(analogRead(analogPinRed), 0, 1023, 0, 255);
blue = map(analogRead(analogPinBlue), 0, 1023, 0, 255);
green = map(analogRead(analogPinGreen), 0, 1023, 0, 255);

Liebe Grüße
XxbOoNx98 schrieb:
> Hab jetzt auch versucht an den ADC Inputs 22nF Kondensatoren gegen Masse
> zu schalten jedoch auch ohne ohne Erfolg!
>
> Vielleicht jemand eine Idee?

Dann sind die Potis falsch angeschlossen. Kontrolliere das nochmal genau 
(fehlende Masse irgendwo?)

Messe auch mal mit dem Voltmeter an den Schleifern der Potis.

Ändere die Software und werte nur noch ein Poti aus ohne den Muxer 
umzuschalten, stelle sicher daß das geht. Dann das selbe mit nur dem 
zweiten Poti, dann nur das dritte.

Deine Software könnte fehlerhaft sein (Tippfehler, falschen Wert in den 
falschen Kanal geschrieben), überprüfe ob Du (ohne ADC) wirklich alle 
Farben unabhängig von 0 bis 100% dimmen kannst, zum Beispiel generiere 
einfache Rampen für alle 3 Werte in Software. Überprüfe das vielleicht 
gleich mal als erstes bevor Du Dir an der ADC-Geschichte einen Wolf 
suchst und das war gar nicht die Ursache.
Gast
Ja okay das Problem hat sich geklärt!

Nach dem ich mit dem Voltmeter alles nochmal durchgegangen bin, hab ich 
mir überlegt ob es richtig ist GND von den Transitoren und den Potis auf 
eine Leitung zu legen...
War es natürlich nicht :D

Das 5V Potenzial kommt aus dem Arduino. Die 12 V kommen aus dem Netzteil 
in Arduino und Schaltung.

Der Arduino hat aber die 5V zu einem anderen Referenzpotenzial. Somit 
sind über den Potis im betrieb nur 0.2 V abfallen....

Trotzdem danke für die Hilfe!

Liebe Grüße

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.