Spannungsreglung für LED Bargraph

Hallo,

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:

Datenblatt: http://www.barmeter.com/download/as1101p-1004f%201.1.pdf

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.

Gruß, zomb.

Aus dem Datenblatt wird man nicht sonderlich schlau, das es einfach nicht gescheit zu Ende läd.

Des weiteren bin ich mir nicht sicher, dich verstanden zu haben. Bitte korrgieren.

Du möchtest mit dem Arduino eine Spannung zwischen 0 und 5V ausgeben, die diese Led Leiste ansteuert?
Der Arduino kann keine Spannung zwischen 0 und 5V ausgeben.
http://www.mikrocontroller.net/articles/Pulsweitenmodulation#DA-Wandlung_mit_PWM

Die Frage mit der Stromstärke verstehe ich nicht? Kennst du Dr. Ohm?

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.

Der Befehl dazu lautet :analogWrite()
mfg Micha

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.

Das geht aber hier nicht. Die Anzeige will eine richtige analoge Spannung. Dazu muss man das PWM Signal glätten.

Oder man verwendet einen richtigen D/A-Wandler. Gibt es in DIP8 mit SPI oder I2C Interface.

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

Das beste wird sein Du verwendest einen DAC zB den MCP4921 (1 Kanal) oder MCP4922 (2 Kanäle). kostet ca 2 bzw 2,5€ in DIP-Gehäuse.

Ja, den die Werte des Filters kann man berechen. weiter weiß ich nicht. aber google. 8) 8)

http://www.mikrocontroller.net/topic/213575
http://www.mikrocontroller.net/articles/Pulsweitenmodulation#DA-Wandlung_mit_PWM

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.

Grüße Uwe

Klar kann man tiefpässe berechen.

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 Dir die Formel nicht reicht, die in Reply #1 verlinkt ist, es gibt auch einen Online-Rechner für PWM-Tiefpassfilter:
http://sim.okawa-denshi.jp/en/PWMtool.php

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.

Danke an alle für die Antworten. Ich glaube das hilft mir schon sehr weiter!

Ich werde jetzt mal ein wenig rumexperimentieren und mich wieder melden wenn ich vor einem neuen Problem stehe. (wird nicht all zu lange dauern)

Hi,
ich hab mal wieder ein wenig Zeit gefunden und mir Gedanken darüber gemacht wie ich das jetzt aufbauen muss.

Funktioniert das so wie im Bild zu sehen? Bei dem blauen Kabel wusste ich nicht wohin, deshalb ist das oben an dem "mystery part" angeschlossen.

Hier die Kabelzuordnung aus dem Datenblatt des Bargraphs:

rot - power supply
schwarz - GND
gelb - I/V Input high
blau - I/V Input low

Ich nehme aber an ich verwende entweder das gelbe ODER des blaue Kabel für die Schaltung?

Hier ein paar Anmerkungen:

  • Dein Elko ist verpolt. Der weiße Strich ist üblicherweise der Anschluss der negativeren Spannung, der muss auf GND.

  • Ich kenne den genauen Typ nicht, den du verwendest, aber ich denke die blaue Input Low Leitung sollte auf GND.

  • Als PWM-Pin würde ich Pin 5 oder 6 nehmen, die haben eine höhere Frequenz.

  • 220 Ohm als Widerstand sind etwas niedrig, ich würde auf höhere Werte >1k gehen, das hängt aber vom Wert deines Kondensators ab.

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.

Nimm einfach das Beispiel analog > fading aus der Arduino IDE.

in der Zeile 21
int ledPin = 9;    // LED connected to digital pin 9 stellst du den Pin ein, den du für die PWM verwendest.

in der Zeile 41
delay(30); stellst du ein wie schnell sich der Wert ändert. je größer die Zahl, um so langsamer.

Und nochmal danke!

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.

Danke, hat super funktioniert!
Hab jetzt den kompletten Bereich abgedeckt.