LinuxCNC може керувати до 8 шпинделів. Кількість встановлюється в файлі INI. У наведених нижче прикладах йдеться про конфігурацію з одним шпинделем, де контакти керування шпинделем мають назви на кшталт «spindle.0..». У разі верстата з декількома шпинделями змінюється лише те, що з’являються додаткові контакти з назвами на кшталт «spindle.6..».
1. Швидкість шпинделя 0-10 вольт
Якщо швидкість вашого шпинделя контролюється аналоговим сигналом (наприклад, частотним перетворювачем із сигналом від 0 В до 10 В), і ви використовуєте плату DAC, таку як m5i20, для виведення керуючого сигналу:
Спочатку потрібно визначити масштаб швидкості шпинделя для керуючого сигналу, тобто напруги. Для цього прикладу максимальна швидкість шпинделя 5000 об/хв дорівнює 10 вольтам.
Нам потрібно додати компонент масштабування до 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 (число з плаваючою комою), який приймає вхідне значення та надає вихідне значення, обмежене діапазоном 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