mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik wandernden Offset eliminieren


Autor: Frank B_. (frank_b) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: sechsminuszwei (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das macht man, indem man Zusatzinformation verwendet.

Autor: lontano (Gast)
Datum:

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

Autor: Arno H. (arno_h)
Datum:

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

Arno

Autor: Frank B_. (frank_b) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Arno H. (arno_h)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank B_. (frank_b) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

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

Autor: Dirk S. (tomcat)
Datum:

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

Autor: Frank B_. (frank_b) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank B_. (frank_b) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfgang Horn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank B_. (frank_b) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht möchte irgendwer auch nochmal dauerhafte Drehungen damit 
messen? oO

Autor: Frank B_. (frank_b) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

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.