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
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
hi,
ok danke, habe nun folgende config:
Powermanagement: Clock: X-Axen GyroCode: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));
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.
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...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; }
//UPDATE 23:13Uhr
UUUND der TWI läuft![]()
Geändert von BurY (06.06.2013 um 19:13 Uhr)
take a look : http://florian-bury.de
noch fix eine Auswertung für den PC, und schon ist man Glücklich(er)
Oben Gyro X-Y-Z
unten Acc X-Y-Z
![]()
-------
Während dem Schreiben noch schnell das Programm aktualisiert:
oben Gyro unten Acc. Leider ist die GUI in C# etwas langsam - bei einem 20ms-Delay beim Auslesen im AVR kann er max. 50 Werte im Diagramm Flüssig anzeigen.
Aber darum geht es hier ja nicht![]()
take a look : http://florian-bury.de
Hallo zusammen,
Habe nun mit der PWM etwas getestet.
50Hz, 100Hz und 450Hz laufen eigentlich ohne Probleme, auch mit dem Oszi in der FH überprüft.
Die ESCs zeigen nun folgendes Verhalten:
- Initialisierung ab 1ms möglich.
- Motoren laufen im bereich ab etwa 1,4ms bis 2ms
- Leistung bricht zusammen: Habe eine Netzteil, bis 3A bei 11.1V. Motoren werden immer schneller bis 2A, dann regeln sie sich automatisch Auf 1,5A. Dann kann die Leistung auch nicht mehr gesteigert werden. Auch bei längerem DutyCycle ändert sich nichts mehr.
Könnt ihr mir dieses Verhalten erklären?
take a look : http://florian-bury.de
Hi,
dieses Verhalten liegt mit 99%iger Wahrscheinlichkeit am Netzteil. 3A sind für BL-Motoren idr. eindeutig zu wenig. Probiers mal mit einem Akku (Lipo), auf die richtige C-Zahl achten
Gruß
Chris
hm nagut... wie wäre es denn mit einem MAAS-SPS-30-II, das bis 35A liefert?
Ich hätte eben gerne den Vorteil des Ein/Ausschalters am Netzteil
Immer einen/genug vollen Akku parat zu haben sehe ich als etwas überflüssige Arbeit!?
take a look : http://florian-bury.de
Hi,
nichts ist in diesem Fall so gut geeignet wie ein Akku, weil dieser am schnellsten auf die Strompeaks reagieren kann. Wenn du also die Motoren wirklich korrekt überprüfen willst, besorg dir nen Akku
Was genau bringt den der Ein/Ausschalter für einen Vorteil? Den Akku kannst du auch abstecken!
Gruß
Chris
Lesezeichen