-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Gyro in °/s auslesen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2011
    Ort
    A, A
    Beiträge
    10

    Gyro in °/s auslesen

    Anzeige

    Hallo,

    ich habe hier die IMU Sensoreinheit 5DOF von PSarkfun vor mir liegen.
    Verbaut sind hier Beschleunigungssensoren für Z,Y und X Achse und
    Gyrosensorik für X und Y Achse.

    Ich möchte die X-Achse des Gyrosensors auslesen und in °/s also Grad pro Sekunde umrechnen.
    Damit komme ich leider nicht klar, weil ich so viele unterschiedliche Ansätze im Internet gelesen habe...

    Der Gyrosensor besitzt einen Hi und eine Low-Res anschluss. ich möchte den Hi-Res anschluss verwenden.

    Daten:
    Messbereich: 110°/s
    Sensitivity: 9.1mV/°/s


    Zum Einlesen verwende ich einen Mikrocontroller mit 10-Bit ADC und als
    Referenzspannung verwende ich 3.3V. Der Sensor besitzt ebenfalls 3.3V als Versorgungsspannung.

    1.Löungsversuch:
    Code:
    float Gyro = analogRead(Gyro_X);
    Gyro = (Gyro - Offset_Gyro) * (3.3/1023) / 0.0091;
    Die Auflösung des uC mit (3,3 Referezspannung / 1023 Stellen) / Auflöung des Sensors
    Leider kommt so definitiv kein °/s raus, die Werte sind viel zu gering

    2.Lösungsversuch:
    Code:
    110°/s * 0.0091 = 1V  <-- Also gibt der Sensor 1V aus, wenn die Winkelgeschwindigkeit 110°/s beträgt.
    1024/3.3V = 310         <-- So viel Schritte sinds pro V, also pro 110°/s
    310 Schritte / 110°     <-- 1Schritt = 2,81°/s
    
    float Gyro = analogRead(Gyro_X);
    Gyro = (Gyro - Offset_Gyro) * 2,81     <-- Also die Schritte kommen vom ADC Wandler, und ich weis pro Schritt sinds 2,82°/s

    Alle weiteren Lösungsversuche waren eher (sinnfreies) rumprobieren...


    Ich wäre sehr Dankbar um eure hilfe
    häng da iwie...mein Hirn will nicht mehr

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    41
    Beiträge
    398
    Hi,
    ich würde die Zeile
    Code:
    Gyro = (Gyro - Offset_Gyro) * (3.3/1023) / 0.0091;
    so schreiben
    Code:
    Volt = (analogRead(Gyro_X) * 3.3) / 1024.0;
    GradProSec = Volt * 110.0;
    Immer schön in einzelnen Schritten denken

    Gruß
    Georg

    EDIT: Welche Spannung gibt dir der Gyro bei 110°/s? 1 Volt oder Vcc?

    EDIT2:

    Ok, hier sind die datasheets der verwendeten Chips [1] [2] Laut [1] müsstest du also 1V bei 110° pro sec haben. Denke dass die Formel wie oben dann passen müsste.

    [1] http://www.zagrosrobotics.com/files/...eet_IDG500.pdf
    [2] http://www.zagrosrobotics.com/files/adxl335.pdf
    Geändert von schorsch_76 (05.04.2012 um 15:15 Uhr) Grund: Datenblätter hinzugefügt

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2011
    Ort
    A, A
    Beiträge
    10
    hmmm der code ist so zwar schöner aber leider kommt
    immernoch der selbe mist raus....Ändert null am ergebnis.


    Edit:
    ich glaub das is einfach richtig, kann das sein?

    Ich versteif mich hier voll dass das Ergebnis falsch ist....
    Ich brächte vllt einfach ne bestätigung dass kein Programmierfehler vorhanden ist.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2011
    Ort
    A, A
    Beiträge
    10
    Der Sensor gibt mir bei 100°/s 1V aus.

    Laut Internet 110°/s * 9,1mV = 1V

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    41
    Beiträge
    398
    Kannst du AREF auf 1V reduzieren mittels einer Zener Diode? So würdest du die Auflösung deutlich erhöhen

    Gruß
    Georg

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2011
    Ort
    A, A
    Beiträge
    10
    Das geht leider nicht, weil die Sensoren bei 0°/s bereits eine Bias-Spannung ausgeben.
    Laut Datenblatt liegt im "Stillstand" eine Spannung von 1.35V an.
    Im Datenblatt vom IDG-500 findet man das unter Static Output (Bias).
    Durch Beschleunigen nach links wird dann 1V abgezogen, bei Beschleunigung
    nach rechts dann +1V addiert.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    41
    Beiträge
    398
    Wenn möglich würde ich versuchen eine Tabelle mit gelieferten Werten und echten Werten aufzunehmen. Hieraus kannst du dann eine Kalibrierung vornehmen. Mit etwas Glück kommst du mit einer Geraden hin. Mit der Methode der kleinsten Quadrate kannst du dann die beste Mittelung errechnen.

    Siehe das Beispiel mit der Geraden

    Gruß
    Georg

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2011
    Ort
    A, A
    Beiträge
    10
    Den Filter den du da nennst verwendet man doch eher bei Rauschendem Signal oder?
    Der Sensorwert schwank nur minimal. Das könnte ich aber sehr gut bei meinem zweiten Sensor,
    dem Beschleunigungssensor verwenden

    Wie ich jetzt weiter vor gegangen bin:
    Die Winkelgeschwindigkeit stellt ja immer eine änderung des Winkels dar. Addiere, bzw integriere ich die änderungen
    über die Zeit auf, so sollte ich den Winkel in ° erhalten.


    Code:
    Winkel = Winkel + Gyro * dt
    dt ist die Zeit, z.B. Zykluszeit von einem Interrupt.
    Also die Zeit, die seit der letzten integration vergangen ist.

    wenn ich jetzt den Sensor neige, werden die werte auch schön integriert und ich erhalte meinen Winkel, der ist allerdings viel zu klein

    Dann habe ich ne Tabelle angelegt mit echtem Winkel (Waaserwage mit Winkelanzeige) und der Integrierten Winkel.
    und der Integrierte Winkel ist IMMER um x3 kleiner als der tatsächliche.


    Also entweder stimmt die Formel von oben

    Code:
    Volt = (analogRead(Gyro_X) * 3.3) / 1024.0;
    GradProSec = Volt * 110.0;
    bzw.

    Code:
    Gyro = (Gyro - Offset_Gyro) * (3.3/1023) / 0.0091;

    nicht, oder Sensor ist schuld und gibt mir zu wenig °/s aus.

    Da es sich um nen Faktor handelt, der immer gleich bleibt.....kann ich natürlich einfach das Gyrosignal *3 nehmen.

    Code:
    Gyro = ((Gyro - Offset_Gyro) * (3.3/1023) / 0.0091 )* 3
    Soooooooooo......

    Jetzt kommt das "verrückte":

    Wenn ich nach meiner Formel oder nach deiner Formel Rechne dann machen wir beide:

    Code:
    (3.3/1024) * 110     = 0.3544
    (3.3/1024) /0.0091  =0.3544
    Und wenn das dann mit * multipliziere

    Code:
    0.3544 * 3 ~1

    Mit Worten ausgedrückt: Ich rechne momentan mit den "Steps" des AD-Wandels....
    Also ich rechne im Prinzip wieder zurück und benutze zum errechnen des Winkeln die Integerzahlen von 0-1023


    Ich hab absolut keine Ahnung was da los ist

  9. #9
    Erfahrener Benutzer Begeisterter Techniker Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    41
    Beiträge
    398
    Ich verstehe, du siehst dass das ganze nicht ganz passt, am Ergebnis deiner Integration. Du drehst deinen Bot/Sensor um 110° und siehst, dass das Integrationsergebnis eben nicht 110° sind. Also wieder einen Schritt zurück. WIe sieht das Signal bei der Drehung wirklich aus? Kannst du mit einem Speicheroszi die Spannung während der Drehung messen und den uC den maximalen Wert der "Volt" aufzeichnen lassen? Passen die Messwerte Oszi/uC überein?

    Evtl. ist dein dt zu klein oder der Interrupt löst noch nicht mit der richtigen Frequenz aus.

    Dir ist klar, dass sich hier am Winkel der Messfehler aufsummiert?

    Diese Kalibrierfunktion wird beispielsweise bei Verarbeitungsmaschinen eingesetzt um ausgelesene Sensorwerte mit extern gemessenen Werten zu kalibrieren. So wird sichergestellt, bei der jährlichen Wartung, dass die Maschine immer noch richtig funktioniert und nicht einen verstellten Sensor hat.

    Maschinen Sensor --> AD --> Kalibrierungsgerade ---> Maschinenwert


    Gruß
    Georg
    Geändert von schorsch_76 (07.04.2012 um 09:14 Uhr)

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2011
    Ort
    A, A
    Beiträge
    10
    Ja genau das hast du richtig verstanden! Ich neig den Roboter und anhand der Integration muss zumindest
    Zeitweise der richtige Winkel als Ergebnis kommen.

    Also der Interrupt kommt auf jeden Fall alle 10ms, das habe ich mit einem Oszi nachgemessen (ausgänge gesetzt).
    Die Signale kann ich leider nicht am Oszi messen, weil das keine Specherfunktion hat. Und für direktes Messen ist es zu träge....

    Was meinst du die Messfehler summieren sich auf? Bzw. welche Messfehler meinst du?
    Also rein mit Gyrosensoren bekommt man keinen vernünftigen Winkel! Das ist Fakt. Nicht mit den aufwendigsten Filtermethoden.

    Aber zumindest kurzzeitig muss es klappen. Meine Gyros weichen wenn ich jetzt den Faktor von 3 verwende in 40 sekunden um 5° ab.
    Also ohne Winkelgeschwindigkeit, rein das Gyro-Bias aufintegrieren bin ich nach 40 sekunden bei 5°.
    Wenn ich den Faktor von 3 benutze passt ja alles, ich versteh nur nicht warum.

    Die Kalibierung von Gyros erfolgt auch in der Praxis häufiger! Die Sensoren besitzen auch eine Auto-Zero funktion, die aber anscheinend nichts anderes macht als
    ich per Programm.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Was für ein Gyro ist das???
    Von RoboLeo im Forum Sensoren / Sensorik
    Antworten: 0
    Letzter Beitrag: 29.04.2011, 14:45
  2. gyro enc-03m an rp6 wie anschliesen
    Von Jakobius im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 02.11.2009, 08:38
  3. frage zum Gyro..
    Von Jango1987 im Forum Sensoren / Sensorik
    Antworten: 6
    Letzter Beitrag: 22.04.2009, 16:04
  4. Gyro- und Acc-Board
    Von [IN]Crusher im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 3
    Letzter Beitrag: 26.03.2007, 10:37
  5. gyro
    Von srem im Forum Sensoren / Sensorik
    Antworten: 4
    Letzter Beitrag: 08.02.2005, 14:40

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •