MikroKopter - Forum » BL-Ctrl » I2C Daten für BL-Ctrl

I2C Daten für BL-Ctrl

Seite: 1

Autor Neuer Beitrag
Mitglied
Registriert seit: Mar 2009
Beiträge: 2
Hallo Zusammen

Ich möchte die BL-Regler über I2C ansteuern. Jedoch verwende ich momentan eine andere Controller Plattform für den Regler (nicht Flight-Ctrl).
Welche Daten kann bzw. muss ich dem BL-Ctrl über I2C senden.
Ich nehme an, dass ich die Sollwertvorgabe für die Drehzahl des Motors irgendwie vorgeben kann.
Wie muss ich das dem BL-Ctrl senden?
Gibt es noch andere Befehle, die ich dem BL-Regler senden kann?
Irgendwie bin ich aus dem Quellcode leider nicht ganz schlau geworden.

Vielen Dank für eure Hilfe!

Gruss Lukas
Mitglied
Registriert seit: Jun 2008
Beiträge: 101
du schickst zuerst die adresse des reglers z.b. 0x52 und dann den power wert zwischen 0 und 255, ne drehzahlregelung gibts nich :|
Mitglied
Registriert seit: Mar 2009
Beiträge: 2
Danke! Werd das mal so versuchen...

Gruss Lukas
Mitglied
Registriert seit: Jan 2010
Beiträge: 1
Ort: Siegen
kalli meinte
du schickst zuerst die adresse des reglers z.b. 0x52 und dann den power wert zwischen 0 und 255, ne drehzahlregelung gibts nich :|


Ich hab das gemacht und funktioniert. Danke. Aber warum 0x52? Die addresse muss 0x02 sein. Woher kommt diese 5? :roll:

Danke
Hamid
Mitglied
Registriert seit: May 2009
Beiträge: 1115
Ort: Ba-Wü
brightplanet62 meinte
Ich hab das gemacht und funktioniert. Danke. Aber warum 0x52? Die addresse muss 0x02 sein. Woher kommt diese 5? :roll:

Das ist eben die Adresse im hex-Code:
Adresse 0x52 für Motor 1, Adr 0x54 für Motor 2 und so weiter.

Ist z.B. hier beschrieben: http://forum.mikrokopter.de/topic-post142222.html#post142222
_______________
Mit dem Zweiten fliegt man besser...!
Mitglied
Registriert seit: Jan 2009
Beiträge: 356
Ort: Zürich
Hi,

I2C address = 0x28 + motorNumber

The value you write into the AVRs TWDR register when setting the address = I2C address * 2. Add 1 for read, 0 for write.

So

MotorNumber I2CAddress TWDR(write)
1 0x29 0x52
2 0x2a 0x54
3 0x2b 0x56
4 0x2c 0x58
................

The 0x28 could be replaced by anything else that is not 0, and does not collide with anything else on the bus. It should of course be replaced on both the master (FC) and the slave (BLC) ends.

Regards
Soren
« Bearbeitet von dongfang am 28.01.2010 17:05. »
Mitglied
Registriert seit: Feb 2010
Beiträge: 1
Hi,

Ich wird auch eine andere Controller Platform benutzen für meinen Oktokopter und ich habe ein paar Frage über dies I2C Daten :

-
Zitat
den power wert zwischen 0 und 255

Meint das, dass 0 ein null power (der Motor dreht nicht) entspricht und dass 255 die maximum Leistung entspricht ? Ist diese 'scale' eben linear ?
In jenem Fall, ist die Auflösung fein genug, um den Kopter genau zu steuern ?

-
Zitat
I2C address = 0x28 + motorNumber

Stimmt das auch für das OktoKopter, mit 8 Motoren ?

Danke
Rose
Mitglied
Registriert seit: Nov 2009
Beiträge: 5
Ich habe das gleiche vor.
Die Ansteuerung der einzelnen Motoren klappt auch wunderbar, nur wenn ich eine 0 (als uint8_t) an die BL-Ctrl sende, dann dreht er trotzdem noch und das nicht gerade langsam. Auch Stufe 1 ist wesentlich schneller als das, was man vom Motortest aus dem Mikrokopter-Tool an Drehzahl bekommt, wenn man da die selbe Stufe einstellt.

Kann mir da jemand helfen?

Danke schonmal!
MK-Betatester
Registriert seit: May 2007
Beiträge: 2028
Ort: Liebenburg
Hallo

Das kann nicht sein. Definitiv bei Sollwert 0 steht der Motor.

Sollwert 1 da laufen nicht alle Motore mit, zu schlappig.

Dann ist sicher bei deinen Programm was nicht in Ordnung


Gruß Wolfgang
_______________
Mein Y- Kopter hat nur 4 Motore, sollte ihm wohl noch 2 zusätzlich spendieren oder lieber einen ausbauen und ein Servo reinsetzen?
http://www.vom.wowie.org
Mitglied
Registriert seit: Nov 2009
Beiträge: 5
Habe jetzt mal ein einfaches Beispielprogramm geschrieben, nur um die Motoransteuerung zu testen. Der Motor dreht kurz an, hört dann aber innerhalb ca einer Sekunde wieder auf zu drehen bevor er überhaupt die WUnschdrehzahl erreicht hat.
Hier mein zugehöriger C-Code:

TWSR = 0;
TWBR = ((SYSCLK/SCL_CLOCK)-16)/2;
TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
while(!(TWCR & (1<<TWINT)));
TWDR = adress;
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT)));
TWDR = 10;
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT)));
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);


Der Code läuft fehlerfrei durch. (TWSR & 0xF8) gibt 0x18 nach Senden der Adresse und 0x28 nach Senden des Geschwindigkeitswertes. Das sollte, meiner Meinung nach, auch ok so sein. Sonst würde der Motor ja nicht kurz losdrehen. Erwartet die BL-Ctrl nach dem Senden der Geschwindigkeit denn noch etwas?

Vielen Dank schonmal!
Mitglied
Registriert seit: May 2010
Beiträge: 18
Also wäre es auch möglich die BL Regler mit einem PIC anzusteuern, richtig?
Wenn sowieso nur immer ein Byte übertragen wird.... ?
Mitglied
Registriert seit: Apr 2009
Beiträge: 684
Ort: Braunschweig, Algermissen und bei der Arbeit
Chat: Chat starten...
@hossmann
Du musst der BL Ctrl die Werte dauerhaft neu schicken, nur einmal reicht nicht.

Zitat
Also wäre es auch möglich die BL Regler mit einem PIC anzusteuern, richtig?
Wenn sowieso nur immer ein Byte übertragen wird.... ?


Klar, warum sollte das nicht gehen? ;)
_______________
Es ist nicht deine Schuld, dass die Welt ist wie sie ist!
Es ist nur deine Schuld wenn sie so bleibt

LG Matze

Lektion des Tages: Gebrochene Ausleger eignen sich noch super zum Bier öffnen!
Für Fortgeschrittene: Gebrochene Ausleger eignen sich auch super zum Bau von Tulpen!

http://www.landkamp.de

Seite: 1

MikroKopter - Forum » BL-Ctrl » I2C Daten für BL-Ctrl