LinuxCNC kann bis zu 8 Spindeln steuern. Die Anzahl wird in der INI-Datei eingestellt. Die Beispiele unten beziehen sich alle auf eine Einspindelkonfiguration mit Spindelsteuerungspins mit Namen wie spindle.0... Im Falle einer Mehrspindelmaschine ist alles, was sich ändert, dass zusätzliche Pins mit Namen wie spindle.6… existieren.

1. 0-10 Volt Spindle Speed

Wenn Ihre Spindeldrehzahl durch ein analoges Signal gesteuert wird (z. B. durch einen VFD mit einem 0 V bis 10 V-Signal) und Sie eine DAC-Karte wie die m5i20 zur Ausgabe des Steuersignals verwenden:

Zunächst müssen Sie die Skala von Spindeldrehzahl zu Steuersignal, das ist die anliegende Spannung, ermitteln. In diesem Beispiel entspricht die Höchstgeschwindigkeit der Spindel von 5000 U/min 10 Volt.

images/spindle-math.png

Wir müssen der HAL-Datei eine Skalierungskomponente hinzufügen, um die spindle.N.speed-out auf die vom VFD benötigten Werte 0 bis 10 zu skalieren, wenn Ihre DAC-Karte keine Skalierung vornimmt.

loadrt scale count=1
addf scale.0 servo-thread
setp scale.0.gain 0.002
net spindle-speed-scale spindle.0.speed-out => scale.0.in
net spindle-speed-DAC scale.0.out => <Ihr DAC Pin-Name>

2. PWM Spindle Speed

Wenn Ihre Spindel durch ein PWM-Signal gesteuert werden kann, verwenden Sie die Komponente „pwmgen“, um das Signal zu erzeugen:

loadrt pwmgen output_type=0
addf pwmgen.update servo-thread
addf pwmgen.make-pulses base-thread
net spindle-speed-cmd spindle.0.speed-out => pwmgen.0.value
net spindle-on spindle.0.on => pwmgen.0.enable
net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out
# Set the spindle's top speed in RPM
setp pwmgen.0.scale 1800

Dabei wird davon ausgegangen, dass die Spindelsteuerung einfach auf PWM reagiert: 0 % PWM ergibt 0 U/min, 10 % PWM ergibt 180 U/min, usw. Wenn eine Mindest-PWM erforderlich ist, um die Spindel zum Drehen zu bringen, folgen Sie dem Beispiel in der Beispielkonfiguration der nist-lathe und verwenden Sie eine Skalierungskomponente.

3. Spindle Enable

Wenn Sie ein Spindelaktivierungssignal benötigen, verknüpfen Sie Ihren Ausgangspin mit spindle.0.on. Um diese Pins mit einem Parallelport-Pin zu verknüpfen, fügen Sie etwas wie das Folgende in Ihre .hal-Datei ein, wobei Sie darauf achten, dass Sie den Pin auswählen, der mit Ihrem Steuergerät verbunden ist.

net spindle-enable spindle.0.on => parport.0.pin-14-out

4. Spindle Direction

Wenn Sie die Kontrolle über die Drehrichtung Ihrer Spindel haben, dann werden die HAL-Pins spindle.N.forward und spindle. N.reverse durch die G-Codes M3 und M4 gesteuert. Die Spindeldrehzahl Sn muss auf einen positiven Wert ungleich Null eingestellt werden, damit M3/M4 die Spindelbewegung einschalten kann.

Um diese Pins mit einem Parallelport-Pin zu verknüpfen, fügen Sie etwas wie das Folgende in Ihre .hal-Datei ein und stellen sicher, dass Sie den Pin auswählen, der mit Ihrem Steuergerät verbunden ist.

net spindle-fwd spindle.0.forward => parport.0.pin-16-out
net spindle-rev spindle.0.reverse => parport.0.pin-17-out

5. Spindle Soft Start

Wenn Sie Ihren Spindeldrehzahl-Befehl rampenförmig erhöhen müssen und Ihre Steuerung nicht über diese Funktion verfügt, kann dies in HAL erfolgen. Grundsätzlich müssen Sie die Ausgabe von spindle.N.speed-out zu entführen und führen Sie es durch eine limit2-Komponente mit der Skala eingestellt, so dass es die Drehzahl von spindle.N.speed-out zu Ihrem Gerät, das die Drehzahl empfängt Rampe wird. Der zweite Teil ist es, LinuxCNC wissen, wenn die Spindel bei der Geschwindigkeit, so dass die Bewegung beginnen kann.

In dem 0-10-Volt-Beispiel wird hierzu die Zeile

net spindle-speed-scale spindle.0.speed-out => scale.0.in

wie im folgenden Beispiel geändert:

Einführung in die HAL-Komponenten limit2 und near

Für den Fall, dass Sie sie noch nicht kennen, hier eine kurze Einführung in die beiden HAL-Komponenten, die im folgenden Beispiel verwendet werden.

  • Ein limit2 ist eine HAL-Komponente (Fließkomma), die einen Eingangswert akzeptiert und einen Ausgang liefert, der auf einen Max/Min-Bereich begrenzt wurde und außerdem eine bestimmte Änderungsrate nicht überschreiten darf.

  • near ist eine HAL-Komponente (Gleitkomma) mit einem binären Ausgang, der angibt, ob zwei Eingaben ungefähr gleich sind.

Weitere Informationen finden Sie in der Dokumentation zu den HAL-Komponenten oder in den Manpages, sagen Sie einfach man limit2 oder man near in einem Terminal.

# Legen Sie die Instanzen der Echtzeit-Module limit2 und near mit Namen an, damit die nachfolgenden Verbindungen einfacher zu verfolgen sind
loadrt limit2 names=spindel-ramp
loadrt near names=spindel-at-speed

# die Funktionen zu einem Thread hinzufügen
addf spindle-ramp servo-thread
addf spindle-at-speed servo-thread

# den Parameter für die maximale Änderungsrate einstellen
# (maximale Spindelbeschleunigung/-verzögerung in Einheiten pro Sekunde)
setp spindle-ramp.maxv 60

# Die Spindeldrehzahl an die Spindelrampe umlenken
net spindle-cmd <= spindle.0.speed-out => spindle-ramp.in

# die Ausgabe der Spindelrampe wird an die Sklaierung gesendet
net spindle-ramped <= spindle-ramp.out => scale.0.in

# um zu wissen, wann die Bewegung beginnen soll, senden wir die Nahkomponente
# (namens spindle-at-speed) an die Spindeldrehzahl aus
# dem Signal spindle-cmd und der tatsächlichen Spindeldrehzahl
# vorausgesetzt, Ihre Spindel kann mit der maxv-Einstellung beschleunigen.
net spindle-cmd => spindle-at-speed.in1
net spindle-ramped => spindle-at-speed.in2

# die Ausgabe von spindle-at-speed wird an spindle.0.at-speed gesendet
# und wenn dies wahr ist, beginnt die Bewegung
net spindle-ready <= spindle-at-speed.out => spindle.0.at-speed

6. Spindel-Feedback

6.1. Spindelsynchronisierte Bewegung

Spindel-Feedback wird von LinuxCNC benötigt, um alle Spindel koordinierte Bewegungen wie Gewindeschneiden und konstante Oberflächengeschwindigkeit (engl. constant surface speed, kurz CSS) durchzuführen. LinuxCNC kann synchronisierte Bewegung und CSS mit bis zu 8 Spindeln durchführen. Welche Spindeln verwendet werden, wird von G-Code gesteuert. CSS ist mit mehreren Spindeln gleichzeitig möglich.

Der StepConf Wizard kann die Verbindungen für eine Einspindelkonfiguration für Sie durchführen, wenn Sie Encoder Phase A und Encoder Index als Eingänge auswählen.

Hardware-Annahmen für dieses Beispiel:

  • An der Spindel ist ein Drehgeber angeschlossen, der auf der Phase A 100 Impulse pro Umdrehung ausgibt.

  • Die A-Phase des Encoders wird an den Pin 10 des Parallelports angeschlossen.

  • Der Indeximpuls des Encoders wird an den Parallelport Pin 11 angeschlossen.

Grundlegende Schritte, um die Komponenten hinzuzufügen und zu konfigurieren:
[In diesem Beispiel gehen wir davon aus, dass bereits einige Messgeräte an die Achsen/Gelenke 0, 1 und 2 ausgegeben wurden. Das nächste verfügbare Messgerät, das wir an der Spindel anbringen können, wäre also Nummer 3. Ihre Situation kann davon abweichen]

[Der HAL-Encoder index-enable ist eine Ausnahme von der Regel, da er sich sowohl als Eingang als auch als Ausgang verhält, siehe den Abschnitt zu Encodern für Details]

[Weil wir oben non-quadrature simple counting… ausgewählt haben, können wir mit quadrature counting auskommen, ohne einen B-Quadratureingang zu haben.]

# Fügen Sie den Encoder zu HAL hinzu und verbinden Sie ihn mit Threads.
loadrt encoder num_chan=4
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread

# Den HAL-Geber auf 100 Impulse pro Umdrehung einstellen.
setp encoder.3.position-scale 100

# Stellen Sie den HAL-Encoder auf einfache Zählung ohne Quadratur nur auf A ein.
setp encoder.3.counter-mode true

# Verbinden Sie die HAL-Geberausgänge mit LinuxCNC.
net spindle-position encoder.3.position => spindle.0.revs
net spindle-velocity encoder.3.velocity => spindle.0.speed-in
net spindle-index-enable encoder.3.index-enable <=> spindle.0.index-enable

# Verbinden Sie die HAL-Encodereingänge mit dem realen Encoder.
net spindle-phase-a encoder.3.phase-A <= parport.0.pin-10-in
net spindle-phase-b encoder.3.phase-B
net spindle-index encoder.3.phase-Z <= parport.0.pin-11-in

6.2. Spindle At Speed

Damit LinuxCNC zu warten, bis die Spindel bei der Geschwindigkeit vor der Ausführung einer Reihe von Bewegungen, die spindle.N.at-Geschwindigkeit muss wahr in dem Moment die Spindel ist bei der befohlenen Geschwindigkeit zu drehen. Um dies zu erreichen, benötigen Sie ein Spindel-Feedback von einem Encoder. Da die Rückmeldung und die befohlene Drehzahl in der Regel nicht "genau" übereinstimmen, sollten Sie die Komponente "nahe" verwenden, um festzustellen, ob die beiden Zahlen nahe genug beieinander liegen.

Die benötigten Verbindungen sind vom Spindeldrehzahl-Sollwertsignal zu near.n.in1 und von der Spindeldrehzahl vom Encoder zu near.n.in2. Dann wird der near.n.out mit spindle.N.at-speed verbunden. Die near.n.scale muss so eingestellt werden, dass sie angibt, wie nahe die beiden Zahlen beieinander liegen müssen, bevor der Ausgang aktiviert wird. Je nach Ihrer Einrichtung müssen Sie die Skala möglicherweise an Ihre Hardware anpassen.

Die folgenden Angaben sind typisch für die Ergänzungen, die in Ihrer HAL-Datei erforderlich sind, um Spindle At Speed zu aktivieren. Wenn Sie in Ihrer HAL-Datei bereits "near" haben, erhöhen Sie die Anzahl und passen Sie den Code entsprechend an. Vergewissern Sie sich, dass die Signalnamen in Ihrer HAL-Datei identisch sind.

# Eine near-Komponente laden und an einen Thread anhängen.
loadrt near
addf near.0 servo-thread

# Einen Eingang mit der befohlenen Spindeldrehzahl verbinden.
net spindle-cmd => nahe.0.in1

# Einen Eingang mit der vom Encoder gemessenen Spindelgeschwindigkeit verbinden.
net spindle-velocity => near.0.in2

# Ausgang mit dem Eingang "Spindel-at-speed" verbinden.
net spindle-at-speed spindle.0.at-speed <= near.0.out

# Die Spindeldrehzahleingänge werden so eingestellt, dass sie innerhalb von 1% übereinstimmen.
setp near.0.scale 1.01