ESC Flashen für Brushless Gimbal Motoren

Status
Nicht offen für weitere Antworten.

otti20vt

Erfahrener Benutzer
Die Konfiguration ist im EEPROM gespeichert, d.h. sie kann "leicht" geändert werden indem man einfach andere Werte ins EEprom schreibt. Ist noch nicht die ganz ultimative Lösung, da man hierzu entweder den ISP-Programmieranschluss mit geeigneten ISP-Programmer benutzen muss oder einen Bootloader (z.B. Hagen's Avrootloader) aufspielt und über einen extra Adapter kommuniziert, und eine Art GUI gibt's halt auch nicht. Aber immerhin, es geht.
Morgen OlliW,

Könntest du mir erklären wie ich so ein setting erstellen kann um dieses in das EEprom zu schreiben? Habe auf dem Regler einen Bootloader geflasht, damit kann ich das Epprom mit dem USBLinker neu beschreiben.


Das mit dem Pendeln habe ich inzwischen etwas Reduziert, indem ich in der Funke eine Verzögerung eingestellt habe, das ganze ist jetzt natürlich träge, aber für die ersten Tests ausreichend

Und heute Abend oder Morgen wird es ernst, da werde ich den ersten flugversuch wagen :)
 

Anhänge

OlliW

Erfahrener Benutzer
Hallo Otti

Habe auf dem Regler einen Bootloader geflasht, damit kann ich das Epprom mit dem USBLinker neu beschreiben.
cool. Nur der Neugier wegen, welcher Bootloader ist das? Mit USBlinker, meinst du da den Turnigy USBlinker wie er u.a. zum Flashen bei SimonK benutzt wird?

Anyhow. Im Prinzip ist das ganz einfach.
1) Du liest den EEprom Inhalt aus und speicherst ihn z.B. in einer Datei. Wie das genau geht und welches Format du rausbekommts hängt davon ab was du benutzt. Bei Avrdude wäre das der -U eeprom:r:xxx:y Befehle und du würdest mit y = i eine Datei im Intel-Hex Format bekommen (was wegen der CRC nicht praktisch ist, günstiger wären r oder h). Eine typische Datei-Extension wäre .eep.
2) Du änderst die Werte an der entsprechenden Stelle in der Datei
3) Du schreibts die Datei ins Eeprom zurück. . Bei Avrdude wäre das der -U eeprom:w:xxx:y Befehl

Mir scheint du hast viel Ahnung, deswegen denke ich Schritt 1 und 3 weisst du wie du selber am Besten wie das mit deinem Aufbau zu machen hast.

Für Schritt zwei brauchst du die Struktur der Daten im EEprom. Habe ich nicht im Kopf. Poste ich heute Abend.

(wenn du in der Wzsichenzeit die Eeprom Datei mit nem Hex-Editor ansiehst wirst du sehr leicht schon mal den Anfang und Ende der Datenstruktur erkennen ;))

Ich denke ich könnte heute Abend auch mal einfach das Tiefpass-Filter (fertig) implementieren, dann kannst du damit auch rumspielen.

Cheers, Olli
 

OlliW

Erfahrener Benutzer
also, die EEprom Datenstruktur für die v014 sieht wie folgt aus:
Code:
typedef struct {
  char Name[16];                  //0x00
  char VersionStr[16];            //0x10
  unsigned int  Version;          //0x20
  unsigned int  SetupVersion;     //0x22

  unsigned char Vmax;
  unsigned char BeepStrength; 

  unsigned char DetectRcMid;      //0: uses fixed RcMid value, 1: determines rc mid at startup
  unsigned int  RcMid;

  unsigned char CntrlMode;        //0: relative control, 1: absolute control by rc signal
  unsigned int  MaxRange;         //
  unsigned char MaxSpeed;         //
  unsigned char DeadBand;         //

  char buf2[8];                  
} tSetup;
Der Name ist "OlliW BLG ESC\0", im VerionStr steht "v0.14\0" und im buf2 steht "end\0".
VMax ist die Amplitude der PWM Signale (z.B. 160)
BeepStrength is die Amplitude des Beeps beim Initialsieren (defaultmässig auf maximum da eh sehr leise)
DetectRcMid bestimmt dass
0: der im Feld RcMid stehende Wert wird als RC-Signalmitte genommen (default ist 1520)
1: das beim Initialisieren aktuelle RC-Eingansgsignal wird als Mitte interpretiert
CntrlMode bestimmt dass
0: das RC Signal die Drehrate kontrolliert, in diesem Fall wird die maximale Drehrate durch den Wert im Feld MaxSpeed bestimmt, und gleichzeitig wird ein DeadBand entsprechend dem Wert im Feld DeadBand aktiviert
1: das RC Signal die absolute Drehposition kontrolliert, in diesem Fall wird der maximale Winkelbereich durch den Wert im Feld MaxRange bestimmt; das DeadBand ist deaktiviert


jetzt ist noch ein bischen zu früh, aber ich werde mich nacher hinsetzen und das mit dem TiefPass fertig machen (wird version v015)

Olli
 

otti20vt

Erfahrener Benutzer
Abend und Danke für die Infos :)

Ich werde mich nacher damit beschäfftigen, bin noch an der Hardware verfeinerung :)

Gruss und einen schönen Abend
 

OlliW

Erfahrener Benutzer
so, hier nun die v015 für dich mit nem Tiefpass-Filter. Die Werte können 0...19 sein, man spürt aber eigentlich erst Werte ab 12 oder so, 16 ist schon sehr langsam. Da bei dir die Drehrate immer noch ein bsichen hoch schien habe ich als Default noch um nen Faktor 2 halbiert (ist jetzt 16 statt 32).

Die Datenstruktur sieht nun so aus
Code:
typedef struct {
  char Name[16];                  //0x00
  char VersionStr[16];            //0x10
  unsigned int  Version;          //0x20
  unsigned int  SetupVersion;     //0x22

  unsigned char Vmax;
  unsigned char BeepStrength; 

  unsigned char DetectRcMid;      //0: uses fixed RcMid value, 1: determines rc mid at startup
  unsigned int  RcMid;
  unsigned char RcLPF;

  unsigned char CntrlMode;        //0: relative control, 1: absolute control by rc signal
  unsigned int  MaxRange;         //
  unsigned char MaxSpeed;         //
  unsigned char DeadBand;         //

  char buf2[8];                  
} tSetup;
sollte mit dem oben gesagt eigentlich selbsterklärend sein
Ich habe mal noch eine Kopie des EEproms mit den Defaulteinstellungen gemacht. Im Intel-Hexformat sieht es so aus
Code:
:200000004F6C6C695720424C472045534300FFFF76302E313500FFFFFFFFFFFFFFFFFFFFDB
:200020000F000100A0E600F0050000F402100E656E6400FFFFFFFFFFFFFFFFFFFFFFFFFFF7
:20004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:20006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:20008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:2000A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:2000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:2000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:20010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
:20012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF
:20014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF
:20016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F
:20018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F
:2001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F
:2001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F
:2001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F
:00000001FF
aber wie gesagt, das format h ist zweckmässiger (ein Beispiel habe ich in der zip mit reingepackt).
Relevant ist die zweite Zeile
0F00 = Version (015 = 0x000f)
0100 = SetupVersion (1 = 0x0001)
A0 = Vmax (160 = 0xa0)
E6 = BeepStrength (230 = 0xe6)
00 = DetectRcMid (0 = 0x00)
F005 = RcMid (1520 = 0x05f0)
00 = RcLPF (0 = 0x00)
00 = CntrlMode (0 = 0x00)
F402 = MaxRange (756 = 0x02f4)
10 = MaxSpeed (16 = 0x10)
0E = DeadBand (14 = 0x0e)
656E6400 = 'end\0'

viel Spass, Olli

Anhang anzeigen blg_esc_v015_4otti20vt.zip
 
Zuletzt bearbeitet:
Hallo ihr Profis,

sehr geil was ich hier so lese - obwohl ich kaum was davon verstehe.

Aber ich hab da, vielleicht ehe ne laienhafte Frage:

Ich benutze für meinen Gimbal ein Martinez Board. Was mir fehlt ist die dritte Achse.
Jetzt habe ich in den Videos gesehen, das aber durch den Stick eine Drehrate vorgegeben wird.
Ist es möglich durch den Stick auch einen Winkel vorzugeben?

Mehr als 180 Grad brauch ich nicht und wäre auch eher tödlich für die Leitungen, die sich dann um den Gimbal wickeln würden.

Hab ich das überlesen oder ist das gar nicht möglich?

Falls doch möglich, was muss ich tun?

Meine Fähigkeiten beschränken sich auf das umflashen von ESCs mit simonK Firmware.
Gimbal-Motoren sind diese hier:
http://www.ebay.de/itm/Brushless-Gi...Control_Parts_Accessories&hash=item27d50870ad

Welchen leichten, günstigen Regler brauch ich da jetzt? Und wie komm ich an die Firmware ohne Drehrate sondern mit 180-200 Grad max?

Sorry für die lästigen Fragen, aber ich verstehe hier nicht wirklich viel.


Schon mal Dank im vorraus
 

OlliW

Erfahrener Benutzer
hallo CriticalLimit

um einem evtl-en Missverständniss vorzubeugen: Eine mit dem hier beschriebenen Projekt betriebene 3. Achse macht KEINEN Yaw-Ausgleich, Pan oder was auch immer der Art! Es ist damit nur möglich die 3. Achse entsprechend der Knüppelstellung zu bewegen - im Prinzip, siehe Otti's Versuche.

Man kann das ohne Probleme so einstellen, dass mit dem Stick der Drehwinkel vorgegeben wird, und nicht die Drehrate (und zwar mit dem Parameterwert CntrlMode = 1).

Man kann das ohne Probleme so einstellen, dass der Drehwinkel 180°-200° ist (und zwar mit dem Parameterwert MaxRange).

Welcher Regler genau geeignet ist kann ich dir mangels eigener Erfahrung mit dieser Motorengröße nicht sagen, vielleicht können die Experten was zu sagen, aber ich denke so etwas in der Klasse 6-12A müsste doch reichen.

Du kannst das mit den EEPROM-Werten selber machen, oder, wenn genau klar ist welche Polzahl, Winkelbereich, und Reglertyp kann ich dir gerne eine Hex machen.

Olli
 
Zuletzt bearbeitet:
Moin Olli,

vielen dank für die schnelle Antwort.
Klar gibt's keinen Ausgleich. Brauch den 3. Motor für den Headtracker. Kopf rechts/links - Kamera rechts/links.

Ok, dann guck ich mal nach einem Regler mit Atmega. Wirds ja irgendwas geben, was klein, leicht und günstig ist.

Bei dem Motor weiß ich auch nicht wie viele Pole, turns und Widerstand der hat. Da steht ja nur "80KV"

Vielleicht kennt den ja wer und kann helfen.

Das mit dem Ändern des Codes muss ich mir mal genauer ansehen. Hab sowas noch nie gemacht.

Erstmal einen Regler her jetzt....

Danke und Gruß
Dirk
 
Jo, danke.
Hab ich nun bestellt.
Müsste also eine bs.hex drauf machen, wenn ich simonk drauf mache, richtig?
Der Motor hat 14 Pole. Und nu???

Könnte mir mal jemand (Olli?) eine Hex machen für einen Winkel von 180 Grad (also 90 links, 90 rechts)
Dann schau ich mir das mal genauer an. Bis jetzt versteh ich nur Bahnhof, da ich ja das hex file zum flashen brauche. Wie komm ich denn vom .h Format zum hex file zum draufflashen??

Naja, da muss ich mal Hausaufgaben machen....

Gruß
Dirk
 

OlliW

Erfahrener Benutzer
Müsste also eine bs.hex drauf machen, wenn ich simonk drauf mache, richtig?
Es gibt das Spreadsheet von Tomsn0w, wo wirklich alle Fragen dieser Art beantworted sind: https://docs.google.com/spreadsheet/ccc?key=0AhR02IDNb7_MdEhfVjk3MkRHVzhKdjU1YzdBQkZZRlE#gid=0

hk6a ist gut, dafür gibt es meine Firmware (gibt es ja nicht für viele ESC)

nur zur Info:
14 Pole heist Anzahl der Poolpaare p = 7. Für +-90° müsste daher im Feld MaxRange der Wert 252 * 90/(360/p) = 378 = 0x17a eingetragen werden (wenn ich mich nicht verrechnet habe LOL).

Stick kontrolliert den Drehwinkel, dafür müsste im Feld CntrlMode der Wert 1 = 0x01 eingetragen werden.

Könnte mir mal jemand (Olli?) eine Hex machen
ich mache dir gerne heute abend eine.
Allerdings möchte ich noch das "erklären": Die Werte über die wir oben geredet haben stehen im EEPROM, und nicht im Flash wie der eigentliche Programcode. Der Inhalt des Flash wird üblicherweise in einer Datei mit der Extension .hex abgespeichert. Der Inhalt des EEProms wird demgegenüber üblicherweise in einer Datei mit der Extension .eep abgespeichert. Allerdings ist in beiden Fällen das Dateiformat üblicher Weise Intel-Hex (oft auch umgangssprachlich einfach als Hex bezeichnet). Das nur um Verwirrung zu vermeiden (dein Satz ist daher z.B. nicht wirklich eindeutig).

Was oben gezeigt wurde ist nicht die Hex Datei, wenn damit die .hex Datei mit den Flash Daten im Hex Format gemeint ist, sondern die .eep Datei im Hex Format.

Olli
 
AAAh! jetzt hab ich´s auch kapiert. Danke!!

Wäre nett, wenn Du mir dann heute abend eine angepasste Firmware machen könntest. Ist aber nich eilig, da die regler noch unterwegs sind...

Vielen Dank für Alles!
Dirk
 

otti20vt

Erfahrener Benutzer
Morgähn,

Kleine rückmeldung meinerseit, das ganze mit der 3en Achse Funktioniert nicht wirklich gut, aber es liegt wohl an dem viel zu kleinen Motor den ich verbaut habe.

Hier das Video vom ersten Flug, alles ungeschnitten....

0:55 Dort drehe ich das erste mal die 3e Achse, das waren 2-3 % verstellun auf der Fune.
2:05 Kamera war gerade ausgerichtet dann den Copter um 180° gedreht, der Gimbal hat die Drehnung nicht geschaft.
2:40 Schön die Orientierung verloren und Fast das kleine Gartenhaus geküsst und der Brushless Gimbal braucht auch noch etwas feintuning xD

http://youtu.be/PfnZmTAWCfw


Nun fürs erste werde ich mal ohne die 3e Achse Fliegen.
 
Danke für die Tests.
Das hat mir soeben viel Zeit erspart :)
Sieht so aus, als ob ein BLDC ohne PID- Regelkreis, oder zumindest Rampen und hoher zu bewegender Masse nicht sinn voll ist...
(um nicht zu sagen absoluter Blödsinn...)
Und, das ein Siples Getriebeservo mit Riemenübersetzung hier immer noch die bessere Wahl ist.
Zumindest für alle, die noch auf den 3-Achs Controller aus dem Forum hier warten müssen.
 

OlliW

Erfahrener Benutzer
ja, wirklich super Test!
Fand ich jetzt auch spannend zu sehen wie gut oder schlecht das geht... die kleine Haltekraft, das ist wohl tatsächlich der große Nachteil der Direct-Drives

es braucht wohl tatsächlich einen Regler...
das muss aber nicht ein Regler mit IMU oder Poti oder anderem Positionssensor sein... das ginge auch indem man den Strom misst (genauer iq), und normalerweise werden Synchronmotoren auch genau mit so nem Regler (FOC, DTC) betrieben...
Schade dass das mit der Hardware der RC-ESCs nicht geht... wird eigentlich Zeit mal einen "vernünftigen" Brushless-Direct-Drive Regler zu bauen...


PS: das mit der Masse wäre anders herum, sie müsste eher kleiner als größer sein... bzw. Otti müsste einen größeren Motor nehmen (wie er auch sagte)
 

edge

Erfahrener Benutzer
Hey olli,
ja Man könnte doch über induktive messung die lage bestimmen und dann FO regeln. Gibt es nicht sogar ICs zum L messen?
LG Alex
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten