ich bin neu hier im Forum und fange auch grade erst an mit Arduino zu arbeiten. Habe mir vor kurzem ein LED-Bargraph bestellt. Dabei handelt es sich viel mehr um ein Modul, welches über die Spannung gesteuert werden kann:
Mein Ziel ist es eine Eingabe zu machen und damit die Skala zu steuern. Ich muss also irgendwie, abhängig von meiner Eingabe in den Code, die Spannung regeln (0-5V).
Leider weiß ich nicht wie ich anfangen soll. Gibt es vielleicht ein Tutorial für so eine Schaltung? Welche Stromstärke hält das Modul aus? Werde aus dem Datenblatt nicht wirklich schlau was das angeht.
Hallo,
bin nicht der Superprofi aber
Sechs der digitalen Kanäle auf dem Arduino-Boards sind nicht nur digital, sondern auch analog ansteuerbar.
Sie sind mit dem Aufdruck PWM gekennzeichnet (Kanal 3, 5, 6, 9, 10, 11).
PWM (Pulse Width Modulation) bedeutet, dass kein konstantes Signal an dem Kanal anliegt, sondern dass dieser Kanal kontinuierlich an- und abgeschalten wird.
In der Arduino-Software übergibt man einen Wert zwischen 0 und 255 an den Kanal. 0 entspricht dem GND (Minus-Pol), 255 entspricht 5V+, Zwischenwerte bedeuten für träge Bauteile (LEDs, Motoren, etc.) also eine Spannung zwischen 0 und 5V.
Damit kann man also die Geschwindigkeit von Motoren oder die Helligkeit einer LED regulieren.
Sk8erBoyZ:
Hallo,
bin nicht der Superprofi aber
Sechs der digitalen Kanäle auf dem Arduino-Boards sind nicht nur digital, sondern auch analog ansteuerbar.
Sie sind mit dem Aufdruck PWM gekennzeichnet (Kanal 3, 5, 6, 9, 10, 11).
Nein. Zwar heißt die genutzt Funktion "analogWrite", hat aber eigentlich nichts damit direkt zu tun. Wieso die Arduino Macher die so genannt haben, keine Ahnung. pwmWrite o,ä. wären da sinniger gewesen. Bei einer LED hat es aber den Anschein, dass es die Spannung regelt. Was aber auch nur wieder mit der Trägheit des Auges zu tun hat.
Wobei, du widerlegst deine Aussage mit deiner darunterstehenden Erklärung.
Wie man aus einem Digitalen ein Analoges Signal macht, steht in meinem Link oberhalb. -> Tiefpass
Alternativ soll es auch DAC geben, die über SPI angesteuert werden. Selber noch nicht genutzt. Wobei das defentiv nicht trivialer wird, da ich nicht weiß, in wie fern es dafür vorgefertigte Libarys gibt.
Hi,
danke für die schnelle Antwort.
Die Sache mit dem Tiefpass ist ja so ziemlich genau das was ich brauche. Aber da steht auch, dass die Beispielschaltung zu ungenau für dynamische Anwendungen ist. Wie hoch sollte denn die PWM-Frequenz gewählt werden?
Edit: Okay, das war eine blöde Frage. Die gebe ich ja vor um eine Spannung einzustellen. Für ein dynamisches Verhalten muss ich also R und C anpassen. gibt es da eine "Anleitung" zur Berechnung? Wenn ich das jetzt einfach runterskaliere und sieben 100k widerstände in Reihe schalte, wie wirkt sich das auf die Trägheit der Spannungseinstellung aus?
zomb23:
Die gebe ich ja vor um eine Spannung einzustellen
Nein, nicht ganz. Die Frequenz ist fest. Was du vorgibst ist das Puls-Pausen-Verhältnis, bzw. den Tastgrad:
Die PWM Frequenz wird vom Timer vorgegeben. Sie ist standardmäßig 980Hz auf Timer0 (Pins 5 und 6 auf dem UNO) und 490Hz auf den anderen Pins. So lässt sich aber auch erhöhen: http://playground.arduino.cc/Main/TimerPWMCheatsheet
Wenn Du die PWM-Frequenz erhöhst brauchst Du kleienere Kondensatoren bzw größere Widerstände. Die die Restwelligkeit wird hochfrequenter und das einschwingen ( erreichen des Wertes nach änderung des PWM-Wertes) ist schneller.
Zwei wichtige Kenngrößen:
a) im Gleichspannungsbereich:
Zeitkonstante Tau = R * C [sek] // beschreibt die Zeit, in der, bei anlegen einer festen Spannung,
// die Spannung am Kondensator auf ca. 63% gestiegen ist.
b) im Wechselspannungsbereich:
Grenzfrequenz fg = 1/(2PiR*C) // beschreibt die Frequenz, bei der die Ausgangsspannung auf ca 71% der Eingangsspannung
// abgesunken ist.
Was bedeutet das für deinen Anwendungsfall?
Tau gibt dir einen Anhaltspunkt, wie lange es dauert, bis sich die neue Spannung eingestellt hat.
fg gibt dir einen Anhaltspunkt, wie groß der Spannungsripple an der Ausgangsspannun noch ist.
Im Anhang zwei Beispiele.
Eingangsspannung: PWM 5V 50% 1kHz
Zwei Tiefpässe:
1,5K 1µF: Tau = 1.5ms, fg = 106Hz: Zielwert erreicht nach ca. 7ms Ripplespannung ca 0,82V
15k 1µF: Tau = 15ms, fg = 10Hz: Zielwert erreicht nach ca. 70ms Ripplespannung ca 82mV
Ich weiß nicht, wie dein Bargraf auf ripplespannung reagiert, aber ich würde eher zu größeren Taus tendieren.
Das hängt aber davon ab, wie schnell dein Signal sich ändert.
zomb23:
Für ein dynamisches Verhalten muss ich also R und C anpassen. gibt es da eine "Anleitung" zur Berechnung? Wenn ich das jetzt einfach runterskaliere und sieben 100k widerstände in Reihe schalte, wie wirkt sich das auf die Trägheit der Spannungseinstellung aus?
Wenn Du die PWM-Frequenz auf 31 kHz hochsetzt, dürften für Deinen Anwendungsfall R=47k und C=100nF brauchbar sein, die ergeben in dem Fall eine Grenzfrequenz fc = 33.86 Hz bei einer Restwelligkeit von knapp 9mV.
Für eine gute Glättung des Ausgangssignals ist nicht nur der Tiefpassfilter entscheidend, sondern dass Du die standardmäßige PWM-Frequenz von ca. 0,5 kHz bis ca. 1 kHz (je nach Pin) auf einen deutlich höheren Wert setzt. Bei den 8-Bit AVR Controllern geht das nur über direkte Registerzugriffe.
Vielen Dank für die Anmerkungen. Ich habe die Bauteile in der Grafik nur Beispielhaft ausgewählt. Es ging mir vorerst nur um die Richtige Anordnung der verschiedenen Elemente. Ich glaube die PWM Frequenz werde ich sowieso -wie jurs vorgeschlagen hat- manuell auf einen höheren Wert setzen. Gibt es ein sehr einfaches Beispielsketch mit welchem ich die Schaltung testen kann? Ich bin leider auch auf dem Gebiet der Programmierung nicht (hoffentlich NOCH nicht) besonders versiert.
Also das funktioniert an sich schonmal ganz gut. Relativ träge aber in Ordnung. Das Problem ist, dass bei einer Frequenz von 255 nicht alle Segmente leuchten. Bei 255 müssten doch durch den Tiefpass 5V generiert werden oder irre ich mich? Ich habe mal ein Netzteil angeschlossen (5V/1,2A) allerdings leuchten dann noch weniger Segmente. Hat jemand eine Ahnung woran das liegen kann? Ich werde mir mal ein Spannungsmessgerät besorgen und das messen.
Zunächst: du verstellst nicht die Frequenz, sondern das Tastverhältnis der PWM.
Bei analogWrite(255) ist das Tastverhältnis 100%, am Ausgang stehen 5V an.
Nun wirds tricky: Wir reden zwar immer von "5V", aber in wirklichkeit sind es nicht 5V, sondern die Spannung, die am "5V-Pin" des Arduino anliegt.
das kann, wenn der Arduino über USB versorgt wird, auch nur 4,5V sein.
Leider schweigt sich das Datenblatt deines Bargraph-Moduls darüber aus, wie genau es funktioniert, aber man kann davon ausgehen, dass auch hier die Versorgungsspannung als Referenz genommen wird.
Hast du denn für Arduino und für dein Modul die gleiche 5V-Versorgung?
Falls ja, mach mal folgendes:
a) PWM auf 0 stellen
am Regler Adj. Zero drehen, bis gerade kein Balken mehr leuchtet.
b) PWM auf 255 stellen.
am Regler Adj. Full drehen, bis gerade alle Balken leuchten.