- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 3542

Thema: Willas Shrediquette Tricopter / Quadrocopter / Hexacopter

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #11
    Erfahrener Benutzer Roboter-Spezialist Avatar von deHarry
    Registriert seit
    17.08.2010
    Beiträge
    597
    Hi Chris,

    104 als Antwort vom MPU ist korrekt.

    In der Leseroutine (Read_MPU() solltest du um Zeit zu sparen die Tatsache ausnutzen, dass die ACC- und die Gyro-Register jeweils ohne Lücke hintereinander liegen.

    Das machst du, indem du das Startregister für X ACC vorgibst und dann alle 6 Werte hintereinander mit I2rbyte xxx, Ack , #2 einliest.
    Erst beim zweiten Byte von Z ACC kommt der Lesebefehl mit Nack und anschließendem I2Stop.
    Da wir die Z-Achse nicht verwenden, kannst du weitere 2 Leseops sparen, indem du schon bei Y ACC aufhörst.

    Bei den Gyros genauso, aber da der Tempsensor dazwischen liegt, muss leider hier neu aufgesetzt werden.

    [edit]
    Für den Mega328p sieht das konkret so aus:

    Code:
    '===Read MPU-6050===============================================================
    Sub Read_mpu
    
    '==All registers are read in one burst read operation, so FIFO has to be enabled
    ' wir müssten auf den FIFO-Interrupt warten und dann burst-lesen, aber der INT ist nicht verdrahtet :-(
    ' also kein burst mode zum Lesen
    '==Read only 2 really used ACC-Axis from MPU-6050==
    
      I2cstart                                                  'start condition
      I2cwbyte Mpuaddw                                          'write adress of MPU-6050
      I2cwbyte 59                                               'Register 59 ACCEL_XOUT_H
      I2cstart                                                  'repeated start
      I2cwbyte Mpuaddr                                          'read adress of MPU-6050
      I2crbyte Meas_accy(2) , Ack                               'read byte ACCEL_XOUT_H (Reg 59)
      I2crbyte Meas_accy(1) , Ack                               'read byte ACCEL_XOUT_L (Reg 60)
    
      I2crbyte Meas_accx(2) , Ack                               'read byte ACCEL_YOUT_H (Reg 61)
      I2crbyte Meas_accx(1) , Nack                              'read byte ACCEL_YOUT_L (Reg 62)
      I2cstop                                                   'stop condition
    
    '==Read all 3 Gyro-Axis from MPU-6050==
      I2cstart                                                  'start condition
      I2cwbyte Mpuaddw                                          'write adress of MPU-6050
      I2cwbyte 67                                               'Register 67 GYRO_XOUT_H
      I2cstart                                                  'repeated start
      I2cwbyte Mpuaddr                                          'read adress of MPU-6050
      I2crbyte Meas_gyrox(2) , Ack                              'read byte GYRO_XOUT_H (Reg 67)
      I2crbyte Meas_gyrox(1) , Ack                              'read byte GYRO_XOUT_L (Reg 68)
    
      I2crbyte Meas_gyroy(2) , Ack                              'read byte GYRO_YOUT_H (Reg 69)
      I2crbyte Meas_gyroy(1) , Ack                              'read byte GYRO_YOUT_L (Reg 70)
    
      I2crbyte Meas_gyroz(2) , Ack                              'read byte GYRO_ZOUT_H (Reg 71)
      I2crbyte Meas_gyroz(1) , Nack                             'read byte GYRO_ZOUT_L (Reg 72)
      I2cstop                                                   'stop condition
    
      Get_gyrox = Get_gyrox / 64                                ' auf 10 bit schrumpfen
      Get_gyroy = Get_gyroy / 64                                ' auf 10 bit schrumpfen
      Get_gyroz = Get_gyroz / 64                                ' auf 10 bit schrumpfen
      Get_gyroy = Get_gyroy + 434                               ' (512 - 68) die gelesenen Werte in die Nähe von 512 skalieren
      Get_gyrox = Get_gyrox + 589                               ' (512 + 77) damit Willas Algorithmen stimmen
      Get_gyroz = Get_gyroz + 464                               ' (512 - 48)
    
      Get_accx = Get_accx / 64                                  ' auf 10 bit schrumpfen
      Get_accy = Get_accy / 64                                  ' auf 10 bit schrumpfen
      Get_accx = Get_accx + 500                                 ' (512 +- xx) die gelesenen Werte in die Nähe von 512 skalieren
      Get_accy = Get_accy + 500                                 ' (512 +- xx) damit Willas Algorithmen stimmen
    
    End Sub
    Die "Skalierung" am Ende der Routine muss eventuell nicht sein, wenn die Algorithmen entsprechend angepasst werden.
    Geändert von deHarry (30.03.2012 um 19:51 Uhr)
    Gruß
    Harald
    __________________
    Modellbau&Elektronik
    www.harald-sattler.de

Stichworte

Berechtigungen

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

Labornetzteil AliExpress