Spannungs- oder Stromquelle mit exponentiellem Anstieg

OP Persönliche Seite #3548026
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?
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.
OP Persönliche Seite
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.
Gast
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.
Gast
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.
Gast
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
Gast
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.
OP Persönliche Seite
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.
Gast
>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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.