Willkommen! Anmelden Ein neues Profil erzeugen

Erweiterte Suche

[Hilfe benötigt] Marlin + TMC5160 Kommunikation mit optischen Encodern

geschrieben von geroldsteiner 
[Hilfe benötigt] Marlin + TMC5160 Kommunikation mit optischen Encodern
23. May 2024 11:17
Hi zusammen,

ich studiere Informatik und arbeite an einem Projekt mit mehreren Schrittmotoren, die jeweils mit einem optischen Encoder ausgestattet sind. Ich verwende ein BigTreeTech Manta M8P V2 Board und TMC5160 Motortreiber mit Marlin-Firmware.

Aktueller Stand:
Ich habe mein Setup erfolgreich konfigurieren können (hab die Configuration.h und die Configuration_adv.h angepasst) und die Firmware geflasht. Die Schrittmotoren bewegen sich, und Homing mit Endstopps funktioniert einwandfrei, usw.

Ziel:
Ich muss mit den Encodern über SPI mit dem TMC5160-Treibern kommunizieren (um Informationen über die Abweichung meiner Motoren zu erhalten, um diese später zu korrigieren).
Die library TMCStepper.h (Link: [teemuatlut.github.io]) scheint Funktionen (ENC_STATUS(), ENC_DEVIATION(), usw.) zu bieten, die ich in Marlin aufrufen muss.
Im Moment möchte ich M122 verwenden (es zeigt TMC-Debugging-Informationen an: [marlinfw.org]), damit ich den Status/Abweichungswert meiner Encoder lesen kann (sobald ich das getan habe, sollte ich in der Lage sein, den Rest zu tun...).

Herausforderung:
Ich bin mit dem Marlin-Quellcode ziemlich überfordert (aufgrund mangelnder Programmierkenntnisse in diesem Bereich... confused smiley) und brauche Hilfe, um herauszufinden wie ich die Datei M122.cpp erweitern kann.

Hier ist eine grobe Vorstellung von dem, was ich zu tun versuche:
void GcodeSuite::M122() {

    [...]

    uint8_t enc_status = driver_x.ENC_STATUS(); // das funktioniert natürlich nicht und ich muss herausfinden, wie man das macht...
    if (enc_status & 0x01) {
      SERIAL_ECHOLNPGM("Encoder not ready");
    } else {
      SERIAL_ECHOLNPGM("Encoder ready");
    }

    [...]

    uint32_t enc_deviation = driver_x.ENC_DEV(); // sowas halt...
    SERIAL_ECHOLNPGM("deviation enc. x: ")
    SERIAL_ECHOLN(enc_deviation);
    [...]
}
Mit den Encodern zu kommunizieren ist für mein Projekt echt wichtig.

Also: Wie kann ich korrekt auf die Encoder-Funktionen des TMC5160-Treibers in Marlin zugreifen und sie verwenden? Für Hinweise oder Beispiele wäre ich sehr dankbar (insbesondere für die Modifizierung des M122-Befehls für den Zugriff auf Encoder-Informationen).

Vielen Dank im Voraus!

4-mal bearbeitet. Zuletzt am 23.05.24 11:56.
Re: [Hilfe benötigt] Marlin + TMC5160 Kommunikation mit optischen Encodern
24. May 2024 07:48
Its worse than this...

Marlin is a step and direction controller, This is the very soul of the firmware (for lack of a better term) it always uses step and direction pins, even when a SPI or UART interface is available, the interface is only used for configuring and monitoring the driver

From the TMC5160A datasheat, page 45
[www.analog.com]

Attention:
The encoder interface is not available in Step&Direction mode, as the encoder pins serve a different
function in that mode.


So a fundamental core change would be required in marlin to move stepper control away from step and direction IO pins to SPI before you can even start to consider using the TMC5160 encoder interface.

This would also disable input shaping and perhaps linear advance, anything where specilised step pin control is required.

1-mal bearbeitet. Zuletzt am 24.05.24 11:48.
In diesem Forum dürfen leider nur registrierte Teilnehmer schreiben.

Klicke hier, um Dich einzuloggen