Hallo Gemeinde,
wie würdet Ihr die drei Rechtecksignal im Mikrocontroller Attiny (mit
zwei Timer 1x8Bit und 1x16Bit) erzeugen? Ich benötige eine hohe
Einstelldynamik in den 10% Ontime und eine Frequenz um die 120 Hz, die
möglichst stabil sein soll.
Das ganze soll zur Helligkeitsansteuerung einer RGB-LED verwendet
werden. Die OnTime darf dabei nur maximal 10 Prozent sein und darf auf
keinen Fall überschritten werden. Die Helligkeit (Ontime) kann ich via
RS232 übergeben.
Irgendwie stehe gerade auf dem Schlauch. Wenn ich beim 16 Bit-Timer in
Fast PWM Mode als OCR1A einen maximal Wert definiere (um sicher die max.
10% Ontime einzuhalten), dann verliere ich viele Bits an Dynamik bei der
Helligkeitsansteuerung.
Der CTC-Modus ist auch mit sehr viel Rechnerei verbunden. Speziell dann,
wenn ich mit einem Timer 2 Rechtecksignale erzeugen will.
Welchen Timer Modus würdet Ihr wählen? Oder gibt es da einen Trick, wie
man die Dynamik in den 10% erhöht? Würd' mich über Tipps sehr freuen,
Sebastian
Sebastian schrieb:> Die OnTime ... darf auf keinen Fall überschritten werden.
Dann brauchst du eine hardwaremäßige Einschaltzeitbegrenzung in Form
eines Monoflops, die per Und-Funktion mit deinem µC-Ausgang verknüpft
ist.
Danke für die schnellen Antworten:
aus der RGB-LED kann man eine höhrere Lumenzahl herauslocken, wenn man
Sie mit gepulstem Konstantstrom betreibt. Bei 100Hz wäre eine zulässig
maximale Ontime 1ms.
Somit bräuchte ich einen ersten Timer der alle 10ms einen Overflow
generiert, um die Grundfrequenz von 120 Hz einzustellen. So jetzt
brauche ich eine Möglichkeit die Ontime sehr granular einzustellen. Wohl
über einen zweiten Timer. Der vom ersten gestartet wird.
Jetzt habe ich meinen Denkfehler erkannt! Ich kann den Timer 2 ja
dreimal starten! Jeweils neu für eine Farbe. Dann werden die Farben halt
nacheinander eingeschalten! Das ist mit dem Auge nicht zu erkennen! Dann
kann ich den Timer2 sehr granular einstellen. Und dreimal max. 1ms ist
deutlich kleiner als 10ms. Sollte klappen. Hier wäre evtl. der CTC Mode
mal gut?!
Was haltet Ihr von der Idee? Oder habt Ihr weitere Vorschläge?
VG,
Sebastian
Hi,
so etwa würde ich es angehen:
Ein Timerinterrupt, der 10x so langsam ist wie die PWM, die Du mit CTC
erzeugen willst. Dann in diesem Interupt die CTC Register für jeden
Zyklus neu laden.
Du solltest aber darauf achten, daß Du den Spitzenstrom Deiner LED nicht
überschreitest (und nein, das ist in diesem Fall nicht 10 * Imax.,
sondern steht im Datenblatt).
Deshalb meine Bedenken...
Gruß
Andreas
Hallo,
hab' mir gerade noch den oben vorgeschlagenen Artikel durchgelesen.
http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM
Hier wird auch die Methode vom Andreas B. vorgeschlagen (siehe Software
PWM). Ich wünsche mir aber eine Auflösung 1000 Schritten innerhalb von 1
ms. Somit würde ich jede Mikrosekunde einen Interrupt erzeugen. Da würde
ich meinen Mikrocontroller ganz schön zu nageln. Selbst bei 100
Schritten würde ich noch alle 10us einen Interrupt erzeugen.
Bei meiner oben vorgeschlagenen Variante gehe ich recht verschwenderisch
mit den Timern um... :-( Aber es erscheint mir als absolut sicher.
@Andreas B.: Danke für Deinen Tip, laut LED-Datenblatt kann der gepulste
Vorwärtsstrom 4mal so groß sein wie der Dauerstrom.
Wrüde mich über weitere Vorschläge und Diskussion freuen.
Sebastian
Sebastian schrieb:> @Andreas B.: Danke für Deinen Tip, laut LED-Datenblatt kann der gepulste> Vorwärtsstrom 4mal so groß sein wie der Dauerstrom.>> Wrüde mich über weitere Vorschläge und Diskussion freuen.
Was versprichst du dir von deinem Vorhaben?
Du willst für ein Zehntel der Zeit den vierfachen Strom durch die LED
schicken um sie heller leuchten zu lassen?
Unterm Strich wirds dunkler!
Bei den meisten LEDs ist der ggf. mögliche Helligkeitsgewinn durch einen
gepulsten Betrieb gering, sofern man es überhaupt einen gibt. Einen
Nennenswert besseren Wirkungsgrad bekommt man ggf. bei sehr kleinem
mittleren Strom (z.B. 0,1 mA), aber nicht in der Nähe des Nennstromes.
Für mehr Helligkeit sollte man bessere LEDs nehmen oder ggf. die Kühlung
verbessern, dann kann man ggf. auch mal 25 mA statt 20 mA nehmen.
Hallo Magnus,
größere Helligkeit bei gepulster LED?! Also ich selber habe ich es noch
nicht ausprobiert. Und das Thema wird immer wieder heiß diskutiert z.B.
Beitrag "LED Kennlinie: gepulster Betrieb/mehr Strom = mehr Helligk.?"
Erfahrungswerte von Euch?! Ich werde meine Posten sobald verfügbar.
Sebastian
Sebastian schrieb:> größere Helligkeit bei gepulster LED?! Also ich selber habe ich es noch> nicht ausprobiert.
Aber genau DAS willst du ja scheinbar erreichen, oder?
Sebastian schrieb:> aus der RGB-LED kann man eine höhrere Lumenzahl herauslocken, wenn man> Sie mit gepulstem Konstantstrom betreibt.
Sebastian schrieb:> Also es ist zum verrückt werden. Hab' jetzt mal gegoogelt zwecks> Helligkeitsgewinn durch Pulsen, ohne ein echtes Ergebnis gefunden zu> haben.
Selbst wenn du mit dem vierfachen Strom die vierfache Helligkeit
erzielen würdest (was in der Realität nicht möglich ist), so erhieltest
du durch eine PWM mit maximal 10% On-Time nur 40% der Helligkeit im
Vergleich zur Ansteuerung mit Nennstrom und 100% On-Time.
Naja, in manchen Foren wird dann mit der Trägheit des Auges
argumentiert, welches die "Lichtblitze zwischenspeichert"... Irgendwie
nachvollziehbar, aber ich kann aktuell dazu nichts weiter sagen.
Magnus M. schrieb:> Selbst wenn du mit dem vierfachen Strom die vierfache Helligkeit> erzielen würdest (was in der Realität nicht möglich ist), so erhieltest> du durch eine PWM mit maximal 10% On-Time nur 40% der Helligkeit im> Vergleich zur Ansteuerung mit Nennstrom und 100% On-Time.
Du meinst "mittlere Helligkeit". In Anwendungen, wo es auf die
Maximalhelligkeit ankommt (z.B. bei Fernbedienungen), hat der gepulste
Betrieb mit kleinem Tastverhältnis deutliche Vorteile.
Bei technischen Anwendungen wie Fernbedienung, Lichtschranken etc. ist
es offensichtlich, dass eine gepulste LED sehr viel bringt. In meiner
Anwendungen geht es tatsächlich um eine einfache Raumbeleuchtung...
Andreas B. schrieb:> Er glaubt, eine höhere Lichtausbeute damit zu erreichen.
Dass er diesem Irrglauben verfallen ist, hat sich ja mittlerweile längst
herausgestellt.
- Man nehme einen 10-bit-Timer mit 1 MHz
- Man nehme den Overflow- UND den Compare-Interrupt.
- Im Compare-Register steht Dein 10-Bit-Wert.
- Jeder Compare Match deaktiviert nach der Ausführung den Copamre
Interrupt. Das Ding schaltet sich also selbst ab.
- Der Overflow hat nur die Aufgabe bis 10 zu Zählen und dann auf 0
zurück zu gehen und gleichzeitig den Overflow wieder scharf zu
schalten.
fertig
Schwächen:
10 Bit sind 1024 und nicht 1000. Wenn es stört muß man ein bissl
anpassen.
Eventuell ist hier und da noch ein bisschen Feinschliff notwendig.
Aber dies soll ja auch nur ein Konzept und keine Fertiglösung sein.
> Dass er diesem Irrglauben verfallen ist, hat sich ja mittlerweile längst
herausgestellt.
Naja, prinzipiell ist das schon denkbar.
Aber eben nicht so in diesm Maße, wie der TO sich das vorstellt.
Wenn man die LEDs z.B. statt mit 1A 100% PWM mit 2A und mehr als 50% PWM
(sagen wir mal 60%) betreibt, wäre es vorstellbar, dass die LED das bei
vergleichbarer Lebensdauer mitmacht.
Das würde ich aber auch nur dann machen, wenn das Datenblatt das
hergibt.
Gruß
Andreas
Andreas B. schrieb:> Wenn man die LEDs z.B. statt mit 1A 100% PWM mit 2A und mehr als 50% PWM> (sagen wir mal 60%) betreibt, wäre es vorstellbar, dass die LED das bei> vergleichbarer Lebensdauer mitmacht.
Dabei kämpft man immer noch gegen die Verringerung des Wirkungsgrads bei
Erhöhung des Stromes.
Die Helligkeit einer typischen 11Cd-LED, bei 20mA normiert auf 1,
liefert bei 50mA das Doppelte und bei 100mA das Dreifache, i.e. der
Wirkungsgrad sinkt auf 60% des bei 20mA gemessenen Wertes.
Der Wirkungsgrads sinkt dabei natürlich. Das gilt aber immer, wenn man
LEDs an der Grenze (und weit vorher) betreibt.
Aber so ist das eben, wenn man kein Geld für ordentlich dimensionierte
LEDs ausgeben möchte. Das zahlt man dann halt später dem EV.
Gruß
Andreas
@Carsten R.
vielen Dank für den Tipp. Das Konzept super und spart einen Timer ein.
Um die drei Farben anzusteuern (Pulsbetrieb) müsste ich dann nur drei
Comparewerte nacheinander abarbeiten. In etwa so:
TimerOverflow 0: Lade Compare-Wert für Rot
TimerOverflow 1: Lade Compare-Wert für Grün
TimerOverflow 2: Lade Compare-Wert für Blau
TimerOverflow 3: Inkrement
TimerOverflow 4: Inkrement
TimerOverflow 5: Inkrement
TimerOverflow 6: Inkrement
TimerOverflow 7: Inkrement
TimerOverflow 8: Inkrement
TimerOverflow 9: Inkrement
TimerOverflow 10: Setze Zähler zurück und starte bei TimerOverflow 0
Das sollte so klappen.
Jetzt ist bloss noch die Frage offen, ob sich der Aufwand lohnt noch mal
die SW umzuschreiben. Irgendwie habe ich das Gefühl, dass die meiste
hier meinen es bringt nichts die LEDs zu pulsen um eine höhere
Helligkeit zu erreichen. Zumindest in meiner Anwendung nicht.
Warum werden dann die LED-Rücklichter bei Autos gepulst betrieben?
VG,
Sebastian
Das ist ein Overflow zuviel. 0 bis 10 sind in der Summe 11.
Beachte wann der neue Compare-Wert geladen wird. Wenn der Overflow
kommt und die ISR startet, ist der Timer je nach Teiler/Prescaler im
nächste Zyklus. Dann wird der neue Compare Wert erst für den Folgezyklus
übernommen, wenn er durch den Overflow geladen wird. Dadurch wird alles
um einen Zyklus zeitversetzt. Das sollte Dir eigentlich egal sein. Aber
man sollte es im Hhinterkopf behalten, sollten Merkwürdigkeiten
auftreten wenn die Software noch andere Sachen macht. Daher wäre es in
dem Falle dann besser, wenn der neue Compare-Wert schon durch die
Compare-ISR geladen wird.
Sebastian schrieb:> Irgendwie habe ich das Gefühl, dass die meiste> hier meinen es bringt nichts die LEDs zu pulsen um eine höhere> Helligkeit zu erreichen. Zumindest in meiner Anwendung nicht.>> Warum werden dann die LED-Rücklichter bei Autos gepulst betrieben?
Das macht man auch nicht um die Dinger heller zu bekommen, sondern um
die Leistung zu drosseln und um sie dunkler zu bekommen, ohne die
Spannung runterregeln zu müssen.