LinuxCNC может управлять макс. 8-ю шпинделями. Их количество задаётся в INI-файле. Все приведённые ниже примеры относятся к конфигурации с одним шпинделем и контактами управления шпинделями с именами типа spindle.0... В случае многошпиндельного станка всё, что меняется, — это наличие дополнительных контактов с именами типа spindle.6...
1. Скорость вращения шпинделя 0-10 В
Если скорость вашего шпинделя управляется аналоговым сигналом (например, VFD с сигналом от 0 В до 10 В) и вы используете карту ЦАП, такую как m5i20, для вывода управляющего сигнала:
Сначала необходимо определить масштаб скорости вращения шпинделя для управляющего сигнала, то есть напряжение. В этом примере максимальная скорость вращения шпинделя 5000 об/мин соответствует 10 вольтам.
Нам необходимо добавить компонент масштабирования в файл HAL, чтобы масштабировать spindle.N.speed-out до диапазона от 0 до 10, необходимого VFD, если ваша карта ЦАП не поддерживает масштабирование.
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 => <имя контакта вашего ЦАП>
2. Скорость шпинделя ШИМ
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
При этом предполагается, что реакция контроллера шпинделя на ШИМ проста: 0% ШИМ дает 0 об/мин, 10% ШИМ дает 180 об/мин и т. д. Если для вращения шпинделя требуется минимальная ШИМ, следуйте примеру в образце конфигурации nist-lathe, чтобы использовать компонент шкалы.
3. Разрешить шпиндель
Если вам нужен сигнал включения шпинделя, подключите выходной контакт к spindle.0.on. Чтобы связать эти контакты с контактом параллельного порта, добавьте в файл .hal примерно следующее, убедившись, что выбранный вами контакт подключен к устройству управления.
net spindle-enable spindle.0.on => parport.0.pin-14-out
4. Направление вращения шпинделя
Если у вас есть управление направлением вращения шпинделя, то выводы HAL spindle.N.forward и spindle.N.reverse управляются G-кодами M3 и M4. Для включения движения шпинделя с помощью команд M3/M4 скорость вращения шпинделя Sn должна быть установлена на положительное ненулевое значение.
Чтобы связать эти контакты с контактом параллельного порта, поместите в файл .hal что-то вроде следующего, убедившись, что вы выбрали контакт, подключенный к вашему устройству управления.
net spindle-fwd spindle.0.forward => parport.0.pin-16-out net spindle-rev spindle.0.reverse => parport.0.pin-17-out
5. Плавный пуск шпинделя
Если вам нужно увеличить скорость вращения шпинделя, а ваша система управления не поддерживает такую функцию, это можно сделать в HAL. По сути, вам нужно перехватить выходной сигнал spindle.N.speed-out и пропустить его через компонент limit2 с заданным масштабом, чтобы он увеличивал скорость вращения от spindle.N.speed-out до вашего устройства, принимающего эти данные. Вторая часть — сообщить LinuxCNC, когда шпиндель достигнет нужной скорости, чтобы можно было начать движение.
В примере 0-10 Вольт линия
net spindle-speed-scale spindle.0.speed-out => scale.0.in
изменяется, как показано в следующем примере:
Если вы раньше с ними не сталкивались, вот краткое введение в два компонента HAL, используемые в следующем примере.
-
limit2 — это компонент HAL (с плавающей точкой), который принимает входное значение и предоставляет выходное значение, ограниченное максимальным значением.
-
Near — это компонент HAL (с плавающей точкой) с двоичным выходом, который определяет, приблизительно ли равны два входных сигнала.
Более подробную информацию можно найти в документации по компонентам HAL или на страницах руководства, просто введите man limit2 или man near в терминале.
# load the real time modules limit2 and near with names so it is easier to follow their connections loadrt limit2 names=spindle-ramp loadrt near names=spindle-at-speed # add the functions to a thread addf spindle-ramp servo-thread addf spindle-at-speed servo-thread # set the parameter for max rate-of-change # (max spindle accel/decel in units per second) setp spindle-ramp.maxv 60 # hijack the spindle speed out and send it to spindle ramp in net spindle-cmd <= spindle.0.speed-out => spindle-ramp.in # the output of spindle ramp is sent to the scale in net spindle-ramped <= spindle-ramp.out => scale.0.in # to know when to start the motion we send the near component # (named spindle-at-speed) to the spindle commanded speed from # the signal spindle-cmd and the actual spindle speed # provided your spindle can accelerate at the maxv setting. net spindle-cmd => spindle-at-speed.in1 net spindle-ramped => spindle-at-speed.in2 # the output from spindle-at-speed is sent to spindle.0.at-speed # and when this is true motion will start net spindle-ready <= spindle-at-speed.out => spindle.0.at-speed
6. Обратная связь шпинделя
6.1. Синхронизированное движение шпинделя
Обратная связь шпинделя необходима LinuxCNC для выполнения любых координируемых шпинделем движений, таких как нарезание резьбы и поддержание постоянной скорости резания. LinuxCNC может выполнять синхронизированное движение и CSS с любым из восьми шпинделей. Выбор используемого шпинделя определяется G-кодом. CSS возможна одновременно с несколькими шпинделями.
Мастер StepConf может выполнить для вас подключения для конфигурации с одним шпинделем, если вы выберете в качестве входов фазу A энкодера и Z индекс энкодера.
Предположения относительно оборудования для этого примера:
-
К шпинделю подключен энкодер, который выдает 100 импульсов за один оборот в фазе А.
-
Фаза энкодера A подключена к контакту 10 параллельного порта.
-
Индексный импульс энкодера подключается к контакту 11 параллельного порта.
Основные шаги по добавлению компонентов и их настройке: сноска: [В этом примере мы предположим, что некоторые энкодеры уже назначены осям/сочленениям 0, 1 и 2. Поэтому следующий энкодер, который мы сможем присоединить к шпинделю, будет иметь номер 3. Ваша ситуация может отличаться.] footnote: [Включение индекса энкодера HAL является исключением из правила, поскольку он ведет себя и как вход, и как выход; подробности см. в разделе Encoder Section] footnote: [Так как выше мы выбрали неквадратурный простой подсчет…, мы можем обойтись квадратурным подсчетом без использования квадратурного входа B.]
# Add the encoder to HAL and attach it to threads. loadrt encoder num_chan=4 addf encoder.update-counters base-thread addf encoder.capture-position servo-thread # Set the HAL encoder to 100 pulses per revolution. setp encoder.3.position-scale 100 # Set the HAL encoder to non-quadrature simple counting using A only. setp encoder.3.counter-mode true # Connect the HAL encoder outputs to 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 # Connect the HAL encoder inputs to the real 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)
Чтобы LinuxCNC мог ожидать набора шпинделем заданной скорости перед выполнением серии перемещений, значение spindle.N.at-speed должно быть равно true в тот момент, когда шпиндель достигает заданной скорости. Для этого необходима обратная связь от энкодера. Поскольку обратная связь и заданная скорость обычно не совпадают точно, следует использовать компонент near для определения того, насколько близки эти два значения.
Необходимые соединения: сигнал команды скорости шпинделя – к near.n.in1, а сигнал скорости шпинделя – к near.n.in2. Затем сигнал near.n.out подключается к spindle.N.at-speed. Параметр near.n.scale необходимо настроить так, чтобы он указывал, насколько близко должны быть два числа друг к другу, прежде чем будет включен выход. В зависимости от конфигурации может потребоваться настройка масштаба для работы с вашим оборудованием.
Ниже приведены типичные дополнения, которые необходимо добавить в файл HAL для включения функции Spindle At Speed. Если в файле HAL уже есть сигнал Near, увеличьте его количество и скорректируйте код соответствующим образом. Убедитесь, что названия сигналов в файле HAL совпадают.
# load a near component and attach it to a thread loadrt near addf near.0 servo-thread # connect one input to the commanded spindle speed net spindle-cmd => near.0.in1 # connect one input to the encoder-measured spindle speed net spindle-velocity => near.0.in2 # connect the output to the spindle-at-speed input net spindle-at-speed spindle.0.at-speed <= near.0.out # set the spindle speed inputs to agree if within 1% setp near.0.scale 1.01