Software für den 3D-Drucker

Die Firmware basiert auf Marlin V1 und steht unter der GPL Lizenz, die Hauptentwickler sind EvdZ ( Eric von der Zalm ) und bkubicek. Die Firmware wiederum basiert auf Sprinter... nachzulesen unter http://reprap.org/wiki/Marlin.

 

Das Marlin Projekt hat einige Änderungen erfahren, die ich im Folgenden kurz erläutern möchte.

 

  1. Das Projekt ist von Arduino IDE zum Atmel Studio 6.2 umgezogen
  2. Das Projekt bekam das I²C Add-On für das Grafische Display
  3. Die Bedienkonsole ist als neue Bedieneinheit des Druckers eingepflegt, das Menü ist abgeändert
  4. Den SD-Kartenleser anmelden
  5. Die Schrittmotorsteuerung wurde um die direkte Ansteuerung der Achsen erweitert
  6. Auch ein Bluetooth Serial Modul ist nun enthalten zur Fernsteuerung des Druckers z.B. mit Repetierhost

Umzug zum Atmel Studio 6.2 Windows

Benötigt wird neben der Installation von Atmel Studio 6.x auch eine Arduino - Installlation. Wenn die Projektdateien "Marlin-MegaJoy.zip" aus dem Downloadbereich in das originale Marlinverzeichnis entpackt werden, muß dem Atmel Studio nur noch der Pfad zur Arduino-Installation mitgeteilt werden, sofern es sich bei Ihrem Windows-System nicht um ein 64-Bit System handelt und die Arduino-Installation sich nicht im 32-Bit Programmverzeichnis auf Laufwerk C:\ befindet. Überprüfen Sie daher bitte die Einstellung im Projekt unter Toolchain: "AVR/GNU C Compiler" und "AVR/GNU C++ Compiler".

 

Was alles im Einzelnen eingestellt werden muß, um Sketche aus der Arduino-Welt ins Atmel Studio 6.x zu portieren erfahren Sie hier.

 

Das Display mit I²C

Das Display "LCD2004" oder ähnliche Bezeichnungen mit einem HD44780 Chipsatz bekommt man für wenig Geld bei einem der bekanntesten Online-Aktionshäuser, eben so den Portexpander mit einem PCF8575. Manchmal gibt es diese Baugruppen sogar schon fertig verlötet. Die beiden I²C Leitungen werden in der Bedienkonsole zum RAMPS durchgeschleift und landen folglich direkt auf dem Arduino-Board GPIO 20 (SDA) und 21 (SCL).

Im Marlin-Code muß nun noch das LCD angemeldet und die benötigten Headerdateien und Bibliotheken kopiert werden. Diese bekommen sie als mindeste Version 1.1.7.1 der LiquidCrystal-Bibliothek bei Francisco Malpartida (https://bitbucket.org/fmalpartida/new-liquidcrystal), fehlt dann nur noch die Wire-Bibliothek, die sie bei Nicholas Zambetti bekamen.

Es muß noch der Marlin-Firmware mitgeteilt werden, dass ein Display mit 20 Zeichen mal 4 Zeilen über I²C an einen Portexpander PCF8575 angeschlossen wurde. Das geschieht durch folgende Definitionen in der configuration.h:

Für das Display:

    #define ULTRA_LCD
    #define LCD_WIDTH 20
    #define LCD_HEIGHT 4

und für den Portexpander:

    #define LCD_I2C_TYPE_PCF8575
    #define LCD_I2C_ADDRESS 0x27   ( wenn keine Brücken auf dem Adressfeld des Expanders gelötet wurden )

 

 

Anschluß der Bedienkonsole

Das sind die umfangreichsten Änderungen am Marlin-Projekt. In der configuration.h habe ich eine Definition #define LCD_I2C_ATMEGA_JOYSTICK_PANEL vereinbart, mit der alle Quelldateien bedingten Code erhalten. In der configuration.h werden mit dieser Definition alle relevaten Einstellungen vorgenommen, so auch für das Display und der I²C - Verbindung. Oftmals treten auch Bedingungen wie #if defined (ULTIPANEL) || defined(LCD_I2C_ATMEGA_JOYSTICK_PANEL) auf. Codeblöcke für ULTIPANEL sind damit auch für LCD_I2C_ATMEGA_JOYSTICK_PANEL gültig. Die Definition #define ATMEL_JOYSTICK_USE_PORTS_DIRECT ist für das Einlesen der Schalter direkt über den Port zuständig. Die Menüpunkte des "Prepare"-Menüs sind abgeändert und erweitert worden, Die alten Positionierungsmenüs sind nicht mehr vorhanden.

 

Prepare:
     Prehead PLA:
             Prehead PLA 1
             Prehead PLA Bed
     Prehead ABS:
             Prehead ABS 1
             Prehead ABS Bed
     Cooldown
     Auto home
     Move Axis:
             X Y Z E
     Set Z-Axis at home
     Store memory
     Load memory
     Disable steppers
     Set origin XYZ
     Set origin XY
     Set origin Z
     Switch power off

  • Auto home führt den Befehl G28 aus, X und Y wird verfahren, bis der jeweilige Min-Endschalter betätigt wird. Die Z-Achse wird verfahren, bis der Z-Max_Endschalter erreicht ist. Die voreingestellten Werte für Z, X und Y werden aus dem EEProm gelesen und zugewiesen. Damit muß die Home-Position nicht unbedingt bei X 0.0, Y 0.0, Z 200.0  liegen, in der config.h lassen sich diese Werte einstellen.
  • Move Axis hat nur Anzeigefunktion. Die Achsen können zwischen den Min- und Max- Endstopschaltern mit den Joysticks bewegt werden.
  • Set Z-Axis at home speichert die Differenz der derzeitigen Z-Position und der Max-Position zur neuen Max-Position für diese Sitzung.
  • Store memory ist ein Duplikat aus dem "Control"-Menü und speichert hier den neuen Z-Max-Wert im EEProm ab. Damit ist der neue Z-Max Wert auch beim nächsten Einschalten verfügbar.
  • Load memory ist hier anzutreffen für den Fall, dass der originale Zusatnd vor dem Speichern wieder hergestellt werden soll.
  • Set origin XYZ ist ein G92 Befehl für alle 3 Achsen, bei XY bzw. Z jeweils nur die angegebenen. Die Achsen werden in diesem Fall auf 0.0 gesetzt.
  • Store memory wirkt sich hier nicht aus.

In der configuration.h sollte noch #define EEPROM_SETTINGS und #define EEPROM_CHITCHAT gesetzt werden, um Store memory bzw. Load memory zu aktivieren.

 

SD-Kartenleser hinzufügen

Der SD-Kartenleser ist mit RAMPS:AUX-3 (SPI) verbunden. Alles was gemacht werden muß: #define SDSUPPORT in der configuration.h setzen.

 

Die Schrittmotorsteuerung über die Bedienkonsole

Wenn das Menü "Move Axis" aufgerufen wird, so werden zunächst die Stepper, sofern noch nicht geschehen, aktiviert. Durch das Auslenken der Joysticks werden in der Bedienkonsole für jede Achse Takte erzeugt, deren Frequenz vom Grad der Auslenkung abhängt. Im Arduino wird ein Timer aktiviert, der das Auslesen der Ports der Joysticktakte organisiert und direkt an die Stepper weitergibt. Dazu wird ein temporärer Positionsrecord, welcher bei Aktivieren des "Move Axis"- Menüs mit dem aktuellen Positionswerten initialisiert wurde, mitgeführt. Dies ist wegen der direkten Verwendung der Bedienkonsole in ulralcd.cpp realisiert.

 

Bluetoothmodul HC-06 zu RS232 zur Fernsteuerung

Mit diesem Modul kann der Drucker durch ein Host (z.B. Repetierhost) ferngesteuert werden. Dazu muß das Bluetooth Modul mit  AUX-1 ( das ist Tx0/Rx0 ) verbunden werden. Ein Spannungsteiler auf TxD vom Arduino, wie in der RepRap Community beschrieben, sollte ebenfalls aufgebaut werden, da der Arduino mit 5V arbeitet, das Bluetooth-Modul jedoch mit 3,6V. Weiterhin muß in der config.h die Definitionen:

#define SERIAL_PORT 0
#define BAUDRATE 115200
#define BTENABLED   

gesetzt sein. Das war's - fast, es muß nämlich noch das Bluetooth Modul eingerichtet werden. Mit einer Übertragungsrate von 115200 baud, 8 bit und 1 Stopbit ohne Flußkontrolle sollte es passen. Es gibt verschiedene Tutorials im Netz, die die Programmierung der Bluetooth-Module mittels eines Terminal-Programms zeigen. Alternativ kann auch ein Sketch aus der Arduinowelt benutzt werden ( einfach mal googeln ). WICHTIG! Bei Benutzung einer RS232 Schnittstelle unbedingt einen Pegelwandler benutzen, die üblichen Spannungen von +/- 12V am Serialport verträgt das Bluetooth-Modul überhaupt nicht.