LinuxCNC може керувати до 8 шпинделів. Кількість встановлюється в файлі INI. У наведених нижче прикладах йдеться про конфігурацію з одним шпинделем, де контакти керування шпинделем мають назви на кшталт «spindle.0..». У разі верстата з декількома шпинделями змінюється лише те, що з’являються додаткові контакти з назвами на кшталт «spindle.6..».

1. Швидкість шпинделя 0-10 вольт

Якщо швидкість вашого шпинделя контролюється аналоговим сигналом (наприклад, частотним перетворювачем із сигналом від 0 В до 10 В), і ви використовуєте плату DAC, таку як m5i20, для виведення керуючого сигналу:

Спочатку потрібно визначити масштаб швидкості шпинделя для керуючого сигналу, тобто напруги. Для цього прикладу максимальна швидкість шпинделя 5000 об/хв дорівнює 10 вольтам.

images/spindle-math.png

Нам потрібно додати компонент масштабування до HAL-файлу, щоб масштабувати spindle.N.speed-out до значень від 0 до 10, необхідних для частотного перетворювача, якщо ваша плата DAC не виконує масштабування.

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 => <назва вашого виводу DAC>

2. PWM Швидкість шпинделя

Якщо ваш шпиндель можна керувати за допомогою PWM-сигналу, використовуйте компонент pwmgen для створення сигналу:

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
# Встановіть максимальну швидкість шпинделя в обертах за хвилину
setp pwmgen.0.scale 1800

Це передбачає, що реакція контролера шпинделя на PWM є простою: 0% PWM дає 0 об/хв, 10% PWM дає 180 об/хв тощо. Якщо для обертання шпинделя необхідний мінімальний PWM, дотримуйтесь прикладу в зразковій конфігурації 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. Швидкість обертання шпинделя Sn повинна бути встановлена на позитивне значення, відмінне від нуля, щоб M3/M4 могли ввімкнути рух шпинделя.

Щоб підключити ці контакти до контакту паралельного порту, додайте щось на кшталт наступного у ваш файл .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, що використовуються в наступному прикладі.

  • «Limit2» — це компонент HAL (число з плаваючою комою), який приймає вхідне значення та надає вихідне значення, обмежене діапазоном max/min, а також обмежене тим, щоб не перевищувати задану швидкість зміни.

  • «Близький» — це компонент HAL (число з плаваючою комою) з двійковим виходом, який показує, чи приблизно рівні два вхідні значення.

Більше інформації можна знайти в документації до компонентів HAL або на сторінках довідника, просто скажіть «man limit2» або «man near» у терміналі.

# завантажте модулі реального часу limit2 та near з іменами, щоб було легше відстежувати їхні зв'язки
loadrt limit2 names=spindle-ramp
loadrt near names=spindle-at-speed

# додати функції до потоку
addf spindle-ramp servo-thread
addf spindle-at-speed servo-thread

# встановити параметр для максимальної швидкості зміни
# (максимальне прискорення/сповільнення шпинделя в одиницях за секунду)
setp spindle-ramp.maxv 60

# вивести швидкість шпинделя назовні та направити її на рампу наростання шпинделя
net spindle-cmd <= spindle.0.speed-out => spindle-ramp.in

# Вихідний сигнал рампи шпинделя надсилається на шкалу в
net spindle-ramped <= spindle-ramp.out => scale.0.in

# щоб знати, коли починати рух, ми надсилаємо найближчий компонент
# (названий spindle-at-speed) до заданої швидкості шпинделя від
# сигналу spindle-cmd та фактичної швидкості шпинделя,
# за умови, що ваш шпиндель може прискорюватися з налаштуванням maxv.
net spindle-cmd => spindle-at-speed.in1
net spindle-ramped => spindle-at-speed.in2

# вихідний сигнал від spindle-at-speed надсилається до spindle.0.at-speed
# і коли це станеться, рух розпочнеться
net spindle-ready <= spindle-at-speed.out => spindle.0.at-speed

6. Зворотній зв’язок шпинделя

6.1. Синхронізований рух шпинделя

Зворотний зв’язок шпинделя необхідний LinuxCNC для виконання будь-яких координованих рухів шпинделя, таких як нарізування різьби та постійна швидкість поверхні. LinuxCNC може виконувати синхронізовані рухи та CSS з будь-яким із 8 шпинделів. Які шпинделі використовуються, контролюється з G-коду. CSS можливий з декількома шпинделями одночасно.

Майстер StepConf може виконати підключення для конфігурації з одним шпинделем, якщо ви виберете Фазу енкодеру A та Індекс енкодеру як вхідні дані.

Припущення щодо апаратного забезпечення для цього прикладу:

  • До шпинделя підключений енкодер, який видає 100 імпульсів на оберт у фазі А.

  • Фаза А енкодера підключена до контакту 10 паралельного порту.

  • Індексний імпульс енкодера підключено до виводу 11 паралельного порту.

Основні кроки для додавання компонентів та їх налаштування: примітка:[У цьому прикладі ми припустимо, що деякі енкодери вже були видані осям/з’єднанням 0, 1 та 2. Отже, наступним енкодером, який ми можемо приєднати до шпинделя, буде номер 3. Ваша ситуація може відрізнятися.] примітка:[Індекс-активація енкодера HAL є винятком із правила, оскільки він працює як вхід і вихід, детальніше див. Encoder Section] примітка:[Оскільки вище ми вибрали «неквадратурне просте підрахування…», ми можемо обійтися «квадратурним» підрахунком без будь-якого квадратурного входу B.]

# Додайте кодер до HAL та приєднайте його до потоків.
loadrt кодер num_chan=4
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread

# Встановіть енкодер HAL на 100 імпульсів на оберт.
setp encoder.3.position-scale 100

# Встановіть кодер HAL на неквадратурний простий рахунок, використовуючи лише A.
setp encoder.3.counter-mode true

# Підключіть виходи HAL-енкодера до 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

# Підключіть входи HAL-енкодера до реального енкодера.
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. Шпиндель на швидкості

Щоб 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 збігаються.

# завантажити компонент near та приєднати його до потоку
loadrt near
addf near.0 servo-thread

# підключіть один вхід до заданої швидкості шпинделя
net spindle-cmd => near.0.in1

# підключіть один вхід до швидкості шпинделя, виміряної енкодером
net spindle-velocity => near.0.in2

# підключіть вихід до входу шпинделя на швидкості
net spindle-at-speed spindle.0.at-speed <= near.0.out

# встановіть вхідні дані швидкості шпинделя так, щоб вони узгоджувалися, якщо вони знаходяться в межах 1%
setp near.0.scale 1.01