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
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
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
take a look : http://florian-bury.de
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
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))
- ...
take a look : http://florian-bury.de
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
Nun habe ich einige male die TWI-Docs von Atmel "durchgeblättert", aber so wie es mit schein stehen mir nur dieStart-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.
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):
Nach diesem Beispiel: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")); } }
http://asf.atmel.com/docs/3.3.0/xmeg...uickstart.html
Wenn ich so nun das WHO_AM_I-Register-Auslese
Bekomme ich eine 205 (0xCD) und nicht 104 (0x68 ) als Antwort.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');}
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!
take a look : http://florian-bury.de
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
Lesezeichen