Tech-Ecke / Basteleien / CNC Fräse |
|
CNC-Fräsmaschine im Eigenbau
Welcher Hobbybastler hat nicht schon mal bei Hornbach und co. vor der Rotwerk EFM-200 gestanden und nach einem vernünftigen Grund gesucht, um sich den 600 Euro hohen Anschaffungspreis schönzureden. In aller Regel bleibt die Maschine jedoch im Regal, zu hoch ist der Preis für die wenigen Einsätze, die sich ja irgendwie auch auf andere Weise bewerkstelligen lassen. Die Low-Budget-Lösung ist ein Kreuzsupport für die eh schon vorhandene Tischbohrmaschine. Genau so habe auch ich mich auch entschieden. Da Tischbohrmaschinen recht günstig zu haben sind, macht es Sinn sich für diesen Zweck gleich eine separate Maschine zuzulegen. Nach Begutachtung einiger Exemplare entschied ich mich für die Tischbohrmaschine T.I.P. TB13/5 und dem "Präzisions Kreuzsupport" von Westfalia. Beides zusammen kostete ca.150 Euro. Im Grunde hatte ich auch nicht mehr vor, als diese beiden Komponenten miteinander zu verheiraten, aber wenn man dann am basteln ist kommen einem ja immer noch diese lustigen Ideen... Heraus kam am Ende eine Computergesteuerte 3-Achsen-Fräsmaschine ;-) Wer auch vor hat einen ähnlichen Umbau vorzunehmen, der kann sich auf dieser Seite ja schon mal etwas Appetit holen.
diese Seite beinhaltet:
Das Steuerungsprinzip etwas genauer Soviel zur Entstehung der Maschine, aber sicherlich wollen nun einige wissen wie ich die Steuerung nun ohne Schrittmotoren realisiert habe. Vorab möchte ich allerdings noch ein paar Worte zum wesentlichen Prinzip los werden.
Das Prinzip der Steuerung Alle drei Motoren werden über den
LPT-Port des PC's gezielt verfahren. Dabei nutze ich die ersten 6 Datenbits im Datenregister des LPT-Ports
zum Ansteuern der Motoren. Zur Erfassung der Umdrehungen, also somit der Vorschubstrecke, drei
Eingänge des Statusregister. Genauer gesagt Pin 1 - 6 für
Datenausgang (Motoransteuerung), Pin 10 - 12 für Dateneingang
(Umdrehungserfassung).
Dateneingang und Modifikation an den Motoren Wie nun schon mehrfach erwähnt, ist der Schlüssel meiner Steuerung die Umdrehungsfassung der Motoren bzw. einem geeignetem Zwischenrad im Getriebe. Hierzu kamen zwei unterschiedlich Abtastverfahren in frage. Zum Einen eine optische Erfassung über Loch bzw. Fächerscheibe, (Lichtschranke) oder über Magnete in Verbindung mit Hallsensoren bzw. Reedkontakte. Auf Grund der Getriebeart der von mir verwendeten Motoren, bei der es schwer wäre eine Achse nach außen zu führen, um dort eine optische Abtastung anzubringen, entschied ich mich für die Magnet-Abfrage. Ich bin irgendwie bei den Reedkontakten hängen geblieben, da ich bislang noch keine Probleme damit hatte. Eigentlich hatte ich bei dem ersten Test nur zu einem Reedkontakt gegriffen, da ich von der Ungeduld getrieben keine Lust hatte den etwas aufwendiger einzubindenden Hallsensor zu verwenden. Erstaunlicher weise funktionieren die Reedkontakte immer noch einwandfrei und das bei einer ständigen Beanschlagung von ca. 4 Hz. Wie auch immer, der Hallsensor ist allerdings hier die deutlich sicherere Wahl. und bei höheren Frequenzen auch unumgänglich. Prinzipiell ist die Erfassung schnell drehender Teile immer anspruchsvoller als welche mit relativ niedrigen Drehzahlen, jedoch steigt natürlich die Genauigkeit je näher man zur Antriebsdrehzahl, also der Motordrehzahl kommt. Ich denke in meinem Fall konnte ich einen guten Kompromiss eingehen. Da ich ein Zwischenrad als Magnetträger benutze, welches gegenüber der Abtriebsdrehzahl 1:23 untersetzt ist. Da ich zwei Magnete im Abstand von 180° unterbringen konnte, kann ich eine Abtriebsumdrehung in 46 Teilschritten erfassen. Die Gewindespindeln im Support haben eine Steigung von je 2mm. Dadurch ergibt sich eine Ansteuergenauigkeit von 2/46 also ca. 0.0435mm.
Das Bild (Plan2) zeigt wie eine Drehzahlerfassung mittels Reedkontakt über den LPT-Port aussehen kann. Dabei wird der Reedkontakt in der Tat, so wie dargestellt einfach nur zwischen Masse (Pin 18-25, sind intern gebrückt) und einem Pin als Eingang geschaltet. In diesem Fall wird der Pin 15 benutzt, also ERROR vom Statusregister.
Datenausgang, Antriebssteuerung der Motoren Im Grunde würden 4 Ausgänge reichen, um drei Gleichstrommotoren in beide Richtungen anzutreiben, zumindest wenn man nicht zwei Motoren gleichzeitig und in verschiedene Richtungen fahren lassen möchte. Die von mir verwendeten 6 Ausgänge wären also prinzipiell nicht nötig gewesen, jedoch erleichtert es das Zusammenspiel zwischen dem Bedienpult und der Steuerung durch den PC. Also galt es dem PC sechs Steuerspannungen zu entlocken, die je ein Relais schalten sollen. Der LPT-Port würde aber lautlos ins Jenseits befördert werden wenn man hier direkt ein Relais anschließen und erregen würde. Um das zu umgehen kann man die am Port liegenden Signale (TTL) über einen Leistungstreiber wie den ULN2803 verstärken. Wie eine Schaltung mittels Leistungstreiber aussehen kann zeigt diese Schaltung. Oder man verstärkt das Signal mittels einem Transistor, wofür ich mich letztlich entschieden habe. Um den empfindlichen LPT-Port zu schützen, lasse ich das Signal zuvor über einen Optokoppler laufen. Plan 3 zeigt den Aufbau dieser Schaltung für einen Ausgang.
Noch ein letzter Umbau Ich greife jetzt mal in der Zeit ein wenig voraus. Nachdem das Programm zu Ansteuerung der Maschine stand und ich die ersten Fräsversuche unternahm, viel mir eines recht unschön auf. Insbesondere beim Fräsen von Kreisen, bei dem die beiden Achsen des Tisches im ständigem Wechsel geschaltet werden, sind die Relais ständig am Werkeln. Dabei machte ich mir weniger Gedanken um das nervige Geklackere, als darüber, dass die Relais dieser Belastung nicht lange standhalten können und ein wohl recht häufiges Ersetzen der ausgefeuerten Relais die Folge sein könnte. Trotzdem ich die Maschine dann doch eine nicht unbeachtliche Zeit, vollkommen störungsfrei mit den ersten Relais betrieben hatte, kam der bislang letzte Umbau auf eine relaislose Transistorsteuerung mittels Leistungstransistoren. Der Aufbau wirkt zwar im ersten Moment sehr komplex gegenüber der Relaisschaltung, aber eigentlich hält es sich doch in Grenzen und der Mehraufwand ist es meiner Meinung nach absolut Wert. Plan 4 Zeigt zunächst mal eine Transistorschaltung, die einen Drehrichtungswechsel eines Gleichstrommotors ermöglicht.
Mehr Infos zu dieser Schaltung gibt es hier:
Schaltplan komplett Nachdem nun alle Grundelemente der Steuerung soweit erklärt sind, wird es Zeit für die komplette Schaltung vom PC bzw. Bedienpult-Schaltern bis zu den Motoren Download CNC-steuerung.pdf hier
Bastelplatinenlayout zur Steuerung
Wie schon oben angeführt hatte ich mich zunächst dazu entschlossen das Programm, welches die Maschine letztlich steuert in QBasic zu schreiben. Die Befehle um die seriellen und parallelen Schnittstellen des PC's anzusteuern und auszulesen sind OUT(x) und INP(x). Dabei steht das X für die Dezimaladresse des entsprechenden Registers. Die Ausgänge sind im Datenregister des LPT 1 zu suchen, also 888 und die Eingänge im Statusregister, hier 889. (LPT 2 wäre 632 und 635). Der Syntax zum Setzten eines Ausgangs am LPT 1 ist:
Syntax zum Auslesen eines Eingangs am LPT 1 ist:
In die Variablen X wird der aktuelle Status-Wert des Statusregisters geschrieben. Je nach Rechner oder und Einstellung des LPT-Modus bekommen man hier unterschiedliche Werte für den gesetzten Zustand. Zumindest hatte ich bei drei unterschiedlichen Rechnern, trotz gleichem LPT-Modus auch drei unterschiedliche Werte für den einundselben Zustand. Warum dies so ist kann ich nicht erklären, tut aber auch der Sache keinen Abbruch und drum hatte es für mich auch nie einen Anreiz gegeben dies genauer unter die Lupe zu nehmen. Also am besten Schreibt man sich schnell einen Mini-5-Zeiler und testet es für seinen PC schnell selbst aus:
Nach dem Start kann man nun die einzelnen Eingangspins mit Masse von Pin 18-25 beanschlagen und sich die Werte notieren. Nun steht einem gezielten Verfahren eines Motors fast nichts mehr im Wege. Man kann davon ausgehen, dass der Magnet beim Vorbeischwingen den Reedkontakt nur wenige Millisekunden beanschlagt, dennoch ist unter DOS, selbst mit einem 486'er die Abtastrate des LPT-Ports noch schneller und wird den Wert, je nach Drehzahl gleich ein paar mal hintereinander ausgeben. Diese Tatsache sollte man in seinem Programm beachten. Wie im Umbauteil bereits erklärt, bewirkt ein Vorbeidrehender Magnet eventuell ein "Flattern" des Reedkontaktes. Dieses Problem könnte man Schaltungsseitig durch eine Entprellung lösen, aber warum mit dem Lötkolben rumhantieren wenn man dies auch Programmtechnisch lösen kann. Alles was man tun muss ist, nach dem ersten Signal des Reedkontakts eine Pause im Programm einbringen, die lange genug ist um über den Prellbereich hinauszukommen, aber nicht zulange ist, damit das nächste Signal nicht mehr erfasst werden könnte. Da hilft einfach nur ein wenig rumexperimentieren. Nach ein paar Versuchen stellte ich fest, dass dies auch eine wirklich sichere Sache ist, obwohl es zugegebener maßen im Programm etwas unsauber anzusehen ist. Bei schwachen Motoren ist diese Abstimmung wahrscheinlich etwas kniffliger als bei Motoren mit üppigem Drehmoment, da diese unter Last kaum einen Drehzahlabfall erleiden und von daher die "Reedkontakt-Pause" relativ konstant bleiben dürfte. Meine ersten Zeilen hierzu sahen wie folgt aus:
Man möge mir hier die 'quick and dirty' Pause mittels FOR..NEXT-Schleife, die je nach Rechnergeschwindigkeit anzupassen ist verzeihen. Kreisgleichung
Warum nun jetzt Windows und nicht DOS? Eigentlich ist die Antwort ganz simpel. Ich hatte mich zu sehr von Meinungen leiten lassen, dass die Ansteuerung des LPT-Ports unter Windows zu komplex und unsicher sei. Das mag auch für viele Dinge zutreffen, jedoch ist die Ansteuerung mit einer dafür bestimmten Bibliothek (DLL) eben so simpel wie unter DOS mit QBasic und für meinen Zweck auch sicher bzw. schnell genug. Deswegen habe Ich begonnen einen simplen CNC-Programm-Editor unter Delphi zu stricken. Die Ansteuerung des LPT-Ports erledigt die, im Programm angezogene Bibliothek INPOUT32.DLL. Für alle die Interessiert an der Sache sind, habe ich das Programm "SelfCNC" im Programmdownload hinterlegt. Das Programm, welches mittlerweile in Version 2 zur Verfügung steht, ähnelt eher einer CAD-Anwendung für "arme" als einem CNC-Editor. Die einzelnen Befehle werden über Masken eingegeben und nach Abschluss direkt graphisch am Bildschirm ausgegeben. Das eigentliche CNC-Programm baut sich automatisch in der linken/unteren Bildschirmhälfte auf und dient gleichzeitig als Navigation durch die einzelnen Befehle. Auch wenn es im ersten Moment den Anschein hat, dass das so erzeugte Programm konform zur DIN 66025 ist, so unterscheidet es sich in Details doch sehr stark, insbesondere in der Angabe zum Kreis bzw. Kreisbogen. Mehr zum Funktionsumfang und zur Bedienung findet man im Programm unter "Hilfe/Kurzeinstieg".
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !
[letzte Aktualisierung 16.02.2009]