Klipper mit dem RF1000
Verfasst: Sa 14. Sep 2019, 09:51
Das Thema wurde schon häufiger Diskutiert, bisher hat es aber nie jemand gewagt. Klipper auf dem RF1000 mit original Mainboard.
Hinweis vorweg: Bisher ist es ein Experiment und ich dokumentiere lediglich die Schritte um das mal auszuprobieren.
Das ist noch keine stabil funktionierende Lösung mit guten Ergebnissen und voll umfänglicher Unterstützung des RF1000.
Wie arbeitet klipper?
Klipper ist eine Kombination aus einem Bewegungsrechner (Raspi o.ä.) und einem Hardware Interface (RF1000 Mainboard).
Alle Bewegungen werden von Klipper (python) optimiert und über eine schlanke serielle Kommunikation an das Mainboard übertragen. Das Mainboard ist dabei nur noch eine art Echtzeitschnittstelle zur Hardware. Alle Intelligenz passiert auf dem Raspi.
Ist klipper mit dem RF1000 kompatibel?
Grundsätzlich ja. Es fehlen ein paar kleine Module um unsere Hardwarerichtig einbinden zu können. Diese müssen in Python umgesetzt werden und die vorgesehenen Ansteuerungsmöglichkeiten des "klipper Hardware Interfaces" nutzen. Keine Angst, es ist fast alles vorgesehen, GPOI, I²C, SPI etc. ist alles da und muss nur richtig konfiguriert werden.
Welche Änderungen an der Firmware sind nötig um den RF1000 betreiben zu können?
Schrittmotortreiber: Die DRV8711 vom RF1000 Mainboard werden über eine SPI ähnliche Schnittstelle konfiguriert. Das muss einmalig beim Start des Druckers passieren, danach wird die Kommunikation nicht zwingen benötigt (nur für Stall Erkennung etc). Die Konfiguration umfasst 8 Register, in denen die Microsteps und max. Strom des jeweiligen Schrittmotors gesetzt werden müssen. Die DRV8711 verwenden dafür ein 16-Bit SPI mit CS active high (normal wäre low). Das ist in klipper (noch) nicht vorgesehen. Da am RF1000 sonst keine weitere SPI Schnittstelle benötigt wird (SD brauchen wir nicht), ist das einfachste im C Code für den ATMega die Polarität des Signals zu ändern (2x 0 und 1 tauschen). Das sollte man im Hinterkopf behalten und als saubere Lösung mal ein eigenes Modul dafür schreiben.
Krafmesszelle: Die Loadcell vom Druckkopf hängt an einem I²C ADC mit fester Adresse.
Hier ist noch todos. Die Einbindung von Probes erfolgt als "endstop", diese sind direkt im Microcontroller auf einen Stepper gemappt (was latzenztechnisch Sinn macht). Zudem ist das i2c lesen "shutdown("i2c_read not supported on avr");".
hier muss also ein "ADC endstop" modul auf dem microcontroller erstellt werden, dass über die Konfiguration angelegt werden kann (so wie eine SPI Verbindung etc. initialisiert wird) und dann als ein virtueller endstop eingebunden wird. Dazu muss ich mich erst noch etwas umschauen.
Es sollte jedoch machbar sein, die Kraftmesszelle zumindest als Sensor zur Matrixscan zu verwenden.
notwendige Modifikationen:
Die Konfigurationsdatei von klipper (printer.cfg) muss durch die für den RF1000 ersetzt werden. Darin sind bereits alle Standardeinstellungen (Pins, Motorstrom, Schrittweiten, Microsteps, Fahrwege vom RF1000 eingearbeitet.
Hinweis zu microsteps: Diese muss man selbst mit skalieren. Wer da spielt bitte die mm/Step korrigieren.
Vor dem SPI transfer setzen wir CS high (statt low), danach wieder low (statt high)
87:
95::
Für die SPI Konfiguration die drv8711.py datei in klippy/extras/ kopieren.
Die Dateien stelle ich demnächst zu Verfügung! Ich optimiere nur vorher noch etwas
Ich will das auch mal probieren!
Benötigte Hardware:
* Raspi, anderer SBC oder alter Laptop mit Linux (Raspian, Ubuntu, Debian)
* Internetzugriff
* USB Kabel zum RF1000
Notwendige Schritte:
* Octoprint installieren (Octopi müsste auch gehen, nicht getestet)
* Klipper installieren (genau nach Anleitung)
* Configuration kopieren und Modifikationen in Klipper Firmware einarbeiten
* AtMega2560 (RF1000 Mainboard) flashen
* Testen
Weitere Hinweise: Ich biete keinen Support für die Klipper Installation etc., bitte selbst googlen.
Auch sonst ist die Funktionsweise von Klipper eher spärlich dokumentiert, das meiste muss man sich selbst aus dem Code erarbeiten.
Meine Meinung zu Klipper:
Die Idee der Voranalyse und Optimierung der Bewegungen ist eine coolse Sache, zeigt sich ja auch in den Ergebnissen und Zeitersparnis. Ob das Verfahren einer Verteilung auf Linux und Microcontroller System dazu wirklich geeignet ist, bleibt offen. in klipper wird sehr viel Aufwand in die Zeiteinhaltung das Ausführung (Scheduling) gesteckt, das serielle Protokoll dazwischen ist solide aufgebaut, lässt aber längst nicht alles auf einfachstem weg zu. Je mehr man sich davon anschaut, desto verkorxter wirkt das alles.
Ein schneller multicore Mikrocontroller würde das auch hinbekommen. Oder man erfindet mal was besseres als G-Code, um hardwarenah Maschinen zu steuern (das serielle Protokoll zum Microcontroller ist ja im Grunde genau das, aber halt nicht einheitlich. Man müsste als die Hardware-Konfiguration mit auf den Microcontroller packen und nur den voroptimierten G-Code abarbeiten lassen.).
Hinweis vorweg: Bisher ist es ein Experiment und ich dokumentiere lediglich die Schritte um das mal auszuprobieren.
Das ist noch keine stabil funktionierende Lösung mit guten Ergebnissen und voll umfänglicher Unterstützung des RF1000.
Wie arbeitet klipper?
Klipper ist eine Kombination aus einem Bewegungsrechner (Raspi o.ä.) und einem Hardware Interface (RF1000 Mainboard).
Alle Bewegungen werden von Klipper (python) optimiert und über eine schlanke serielle Kommunikation an das Mainboard übertragen. Das Mainboard ist dabei nur noch eine art Echtzeitschnittstelle zur Hardware. Alle Intelligenz passiert auf dem Raspi.
Ist klipper mit dem RF1000 kompatibel?
Grundsätzlich ja. Es fehlen ein paar kleine Module um unsere Hardwarerichtig einbinden zu können. Diese müssen in Python umgesetzt werden und die vorgesehenen Ansteuerungsmöglichkeiten des "klipper Hardware Interfaces" nutzen. Keine Angst, es ist fast alles vorgesehen, GPOI, I²C, SPI etc. ist alles da und muss nur richtig konfiguriert werden.
Welche Änderungen an der Firmware sind nötig um den RF1000 betreiben zu können?
Schrittmotortreiber: Die DRV8711 vom RF1000 Mainboard werden über eine SPI ähnliche Schnittstelle konfiguriert. Das muss einmalig beim Start des Druckers passieren, danach wird die Kommunikation nicht zwingen benötigt (nur für Stall Erkennung etc). Die Konfiguration umfasst 8 Register, in denen die Microsteps und max. Strom des jeweiligen Schrittmotors gesetzt werden müssen. Die DRV8711 verwenden dafür ein 16-Bit SPI mit CS active high (normal wäre low). Das ist in klipper (noch) nicht vorgesehen. Da am RF1000 sonst keine weitere SPI Schnittstelle benötigt wird (SD brauchen wir nicht), ist das einfachste im C Code für den ATMega die Polarität des Signals zu ändern (2x 0 und 1 tauschen). Das sollte man im Hinterkopf behalten und als saubere Lösung mal ein eigenes Modul dafür schreiben.
Krafmesszelle: Die Loadcell vom Druckkopf hängt an einem I²C ADC mit fester Adresse.
Hier ist noch todos. Die Einbindung von Probes erfolgt als "endstop", diese sind direkt im Microcontroller auf einen Stepper gemappt (was latzenztechnisch Sinn macht). Zudem ist das i2c lesen "shutdown("i2c_read not supported on avr");".
hier muss also ein "ADC endstop" modul auf dem microcontroller erstellt werden, dass über die Konfiguration angelegt werden kann (so wie eine SPI Verbindung etc. initialisiert wird) und dann als ein virtueller endstop eingebunden wird. Dazu muss ich mich erst noch etwas umschauen.
Es sollte jedoch machbar sein, die Kraftmesszelle zumindest als Sensor zur Matrixscan zu verwenden.
notwendige Modifikationen:
Die Konfigurationsdatei von klipper (printer.cfg) muss durch die für den RF1000 ersetzt werden. Darin sind bereits alle Standardeinstellungen (Pins, Motorstrom, Schrittweiten, Microsteps, Fahrwege vom RF1000 eingearbeitet.
Hinweis zu microsteps: Diese muss man selbst mit skalieren. Wer da spielt bitte die mm/Step korrigieren.
Vor dem SPI transfer setzen wir CS high (statt low), danach wieder low (statt high)
87:
Code: Alles auswählen
gpio_out_write(spi->pin, 1); // vorher: gpio_out_write(spi->pin, 0);
Code: Alles auswählen
gpio_out_write(spi->pin, 0); // vorher: gpio_out_write(spi->pin, 1);
Die Dateien stelle ich demnächst zu Verfügung! Ich optimiere nur vorher noch etwas
Ich will das auch mal probieren!
Benötigte Hardware:
* Raspi, anderer SBC oder alter Laptop mit Linux (Raspian, Ubuntu, Debian)
* Internetzugriff
* USB Kabel zum RF1000
Notwendige Schritte:
* Octoprint installieren (Octopi müsste auch gehen, nicht getestet)
* Klipper installieren (genau nach Anleitung)
* Configuration kopieren und Modifikationen in Klipper Firmware einarbeiten
* AtMega2560 (RF1000 Mainboard) flashen
* Testen
Weitere Hinweise: Ich biete keinen Support für die Klipper Installation etc., bitte selbst googlen.
Auch sonst ist die Funktionsweise von Klipper eher spärlich dokumentiert, das meiste muss man sich selbst aus dem Code erarbeiten.
Meine Meinung zu Klipper:
Die Idee der Voranalyse und Optimierung der Bewegungen ist eine coolse Sache, zeigt sich ja auch in den Ergebnissen und Zeitersparnis. Ob das Verfahren einer Verteilung auf Linux und Microcontroller System dazu wirklich geeignet ist, bleibt offen. in klipper wird sehr viel Aufwand in die Zeiteinhaltung das Ausführung (Scheduling) gesteckt, das serielle Protokoll dazwischen ist solide aufgebaut, lässt aber längst nicht alles auf einfachstem weg zu. Je mehr man sich davon anschaut, desto verkorxter wirkt das alles.
Ein schneller multicore Mikrocontroller würde das auch hinbekommen. Oder man erfindet mal was besseres als G-Code, um hardwarenah Maschinen zu steuern (das serielle Protokoll zum Microcontroller ist ja im Grunde genau das, aber halt nicht einheitlich. Man müsste als die Hardware-Konfiguration mit auf den Microcontroller packen und nur den voroptimierten G-Code abarbeiten lassen.).