- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 24

Thema: Hexacopter

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578
    Ja klar, erstmal billig anfangen und wenns dann funktioniert auf Qualität setzen! So hab ich das auch gemacht (gottseidank)..
    Jeder 1. Timer / Port hat 4 PWMs und jeder 2. Timer / Port hat 2 PWMs, immer 16Bit.

    Gruß
    Chris

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    26.06.2008
    Alter
    34
    Beiträge
    59
    Sollte ich denn noch eine Überwachung für den Lipo einbauen?
    Oder ist ein Wächter im Regler?

    Und wie ist die Beschaltung ESC - AVR? Reicht eine einfache Verbindung zwischen PWM und dem Regler?

    Habe im Anhang mal den ersten Schaltplan - eventuell könnt ihr mal einen Blick darauf werfen.

    mainboard V1.0.pdf

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

    es ist kein Muss, aber Schaden wirds bestimmt nicht
    Die Regler haben in der Regel eine Unterspannungsabschaltung, diese kann man manchmal programmieren, sodass entweder der Strom runtergeregelt wird (auf 70%) oder die Motoren komplett abschalten (nicht zu empfehlen).
    Es reicht eine Verbindung der PWM-Ports zu den Reglern, die Masse wird über den Akku sowieso verbunden.

    Gruß
    Chris

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    26.06.2008
    Alter
    34
    Beiträge
    59
    So, die Platinenlayout ist fertig & die ersten Bestellungen sind raus
    - ATXMega32 + Quarz etc
    - 2 Motoren, 2 Regler, 2 Propeller
    - MPU6050 auf Breakoutboard
    Denke das sollte für den Anfang reichen!?

    Könnt ihr mir denn noch etwas theorie empfehlen?
    z.B. - Wie ich mit den Daten des Gyro + Beschleunigungssensor umgehen muss / Wie erreiche ich es, dass sich die 2 Propeller, an einer Wippe, ausbalancieren?
    - Regelungstechnik (Schritte zu einem gut funktionierenden PID-Regler, und dessen Funktion (Wikipedia kenn ich da Schon, gerne etwas praktischer, in C ))
    - ...

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    26.06.2008
    Alter
    34
    Beiträge
    59
    Hallo zusammen, nun hat sich doch ein Problem aufgetan - der I2C.

    Ich habe aus Atmels ASF die TWI-Integration.

    Das Protokoll des MPU6050 ist mir klar, steht ja im Datenblatt

    Start-Bedingung - Adresse - Write bit - ACK vom MPU - Register-Adresse - ACK vom MPU
    Start-Bedingung - Adresse - Readbit - ACK vom MPU - Byte vom MPU - NACK vom Master - Stop Bedingung.
    Nun habe ich einige male die TWI-Docs von Atmel "durchgeblättert", aber so wie es mit schein stehen mir nur die
    twi_master_write() und twi_master_read() - funktionen zur verfügung.

    Von den ATMegas kenne ich Fleurys lib, mit Mauellem senden von Start/Stop/(N)ACK/etc.
    Wie genau das die Lib von Atmel macht, konnte ich nicht herausfinden :-/

    Ich habe es nun wie folgt umgesetzt (davon ausgehen, dass Atmel das schon richtig macht):
    Code:
    uint8_t data_received[10];
    
    
    void mpu6050_readByte(uint8_t regAddr) {
    
    	 
    	 usart_serial_write_packet(USART_DEBUG, "START-Read\n", strlen("START-Read\n"));
    		 uint8_t *data = regAddr;
    		 twi_package_t packet_write = {
    			 .chip         = MPU6050_ADDR,      // TWI slave bus address
    			 .buffer       = data,			// transfer data source buffer
    			 .length       = 1		// transfer data size (bytes)
    		 };
    		 
    		 while (twi_master_write(&TWIE, &packet_write) != TWI_SUCCESS);
    		delay_ms(10);
    		
    		//request register
    		twi_package_t packet_read = {
    			.chip         = MPU6050_ADDR,      // TWI slave bus address
    			.buffer       = data_received,        // transfer data destination buffer
    			.length       = 1                    // transfer data size (bytes)
    		};
    		
    		// Perform a multi-byte read access then check the result.
    		if(twi_master_read(&TWIE, &packet_read) == TWI_SUCCESS){
    			usart_serial_write_packet(USART_DEBUG, "TWI-Read OK\n", strlen("TWI-Read OK\n"));
    		}	
    }
    Nach diesem Beispiel:
    http://asf.atmel.com/docs/3.3.0/xmeg...uickstart.html

    Wenn ich so nun das WHO_AM_I-Register-Auslese

    Code:
    	while(1)
    	{
    		mpu6050_readByte(MPU6050_RA_WHO_AM_I);
    		test = data_received[0];
    		
    		char itmp[10];
    		itoa(test, itmp, 10);
    		usart_serial_write_packet(USART_DEBUG, itmp, strlen(itmp));
    		usart_serial_putchar(USART_DEBUG, '\n');}
    Bekomme ich eine 205 (0xCD) und nicht 104 (0x68 ) als Antwort.

    Für GYRO_XOUT_L/H, ACCEL_XOUT_L/H und TEMP_OUT_L/H bekomme ich immer 255 zurück.

    Ich habe am MPU6050 noch keine Initialisierung durchgeführt. So wie ich das sehe, ist es auch nicht unbedingt notwendig.

    Hab ihr mir eventuell hierzu ein paar tpps? Eventuell eine andere TWI-Lib, oder muss ich doch bestimmte Initialisierungen machen?
    Vielen Dank!

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

    der MPU muss initialisiert werden und zwar Register 107 (Power Management 1). Außerdem ist es ratsam, folgende Register einzustellen: 25, 26, 27 und 28.
    Mach das mal und gib dann Bescheid.

    Gruß
    Chris

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    26.06.2008
    Alter
    34
    Beiträge
    59
    hi,

    ok danke, habe nun folgende config:

    Code:
            MPU6050_writeByte(&TWIE, MPU6050_RA_PWR_MGMT_1, (MPU6050_CLOCK_PLL_XGYRO));        
        MPU6050_writeByte(&TWIE, MPU6050_RA_CONFIG, (MPU6050_DLPF_BW_42 | MPU6050_EXT_SYNC_DISABLED));    
        MPU6050_writeByte(&TWIE, MPU6050_RA_SMPLRT_DIV, 4);
        MPU6050_writeByte(&TWIE, MPU6050_RA_GYRO_CONFIG, (MPU6050_GYRO_FS_500));
        MPU6050_writeByte(&TWIE, MPU6050_RA_ACCEL_CONFIG, (MPU6050_ACCEL_FS_4));
    Powermanagement: Clock: X-Axen Gyro
    Config: DLPF_CFG:3, EXT_SYNC disabled
    SampleRate: 1000/5 -> 200hz
    Gyro: +-500°/s
    Acc: +-4g

    [...zeg wieder weg, ist alt...]
    //UPDATE 10:30Uhr:
    Ich vermute es sind die ACK/NACK/STOP-Bedingungen, die die Fehler verursachen.

    Code:
    void MPU6050_writeByte(TWI_t *twi, uint8_t regAdress, uint8_t data){
        Send_Address(twi, MPU6050_ADDR, 0);
        delay_ms(10);
        twi->MASTER.DATA = regAdress;
        while(!(twi->MASTER.STATUS&TWI_MASTER_WIF_bm));
        
        delay_ms(10);
        twi->MASTER.DATA = data;
        while(!(twi->MASTER.STATUS&TWI_MASTER_WIF_bm));
        
        delay_ms(10);
        twi->MASTER.CTRLC = TWI_MASTER_CMD_STOP_gc;
        delay_ms(10);
    }
    
    
    uint8_t MPU6050_readSequence(TWI_t *twi, uint8_t regAdress)
    {
    
    
        uint8_t readData;
        Send_Address(twi, MPU6050_ADDR, 0);
    
    
        delay_ms(10);
        twi->MASTER.DATA = regAdress;
        while(!(twi->MASTER.STATUS&TWI_MASTER_WIF_bm));
    
    
        delay_ms(10);
        Send_Address(twi, MPU6050_ADDR, 1);
        delay_ms(20);
    
    
        readData = twi->MASTER.DATA;
    //    while(!(twi->MASTER.STATUS&TWI_MASTER_RIF_bm));
        
        twi->MASTER.CTRLC = TWI_MASTER_CMD_STOP_gc;
        delay_ms(10);
        return readData;
    }
    Die initialisierung mit mehrfachem writeByte läuft nun durch, anschließend kann er einmal einen wert auslesen. Beim nächsten mal bleibt er beim senden der Adresse, also in der ersten Zeile hängen. Es kommt wohl kein ack vom MPU, da dieser noch auf etwas wartet. Was genau das ist weis ich aber nicht...


    //UPDATE 23:13Uhr
    UUUND der TWI läuft
    Geändert von BurY (06.06.2013 um 19:13 Uhr)

Ähnliche Themen

  1. Willas Shrediquette Tricopter / Quadrocopter / Hexacopter
    Von Willa im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 3541
    Letzter Beitrag: 03.08.2014, 19:27
  2. Gyroskop und GPS für Hexacopter
    Von Murmele im Forum Sensoren / Sensorik
    Antworten: 10
    Letzter Beitrag: 22.07.2012, 21:04

Stichworte

Berechtigungen

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

LiFePO4 Speicher Test