Pinbelegung
Es werden 5V-Pegel verwendet. 5V-fähige uCs wie Atmegas sind hier klar im Vorteil.
Die Belegung des Parallelports ist wie folgt: (Zählweise: erst entlang der ersten (längeren) Reihe, dann in der gleichen Richtung entlang der zweiten Reihe, d.h. *nicht* zickzack) Im Zweifelsfall auf den Stecker schauen, meistens steht die Pinnummer dabei.
1 PC high, Fräse low 14 Clock 2 X-Step 15 PC high 3 X-Direction (high = +x) 16 Data 4 Y-Step 17 Select (active low) 5 Y-Direction 18 GND 6 Z-Step 19 GND 7 Z-Direction 20 GND 8 Spindel-Relais (siehe Kommentar) 21 GND 9 Sprühnebel (active high) 22 GND 10 Limit X (active high) 23 GND 11 Limit Z (active high) 24 GND 12 Limit Y (active high) 25 GND 13 PC high, Fräse high 26 GND
Hinweise:
- Pin 8 schaltet nur das Spindel-Relais ein. Die Geschwindigkeit muss noch gesetzt werden. Vorsicht: die Fräse hat keine Pulldowns! Pin unbedingt selbst auf GND ziehen, sonst geht die Spindel an!
- Die "erst Step, dann Direction"-Reihenfolge nennt sich auch Xylotex-like.
- Die Kanäle 1, 13 und 15 scheinen ohne Funktion zu sein. (Evtl. liegen auf Pin 13 und 15 Eingänge. Dadurch könnte z.B. signalisiert werden, dass die Schrittmotoren Schritte verloren haben und die Maschine daher neu kalibriert werden muss. Scheint aber nicht der Fall zu sein: wir haben das ausprobiert, indem wir auf die Pins geguckt haben und an die Wand gefahren sind. Evtl. waren wir aber zu vorsichtig. Alternative Idee: laut Handbuch ist die Fräse "ausbaubar auf weitere Achsen". Vielleicht sind zumindest zwei der Kanäle für eine zusätzliche Achse.)
Spindelgeschwindigkeit
Über SPI auf den Pins 14,16 und 17 wird die Drehzahl eingestellt. Die Datenrate ist 30 kHz; die Daten werden in 16bit-Worten (Big Endian) übertragen. Bei einem ATMega328p mit 128 kHz Clock haben die folgenden SPI-Settings funktioniert:
SPCR = _BV(SPE) | _BV(MSTR) | _BV(SPR0) ; SPSR = 1 << SPI2X;
Die gesendeten Werte sind linear Interpoliert zwischen:
14000 RPM in Editasc -> 2866 20000 RPM in Editasc -> 4094 (0x0FFE -- erster Nibbel soll stets 0 sein!)
Niedrigere Werte führen auch zu (entsprechend langsameren) Drehen der Fräse.
Zu häufige Geschwindigkeitsupdates führen dazu, dass der (vmtl. PID-)Regler sich komisch verhält. Das sollte im Normalbetrieb aber kein Problem sein. Eine Drehzahländerung über den vollen Bereich braucht ca. 1 Sekunde (dabei überschwingt der Regler).
Getestet: man kann die Spindelgeschwindigkeit auch mit 64kHz (= 8MHz F_CPU / Divider 128) senden. Damit kann man GRBL auf wie vorgesehen auf einem Atmega328p verwenden verwenden (der keinen größeren Divider als 128 hat) und SPI in Hardware machen. Natürlich ist unklar, ob das lesen tatsächlich immer perfekt funktioniert, an sich siehts aber gut aus.
Messung der tatsächlichen Geschwindigkeit
Achtung, Schutzbrille tragen! Auch das beste Gaffa löst sich durch die Fliehkraft irgendwann.
Zur Messung ein Stück Gaffatape auf das Bohrfutter kleben (ca. 50% Abdeckung), und mit einem Fototransistor die Helligkeit messen. Beschaltung des Transistors: Mit einem 47kΩ-Widerstand in Reihe schalten und "falschherum" (also mit Emitter an Plus) 5V anlegen. Mit dem Oszi Spannung über dem Transistor messen. Je dunkler, desto mehr Spannung fällt ab. Die Wellenform ist höchst dreckig; die Frequenz muss per Hand abgeschätzt werden, am besten über mehrere Umdrehungen.
Ergebnisse der Messung am 03.12.2014:
Drehzahleinstellung G-Code | Umdrehungen | Zeit [ms], ±2ms | min. errechnete Drehzahl [1/min] | max. errechnete Drehzahl [1/min] |
---|---|---|---|---|
S5000 | 5 | 60 | 4839 | 5172 |
S10000 | 5 | 60 | 4839 | 5172 |
S15000 | 5 | 48,8 | 5906 | 6410 |
S15000 | 10 | 94 | 6250 | 6522 |
S15000 | 10 | 92.8 | 6329 | 6608 |
S16000 | 10 | 72.8 | 8021 | 8475 |
S17000 | 5 | 30 | 9375 | 10714 |
S18000 | 10 | 49,8 | 11583 | 12552 |
S19000 | 10 | 42.8 | 13393 | 14706 |
S20000 | 10 | 37.4 | 15228 | 16949 |
S21000 | 10 | 35.4 | 16042 | 17964 |
S22000 | 5 | 17.8 | 15152 | 18987 |
An dieser Stelle löste sich das Gaffa und nahm den LED-Kranz rund um den Fräskopf etwas in Mitleidenschaft (nur verbogen, leuchtet noch). Beim ersten Versuch flog es schon bei S20000 komplett weg. Tat weh, also Schutzbrille.
Fräse fahren
Die Schrittmotoren werden über Pulsdichtemodulation angesteuert. Zuerst die Richtung festlegen, dann Pulse senden. Die Pulsbreite ist konstant 65µs, bei der Maximalgeschwindigkeit 0.2ms Pause zwischen den Pulsen. 5 Pulse entsprechen einer Strecke von 0.02mm. Bei schnellerer Fahrt müssen die Motoren langsam (Editasc: über ca. 10ms) abgebremst werden (Vermutung: Damit die (ziemlich schwere) Fräseinheit nicht per Trägheit auf die Gewindestange knallt). Im Handbetrieb fährt Editasc danach noch über die Bremsstrecke zurück. Im Fräsbetrieb muss man dann wahrscheinlich vor engen Kurven abbremsen.
Dongle
Editasc ist per Dongle geschützt. Es spricht beim Starten mit dem Dongle. Das geht auch wenn die Fräse aus ist. Danach passiert da nichts mehr.