CNC-Fräse/Reverse-Engineering

aus dem Wiki des Entropia e.V., CCC Karlsruhe
< CNC-Fräse
Version vom 7. August 2023, 17:26 Uhr von Cubicroot (Diskussion | Beiträge) (moved reverse engineering to subpage)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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.