LinuxCNC Documentation
This page is 98% translated. Untranslated text is shown in English.

LinuxCNC puede controlar hasta 8 husillos. El número se establece en el archivo INI. Todos los ejemplos a continuación se refieren a una configuración de husillo único con pines de control del husillo con nombres como spindle.0... En el caso de una máquina de husillos múltiples, todo lo que cambia es que existen pines adicionales con nombres como spindle.6...

1. Velocidad de husillo de 0-10 voltios

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:

Primero debe calcular la escala de la velocidad del husillo para controlar la señal, p.ej. el voltaje. Para este ejemplo, la velocidad máxima del husillo de 5000 RPM es igual a 10 voltios.

spindle math

Tenemos que agregar un componente de escala al archivo HAL para escalar spindle.N.speed-out entre los 0 a 10 que necesita el VFD si el DAC de tu tarjeta no hace escalado.

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 => <su nombre de pin DAC>

2. Velocidad de husillo por PWM

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
# Establecer la velocidad máxima del husillo en RPM
setp pwmgen.0.scale 1800

Esto supone que la respuesta del controlador de husillo a PWM es simple: 0% PWM da 0 RPM, 10% PWM da 180 RPM, etc. Si hay un PWM mínimo requerido para hacer girar el husillo, siga el ejemplo en la configuración de muestra nist-lathe para usar un componente de escala.

3. Activar husillo

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. Dirección del husillo

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.

Para vincular estos pines a un pin de puerto paralelo, coloca algo como lo siguiente en tu archivo .hal asegurándote de elegir el pin que está conectado a tu dispositivo de control.

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

5. Arranque por software del husillo

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.

En el ejemplo de 0-10 voltios, la línea

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

se cambia como se muestra en el siguiente ejemplo:

Introducción a los componentes HAL limit2 y near

En caso de que no los hayas visto antes, aquí damos una introducción rápida a los dos componentes HAL utilizados en el siguiente ejemplo.

  • limit2 es un componente HAL (punto flotante) que acepta un valor de entrada y proporciona una salida que se ha limitado a un rango máximo/mínimo, y también limitado a no exceder una tasa de cambio especificada.

  • near es un componente HAL (punto flotante) con una salida binaria que dice si dos entradas son aproximadamente iguales.

Más información está disponible en la documentación de los componentes HAL, o desde las páginas del manual, simplemente escribe man limit2 o man near en una terminal.

# carga los módulos en tiempo real limit2 y un near con nombres para que sean más fáciles de seguir sus conexiones
loadrt limit2 names=spindle-ramp
loadrt near names=spindle-at-speed

# agrega las funciones a un hilo
addf spindle-ramp servo-thread
addf spindle-at-speed servo-thread

# establece el parámetro para la tasa máxima de cambio
# (aceleración/desaceleración máxima del husillo en unidades por segundo)
setp spindle-ramp.maxv 60

# secuestra la salida de velocidad del husillo y la envía a la entrada de rampa del husillo
net spindle-cmd <= spindle.0.speed-out => spindle-ramp.in

# la salida de rampa del husillo se envía a la entrada de escala
net spindle-ramped <= spindle-ramp.out => scale.0.in

# para saber cuándo comenzar el movimiento enviamos al componente near
# (denominado spindle-at-speed) la velocidad ordenada del husillo desde
# la señal spindle-cmd y la velocidad real del mismo
# siempre que su husillo pueda acelerar a la configuración maxv.
net spindle-cmd => spindle-at-speed.in1
net spindle-ramped => spindle-at-speed.in2

# la salida de spindle-at-speed se envía a spindle.0.at-speed
# y cuando esto sea cierto, comenzará el movimiento
net spindle-ready <= spindle-at-speed.out => spindle.0.at-speed

6. Retroalimentación del husillo

6.1. Movimiento sincronizado del husillo

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.

El asistente StepConf puede realizar las conexiones para configurar un solo husillo si selecciona como entradas Encoder Fase A y Encoder Indice.

Suposiciones de hardware del ejemplo:

  • Un codificador está conectado al husillo y emite 100 pulsos por revolución en la fase A.

  • La fase A del codificador está conectada al pin 10 del puerto paralelo.

  • El pulso de índice del codificador está conectado al pin 11 del puerto paralelo.

Pasos básicos para agregar los componentes y configurarlos: [1] [2] [3]

# Agrega el codificador a HAL y lo conecta a los hilos.
loadrt encoder num_chan=4
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread

# Establece el codificador HAL en 100 pulsos por revolución.
setp encoder.3.position-scale 100

# Establece el codificador HAL en conteo simple no en cuadratura usando solo A.
setp encoder.3.counter-mode true

# Conecta las salidas del codificador HAL a 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

# Conecta las entradas del codificador HAL al codificador real.
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. Husillo a velocidad de régimen

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.

Las conexiones necesarias son desde la señal de comando de velocidad del husillo a near.n.in1 y desde la velocidad del husillo del codificador a near.n.in2. Luego near.n.out se conecta a spindle.N.at-speed. Se debe configurar near.n.scale para decir cuán cerca deben estar los dos números antes de activar la salida. Dependiendo de tu configuración, es posible que debas ajustar la escala para que funcione con tu hardware.

Lo siguiente son las adiciones típicas necesarias para tu archivo HAL para habilitar Spindle At Speed. Si ya tienes near en tu archivo HAL, aumenta count y ajusta el código para adaptarlo. Asegúrate de que los nombres de las señales sean los mismos en tu archivo HAL.

# carga un componente near y lo adjunta a un hilo
loadrt near
addf near.0 servo-thread

# conecta una entrada a la velocidad de husillo ordenada
net spindle-cmd => near.0.in1

# conecta una entrada a la velocidad del husillo medida por el codificador
net spindle-velocity => near.0.in2

# conecta la salida a la entrada de spindle-at-speed
net spindle-at-speed spindle.0.at-speed <= near.0.out

# configura las entradas de velocidad del husillo para que estén de acuerdo si están dentro del 1%
setp near.0.scale 1.01

1. En este ejemplo, asumiremos que algunos codificadores ya tienen asignaciones a ejes/articulaciones 0, 1 y 2. Por tanto, el próximo codificador disponible para nosotros sería el número 3. Tu situación puede ser diferente.
2. La habilitación del índice del codificador HAL es una excepción a la regla ya que se comporta como una entrada y una salida, ver la sección del codificador para más detalles
3. Ya que seleccionamos conteo simple no en cuadratura …​, podemos salir con el conteo de cuadratura sin tener ninguna entrada B de cuadratura.