Ich benötige eine Stromquelle, die nach dem Einschalten den Strom von 0mA auf einen definierten Wert (ca. 1 bis 10mA) exponentiell erhöht und dann konstant hält. Der Anstieg soll etwa 30 Sekunden dauern. Damit möchte ich einen Darlington ansteuern, welcher eine starke LED mit Strom versorgt. Wie lässt sich der exponentielle Stromanstieg realisieren?
Exponentielle Spannung mit einem RC-Glied + Impedanzwandler. Strom mit einem RC-Glied + Spannungsgesteuerter Stromquelle.
Sorry, ich muss wohl noch eine Angabe machen. Der Anstieg des Stromes soll proportional sein zu a^t, wobei a eine Konstante und t die Zeit.
:
Bearbeitet durch User
Du könntest einen kleinen µC verwenden und in einer Lookup Table deinen Spannungsverlauf speichern und dann abrufen und mit PWM ausgeben. z.B. so oder ähnlich
1 | const unsigned char lut[120]={0,1,2,4,8,...} |
2 | for(i=0;i<120;i++) |
3 | {
|
4 | PWM=lut[i]; |
5 | delay_ms(250); |
6 | }
|
7 | while(1); |
Dann hast du auf deiner Platine nur einen 8-Pin µC, einen Tiefpass um das PWM zu glätten, und einen Impedanzwandler oder Stromquelle. Du kannst eine beliebige signalform damit erzeugen, alles was Auflösung des PWM-Moduls, Geschwindigkeit und Speicher deins µCs zulassen.
:
Bearbeitet durch User
Ok, danke für den Tipp. Ich wollte eigentlich ohne einen uC auskommt. Mit uC kann ich die LEDs gleich durch einen FET per PWM steuern. Ich dachte, dass es eine triviale Lösung mit wenigen nicht-integrierten Bauteilen für das Problem gibt. Aber bisher habe ich auch nichts dazu im Netz gefunden.
Eine Diode bzw. ein Bipolartransistor haben exponentielle Kennlinien. Allerdings sind die recht temperaturabhängig. Ein uC zum Dimmer ist hier besser, ein kleiner ATtiny & Co reicht.
Maxim S. schrieb: > proportional sein zu a^t, wobei a eine Konstante und t die Zeit. Falk Brunner schrieb: > Eine Diode bzw. ein Bipolartransistor haben exponentielle Kennlinien. Da ist die Basis der Exponentialfunktion ('a'), wie auch bei der Kondensatorladekurve, die natürliche Zahl e und nicht wählbar.
Alles klar, dass muss halt ein uC her. Danke!
Max H. schrieb: > Du könntest einen kleinen µC verwenden und in einer Lookup Table deinen > Spannungsverlauf speichern und dann abrufen und mit PWM ausgeben. > > z.B. so oder ähnlichconst unsigned char lut[120]={0,1,2,4,8,...} > for(i=0;i<120;i++) Lol - dann guck dich schon mal nach einem DAC mit 120 Bit um. Und am besten auch noch gleich nach einem Pufferverstärker mit über 700 dB Dynamikumfang.
Thomas W. schrieb: > dann guck dich schon mal nach einem DAC mit 120 Bit um LoL - dann guck dich schon mal nach einem C-Buch um. Und am besten auch noch gleich ein bisschen Verstand.
:
Bearbeitet durch User
Den Exponentiellen Anstieg kann man auch Analog erzeugen. Das mit der Basis ist kein Problem, das ist nur einer Frage der Zeitkonstante: a^t = exp( ln(A) * t) Einen Unterschied gibt es nur ob a kleiner oder größer als 1 ist. Mit a < 1 hat man die Entladekurve beim Kondensator, mit a > 1 ein exponetielles Wachstum, für das man eine aktive Schaltung braucht. Eine Möglichkeit wäre etwa ein Integrator mit positiver Rückkopplung. Ein anderer Weg wäre über die Exponetielle Diodenkennlinie (linear zunehmender Spannung) - ist aber halt Temperaturabhängig. Das Beispiel mit dem C-Code oben war nicht so toll. Mit 1,2,4 usw. käme man tatsächlich irgendwo bei 120 Bit an. So schwer wird es aber nicht sein eine feinere Tabelle zu erzeugen. Es bleibt aber das Problem, dass man ggf. einen DAC mit hoher Auflösung braucht, wenn das Signal über einen großen Bereich variieren soll.
Ulrich schrieb: > Mit 1,2,4 usw. käme > man tatsächlich irgendwo bei 120 Bit an. Das war nur ein Beispiel, die ersten 3 Zahlen, die mir eingefallen sind. Man müsste sie dann natürlich berechnen.
Max H. schrieb: > const unsigned char lut[120]={0,1,2,4,8,...} Max H. schrieb: > LoL - dann guck dich schon mal nach einem C-Buch um. Und am besten auch > noch gleich ein bisschen Verstand. Dir fehlen anscheinend ein paar Grundlagen über geometrische Folgen [1] und über Zahlenbereiche von in C verwendeten Ganzzahlen. Erzähl mal, wie du bei deinem Array das 120-ste Element in ein unsigned char packen möchtest, wenn jedes Element um einen Faktor 2 größer als das vorhergehende sein soll. Schon bei lut[10] wird das ausgesprochen eng. [1] http://de.wikipedia.org/wiki/Folge_%28Mathematik%29#Geometrische_Folgen
Thomas W. schrieb: > Erzähl mal, wie du bei deinem Array das 120-ste Element in ein unsigned > char packen möchtest, wenn jedes Element um einen Faktor 2 größer als > das vorhergehende sein soll. Max H. schrieb: > Das war nur ein Beispiel, die ersten 3 Zahlen, die mir eingefallen sind. > Man müsste sie dann natürlich berechnen.
Der Hauptnachteil einer digitalen Lösung ist: Am Ende geht's nur noch mit Riesenschritten weiter. Selbst ein etwas höher auflösender Wandler bekommt hier ein Schild mit der Aufschrift: Vorsicht Stufe. Ich würde mal nach einer analogen Lösung suchen.
Also das Problem mit zu wenigen Bits kann man ja einfach akzeptieren und die Exponentialfunktion auf die Anzahl an verfügbaren Werten möglichst gleichmäßig verteilen. Es gilt immer a>1. Rückgekoppelter Integrator hört sich interessant an. Ich werde mal nachsehen, wie das funktioniert.
>Also das Problem mit zu wenigen Bits kann man ja einfach akzeptieren und >die Exponentialfunktion auf die Anzahl an verfügbaren Werten möglichst >gleichmäßig verteilen. Eben nicht. Eine Exponentialfunktion hat im Anfangsbereich eine sehr geringe Steigung, so dass sich der Ausgangswert, über einen größeren Bereich, gar nicht ändert. Später aber in nicht teilbaren Riesenschritten fortschreitet.
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.