Forum: Mikrocontroller und Digitale Elektronik Tiefpass 1. Ordnung


von Kartoffel (Gast)


Lesenswert?

Hallo Leute,

ich möchte einen Tiefpass in meine Software implementieren, um den 
Eingangssignal für meinen PI-Regler zu glätten.
Als Formel habe ich sowas gefunden:
Ausgang_neu= (1-c)*Ausgang_alt + c*Eingang
Ausgang_alt= Ausgang_neu

Hätt da ein paar Fragen dazu:
wie kann ich denn c besimmen?
Ist beim ersten Durchlauf mein Ausgang_alt =0?
Muss ich jeden Wert an die Funktion schicken und dann gleich weiter an 
den Regler?

danke schön

von mandrake (Gast)


Lesenswert?

Das c in deiner Formel ist eine von dir wählbare Zahl zwischen 0..1
Machst du c sehr klein ändert sich das Ausgangssignal des Filters nicht 
so stark bei Änderungen des Eingangs. Änderungen des Eingangssignals 
schlagen also nur sehr langsam auf den Ausgang durch.
Wenn du c sehr groß wählst reagiert der Ausgang des Filters schnelle auf 
den Eingang und deine Glättung wird schlechter.
Rechne es doch mal auf einem Blatt Papier mit verschiedenen c durch.
Als Eingangssignal nimmst du eine ganze Folge von Einsen. Initialisieren 
tust du Ausgang_alt mit 0.
Dann skizziere dir die Ergebnisfolge. Du wirst feststellen, dass du mit 
c einstellen kannst wieviele 1er du reinschieben musst bis das 
Ausgangssignal auch 1 erreicht. Bei kleinem c dauert es eben länger als 
bei einem großen c.

Gruß

Mandrake

von Kartoffel (Gast)


Lesenswert?

wieso soll ich für den Eingangssignal eine Folge von Einsen nehmen?
Mein Eingangssignal schwankt ja stark und sieht z.B. so aus:
12, 18, 32, 30, 25 etc. Den möchte ich ja glätten, denn der Wert 
schwankt um den Mittelwert von 20, was auch mein Isteingang vom Regler 
ist.

von Michael Wilhelm (Gast)


Lesenswert?

Bilde doch einen Mittelwert von z. B. 8 Signalen.

MW

von mandrake (Gast)


Lesenswert?

Als Test damit du dir quasi die Länge des Einschwingvorgang ansehen 
kannst und c entsprechend wählen kannst.

Gruß

Mandrake

von Kartoffel (Gast)


Lesenswert?

alles klar,
ich hab meine Werte mit verschiedenen c's gefiltert. Werde das c nehmen, 
bei welchem die Schwankungen am geringsten sind!
danke schön

von 3360 (Gast)


Lesenswert?

Ein filter :
http://www.ibrtses.com/embedded/exponential.html

Allerdings... wenn man ein Sensorsignal filtert, sollte man die 
Bandbreite des Systemes nicht unterschreiten.

von Anfänger (Gast)


Lesenswert?

hab den Tiefpass jetzt programmiert.
Leider macht er meinen Regler so langsam, dass er mehr schwingt, als 
ohne TP. :-(

von Tobi S. (Gast)


Lesenswert?

Wenn dein Regler schwingt (vorrausgesetzt bei Heavisidescher 
Eingabgsbeaufspruchung) und von dir nicht gewollt, solltest du
mal schauen ob deine Polstellen richtig liegen.

von Spice (Gast)


Lesenswert?

system instabil...
hast du auch sowas wie eine übertragungsfunktion von deiner bastelei auf 
papier? oder weisst du was die besagten polstellen sind?
gruss spice

von Xion (Gast)


Lesenswert?

wie sehen denn deine Filter Koeffizienten aus?

von Alexander L. (lippi2000)


Lesenswert?

Mit einfachem Auszählen sollte man keine Eingangsfilter bauen. Wie hoch 
ist deine Abtastrate,die Größe der Filterkoeffizienten und die daraus 
entstehende Grenzfrequenz??Wie sieht die Sprungantwort aus?

Vorallem bei zeitkritischen Sachen (Regler) muss doch so etwas bekannt 
sein. Du veränderst doch Zeitkonstante in der Regelschleife.

Gruß Alexander

von Lupin (Gast)


Lesenswert?

Wenn das ganze auf einen AVR läuft wird es wohl gut langsamer. Kann mir 
vorstellen, dass das als Fließkommamultiplikation kompiliert wird. Das 
kostet sehr viel Rechenzeit.

Versuch es mal mit integer multiplikation also wähle C im Bereich von 0 
bis 255 und stell die Formel so um:
Ausgang_neu= ((256-c)*Ausgang_alt + c*Eingang)>>8;

Du musst natürlich alle Variablen als Integer (short oder int, je 
nachdem wieviel Bit du brauchst) definieren.

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
Noch kein Account? Hier anmelden.