Hallo, Ich habe hier bereits einige interessante Forenbeitraege zur Helligkeitsregelung von LEDs mittels PMW gelesen. Mein Problem ist nun folgendes: Die Wiederholrate bei geringen Helligkeiten ist wohl zu langsam. Mein Vater (Zoologe) haette gerne eine Daemmerungssimulation (Farbverschiebung ist aber unwichtig) fuer einen Versuch zur Tag-/Nachtaktivitaet. Tiere koennen aber teilweise noch deutlich hoehere Frequenzen wahrnehmen als Menschen. Deswegen sollte die Frequenz idealerweise bei 500 Hz oder hoeher liegen. Und niedrigste Helligkeit vielleicht 1% (subjektives Empfinden) der Maximalhelligkeit. Mit der quadratischen Naeherung fuer's Sehempfinden also: 500 Hz * 10.000 Stufen = 5 MHz. Da bleiben einem gerade mal 4 Taktzyklen pro Stufe bei z.B. nem ATTiny @ 20MHz. Ganz schoen knapp, finde ich. Gut, man kann noch nen Faktor 4 oder so gewinnen, wenn man die LEDs in z.B. 4 Gruppen aufteilt, und die ersten Male eben nur eine weitere Gruppe aktiviert. Aber so ganz ueberzeugend finde ich das noch nicht. Gibt es da noch weitere Moeglichkeiten, z.B. gleichzeitige Strombegrenzung (wie koennte so etwas aussehen)? Oder irgendwelche ICs, die schneller sind? Bei der Gelegenheit bin ich auch gleich noch auf der Suche nach einem passenden schnellen Leistungstreiber fuer die LEDs (~20 LEDs, je 20mA @ 3V -> 1.2W ?). Vielen Dank schonmal fuer alle Vorschlaege! Sebastian
Ich möchte aber ein paar Details anmerken: -Tiere erkennen die Dämmerung nicht nur an der Helligkeit sondern auch an den Farben. Das ist nicht unwichtig. http://de.wikibooks.org/wiki/Melatonin Such mal nach Wellenlänge! -Warum PWM? So wie ich Versuchsaufbauten kenne, sind Energieverluste doch nicht so wichtig. Regelt das doch einfach linear! -10.000 Stufen? Wozu das denn? Schon bei 1% Helligkeitsänderung stößt das Auge an seine Grenze, 256 Stufen sollten daher doch reichen, oder?
vielleicht sowas in der Art: PCA6934 oder, du nimmst ne "realistische" PWM-Frequenz (viell. 10kHz, machbar mit Atmel) und musst dahinter ne Glätungsdrossel setzen. Wenn du die richtig dimensionierst, ist der Wechselanteil komplett rausgefiltert. DIe Schaltung verhält sich dann wie ne Stromquelle. So hast du Gleichspannung/strom an der LED.. kann aber bei mehreren LEDs ziemlich aufwändig werden
Da scheint es bei dir noch einige Verständnisprobleme zu geben: 1. Die "Wiederholrate" hat bei der PWM nichts mit der Helligkeit zu tun. Es wird nur die Pulsweite und nicht die Frequenz verändert 2. Mit den 4 Taktzyklen pro Stufe hast du einen Denkfehler. PWM macht der Controller in Hardware mit einem Timer. Man kann eine PWM zwar auch "in Software" realisieren - aber nur in "Notfällen" 3. Ob 500Hz mit 10000 Stufen (14bit) mit nem AVR drin ist, kann ich nicht 100% sagen. Da müßten sich mal die Experten melden....
>> Ob 500Hz mit 10000 Stufen (14bit) mit nem AVR drin ist, kann ich >>nicht 100% sagen. Bei nur einem Kanal ist das kein Problem, auch nicht bei zwei oder vier (je nach Anzahl der 16bit-Counter im Chip) 500 Hz nimmt allerdings selbst der Mensch bei Bewegung noch als Flackern war (siehe beispielsweise LED-Rücklichter an Autos, die aber schon mit einem Kilohertz oder mehr arbeiten). 10.000 Schritte sind zwar recht viel, aber gerade bei den niedrigsten Helligkeiten ist die Schrittweite schon recht groß. Ich würde es zuerst mit 12bit (= 4096) Stufen und 4kHz versuchen. Das sollte ein AVR bei 16 MHz gerade so schaffen in Hardware.
Ich denke die PWM-Frquenz ist nicht so sehr entscheidend, wenn dahinter anständig geglättet wird. Der Nachteil ist, dass die Helligkeit bei extremer Glättung nicht mehr sehr schnell geändert werden kann. Aber das spielt hier sicher keine Rolle...
Hallo, 10.000 Schritte ist doch voll übertrieben, nichtmal 256 Schritte nimmt das Auge war, weil das Auge nicht linear ist. Eine andere Moeglichkeit waere ein LM2575 mit z.B. INA138 am Sense Eingang zuregeln und somit eine Konstantstromquelle aufzubauen. Die Dimmung uebernimmt ein AVR mit einem PWM Ausgang (RC Tiefpass). Der LM2575 schafft 500mA und ist im DIP8 Gehaeuse erhaeltlich, wenn Du den LM2575 mit einer Engangsspannunng von 22V betreibst kannst du einige LED's in Reihe schalten. Du koenntest Dir auch den INA138 sparen und einen OP benutzen. Die LEDs sind dann als Erdfreie Verbraucher anzuschliessen. Siehe Zeichnung 2.2.4: http://www.umnicom.de/Elektronik/Schaltungssammlung/Strom/Quelle/Stromquelle.html
@Matthias: PCA6934? Dazu finde ich leider nichts (jedenfalls liefert eine Google-Suche nichts) :/ @ARM-Fan: Hm? PWM wird doch meiner bisherigen Kenntnis nach dadurch gemacht, dass (Pseudocode): do portpin_aus for i = 0 to maximalwert if i > pwm_schwelle then portpin_an next i loop Ob nun in Hardware oder Software is ja erstmal egal. Kleinste Helligkeit ist dann 1/maximalwert. Und jetzt kommt die Frequenz ins Spiel: die Schleife soll mindestens 500 Mal pro Sekunde durchlaufen, damit die >= 500 Hz erreicht werden. Macht eben die genannten 5 MHz. Oder bin ich da auf dem voellig falschen Dampfer? Ich gebe allerdings zu dass mein Satz oben "Die Wiederholrate bei geringen Helligkeiten ist wohl zu gering" falsch formuliert war. Die Wiederholrate bleibt natuerlich konstant. Sie ist nur bei den meisten Anwendungen die ich bisher gesehen habe viel zu klein (100 Hz oft das hoechste der Gefuehle). Oder der Sprung von "ganz aus" auf "minimalste Helligkeit" ist bereits sehr gross (maximalwert klein), und das soll eben nicht der Fall sein. Ich brauche natuerlich auch nicht wirklich alle 10000 Stufen, mit zunehmender Helligkeit kann die Abstufung immer groeber sein. Wichtig ist halt die Dynamik. @Jan: Danke, ich werd's mal austesten.
hardware bedeutet: wir sagen dem controller nimm den 16 bit timer und mache damit pwm ohne den proz takt zu teilen das war pkt 1. sind 2 anweisungen die einmal ausgeführt werden müssen. dann übergeben wir nur noch dem OCR.... register eine 16 bit zahl welche unsere pulseite entspricht . nichts weiter das wars die geschwindigkeit is cpu freq / 2^16 = 305 Hz wenn s schneller gehen soll auflösung verringern zB. mit einem konstanten vorladewert alles kein thema sind in der initialisierung 2 befehle mehr.
Man könnte doch auch ne PWM mit nem Sägezahn und Komperator aufbauen. Komperator wird vom Sägezahn und über PWM von nem µC angesteuert. Somit kann man die PWM-Frequenz über die Sägezahn Frequenz quasi beliebig (was halt der Komperator abkann) einstellen. Kritisch dürfte hierbei werden, dass die PWM vom µC möglichst gut geglättet werden muss, aber auch das ist möglich ;-)
Da die Empfindlichkeit annäherend logarithmisch ist, könnte man ja auch mit der gleichen PWM zusätzlich noch den über die LEDs fließenden Strom steuern und hätte dadurch eine quadratische Kennlinie. Dann wären 256 Stufen wahrscheinlich ausreichend.
was soll die helligkeit mit der frequenz zu tun haben? ganz im gegentil, mit zu hoher frequenz wirst du eher mühe haben die auflösung reinzubringen... entscheidend ist die pulslänge (bei 5Mhz und 10000 stufen, wären das dann extrem kurze zeitabstände, das wirst du nicht hinkriegen mit einem avr... naja musst du ja auch nicht...) nimm einfach etwa 4,31 kHz (oder kleiner bei der auflösung) oder so (kein vielfaches von 50... (falls noch weitere lampen etc in der nähe sind...)) p.s. achte darauf dass du die treibertransistoren etwas zu gross dimesionierst, die bekommen z.t. mühe bei den hohen frequenzen... (auf volllast auslegen...) wozu wird das ganze gebraucht? meine ist ja nicht unkritisch... (für tiere, LED's haben sehr begrenzte wellenlängen...) wie willst du die 10000 stufen einstellen? macht das wirklich sinn???
Hach Mensch... entweder ich kapier irgendwas nicht... oder einige der Beantworter verstehen etwas nicht. Ich meine... ich moechte hier auf keinen Fall meckern oder undankbar sein -- ganz im Gegenteil, vielen Dank schonmal fuer die vielen Hinweise. Aber warum hacken alle immer auf den 10.000 Stufen ("so viele brauchst du doch nie!") und der Frequenz drauf herum? Natuerlich brauche ich nicht jede einzelne der 10.000 Stufen. Insbesondere zwischen 9.999 und 10.000 wird fuer's Auge ueberhaupt gar kein Unterschied sein. Aber zwischen 0 (ganz aus) und 1 sehr wohl. Und ich moechte eben den Dynamikumfang haben, dass Stufe 10.000 eben 10.000 mal so lang leuchtet wie Stufe 1. Um wenigstens nen Faktor 100 "gefuehlte" Helligkeit zu haben. Voellig egal wie viele ich von den Stufen tatsaechlich benoetige, brauche ich auf jeden Fall (Dynamikumfang) * (minimale Wiederholfrequenz) = 10.000 * 500 Hz = 5 MHz. Vielleicht verstehe ich auch nicht, welche Frequenz genau z.B. Kilby mit den 4.31kHz meint?! balu: Danke, scheint also doch machbar zu sein. Heinz: Glaettung werd ich auf jeden Fall ausprobieren. Wobei ich ehrlich gesagt keine Ahnung habe wie man gut glaettet wenn dahinter eine hohe Last haengt... vermutlich erst glaetten, dann verstaerken. Dazu werde ich mir mal die Links angucken die hier gepostet wurden.
Ist schon was dran, dass bei 256 Stufen zwischen 0 und 1 ein relativ großer Unterschied ist. Aber warum ignorierst du eigentlich konsequent die sachdienlichen Hinweise ? Zwei Leute haben bereits geschrieben dass für diese Anwendung ("Tag/Nachtsimulation für Tiere") LEDs nicht funktionieren werden, da LEDs a) nur ein sehr schmales Lichtspektrum abgeben und b) weil Tiere den Tag und die Nacht nicht nur an der Helligkeit erkennen. Weiterhin hatte jemand die Idee einen LM7525 oder so herzunehmen, und den als einstellbare Konstantstromquelle zu missbrauchen. Auf diese Art und Weise hättest du schon eine wesentlich linearere Einstellmöglichkeit, so dass dann die 256 Stufen reichen dürften. Wenn doch nicht kann man, je nach µC Typ, auch 9, 10, 11, 12, 13, 14, 15 oder 16 bit nehmen. Ebenfalls wiederholt: Ein AVR kann PWM in Hardware machen, d.h. du musst nicht in Software dauernd irgendwie einen Zähler laufen lassen. Du sagst dem AVR z.B. mache PWM an Ausgang OC2 mit der Frequenz F_CPU / 256 und dem Tastverhältnis 128/256 (50 %), anschließend hat die CPU NICHTS mehr zu tun bis du das Tastverhältnis änderst. Bitte geh' doch mal ein klein Bischen auf die zahlreichen konstruktiven Antworten ein, Gruß Stefan
Das ich auch noch was konstruktives Beitrage:
>vermutlich erst glaetten, dann verstaerken.
Nein! Dadurch machst du Dir den Vorteil der PWM zunichte. Wenn du erst
glättest und dann das Signal z.B. auf einen MOSFET gibst, muss dieser
bei Werten < 100% den Rest in Wärme verheizen. Muss der MOSFET nur ein
oder aus schalten, hast du im aus Zustand keine Verluste, und im ein
Zustand nur Rdson*I°2, und noch ein bischen was, was an den
Schaltflanken draufgeht.
Stefan
so zum tagesabschluss ich denke mal das du das schon irgendwie verstanden hast. das rumgehacke kommt weil a keiner glaubt das man eine solche auflösung braucht. (a1 wenn doch dann wirds interessant von der umsetzung) b du selber immer schwankst. das zählen erfolgt linear. das kann man zum ende hin nicht quadratisch beschleunigen schluss! wenn du dann sagst das du eine dynamik von 10000 willst dann sind das auch 10000 stufen auch wenn du am ende im prog größere sprünge machst um das quadratisch zu bekommen. einigen haben auch schon gesagt das dein ansatz ungünstig ist. gegenvorschlag: such dir einen D/A wandler der 13 bit (ich einige mich mal auf 8192 stufen) hat. da du sowas wohl nicht so einfach bekommst nimm 14 bit. steuere damit eine stromquelle. welche von 0-20 mA ausgelegt ist. damit bekommst du ein ganz sanftes signal ohne irgedwelches gezappel und gut. hört sich jetzt einfach an, hat natürlich einige hürden. 14 bit is ne menge holz von der auflösung her (zumindest was die störanfälligkeit betrifft) die lichtaussendung pro mA is bei einer led alles andere als linear! das musst du im µc mit tabelle verwursten und halt all die anderne wiedrigekeiten ich geh davon aus das du noch nix mit µc und elektronik im höheren sinn gemacht hast. also wenn du dich jetzt hinsetzt und konzentriert dran arbeitest dann hast du das in 3 wochen fertig !! sehr optimistische schätzung !!! nimm es lieber zu sicherheit mal 4
ps falls es nicht rihctig raus kommt in meinem gegenvorschlag gibt es keine pwm mehr das is alles analog dein ziel ist es nicht effizient zu sein sondern genau und ruhig
meine 2cent: ich finde den oben geäußerten Vorschlag mit dem geschalteten Vorwiderstand gar nicht mal schlecht: Für einen Duty-Cycle von - sagen wir mal - 5% bis 100% nimmt man einen kleinen Vorwiderstand (hohe Helligkeit). Unter 5% (wo ja eine höhere Auflösung gefordert ist), schaltet man auf einen größeren Vorwiderstand um, und hat nun wieder den vollen Duty-Cycle Bereich zur Verfügung, um die "unteren 5%" fein aufzulösen. Glückauf ;-)
...so schaffst Du auch mit einer 8Bit-PWM eine hohe Auflösung im kleinen Bereich - und das mit hoher Frequenz :-)
Stefan wrote: > Zwei Leute haben bereits geschrieben dass für diese Anwendung > ("Tag/Nachtsimulation für Tiere") LEDs nicht funktionieren werden, da > LEDs a) nur ein sehr schmales Lichtspektrum abgeben und b) weil Tiere > den Tag und die Nacht nicht nur an der Helligkeit erkennen. Zumindest das Spektrum von weissen LEDs ist so schmal nun auch nicht, und glaube mir... den zoologischen Teil lass mal meinen Vater machen, der ist schon lange in dem Geschaeft. Tag/Nacht-Wechsel kann man bei Hamstern durchaus auch ganz einfach mit ner Zeitschaltuhr machen, die einfach nur die Raumbeleuchtung ein- oder ausschaltet. Da ist weder was mit Wellenlaenge noch mit Daemmerung. Es funktioniert, wird in vielen Labors genau so gemacht, ist nur eben ueberhaupt nicht natuerlich. Ob ueberhaupt schon mal jemand den Unterschied erforscht hat, weiss ich nicht. Es stellt sich aber mittlerweile wohl raus dass man beim jetzigen Stand der Forschung nicht mehr ausschliesslich auf das ein-aus-Modell setzen sollte. > Weiterhin hatte jemand die Idee einen LM7525 oder so herzunehmen, und > den als einstellbare Konstantstromquelle zu missbrauchen. Auf diese Art > und Weise hättest du schon eine wesentlich linearere > Einstellmöglichkeit, so dass dann die 256 Stufen reichen dürften. Da widersprichst du dir gerade selber mit einer Aussage, die etwas spaeter folgt: > die lichtaussendung pro mA is bei einer led alles andere als > linear! > das musst du im µc mit tabelle verwursten ... genau. Ich glaube nicht, dass Stromsteuerung das grundsaetzliche Problem loest! Ob ich nun mit der PWM direkt versuche, eine nichtlineare Kennlinie abzufahren, oder ob ich mit der PWM durch glaetten eine Spannung generiere, die dann linear in einen Strom umgewandelt wird, der dann eine nichtlineare Kennlinie abfaehrt... ? > Ebenfalls wiederholt: Ein AVR kann PWM in Hardware > machen, d.h. du musst nicht in Software dauernd irgendwie einen Zähler > laufen lassen. Hab ich das behauptet? Die Funktionsweise ist aber intern die selbe. Die Zeit/Takt-Rechnung bleibt also. > das zählen erfolgt linear. das kann man zum ende hin nicht quadratisch > beschleunigen schluss! wenn du dann sagst das du eine dynamik von > 10000 willst dann sind das auch 10000 stufen auch wenn du am ende im > prog größere sprünge machst um das quadratisch zu bekommen. Mir is sehr wohl bewusst, dass ich (bzw... fuer dich nochmal ganz praezise: der AVR selbst, ohne dass die CPU irgendwie belastet waere) die ganzen 10.000 runterzaehlen muss. Ich wollte nur darauf hinaus, dass ich natuerlich nicht den entsprechenden Comparator-Wert auf alle dieser 10.000 Stufen setzen muss/brauche. Da mir ja in anderen Posts vorgehalten wurde man wuerde ja den Unterschied zwischen 10.000 und 256 gar nicht sehen. Natuerlich sieht man nicht, ob man gerade in ner 8bit PWM von 254 auf 255 geschaltet hat oder bei der 10.000er von 9.999 auf 10.000. Aber am unteren Ende eben schon! > ich geh davon aus das du noch nix mit µc und elektronik im höheren > sinn gemacht hast. Durchaus richtig, ich habe bisher lediglich ein paar Spielereien mit µc und Digital-ICs, dazu noch ein bisschen OpAmps gemacht. Ich denke aber mir fehlt in erster Linie noch der Ueberblick, welche Moeglichkeiten es denn so gibt. Und genau deswegen bin ich hier. Den PCA9634 hab ich mir gerade mal angesehen, der macht allerdings ebenfalls nur 8bit PWM. Keinerlei logarithmische Anpassung gefunden. Sicher huebsches IC, danke fuer den Hinweis, aber leider hier nicht wirklich eine Loesung. Schaltbarer Vorwiderstand: Klingt sinnvoll, mal sehen wie man das konkret umsetzen kann.
Damit du dir keine sorgen mehr um die Frequenz machen musst nimm einfach nen Tiny26, der kann mittels PLL den Timer mit 64MHz laufen lassen. Das sind bei 8 bit 250kHz. Wenn du dann die Vorwiderstandumschaltemethode verwendest, hast du auch die gewünschte auflösung im geringen bereich und du solltest glücklich sein ;) PS: Glätten - such mal nach LC filter oder nach Step-down converter (sind 2 verschiedene sachen, je nach Leistung ist das eine oder andere Sinnvoll)
konkrete Realsierung: Schalten der Widerstände mittels (2 extra) FETs. ----------------------------------------------------------------- Bei der Widerstandsberechnung mal aus dem Bauch: Bei - sagen wir mal - 5% Duty Cycle läßt Du die LED mit 1/20 ihrer Leistung laufen. Normal z.B.: 20mA * 2.6V = 52 mW * (1/20) = 2.6 mW 2.6mW Leistung kannst Du dann aus der Strom-Spannungs-Kennlinie der LED ablesen (bzw. iterativ berechnen), und so den Widerstand für die unteren 5% Duty Cycle berechnen.
huch... zuviel Gleichheit ;-) korrekt geschrieben: 20mA * 2.6V = 52 mW ;Leistung bei 100% Duty Cycle 52 mW * (1/20) = 2.6mW ;gemittelte Leistung bei 5% Duty Cycle :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.