www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP hochpass filter (software)


Autor: goaran (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, habe folgendes Problem.
habe am ADC ein Gyroskop hängen. das ganze soll dann mit einm PID Regler 
zur lageregelung verwendet werden.

P und D anteil sind kein problem, allerdings komme ich bei dem I Anteil 
nicht weiter.
Das Problem ist, dass das Gyro einen Temperaturabhängigen Drift hat, und 
auch sonst nicht sehr genau ist, bei dem D und P anteil macht das nichts 
aus, wenn ich es aber integrier addiert sich der Fehler bei jedem 
Schleifendurchlauf und schiesst gegen Unedlich :(

Desswegen suche ich nach irgendeiner Möglichkeit den Fehler im I - 
Anteil der duch leicht versetzte 0_Punkte entsteht rauszurechnen..
siehe bild: http://www.dyyyh.de/quadro/integral.JPG

Entweder das signal direkt "Hochpassfiltern", sodass der startwert auf 0 
gedrückt wird, oder den 0-Punkt irgendwie immer neu berechnen, so dass 
er richtig liegt, oder im integrieten den Linearanteil aufrund der 
0-Verschiebung abziehen. ??

Weis jemanddazu einen guten Algortithmus ?? oder wie würdet ihr das 
Porblem Lösen ?? ( wenn das Integral immer ein bischen kleiner ist als 
tatsächlich wäre das auch nicht schlimm)
Danke schon mal..

Autor: goaran (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch ne anmerkung, was auch gehen wuerde waere das signal durch einen 
sehr tiefen tiefpass zu filetn, und dieses signal dann als 0-Punkt zu 
verwenden...
das problem das ich dabei habe ist allerdings, dass ich dafür riesige 
zahlen brauche bzw ganz viele variablen und dann wird das mit der 
echtzeitregelung nix mehr...

Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nutze für sehr langsame Änderungen (Drift) folgenden Filter:
http://www.edn.com/article/CA6309111.html?text=sim...

Wählt man für K einen Wert 2^n, so reduziert sich die Division auf einen 
einfachen Schiebebefehl. Noch besser für K 2^8,2^16 oder 2^32 nehmen, 
dann einfach das höherwertige Byte bzw. Word nehmen.
Bsp:
Wert adc kommt aus AD-Wandler und ist immer positiv.
unsigned int adc,out;
unsigned long acc;

out = acc/(MAX_UINT+1);   // macht ein guter Compiler richtig schnell
acc += adc - out;
Wenn dein Compiler das nicht beherrscht, dann musst du acc als Variant 
deklarieren:
unsigned int adc,out;
union UNION_ACC{
  unsigned long sum;
  unsigned int res[2];
} acc;

out = acc.res[1];   // bei little endian
acc.sum += adc - out;

Autor: Thomas Bremer (Firma: Druckerei Beste) (virtupic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es mit einem Kalman-Filter? Damit hättest du deinen PID auch 
gleich optimiert.

Nur so eine Idee... Kenne mich da auch nicht wirklich aus, aber die 
Literatur im Netz liest sich ganz gut.

virtuPIC

Autor: Wolfgang Horn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,  goaran,

Du: " addiert sich der Fehler bei jedem Schleifendurchlauf und schiesst 
gegen Unedlich"

Das ist kein Problem, sondern unvermeidbar wie das Wetter.
Denn mit "Gyroskop" werden auch Wendekreisel bezeichnet, und so einen 
hast Du vor Dir.
Er mißt allein die Winkelgeschwindigkeit, aber keine Nordrichtung.

Zur Bestimmung der Nordrichtung eignen sich, in der Reihenfolge, in der 
die Preise um Zehnerpotenzen in die Höhe gehen:
a) Magnetkompaß, für kleinere Anwendungen solche mit Hallsensoren wie 
KMZ51
b) Funkkompaß
c) GPS-Kompaß mit zwei GPS-Antennen im Abstand von > 1 Meter,
d) Nordsuchender Kreisel (sucht die stabile Position, die er erst 
erreicht, wenn seine Drehaschse koaxial ist mit der Erdachse)
e) Nordsuchender Faserkreisel.

Solche Kompanden brauchen aber Zeit zum Messen, und die Kompaßnadel 
zittert.

Üblich ist deshalb das "Inertial Navigation System" mit Wendekreiseln, 
die von einem Magnetkompaß gestützt werden.

Heißt: Den P- und D-Anteil gewinnst Du aus dem Wendekreisel, den 
I-Anteil aus dem Magnetkompaß.


ciao
Wolfgang Horn

Autor: Tommi Huber (drmota)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hilft dir die Anti Reset Windup Massnahme. Näheres z. B. hier
http://www.controlguru.com/2008/021008.html

Beitrag #3674648 wurde vom Autor gelöscht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.