LinuxCNC Documentation

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 Spindeldrehzahl

If your spindle speed is controlled by an analog signal, (for example, by a VFD with a 0 V to 10 V signal) and you’re using a DAC card like the m5i20 to output the control signal:

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.

spindle math

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 Spindeldrehzahl

If your spindle can be controlled by a PWM signal, use the pwmgen component to create the signal:

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. Spindel Aktivierung

If you need a spindle enable signal, link your output pin to spindle.0.on. To link these pins to a parallel port pin put something like the following in your .hal file, making sure you pick the pin that is connected to your control device.

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

4. Spindel Richtung

If you have direction control of your spindle, then the HAL pins spindle.N.forward and spindle.N.reverse are controlled by the G-codes M3 and M4. Spindle speed Sn must be set to a positive non-zero value for M3/M4 to turn on spindle motion.

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. Spindel Soft Start

If you need to ramp your spindle speed command and your control does not have that feature it can be done in HAL. Basically you need to hijack the output of spindle.N.speed-out and run it through a limit2 component with the scale set so it will ramp the rpm from spindle.N.speed-out to your device that receives the rpm. The second part is to let LinuxCNC know when the spindle is at speed so motion can begin.

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

Spindle feedback is needed by LinuxCNC to perform any spindle coordinated motions like threading and constant surface speed. LinuxCNC can perform synchronized motion and CSS with any of up to 8 spindles. Which spindles are used is controlled from G-code. CSS is possible with several spindles simultaneously.

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: [1] [2] [3]

# 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. Spindel bei Drehzahl

To enable LinuxCNC to wait for the spindle to be at speed before executing a series of moves, the spindle.N.at-speed needs to turn true at the moment the spindle is at the commanded speed. To achieve this you need spindle feedback from an encoder. Since the feedback and the commanded speed are not usually exactly the same you should to use the near component to determine that the two numbers are close enough.

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

1. 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
2. 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
3. Weil wir oben non-quadrature simple counting…​ ausgewählt haben, können wir mit quadrature counting auskommen, ohne einen B-Quadratureingang zu haben.