Forum: Mikrocontroller und Digitale Elektronik wandernden Offset eliminieren


von Frank B. (frank_b) Benutzerseite


Lesenswert?

Hallo,

ich habe hier einen Modellbau-Hubschrauber-Kreisel, dieser gibt ein 
PWM-Signal aus, das ich mit einem µC einlese. Ich möchte den Kreisel 
(neben anderen Sensoren, die ich z.T. schon im Griff habe) für einen 
"Balancing-Bot" verwenden.

Leider haben solche Kreisel die unangenehme Eigenschaft, dass der 
0-Punkt wandert. In 3 Minuten kann sich der 0-Punkt bei meinem Exemplar 
schonmal um 5% verschieben.

Gibt es einen einfachen Algorithmus, mit welchem man diesen Effekt 
herausrechnen kann ? Oder hat jemand eine eigene Idee dazu ?

lg, Frank.

von sechsminuszwei (Gast)


Lesenswert?

Ja, das macht man, indem man Zusatzinformation verwendet.

von lontano (Gast)


Lesenswert?

passiert das nur nach dem Einschalten?
Ist es ein periodischer Effekt?
Beobachte genau, dann kannst du auch etwas (vielleicht/hoffentlich) 
unternehmen.

von Arno H. (arno_h)


Lesenswert?

Eine dieser Zusatzinformationen bestände aus dem Kreiseltyp, seiner 
Einbaulage und dem Einbauort sowie der Fundstelle des DB.

Arno

von Frank B. (frank_b) Benutzerseite


Lesenswert?

Ich war eigentlich auf der Suche nach einem "allgemeinen" Algo für 
solche Fälle, gibt es da nichts ?

Ich wollte ersteinmal für gute Messungen sorgen, bevor ich an anderen 
Dingen meine Projekts arbeite..Schritt für Schritt also :-)

Hier die Infos:
Es handelt sich um einen "PG-03" Piezo-Kreisel, besichtigen kann man ihn 
hier:
http://www.conrad.de/Modellbau/et_eh46_pg.sap

Nein, dort habe ich ihn nicht bestellt :-)

Er gibt ein normales Servo-Signal aus, dessen Messung mir kein Problem 
bereitet. Ich füttere ihn mit einem "Servo-Mitte" Signal von 1.5ms, 
erzeugt vom einem µC (mega8), der das ausgegebene Servo-Signal auch 
wieder misst und die Messwerte über i2c an einen weiteren µC(mega16), 
der dann die Steuerung des Bots übernehmen soll, übergibt.

Eingebaut ist der Kreisel noch nicht; ich will ihn erst so gut es geht 
"in den Griff" bekommen bevor ich weitermache.
Der Bot soll auf zwei Rädern balancieren, der Kreisel soll helfen ihn zu 
zu stabilisieren. Ich denke mal, er kommt so ca. 3-5 cm über die Achse. 
Seine Achse ist parallel zu der der Räder.

Desweiteren habe ich einen ADXL202, den ich zur Winkelmessung verwenden 
will, dieser liefert mir inzwischen schon recht stabile Messungen. 
Natürlich muss ich später die Beschleunigungen, die das Messergebnis des 
ADXL verfälschen kompensieren. Dabei soll der Kreisel helfen. Der ADXL 
kommt in etwa in die selbe Höhe wie der Kreisel.

http://www.analog.com/en/prod/0,2877,ADXL202,00.html

Was meinst Du mit "Fundstelle des DB" ? <nix kapier> :-)

Achja, und der Offset verschiebt sich immer, nicht nur in der 
Aufwärm-Phase, und auch wenn er unbewegt auf dem Tisch liegt.. Trotzdem 
ist es vermutlich sinnvoll, so denke ich, das zuerst irgendwie zu 
kompensieren.

Sind meine Überlegungen korrekt ?

lg, Frank

von Arno H. (arno_h)


Lesenswert?

Hersteller geben Datenblätter (DB) heraus und Verkäufer verteilen 
Prospekte, siehe die Bedienungsanleitung.
Der eigentliche Sensor ist oft mit der Herstellerbezeichnung versehen, 
das hilft bei der Suche nach dem Datenblatt (falls das Gehäuse sich 
öffnen lässt).

Du kannst ermitteln, ob diese Drift linear ist und entsprechend 
kompensieren.
Temperatur und Betriebsspannung hast du während der Messungen nicht 
verändert, nehme ich an.

Arno

von yalu (Gast)


Lesenswert?

> In 3 Minuten kann sich der 0-Punkt bei meinem Exemplar schonmal um
> 5% verschieben.

Was liefert der Kreisel? Die Winkelgeschwindigkeit oder deren
zeitliches Integral, also den Winkel? Auf was beziehen sich die 5%?
Wandert der Offset nur in eine Richtung, oder bewegt er sich zufällig
auf- und abwärts?

Lösungsmöglichkeiten:
- besseren Kreisel (wahrscheinlich aber auch teurer)
- Kreisel + Neigungsmesser + Kalmanfilter einsetzen. Der
  Neigungsmesser stellt dabei die absolute Referenz dar. Im Mittel
  liefert er immer die Neigung des Roboters zur Senkrechten, reagiert
  aber dummerweise auf Beschleunigungen nach vorn und hinten. Diesen
  Nachteil hat der Kreisel nicht, dafür liefert er keinen absoluten,
  driftfreien Winkel. Aber beide zusammen sind sie stark :)
- Ganz andere Sensoren einsetzen, bspw. zwei senkrecht nach unten
  messende IR-Abstandssensoren, einer vor und einer hinter der
  Radachse. Bei ebenem Untergrund kann man aus der Messewertdifferenz
  direkt den Winkel berechnen.

von Frank B. (frank_b) Benutzerseite


Lesenswert?

Oh mann... ich habe das Gerät wohl zu sehr als "black box" betrachtet.
"DB" habe ich irgendwie nicht mit "Datenblatt" in Verbindung gebracht 
:-)

Es ist ein Gyro ohne "Heading-Lock", er misst also die 
Winkelbeschleunigung.
Hoffe ich :-))
Der offset wandert "je nach Laune" mal nach oben, mal nach unten, genau 
habe ich das allerdings noch nicht eruiert, kann also keine exakten 
Zahlen nennen.
Die 5% sind eine Schätzung, damit kann ich auch daneben liegen.
Derzeit gebe ich die Messungen über die UART aus und lasse sie mir auf 
dem PC anzeigen. Man kann dem Kreisel beim Driften gut zusehen :-(

Die Lösung mit den Abstandssensoren ist mir zu einfach.. ausserdem soll 
das Ding irgendwann auch draussen herumfahren.

Ich habe jetzt mal etwas geforscht:
In einem Modellbauforum habe ich gelesen, dass wohl mindestens zwei 
verschiedene Kreisel unter dem selben Namen vertrieben werden.

Der eine soll sehr gut sein, der andere hat genau mein Drift-Problem. 
Scheinbar habe ich einen solchen erwischt. Aufmachen kann ich ihn, das 
werde ich heute abend mal machen (bin grade nicht zuhause)

Laut Forum ist ein Murata ENC-03 verbaut.

Datenblatt: http://research.microsoft.com/~awilson/wand/gryo.pdf

Das Datenblatt gibt allerdings nicht allzuviel her.

Ich hatte ihn aus Neugier schoneinmal geöffnet, und im Nachhinein kann 
ich mich an keinen Quarz für den Microcontroller erinnern... vielleicht 
ist ja dessen Oszillator (auch) ein Grund für das Problem. Der 
Controller ist auch nicht beschriftet, soweit ich mich erinnere.

Was mein Ihr, hab ich ne Chance wenn ich den Sensor auslöte eine eigene 
Beschaltung dafür mache ? Mit Platinen ätzen hab ich's nicht so... 
bekommt man da auf Lochraster einigermassen gute Resultate ?

Ich scheue mich allerdings ein wenig vor dem Analog-Kram.. damit habe 
wenig Erfahrung.


Hier:

http://search.murata.co.jp/Ceramy/CatalogAction.do?sHinnm=?&nbsp&sNHinnm=ENC-03J&sNhin_key=ENC-03J&sLang=en&sParam=ENC-03

ist als OP ein NJM2115 angegeben, welchen gut erhältlichen könnte ich da 
als Ersatz verwenden ? Und komme ich dann mit einem 10-Bit Wandler hin ? 
Das bringt natürlich nur etwas, wenn meine Schaltung besser wird, als 
das fertige Gerät "PG 03". Wie stehen die Chancen ?

Dann hätte ich hier noch einen EWTS4J in der Schublade liegen.
Datenblatt:

http://www.pollin.de/shop/downloads/D180012D.PDF

Scheint aus dem Automotive-Bereich zu sein.
Diesen habe ich mir wegen des Analog-Ausgangs aber noch nicht genauer 
angeschaut.
Was meint Ihr,  stehen die Chancen damit besser ?


lg, Frank

von Dirk S. (tomcat)


Lesenswert?

Deine Berührungsängste zur Analogtechnik wirst du wohl ablegen müssen, 
sonst kommst du in der Sensorik generell nicht weiter ...

von Frank B. (frank_b) Benutzerseite


Lesenswert?

Yep, da hast Du wohl recht. Bisher habe ich mich durchaus erfolgreich 
drumrumgemogelt :-)

naja, diese Aktion wäre jetzt ja mal ein Anlass...

lg, Frank.

von Michael K. (mmike)


Lesenswert?

Was Du machen könntest ist entweder einen digitalen Hochpass im µC 
programmieren, oder die pragmatische Lösung einfach nur Wertänderungen 
zulassen, die einen bestimmten Schwellwert übersteigen:

#define MIN_CHANGE_VALUE 50

if (abs (ActualValue - LastValue) < MIN_CHANGE_VALUE)
{
  LastValue = ActualValue;
}
else
{
  RotValue = ActualValue - LastValue;
}


Im Datenblatt der Murata's ist ja auch ein analoger Hochpass 
nachgeschaltet um die Drift zu eleminieren ...

Grüße,
Michael

von Frank B. (frank_b) Benutzerseite


Lesenswert?

Hallo Michael,

ups, da hätte ich auch eigentlich selbst drauf kommen können, manchmal 
sieht man den Wald vor lauter Bäumen nicht !

Danke !

Werde ich mal probieren.

lg, Frank.

von Wolfgang Horn (Gast)


Lesenswert?

Hi, Frank,

diese Drift haben alle Kreisel, gleich welcher Bauart.
Leider haben die Schwankungen einen zufallsverteilten Anteil.

Eine Möglichkeit war und ist die Disziplinierung mit einem magnetischen 
Kompaß. Dessen Nadel zittert bekanntlich wie das Erdmagnetfeld im 
Sonnensturm, ist aber langfristig stabil.

Noch präziser wäre ein nordsuchender Kreisel - aber unerschwinglich, 
viel zu schwer und viel zu stromhungrig.

Als Hubschrauberpilot brauchst Du den noch zur Dämpfung, und dafür 
taugen die Winzlinge gut.


Ciao
#Wolfgang Horn

von Frank B. (frank_b) Benutzerseite


Lesenswert?

Wollte mal ne kurze Rückmeldung geben:

Mit einem Hochpass IIR-Filter, Bessel, Fcut=10 Hertz ist meine Drift 
vollständig entfernt.

Gibt es da irgendwelche negative Seiteneffekte, oder warum bauen die 
Hersteller nicht in ihre Kreisel ein ?
Klar, ich meine beim fliegen stört eine leichte Drift nicht sooo sehr, 
aber wenn man sie so einfach herausfiltern kann, warum wird das nicht 
gemacht ?
Irgendetwas muss doch dagegen sprechen ?

Frank.

von Dennis (Gast)


Lesenswert?

Vielleicht möchte irgendwer auch nochmal dauerhafte Drehungen damit 
messen? oO

von Frank B. (frank_b) Benutzerseite


Lesenswert?

Meinst Du ? Aber dann steuert der Kreisel doch ständig dagegen, oder 
nicht ?

Naja, kenne mich mit Hubis nicht so aus, hatte vor vielen Jahren nur mal 
einige Segler.

Frank

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.