Skip to main content

Es ist schon ein Weilchern her

das ich meine CNC Fräsmaschine gebaut habe. Ursprünglich war mein Ziel eine Machine zu bauen die von mit komplett selbst hergestellt ist, das bedeutet also alle mechanische Bauteile aus Standardwerkstoffen (in meinem Fall Stahl) selbst herstellen mit den mir zur Verfügung stehenden Maschinen. Dann sollten die Antriebe aus gewöhnlichen DC Motoren mit angekoppelter Positionsgebern erstellt werden wodurch ein selbst aufgebauter Servo entsteht. Schliesslich war mein Ziel die Steuerung der Servos, des Interpolators und des Positionsintegrators in einem kleinen! ATMega mit gerade einmal 4096 Byte Arbeitspeicher zu implementieren.

Das habe ich 2014 fertiggestellt und das Resultat ist auf der Seite "Meine CNC Fräsmaschine" zu sehen.

Die letzten fast zehn Jahre hat die Maschine dann im Keller verbracht und Patina angesetzt.

Schade eigentlich -- obwohl Patina bei Oldtimern selbst wertsteigernd wirken kann. 

Irgentwann dachte ich mir das ich das Projekt doch mal wieder ausgraben sollte und auf die Höhe der Zeit bringen müsste. Erst dachte ich an eine neuere Architektur auf Microcontroller-Basis. Aber ich erinnerte mich an die vielen Nebenbaustellen die sich mit dem ATmega auftaten während der Entwicklung.

  • Wo die Programme speichern?
  • Wie das Benutzerinterface anzeigen?
  • Wie den knappen Arbeitsspeicher aufteilen?
  • Wie die geringe Performance optimal nutzen?

Sicherlich spielen bei neueren Mikroprozessoren die letzten beiden Themen für eine CNC nicht mehr die Hauptrolle, Entwicklung auf einer Plattform ohne Betriebsystem macht den Prozess jedoch viel schwieriger.

Da ich bereits mehrere Projekte auf der Linuxplatform in einem Raspberry Pi umgesetzt hatte, war mir der kleine Zwerg schon ein bischen ans Herz gewachsen und ich begann die ersten Ideen gedanklich auf diesem System zu projektieren. Die vier obigen Herausforderungen bestehen auf dieser Plattform überhaupt nicht, es gibt aber eine neue.

  • Brauche ich ein echtzeit Unix oder reicht ein normales Raspian?

Um das heraus zu finden entschloss ich mich zu einem Versuch mit einer Achse. Sollte es möglich sein eine Achse vernünftig anzusteuern, dann kann ich entscheiden ob die weitere Umsetzung der Steuerung Sinn macht. Von Vorteil ist in Linux auch das der bestehende Kode aus dem ATmega, der ja ebenfalls in C geschrieben ist, weiterverwendet werden kann.

 

 

Die alte Maschinenhardware soll komplett weiterbenutzt werden ausser den beiden geschrotteten Achsencodern die ich ersetzen muß. Das ist auch besser da in der alten Ausführung zwei der Encoder mit EnDat Protokoll liefen und einer mit SSI. Das ist nicht wirklich schön. Durch eine Unachtsamkeit meinerseits habe ich aus Versehen die drei Encoder gleichzeitig mit der 12V Spannungsversorgung verbunden, die beiden EnDat vertragen jedoch nur 5V und haben deshalb das Zeitliche gesegnet.

Das Lesen der Encoderwerte

Mit dem Raspberry wäre jetzt der erste Schritt einen funktionierenden Servo zu bauen. Um die Daten aus dem Heidenhain Geber ROQ 525 auszulesen habe ich mich an die Hardwareempfehlung von Heidenhain gehalten und mittels RS485 Treibern ein kleines Breadboard aufgebaut.

Die Heidenhaingeber hatte ich mir günstig über Ebay besorgt und an den "fachmänisch" per Seitenschneidet abgeschnittenen Kabelenden einen eigenen Stecker und ein stück Kabel angelötet. Immerhin waren die Geber wegen der abgeschnittenen Kabel sehr günstig.

Auf dem Breadboard werkeln zwei LTC1485, die die CL Schnittstelle zur Datenübertragung zum und vom Geber bilden. Um den Raspberry mit 3,3V Signalen anzusteuern habe ich einen Transistor in Kollectorschaltung nachgeschaltet.

Die ersten SSI Werte werden gelesen und angezeigt.

Als nächstes werde ich einen Motor mit dem kleinen Controller ansteuern.

Ins Auge gefallen ist mir dabei der Pololu 24v12, mit dem ein gewöhnlicher DC Motor angesteuert werden kann. Den Kontroller steuere ich dann via USB Seriell an um die Geschwindigkeitswerte vor zu geben.

Das ist die Maschine während dem Umbau auf die neue Steuerung.