MillyMcMillface

by Valentin, Bouni -
Project image

Vorgeschichte

Es bestand schon lange der Plan, eine CNC Fräse zu bauen, doch das war lange nur ein Plan. Vor ca. einem Jahr ist die Fräse von Valentin im Zuge von Jugend Forscht gebaut worden. Leider bereitet das Smoothieboard, das die Fräse steuert, ein paar Probleme. Deshalb wurde beschlossen, auf eine LinuxCNC basierte Steuerung umzubauen. Diesen Prozess werden wir hier dokumentieren.

Video

Hardware

Elektronik

Angetrieben werden die Achsen von Nema34 Schrittmotoren. Diese werden von Treiberkarten und 60V Netzteilen mit Strom versorgt. Die Spindel ist über einen Frequenzumrichter des Herstellers HuanYang angeschlossen. Dieser spricht einen kuriosen Modbus-Dialekt. Motoren und Spindel sind bzw. waren an der Steuerung Smoothieboard V1 angeschlossen. Hier sind ebenfalls Endschalter angeschlossen. Fräsdateien und Steuerungsinputs bekommt das Board per Ethernet.

Grundsätzlich ist das Smoothieboard eine gute 3D-Drucker-Steuerung, die viele Möglichkeiten bietet. Für den Betrieb an unserer Maschine haben wir allerdings im Laufe der Zeit herausgefunden, dass es noch nicht die optimale Lösung ist. Auf Feedrate-Override oder Nothalt reagiert die Steuerung erst nachdem eine Programmzeile beendet ist.

Wärend das beim Würstchendrucker nicht so schlimm ist, stellt das bei einer etwas seriöseren Maschine ein Sicherheitsrisiko dar und so haben wir uns entschieden, die Steuerung auf ein LinuxCNC-basierendes System umzubauen.

Wir haben uns nach langer Entscheidungszeit für eine Mesa 7i96 FPGA-Karte entschieden da diese via Ethernet mit einem beliebigen PC verbunden werden kann auf dem LinuxCNC läuft. Ausserdem bietet sie alles, was wir benötigen, zum kleinen Preis. Bestellt wurde die Karte bei EUsurplus.

Nach den ersten Versuchen stellte sich heraus, dass es sich um ein selten verwendetes Modell handelt und die Konfiguration etwas mehr Arbeit erforderdert, als beispielsweise die größere 7i77. Dennoch haben wir bereits am ersten Abend geschafft, einen Ausgang blinken zu lassen und einen Motor drehen zu lassen. Wie es mit der Steuerung weitergeht, werden wir weiter unten genauer beschreiben.

Mechanik

Ich habe mit meiner Projektarbeit eine Dokumentation erstellt, in denen Details zum Planung und zum Bau der Maschine beschrieben werden. Diese Dokumentation kann hier heruntergeladen werden.

Umbau auf LinuxCNC - Ein Meisterwerk in ??? Akten

Erster Akt: Das Realtime - Betriebssystem installieren

Debian Stretch Netinstaller von hier herunterladen.

Image mit z.B. dd auf einen USB Stick schreiben (Achtung, sichergehen das /dev/sdb auch der USB Stick ist!):

sudo dd if=debian-9.6.0-amd64-netinst.iso of=/dev/sdb bs=4M status=progress

USB Stick in den Rechner und davon booten, Debian installieren und anschliessend das frisch installierte System booten.

Terminal öffnen und folgende Befehle ausführen:

# Als Root anmelden 
su -

# System updaten
apt-get update
apt-get upgrade
apt-get dist-upgrade$

# Realtime kernel installieren
apt-get install linux-image-rt-amd64

# sudo installieren
apt-get install sudo
# User der Gruppe sudo hinzufügen
useradd -a -G sudo <username>

#dirmngr installieren um Fehler beim den Nachfolgenden befehlen zu verhindern
apt-get install dirmngr

# Key des linuxcnc buildbots hinzufügen
apt-key adv --keyserver hkp://keys.gnupg.net --recv-key E0EE663E

# buildbot repo zur sources.list hinzufügen
add-apt-repository "deb http://buildbot.linuxcnc.org/ stretch master-rtpreempt"

# Paketquellen installieren
apt-get update

# linuxcnc installieren
apt-get install linuxcnc-uspace

# Nützliche Pakete installieren
apt-get install vim git

# System neu starten
reboot

PC neu starten, ein Terminal öffnen und mit uname -a ob der PREEMT RT Kernel geladen wurde. Da sollte dann so etwas wie Linux mill 4.9.0-8-rt-amd64 #1 SMP PREEMPT RT Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux stehen

Zweiter Akt: Netzwerkverbindung herstellen

Die MESA-Karte hat standardmäßig die IP 192.168.1.121 . Um mit der Karte kommunizieren zu können muss am Computer eine statische IP-Adresse vergeben werden. Dazu oben rechts im Panel auf das Netzwerksymbol rechtsklicken und Edit Connections… auswählen. Im sich öffnenden Fenster eine neue Verbindung erstellen, Èthernet auswählen und bestätigen. Es öffnet sich ein neues Fenster. Im Tab Ethernet wird bei Device die richtige Netzwerkkarte ausgewählt. Im Tab IPv4 Settings wird manual ausgewählt. Mit einem Klick auf Add wird eine Verbindung mit der Adresse 192.168.1.1 und der Netzwaske 24 eingegeben. Der Eintrag des Gateways bleibt leer. Alle Fenster bestätigen und schließen. Nun im Panel oben rechts erneut auf das Netzwerkysmbol klicken und die neu erstellte Verbindung auswählen.

Zum Testen wird ein Terminal geöffnet, in dem der Befehl ping -c 4 191.168.1.1 eingegeben wird. Lautet die Antwort 4 packets transmitted, 4 received, 0% packet loss, so sollte alles richtig eingestellt sein.

Dritter Akt: LinuxCNC einrichten und Konfiguration

Die Konfiguration findet über .ini und .hal files statt. Diese liegen auf unserem Fräsen Rechner unter ~/linuxcnc aber im Grunde ist es egal wo man seine config files ablegt, man übergibt den Pfad zum .ini file sowieso beim starten von linuxcnc.

# ins home verzeichnis wechseln
cd ~
# Konfig unserer Fräse von Github clonen
git clone https://github.com/reaktor23/MillyMcMillface.git linuxcnc

Um linuxcnc zu starten ein terminal öffnen und linuxcnc ~/linuxcnc/7i76-1k.ini eingeben und starten.

Da wir doch auch an sehr vielen Stellen unsere Probleme hatten, werden wir versuchen einige davon hier detailierter zu beschreiben.

Update 07.01.2019 - Handrad

Wir konten ein gebrauchtes Handrad (Euchner HBA) ergattern und haben dieses währen des 35C3 erfolgreich in unser LinuxCNC Setup integrieren. Das Handrad verfügt über:

Alle Signale wurden auf einem Arduino Nano aufgelegt (Link zum Sketch), dieses sendet bei Änderung die daten Seriell zum PC, z.B. Plus:1 für Plustaste ist gedrückt. Dort liegt ein Python Programm das die Daten auswertet und an Linux CNC weiterreicht Link zum HAL File. In der INI muss lediglich das HAL file eingebunden werden Link zur betreffenden INI Zeile

Update 17.01.2019 - Encoder Feedback

Da wir immer wieder mit Schrittverlusten kämpfen haben wir beschlossen die Achsen mit Encodern auszustatten um ein Closed-Loop System zu bekommen. Unsere Motoren sind glücklicherweise mit beidseiteigen Wellen ausgestattet, die eine treibt die Spindel an, die andere wird mit einem Hohlwellenencoder versehen. Die Encoder werden an eine Mesanet 7i85S angeschlossen die uns weitere Encodereingänge verschafft. Der User PCW aus dem linuxcnc forum war so freundlich uns ein passendes Bitfile für die 7i96 zur Verfügung zu stellen.

Update vom 10.03.2020 - Alles Neu

Wir versuchen jetzt mal alles neu zu machen und zu dokumentieren, der aktuelle aber nicht unbedingt funktionierende Stand unserer LinuxCNC config findet sich in diesem Git Repo.

Update vom 20.05.2020 - Debian 10 Buster + LinuxCNC 2.9 + Mesa 7i96 + Mesa 7i85S Setup

Um mal auf einem halbwegs auf einen aktuellen Stan zu kommen haben wir ein Debian 10 Buster installiert. Da es dafür aber keine fertigen Pakete guibt war es notwendig diese selbst zu bauen. Auch dies haben wir hier dokumentiert!