Hallo!
Hier -> (Beitrag "Zeitverhalten von Stromverstärker optimieren") hatte ich nach
Möglichkeiten zur Optimierung des Zeitverhaltens einer
spannungsgesteuerten Stromquelle gefragt. Die Antworten und Hinweise
haben mir geholfen und der Verstärker ist in Betrieb. Ich hatte nun noch
eine weitere Idee das Zeitverhalten zu verbessern, die technisch von
einer ganz anderen Seite kommt und insofern vielleicht einen neuen
Thread rechtfertig.
Die anhängende Abbildung zeigt, wie für einen Spannungssprung am Eingang
des Verstärkers (unteres Diagramm) der ausgegebene Strom folgt (oberes
Diagramm). Mit geht es nun darum, einen möglichst schnellen Sprung ohne
großes Überschwingen am Ausgang zu bekommen. Ich glaube, dass ich die
analogen Möglichkeiten der Frequenzkompensation in der Rückkopplung
erstmal praktisch ausgeschöpft habe (gehen wir hier zumindest mal davon
aus, darum ging es in o.g. Thread).
Mein Gedanke war nun: die Steuerspannung für die Stromquelle (unteres
Diagramm) wird von einem halbwegs schnellen (100 ks/sec) und
hochauflösenden (16 bit) DA-Interface per PC erzeugt. Da das System
insgesamt open-loop läuft, könnte ich das Steuersignal im Vorhinein
digital filtern, bevor es analog auf den Treiber geht. Es müsste ja
möglich sein, aus der vorliegenden Sprungantwort eine Art
Dekonvulotionsfilter zu berechnen, das den Overshot noch etwas
minimiert. Mal ganz naiv für ein Rechteck gedacht: im Moment des
Overshots müsste das Steuersignal ein entsprechendes Tal haben (in der
Zeit), das den Overshot abfängt. Das Ganze müsste man doch eigentlich in
einem Filter abbilden können, der dann natürlich auch für andere
Signalformen funktioniert.
Was ich mir dazu bisher angelesen habe (bin Laie!), funktioniert leider
in der Praxis nicht. Wenn ich es richtig verstanden habe, überträgt man
den gewünschten und tatsächlichen Signalverlauf in die Frequenzdomäne
(per FFT), teilt die beiden Spektren durcheinander und transformiert
dann zurück in die Zeit (inverse FFT), wodurch man den erforderliche
Filterkern erhalten sollte. Ich habe ganz naiv mal folgendes in Matlab
gemacht, mein Filterkern besteht dann aber nur aus Rauschen.
1 | % actual respone a
|
2 | A = fft(a);
|
3 |
|
4 | % desired response d
|
5 | D = fft(d);
|
6 |
|
7 | C = D ./ A;
|
8 |
|
9 | c = ifft(C);
|
Falls die Grundidee überhaupt richtig ist (ist sie?), ist meine
Implementierung vermutlich falsch ... Kann mir da jemand etwas unter die
Arme greifen?
Vielen Dank!