Hallo zusammen,
ich habe angehangenes Filter (1kHz) simulatorisch "gebastelt". Leider
kann ich die Ü-Fkt zur mathematischen Ermittlung der Grenzfrequenz nicht
aufstellen. Kann mir jemand Denkanstöße liefern? Meine Uni-Zeit liegt
echt schon lang zurück. Ich bekomms leider nicht mehr hin.
Gruß
Steffen
Hallo Helmut,
danke dir erstmal. Kannst du mir noch weiterhelfen, wie ich daraus die
Grenzfrequenz bestimme. Ich habe mittlerweile auch die Ü-Fkt
aufgestellt. Sieht etwas anders aus als deine.
Gruß
Steffen
Die Grenzfrequenz ergibt sich, wenn man den Betrag der
Übertagungsfunktion nimmt und diese gleich 1/sqrt(2) setzt. Dann das
Ganze nach w(omega) bzw f auflösen. Diese Berechnung erfodert das Lösen
einer Gleichung 3. Grades.
Normalwerweise geht man aber anders vor. Man überlegt sich ob man
Bessel- oder Butterworth-Funktion haben will und die gewünschte
Grenzfrequenz. Dann gibt man am besten C1, C2 und C3 vor und berechnet
die Widerstände. Diese Berechnung erfordert das Lösen eines
nichtlinearen Gleichungssystems (Matlab). Da man die so berechneten
Widerstände nicht exakt mit den Werten kaufen kann oder will, simuliert
man dann mit den gewählten Widerständen mit LTspice um die Abweichung im
Frequenzgang zu überprüfen.
In der Literatur findet man auch geschlossene Lösungen(Formeln) bei
denen durch Vorgabe gleicher Widerstände die Kapazitäten berechnet
werden. Allerdings muss man dann eventuell "krumme" Kapazitätswerte in
Kauf nehmen.
Hallo Helmut,
die Widerstände und Cs habe ich ja sozusagen simulatorisch bereits
festgelegt. Was ich nun brauche ist eigentlich nur noch eine Funktion,
mit der ich für jede Amplitude+Frequenz der Eingangsspannung die
Ausgangsspannung berechnen kann.
Geht das dann einfacher?
Gruß
Steffen
Im Anhang findest du die Formel für die Grenzfrequenz in Python-Syntax.
Mit deinen Werten für die Widerstände und Kondensatoren ist
fg = 915,2637 Hz
Das meint auch LTspice, wenn man einen nahezu idealen Opamp nimmt oder
ihn durch eine E-Quelle mit Verstärkung 1 ersetzt.
> Im Anhang findest du die Formel für die Grenzfrequenz in Python-Syntax.
Mit welchem Programm(Maple, Maxima,...) wurde diese Formel für die
Grenzfrequenz erstellt?
Helmut S. schrieb:> Mit welchem Programm(Maple, Maxima,...) wurde diese Gleichung erstellt?
Programm?
Ich habe gerade eine Schubkarre organisiert, um damit die
vollgeschriebenen Zettel zum Altpapiercontainer zu bringen ;-)
Nein, Spaß beiseite: Ich hab's vom Fräulein Maxima rechnen lassen.
Man kann da aber sicher noch ein paar Dinge etwas vereinfachen.
bzw. Warum liefert mir folgendes Tool eine höhere fg ? Ähnlich siehts
auch beim TI Tool aus. Wenn ich messe, komme ich auf die von dir
berechnete fg...
http://sim.okawa-denshi.jp/en/Sallen3tool.php
Steffen schrieb:> Kannst du es kurz erklären (ein bisschen> Syntax). Ich verstehe python leider nicht.
So viel zu erklären gibt es da nicht:
r1, r2, r3, c1, c2 und c3 sind die Werte der passiven Bauteile.
+, -, * und / sind die Operatoren für die vier Grundrechenarten.
** ist der Potenzoperator und sqrt() die Quadratwurzelfunktion. An zwei
Stellen tauchen auch noch Kubikwurzeln auf, die hier als **(1/3)
geschrieben werden.
Hi Yalu,
ich gehe davon aus, dass du die Formel nicht extra für mich eingegeben
haszt ;) Die ist ja echt ziemlich mächtig. Wie bist du auf die Formel
gekommen, bzw. woher kommt sie?
Danke dir erstmal!
Gruß
Steffen
Steffen schrieb:> Warum liefert mir folgendes Tool eine höhere fg ?
Dieses Tool berechnet die Polstellen der Übertragungsfunktion bzw. die
Beträge der zugehörigen Frequenzen. Der erste Pol entspricht aber nicht
automatisch der 3dB-Grenzfrequenz des Gesamtfilters. Das ist nur dann
näherungsweise der Fall, wenn der zweite Pol weit genug vom ersten
entfernt liegt, so dass der Frequenzgang im Bereich des ersten Pols
durch den zweiten nicht oder nur unwesentlich beeinflusst wird.
Steffen schrieb:> Wie bist du auf die Formel gekommen, bzw. woher kommt sie?
Wie schon oben geschrieben, habe ich dafür das Computer-Algebra-System
(CAS) Maxima verwendet:
http://maxima.sourceforge.net/
Dazu gibt es noch eine Oberfläche, die das Arbeiten damit etwas
komfortabler macht:
http://andrejv.github.io/wxmaxima/
Ich habe die von Maxima ermittelte Formel in ein Python-Programm
kopiert, weil ich davon ausging, dass mehr Leute Python als Maxima
installiert haben.
Ah OK. Ich werd mir das Tool mal herunterladen. Kannst du mir die maxima
sources zur Verfügung stellen? Dann habe ich gleich mal was "reales" zum
rumspielen.
Wie hast du es gerechnet, damit du das Problem mit den zu eng
beieinanderstehenden Polstellen nicht hast?
Gruß
Steffen
PS:
Ich habs eben mal ausprobiert. Wenn man die Pole näher zueinander
bringt, stimmt es mit der Simulation überein. Komisch. Sollte es nicht
anders herum sein?
Steffen schrieb:> Ah OK. Ich werd mir das Tool mal herunterladen. Kannst du mir die maxima> sources zur Verfügung stellen? Dann habe ich gleich mal was "reales" zum> rumspielen.
Ich habe die Quelldatei mit ein paar Kommentaren versehen und als
Maxima-Batch- und als wxMaxima-Datei angehängt. Erstere startest du von
der Kommandozeile mit
1
maxima -b sallen3.mac
letztere lädst du mit "File" -> "Open..." in wxMaxima und startest die
Berechnung mit "Cell" -> "Evaluate All Visible Cells".
> Wie hast du es gerechnet, damit du das Problem mit den zu eng> beieinanderstehenden Polstellen nicht hast?
Genau so, wie es Helmut oben geschrieben hat:
Helmut S. schrieb:> Die Grenzfrequenz ergibt sich, wenn man den Betrag der> Übertagungsfunktion nimmt und diese gleich 1/sqrt(2) setzt. Dann das> Ganze nach w(omega) bzw f auflösen.
Herleitung der -3dB Grenzfrequenz
F(jw) = 1/(1 +jw*(R1*C1+(R1+R2+R3)*C3) +(jw)^2*(R1*(R2+R3)*C1*C3 +
R3*(R1+R2)*C2*C3) + (jw)^3*R1*R2*R3*C1*C2*C3)
|F(w)| = 1/sqrt(Realteil^2+Imaginärteil^2)
|F(w)| = 1/sqrt( (1-w^2*(R1*(R2+R3)*C1*C3 +
R3*(R1+R2)*C2*C3))^2 + (w*(R1*C1+(R1+R2+R3)*C3)-w^3*R1*R2*R3*C1*C2*C3)^2
)
w = 2*pi*f
-3dB Frequenz berechnen
1/sqrt(2) = 1/sqrt( (1-w^2*(R1*(R2+R3)*C1*C3 +
R3*(R1+R2)*C2*C3))^2 + (w*(R1*C1+(R1+R2+R3)*C3)-w^3*R1*R2*R3*C1*C2*C3)^2
)
1-w^2*(R1*(R2+R3)*C1*C3+R3*(R1+R2)*C2*C3))^2 +
(w*(R1*C1+(R1+R2+R3)*C3)-w^3*R1*R2*R3*C1*C2*C3)^2 = 2
(1-w^2*d)^2 +(w*e-w^3*f)^2 = 2
x=w^2
x3 +x^2*(d^2-2*e*f)/f^2 + x*(e^2-2*d)/f^2 -1/f^2 = 0
Hier die Berechnung mit Scilab unter Anwendung der Cardanischen
Lösungsformel für Gleichungen 3. Grades.
Achtung diese untenstehende Berechnung erfordert das "double precision"
Zahlenformat falls das jemand in irgend einer Programmiersprache
implementiert. Der Grund ist dass die Variable D den Wert 10^47
erreicht. Matheprogramme rechnen schon in der Grundeinstellung mit
double precision. Man beachte nthroot(,3). Die Funktion ^(1/3) liefert
falsche Werte für negative Argumente.
--------- Scilab code ----------
R1=15e3
R2=100e3
R3=30e3
C1=10e-9
C2=3.3e-9
C3=1e-9
d=R1*(R2+R3)*C1*C3 + R3*(R1+R2)*C2*C3
e=R1*C1+(R1+R2+R3)*C3
f=R1*R2*R3*C1*C2*C3
a=(d*d-2*e*f)/(f*f)
b=(e*e-2*d)/(f*f)
c=-1/(f*f)
// Lösung der Gleichung 3. Grades mit der Cardanischen Formel
// x^3 + a*x^2 + b*x + c = 0
p=(3*b-a*a)/3
q=2*a*a*a/27-a*b/3+c
D=p*p*p/27+q*q/4
u=nthroot(-q/2+sqrt(D),3)
v=nthroot(-q/2-sqrt(D),3)
x=u+v-a/3
w=sqrt(x)
f=w/(2*%pi)
Ergebnis:
f = 915.26369
Im Anhang ist die Datei(.asc) für die Simulation mit LTspice.