LinuxCNC Documentation

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

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

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:

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

spindle math

Нам потрібно додати компонент масштабування до 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 Швидкість шпинделя

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

Це передбачає, що реакція контролера шпинделя на PWM є простою: 0% PWM дає 0 об/хв, 10% PWM дає 180 об/хв тощо. Якщо для обертання шпинделя необхідний мінімальний PWM, дотримуйтесь прикладу в зразковій конфігурації nist-lathe, щоб використовувати компонент шкали.

3. Увімкнення шпинделя

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. Напрямок шпинделя

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.

Щоб підключити ці контакти до контакту паралельного порту, додайте щось на кшталт наступного у ваш файл .hal, переконавшись, що ви вибрали контакт, підключений до вашого пристрою керування.

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

5. Плавний пуск шпинделя

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.

У прикладі 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. Синхронізований рух шпинделя

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.

Майстер 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. Шпиндель на швидкості

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.

Необхідні з’єднання: від сигналу команди швидкості шпинделя до 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