Forum: Digitale Signalverarbeitung / DSP / Machine Learning hochpass filter (software)


von goaran (Gast)


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..

von goaran (Gast)


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...

von Rolf (Gast)


Lesenswert?

Ich nutze für sehr langsame Änderungen (Drift) folgenden Filter:
http://www.edn.com/article/CA6309111.html?text=simple+digital+filter

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.
1
unsigned int adc,out;
2
unsigned long acc;
3
4
out = acc/(MAX_UINT+1);   // macht ein guter Compiler richtig schnell
5
acc += adc - out;
Wenn dein Compiler das nicht beherrscht, dann musst du acc als Variant 
deklarieren:
1
unsigned int adc,out;
2
union UNION_ACC{
3
  unsigned long sum;
4
  unsigned int res[2];
5
} acc;
6
7
out = acc.res[1];   // bei little endian
8
acc.sum += adc - out;

von Thomas B. (Firma: Druckerei Beste) (virtupic)


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

von Wolfgang Horn (Gast)


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

von Tommi H. (drmota)


Angehängte Dateien:

Lesenswert?

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

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.