- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 3542

Thema: Willas Shrediquette Tricopter / Quadrocopter / Hexacopter

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von deHarry
    Registriert seit
    17.08.2010
    Beiträge
    597
    Hi William,
    nur mal so zur Auffrischung meiner grauen Zellen: Was ist denn das MLF-Gehäuse?
    In meinem Datenblatt gibt es den XMega32 im TQFP-Gehäuse, das ist das gleiche wie beim Mega328p. Dann im (V)QFN-Gehäuse, das ist das gleiche wie beim MPU-6000. Und dann noch das (VF)BGA-Gehäuse, mit den Balls auf der ganzen Unterseite verteilt.

    Wenn du das QFN-Gehäuse des MPU meinst (das legt zumindest der angegebene Preis des Chip nahe , dann ist die von dir beschriebene Vorgehensweise zumindest schon mal nicht vollkommen abwegig.

    Leider (oder zum Glück ) musste ich bisher solche Chips noch nie auf eine Platine ohne Lötstopplack auflöten, so dass ich (noch) nicht mit Erfahrungswerten dienen kann. Chris dürfte mehr dazu sagen können, der macht das schon sein ganzes Leben lang so .

    Auf einer mit Stopplack und Verzinnung versehenen Platine kann man sich das initiale Verzinnen der Pads sparen. Deine Methode (vorher verzinnen und mit Litze Überschuss entfernen) klingt richtig.
    ...
    Ah, ich sehe gerade, Chris hat sich schon gemeldet, ich spare mir also erst mal das Weitere...
    Gruß
    Harald
    __________________
    Modellbau&Elektronik
    www.harald-sattler.de

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578
    Ich schreibe jetzt lieber nochmal einen neuen Post, nicht dass das noch überlesen wird
    Die Pads vorher zu verzinnen und das überschüssige Lot wieder mit Entlötlitze zu entfernen würde ich nicht machen, da die Gefahr sehr groß ist, dass dir ein paar Pads an der Entlötlitze hängen bleiben.
    Was man aber machen sollte, ist: Die Pads vom UV-Lack befreien (z.b. mit Flußmittel, da ist meistens Alkohol drin oder mit Spiritus) und nur ein Pad verzinnen. Den Vorgang, wie ich es mache, habe ich in meinem vorigen Post beschrieben.
    Wie gesagt, mit meiner Methode gehts fast wie von selbst, ich hatte keinerlei Brücken o.ä.

    Gruß
    Chris

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    45
    Beiträge
    1.273
    Danke für die Tipps :-D Den AVRISP mkII Programmer habe ich jetzt zum laufen bekommen. In der Bascom Hilfe steht tatsächlich die genaue Vorgehensweise für diesen Programmer (LIBUSB usw.). Ich werde heute nachmittag versuchen die MPU zu löten.
    Was ist denn das MLF-Gehäuse?
    meiner Meinung nach ist das eine Art Überbegriff für (V)QFN etc. Also für "Fummelkram". Sander hat übrigens ab nächster Woche den ATXMEGA32A4-MH (MLF bzw VQFN) vorrätig für 4.96 Euro. Und die MPU6050 ist auch vorrätig.
    was genau meinst du den mit Mini Bolt? Noch kleiner als der jetzige?
    Ich konnte den Bolt nicht so klein bauen wie mechanisch möglich, da meine Steuerplatine zu groß war. Dadurch wäre ein großer Teil im Luftstrom der propeller gewesen. Jetzt könnte man eine platine mit 20x20mm verbauen, d.h. ich könnte bei der Gesamtgröße des Copters 3cm sparen. Das gibt bei der IMAV2012 ganze 3.4% mehr Punkte ;-D. Mir macht es Spaß neue Copter zu konstruieren, aber das Konzept vom Bolt ist für meine Zwecke optimal (schnell, klein, wendig, windunempfindlich, 50g Payload), daher werde ich wohl nichts komplett neues machen.
    Viele Grüße, William
    -> http://william.thielicke.org/

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    45
    Beiträge
    1.273
    Ich habe die MPU nun gelötet. Beim Lötvorgang selber sind mir leider schon Pads der Platine abgeflogen. Vielleicht ist mein Platinenreiniger (Kontakt LR) zu aggressiv? Sofern ich das erkennen kann sind aber nur unwichtige Pads abgeflogen. Aber die ganze Sache sieht nicht gut aus. Ich habe es trotzdem einfach mal versucht und den Code von Chris verwendet, bzw. angepasst (richtig...?)
    Code:
    Dim Twi_start As Byte
    Open "twie" For Binary As #2  'twic
    Config Twie = 400000                                        'twic
    I2cinit #2
    
    $lib "i2c_twi.lbx"                                          ' we do not use software emulated I2C but the TWI
    Config Scl = Porte.1                                        ' we need to provide the SCL pin name
    Config Sda = Porte.0                                        ' we need to provide the SDA pin name
    Const Mpuaddw = &B11010000
    Const Mpuaddr = &B11010001
    @chris: Du hast A0 von der MPU auf Masse gelegt, richtig?

    Wenn ich den Code laufen lasse, bekomme ich für Tmp_gyrox(1) und Tmp_gyrox(2) den Wert 114. Das ist auch bei allen anderen Achsen so. Ich würde gerne feststellen ob die MPU funktioniert, aber es gibt für mich noch zu viele Dinge im Bascom Code die ich nicht verstehe. Kann da jemand helfen?
    Viele Grüße, William
    -> http://william.thielicke.org/

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578
    Hi,

    ich würde die Platinen lieber mit Spiritus reinigen
    Zu deinem Code:
    Die "i2c_twi.lbx" ist beim XMega unnötig, die I2C Kommunikation ist schon in der "xmega.lib" integriert.
    Hier mal mein Testcode nur für den MPU und COM2 (portc.6/7) (ungetestet):
    Code:
    $regfile = "xm32a4def.dat"
    $crystal = 32000000
    $framesize = 100
    $hwstack = 100
    $swstack = 100
    
    
    $lib "xmega.lib"
    $external _xmegafix_clear
    $external _xmegafix_rol_r1014
    
    
    Config Osc = Disabled , 32mhzosc = Enabled
    Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1
    
    
    
    Declare Sub Init_mpu()
    Declare Sub Read_mpu()
    
    
    
    
    Config Com2 = 38400 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
    'Config Serialout1 = Buffered , Size = 200
    Open "COM2:" For Binary As #1
    
    
    Dim Twi_start As Byte
    Open "twie" For Binary As #2
    Config Twie = 400000
    
    
    
    Const Mpuaddw = &B11010000                                  'AD0 auf Masse
    Const Mpuaddr = &B11010001
    
    
    Dim Test As Byte
    
    
    Dim Gyrox As Integer
    Dim Gyroy As Integer
    Dim Gyroz As Integer
    Dim Tmp_gyrox(2) As Byte At Gyrox Overlay
    Dim Tmp_gyroy(2) As Byte At Gyroy Overlay
    Dim Tmp_gyroz(2) As Byte At Gyroz Overlay
    
    
    Dim Accx As Integer
    Dim Accy As Integer
    Dim Accz As Integer
    Dim Tmp_accx(2) As Byte At Accx Overlay
    Dim Tmp_accy(2) As Byte At Accy Overlay
    Dim Tmp_accz(2) As Byte At Accz Overlay
    
    
    
    
    I2cinit #2
    
    
    Call Init_mpu()
    
    
    
    
    Config Priority = Static , Vector = Application , Lo = Enabled , Med = Enabled
    Enable Interrupts
    
    
    
    Do
    
    
       Call Read_mpu()
    
       Print #1 , Gyrox
    
       Waitms 100
    
    
    Loop
    
    End
    
    
    Sub Init_mpu()
    
       I2cstart #2                                              'start condition
       I2cwbyte Mpuaddw , #2                                    'write adress of MPU-6050
       I2cwbyte 117 , #2                                        'Register 117 "Who am I"
       I2crepstart #2                                           'repeated start
       I2cwbyte Mpuaddr , #2                                    'read adress of MPU-6050
       I2crbyte Test , Nack , #2                                'read byte WHO_AM_I (Reg 117)
       I2cstop #2                                               'stop condition
    
       Print #1 , Test
    
       I2cstart #2                                              'start condition
       I2cwbyte Mpuaddw , #2                                    'write adress of MPU-6050
       I2cwbyte 25 , #2                                         'Register 25 Sample Rate Divider (1..8 kHz)
       I2cwbyte &B00000000 , #2                                 'Divider set to 1   (soll)
       I2cstop #2                                               'stop condition
    
       I2cstart #2                                              'start condition
       I2cwbyte Mpuaddw , #2                                    'write adress of MPU-6050
       I2cwbyte 26 , #2                                         'Register 26 DLPF_CFG (digital lowpass filter) Configuration
       I2cwbyte &B00000000 , #2                                 'Bits 0..2 = 000 - ACC:260Hz, 0.0ms; Gyro:256Hz, 0.98ms   ( &B00000000 )
       I2cstop #2                                               'stop condition
    
       I2cstart #2                                              'start condition
       I2cwbyte Mpuaddw , #2                                    'write adress of MPU-6050
       I2cwbyte 27 , #2                                         'Register 27 Gyro Configuration
       I2cwbyte &B00000000 , #2                                 'Bits 3+4 = 00 - Full Scale Range: +/-250°/s
       I2cstop #2                                               'stop condition
    
       I2cstart #2                                              'start condition
       I2cwbyte Mpuaddw , #2                                    'write adress of MPU-6050
       I2cwbyte 28 , #2                                         'Register 28 ACC Configuration
       I2cwbyte &B00000000 , #2                                 'Bits 3+4 = 00 - Full Scale Range: +/-2g / No High Pass Filter
       I2cstop #2                                               'stop condition
    
       I2cstart #2                                              'start condition
       I2cwbyte Mpuaddw , #2                                    'write adress of MPU-6050
       I2cwbyte 107 , #2                                        'Register 107 Power Management 1
       I2cwbyte &B00001011 , #2                                 'No Reset / No Sleep / No Cycle / Temp_Sens: Dis / Clock Source: Z-Gyro
       I2cstop #2
    
    End Sub
    
    
    Sub Read_mpu()
    
       I2cstart #2                                              'X ACC
       I2cwbyte Mpuaddw , #2
       I2cwbyte 59 , #2
       I2crepstart #2
       I2cwbyte Mpuaddr , #2
       I2crbyte Tmp_accx(2) , Ack , #2
       I2crbyte Tmp_accx(1) , Nack , #2
       I2cstop #2
    
       I2cstart #2                                              'Y ACC
       I2cwbyte Mpuaddw , #2
       I2cwbyte 61 , #2
       I2crepstart #2
       I2cwbyte Mpuaddr , #2
       I2crbyte Tmp_accy(2) , Ack , #2
       I2crbyte Tmp_accy(1) , Nack , #2
       I2cstop #2
    
       I2cstart #2                                              'Z ACC
       I2cwbyte Mpuaddw , #2
       I2cwbyte 63 , #2
       I2crepstart #2
       I2cwbyte Mpuaddr , #2
       I2crbyte Tmp_accz(2) , Ack , #2
       I2crbyte Tmp_accz(1) , Nack , #2
       I2cstop #2
    
    
       I2cstart #2                                              'X GYRO
       I2cwbyte Mpuaddw , #2
       I2cwbyte 67 , #2
       I2crepstart #2
       I2cwbyte Mpuaddr , #2
       I2crbyte Tmp_gyrox(2) , Ack , #2
       I2crbyte Tmp_gyrox(1) , Nack , #2
       I2cstop #2
    
       I2cstart #2                                              'Y GYRO
       I2cwbyte Mpuaddw , #2
       I2cwbyte 69 , #2
       I2crepstart #2
       I2cwbyte Mpuaddr , #2
       I2crbyte Tmp_gyroy(2) , Ack , #2
       I2crbyte Tmp_gyroy(1) , Nack , #2
       I2cstop #2
    
       I2cstart #2                                              'Z GYRO
       I2cwbyte Mpuaddw , #2
       I2cwbyte 71 , #2
       I2crepstart #2
       I2cwbyte Mpuaddr , #2
       I2crbyte Tmp_gyroz(2) , Ack , #2
       I2crbyte Tmp_gyroz(1) , Nack , #2
       I2cstop #2
    
    End Sub
    Die Test-Ausgabe sollte einen Wert von 104 (glaube ich) haben.

    Gruß
    Chris

  6. #6
    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 18:51 Uhr)
    Gruß
    Harald
    __________________
    Modellbau&Elektronik
    www.harald-sattler.de

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.12.2011
    Ort
    Muggensturm
    Beiträge
    116
    Ich habe jetzt auch meine Platine, es hat solange gedauert, weil ich dem Chris eine Adresse übermittelt habe, wo die Postleitzahl einen Zahlendreher hatte und die Post so lange gebraucht hat bis sie es gemerkt hat.
    Ich habe sie auch schon bestückt und wie Willa hatte ich Probleme beim Sensor. Es gab einen Kurzschluß in der Betriebsspannung durch den Metallboden des MPUs.
    Jetzt möchte ich gerne etwas ausprobieren. Ihr habt ja wohl Software die funktioniert, wie komme ich da drann?

    gibt es vielleicht ein Programm das die Leuchtdioden der Reihe nach aufleuchten lässt?
    Ich habe auch die Vorwiderstände der LED 1 und 3 auf 390 Ohm verkleinert, damit sie heller leuchten.

    Gruß Bernd

  8. #8
    Erfahrener Benutzer Roboter-Spezialist Avatar von deHarry
    Registriert seit
    17.08.2010
    Beiträge
    597
    Hi William,
    die Basisadresse des MPU ist immer 68H oder 69H (Hex).
    Wenn A0 auf low liegt also 68H (&H68 in BASCOM).

    Um die Schreibadresse (Bit 0 gelöscht) zu erhalten musst du diese 68H 1 Bit nach links shiften und dadurch das Bit 0 mit Null auffüllen.
    Da kommt dann D0H (&HD0 = &B11010000) als Wert raus.
    Die Leseadresse hat das Bit 0 gesetzt, also eins mehr als die Schreibadresse, macht &HD1 (= &B11010001).

    Die Werte, die du oben eingestellt hast, stimmen also.
    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
  •  

fchao-Sinus-Wechselrichter AliExpress