Ich habe jetzt auch meine Platine fertig gelötet, allerdings auf Basis des ESP32, also eher inspiriert vom BMT (funktioniert aber noch nicht, unten mehr dazu). Trotzdem wäre ich ohne die ganze Vorarbeit hier sicher nicht so weit gekommen, geschweige denn überhaupt auf die Idee gekommen.
[...]Ich habe zwischendurch überlegt, ob man dieses Projekt besser dokumentieren sollte, damit sich potentielle User schneller zurechtfinden[...]
Das finde ich eine sehr gut Idee, und wollte das auch schon selbst anregen. Allerdings als Newcomer nicht einfach so in den Raum stellen, sondern zumindest schonmal einen Anfang zusammenschreiben. Dazu bin ich aber noch nicht gekommen...
Ich denke das sowas immer ein Hobby-/Bastelprojekt bleiben wird (wie schon erwähnt auch weil der Rattenschwanz den eine kommerzielle Verwertung mit sich bringt ziemlich lang ist). Und viele in der Bastelzielgruppe (wie z.B. ich) wollen nicht einfach etwas nachbauen, sondern es lieber verstehen und den eigenen Bedürfnissen anpassen.
Und für Leute, die den BMT als Inspiration für einen eigenen Nachbau sehen wäre es sehr hilfreich die wichtigsten Erkenntnisse aus diesem und den verwandten Threads irgendwo gesammelt zu finden (z.B. als Edit im ersten Beitrag oder im Readme des Github Repos).
Wichtige Punkte sind z.B. der Aufbau der CAN Nachrichten an den Motor ([ID, 0x02 (length), 0x00, <register>] für requests, [ID, 0x04 (length), 0x00, <register>, <valuehigh>,<valuelow>] für writes); CAN Baudrate von 125kBits; dass der Solltorque über Register 0x09 alle 50ms gestetzt werden sollte (und die Nachricht aus unerklärlichen Gründen im Orginal immer doppelt gesendet wird); dass das Signal der Torque Gauge (0x21) von Haus aus schon differenziert ist; etc...
Das findet sich wie gesagt alles schon einzeln irgendwo, aber wenn man es irgendwo gebündelt direkt finden könnte würde das denke ich schon einiges erleichtern.
So, nun zu meinem Problem: Meine Platine ist wie gesagt fertig und bei einem ersten Test tat sich....nichts.
Nach etlichen Stunden der Fehlersuche (bei der auch einige kleinere Fehler gefunden und behoben wurden) bin ich mit meinem Latein am Ende und fast am Zweifeln, ob nicht einfach mein Motor hin ist.
Der Motor bekommt 12V (über den teuren Traco Wandler) auf der Signalschiene und 48V vom Akku auf der Powerschiene. Die beiden GNDs habe ich extern verbunden (intern sind sie es ja anscheinend nicht oder nur unzureichend (mein Messgerät zeigt einen Widerstand von 10 Ohm)).
Die CAN Signale von meinem Board kommen ordnungsgemäß am Motorkabel an, das habe ich mit einem Logic Analyzer überprüft.
Aber der Motor reagiert überhaupt nicht, er gibt nichtmal ein Ack auf die Pakete, was dazu führt, das auf dem Bus nur der Error count hochgeht. (Aktuell frage ich nur die SW Version ab ([0x20 0x02 0x00 0x20]).
Schließe ich statt dem Motor einen Arduino mit CAN-Transceiver an meine Platine an, empfängt der die Pakete ordungsgemäß.
Aber auch der Arduino mit CAN-Tranceiver kann nicht (mehr) mit dem Motor kommunizieren. Ich habe diesen mit der XLB Firmware (siehe hier
https://www.**************/index.php/topic,766.0.html?PHPSESSID=7kmucb7be9l7696va8oqq50u5l) bespielt, damit kann er auch als Adapter für BikeInfo benutzt werden.
Vor meiner ganzen Umbauaktion hat das auch wunderbar funtioniert, ich konnte damit die Motor- und Konsolenparamter ändern.
Jetzt wie gesagt nicht mehr. Der Unterschied ist, dass damals noch die orginal Konsole und der orginal Akku mit im Bus hingen, jetzt ist es nur noch der Motor. Und das der Motor neue Stecker bekommen hat. Während der ganzen Aktion wurde er aber weder mechnisch noch thermisch noch elektrisch (unzulässige Spannungen an den Kabel oder sowas) über Gebühr belastet, sodass es mich schon wundern würde, wenn er jetzt auf einmal kaputt wäre.
Ich hätte gerne den Motor nochmal mit den Orginalkomponenten getestet, die habe ich aber leider mittlerweile nicht mehr :/
Was mich noch wundert: ich habe mal die Widerstände der Motoranschlüsse gemessen (um einen Kurzschluss/Kabelbruch auszuschließen). Bei allen Kombinationen messe einen Wert im kOhm Bereich (also kein Kabelbruch/Kurzschluss). Aber: Zwischen CAN high und CAN low sind es 160 kOhm. Nach der CAN Spezifikation sollten doch die Endpunkte des Busses mit einem 120 Ohm Widerstand terminiert werden? (So ist das auch auf meiner Platine). Ist das normal und Bionx hat sich da einfach nicht dran gehalten oder ein Anzeichen dafür, dass bei mir etwas faul ist?
(Die anderen Werte noch, wenn auch wenig aussagekräftig ohne den Schaltplan der Motorplatine zu kennen: Vcc zu GND 20kOhm, GND zu CAN high und low ~85kOhm, Vcc zu CAN high und low ~100kOhm).
Auf der 12V Schiene zieht der Motor ganz normal ca. 200mA. Aber sonst macht er einfach gar nichts.
Habe ich irgendwas übersehen, muss ich den Motor irgendwie initialisieren?
Ich würde ihn eigentlich nur sehr ungern aufmachen müssen, das ist ja sehr aufwändig mit auspeichen etc., wäre aber wohl der nächste Schritt, wenn mir nichts anderes mehr einfällt...
Habt ihr vielleicht noch eine Idee?
Achso, das habe ich oben ganz vergessen zu erwähnen, es ist ein SL Motor mit G2 Firmware.
Edit: Oh, das "andere Forum" kann anscheindend nicht verlinkt werden?