1. Отримання максимальної користі від поетапного програмного забезпечення
Генерація імпульсів кроку в програмному забезпеченні має одну дуже велику перевагу - це безкоштовно. Практично кожен ПК має паралельний порт, здатний виводити імпульси кроку, що генеруються програмним забезпеченням. Однак програмні імпульси кроку також мають деякі недоліки:
-
обмежена максимальна швидкість кроку
-
тремтіння у згенерованих імпульсах
-
завантажує процесор
У цьому розділі наведено кілька кроків, які допоможуть вам отримати найкращі результати від кроків, згенерованих програмним забезпеченням.
1.1. Виконайте тест затримки
Процесор не є єдиним фактором, що визначає затримку. Материнські плати, графічні карти, USB-порти та багато інших речей можуть погіршувати її. Найкращий спосіб дізнатися, чого очікувати від ПК, — це провести тести затримки RT.
Виконайте тест на затримку, як описано в розділі Тест на затримку.
Під час виконання тесту слід «зловживати» комп’ютером. Переміщайте вікна по екрану. Переглядайте веб-сторінки. Копіюйте великі файли на диск. Відтворюйте музику. Запустіть програму OpenGL, наприклад glxgears. Ідея полягає в тому, щоб випробувати ПК на міцність, поки тест на затримку перевіряє, які показники є найгіршими.
Останнє число в стовпці з назвою «Max Jitter» є найважливішим. Запишіть його — воно знадобиться вам пізніше. Воно містить найгірше значення затримки за весь час виконання тесту. У наведеному вище прикладі це 6693 наносекунди, або 6,69 мікросекунди, що є відмінним результатом. Однак приклад працював лише кілька секунд (він друкує один рядок щосекунди). Ви повинні запускати тест принаймні на кілька хвилин; іноді найгірший випадок затримки трапляється не дуже часто або трапляється тільки тоді, коли ви виконуєте певну дію. У мене була одна материнська плата Intel, яка більшу частину часу працювала досить добре, але кожні 64 секунди мала дуже погану затримку в 300 мкс. На щастя, це можна виправити, див. Виправлення проблем SMI на LinuxCNC Wiki
То що означають ці результати? Якщо ваше значення «Max Jitter» менше ніж 15-20 мікросекунд (15000-20000 наносекунд), комп’ютер повинен дати дуже хороші результати з програмним крокуванням. Якщо максимальна затримка становить близько 30-50 мікросекунд, ви все одно можете отримати хороші результати, але максимальна швидкість кроку може бути трохи розчаровуючою, особливо якщо ви використовуєте мікрокрокування або маєте гвинти з дуже дрібним кроком. Якщо значення становить 100 мкс або більше (100,000 наносекунд), то ПК не підходить для програмного крокування. Числа понад 1 мілісекунду (1,000,000 наносекунд) означають, що ПК не підходить для LinuxCNC, незалежно від того, чи використовуєте ви програмне крокування чи ні.
Зверніть увагу, що якщо ви отримали високі показники, можливо, є способи їх поліпшити. Наприклад, один ПК мав дуже погану затримку (кілька мілісекунд) при використанні вбудованої відеокарти. Але відеокарта за 5 доларів вирішила цю проблему — LinuxCNC не вимагає найсучаснішого обладнання.
1.2. З’ясуйте, чого очікують ваші накопичувачі
Різні марки крокових приводів мають різні вимоги до часу на входах кроку та напрямку. Тому вам потрібно знайти (або погуглити) технічні характеристики вашого приводу.
З інструкції до Gecko G202:
Частота кроку: від 0 до 200 кГц
Час крокового імпульсу "0": хв. 0,5 мкс (крок по спадному фронту)
Час крокового імпульсу "1": хв. 4,5 мкс
Налаштування напрямку: хв. 1 мкс (хв. час утримання після фронту кроку 20 мкс)
З інструкції до Gecko G203V:
Частота кроку: від 0 до 333 кГц
Час крокового імпульсу "0": хв. 2,0 мкс (крок на наростаючому фронті)
Час крокового імпульсу "1": хв. 1,0 мкс
Налаштування напрямку:
200 нс (0,2 мкс) до наростаючого фронту ступінчастого імпульсу
200 нс (0,2 мкс) утримання після наростаючого фронту ступінчастого імпульсу
З технічного опису Xylotex:
Мінімальний час налаштування DIR перед переднім фронтом імпульсу STEP 200 нс Мінімальний
час утримання DIR після переднього фронту імпульсу STEP 200 нс
Мінімальний час високого рівня імпульсу STEP 2,0 мкс
Мінімальний час низького рівня імпульсу STEP 1,0 мкс
Крок відбувається на передньому фронті
Як тільки знайдете числа, запишіть їх також — вони знадобляться вам на наступному кроці.
1.3. Виберіть свій БАЗОВИЙ_ПЕРІОД
BASE_PERIOD — це «серцебиття» вашого комп’ютера LinuxCNC. Кожного періоду програмний генератор кроків вирішує, чи настав час для чергового імпульсу кроку. Коротший період дозволить вам генерувати більше імпульсів за секунду, в межах обмежень. Але якщо ви виберете занадто короткий період, ваш комп’ютер витрачатиме стільки часу на генерацію імпульсів кроків, що все інше сповільниться до повзучої швидкості або навіть зависне. Затримка і вимоги до крокового приводу впливають на найкоротший період, який ви можете використовувати, як ми побачимо за хвилину.
Спочатку розглянемо приклад Gecko. G202 може обробляти імпульси кроку, які мають низький рівень протягом 0,5 мкс і високий рівень протягом 4,5 мкс, для цього потрібно, щоб вивід напрямку був стабільним за 1 мкс до спаду фронту і залишався стабільним протягом 20 мкс після спаду фронту. Найдовша вимога до часу — це час утримання 20 мкс. Простим підходом було б встановити період на 20 мкс. Це означає, що всі зміни на лініях STEP і DIR розділені 20 мкс. Все добре, правда?
Неправильно! Якби затримка була нульовою, то всі краї були б розділені на 20 мкс, і все було б добре. Але всі комп’ютери мають певну затримку. Затримка означає запізнення. Якщо комп’ютер має затримку 11 мкс, це означає, що іноді програмне забезпечення працює на 11 мкс пізніше, ніж повинно. Якщо один запуск програмного забезпечення запізнюється на 11 мкс, а наступний відбувається вчасно, затримка від першого до другого становить лише 9 мкс. Якщо перший запуск генерував імпульс кроку, а другий змінив біт напрямку, ви просто порушили вимогу часу утримання G202 в 20 мкс. Це означає, що ваш привід міг зробити крок у неправильному напрямку, і ваша деталь буде неправильного розміру.
Найгірше в цій проблемі те, що вона може траплятися дуже рідко. У найгіршому випадку затримки можуть траплятися лише кілька разів на хвилину, а ймовірність того, що затримка трапиться саме в той момент, коли двигун змінює напрямок руху, є низькою. Отже, ви отримуєте дуже рідкісні помилки, які час від часу псують деталь і які неможливо усунути.
Найпростіший спосіб уникнути цієї проблеми — вибрати BASE_PERIOD, що дорівнює сумі найдовшого часу, необхідного для роботи вашого накопичувача, та найгіршого випадку затримки вашого комп’ютера. Якщо ви використовуєте Gecko з вимогою до часу утримання 20 мкс, а тест затримки показав, що максимальна затримка становить 11 мкс, то якщо ви встановите BASE_PERIOD на 20+11 = 31 мкс (31000 наносекунд у файлі ini), ви гарантовано виконаєте вимоги до часу роботи приводу.
Але є компроміс. Для створення імпульсу кроку потрібно щонайменше два періоди. Один для запуску імпульсу, а другий для його завершення. Оскільки період становить 31 мкс, для створення імпульсу кроку потрібно 2x31 = 62 мкс. Це означає, що максимальна частота кроку становить лише 16 129 кроків на секунду. Не дуже добре. (Але не здавайтеся, у наступному розділі ми ще трохи попрацюємо над налаштуваннями)
Для Xylotex час налаштування та утримання дуже короткий, по 200 нс (0,2 мкс) кожен. Найдовший час — це 2 мкс високого рівня. Якщо у вас затримка 11 мкс, то ви можете встановити BASE_PERIOD на рівні 11+2=13 мкс. Позбавлення від довгого часу утримання 20 мкс дійсно допомагає! З періодом 13 мкс повний крок займає 2x13 = 26 мкс, а максимальна швидкість кроку становить 38 461 крок на секунду!
Але ще рано радіти. Зверніть увагу, що 13 мкс — це дуже короткий проміжок часу. Якщо ви спробуєте запускати генератор кроків кожні 13 мкс, може не вистачити часу на виконання інших операцій, і ваш комп’ютер зависне. Якщо ви прагнете досягти періоду менше 25 мкс, слід почати з 25 мкс або більше, запустити LinuxCNC і подивитися, як все реагує. Якщо все гаразд, можна поступово зменшувати період. Якщо курсор миші починає гальмувати, а все інше на ПК сповільнюється, ваш період є трохи занадто коротким. Поверніться до попереднього значення, яке дозволяло комп’ютеру працювати безперебійно.
У цьому випадку припустимо, що ви почали з 25 мкс, намагаючись досягти 13 мкс, але виявили, що межа становить приблизно 16 мкс — при меншому значенні комп’ютер не реагує належним чином. Тому ви використовуєте 16 мкс. З періодом 16 мкс і затримкою 11 мкс найкоротший час виводу буде 16-11 = 5 мкс. Приводу потрібно лише 2 мкс, тому у вас є певний запас. Запас є корисним — ви не хочете втрачати кроки через те, що занадто скоротили час.
Яка максимальна швидкість кроку? Пам’ятайте, для кроку потрібно два періоди. Ви встановили період 16 мкс, тож крок займає 32 мкс. Це дає непогані 31 250 кроків за секунду.
1.4. Використовуйте steplen, stepspace, dirsetup та/або dirhold
В останньому розділі ми досягли періоду 16 мкс і максимальної швидкості 31 250 кроків на секунду для приводу Xylotex. Але Gecko застряг на 31 мкс і не надто приємних 16 129 кроків на секунду. Приклад Xylotex є найкращим, який ми можемо зробити. Але Gecko можна вдосконалити.
Проблема з G202 полягає у вимозі часу утримання 20 мкс. Це, а також затримка 11 мкс, змушує нас використовувати повільний період 31 мкс. Але генератор кроків програмного забезпечення LinuxCNC має деякі параметри, які дозволяють збільшити час від одного періоду до декількох. Наприклад, якщо steplen змінюється з 1 на 2, то між початком і кінцем імпульсу кроку буде два періоди. Аналогічно, якщо dirhold змінюється з 1 на 3, між імпульсом кроку і зміною напрямку контакту буде принаймні три періоди.
Якщо ми можемо використовувати dirhold для дотримання вимоги до часу утримання 20 мкс, то наступним за тривалістю є час високого рівня 4,5 мкс. Додайте затримку 11 мкс до часу високого рівня 4,5 мкс, і ви отримаєте мінімальний період 15,5 мкс. Коли ви спробуєте 15,5 мкс, ви побачите, що комп’ютер працює повільно, тому ви зупинитеся на 16 мкс. Якщо ми залишимо dirhold на 1 (за замовчуванням), то мінімальний час між кроком і напрямком буде періодом 16 мкс мінус затримка 11 мкс = 5 мкс, що недостатньо. Нам потрібно ще 15 мкс. Оскільки період становить 16 мкс, нам потрібно ще один період. Тому ми змінюємо dirhold з 1 на 2. Тепер мінімальний час від кінця імпульсу кроку до зміни напрямку становить 5+16=21 мкс, і нам не потрібно турбуватися про те, що Gecko рухатиметься в неправильному напрямку через затримку.
Якщо комп’ютер має затримку 11 мкс, то комбінація базового періоду 16 мкс і значення dirhold 2 гарантує, що ми завжди будемо відповідати вимогам Gecko щодо синхронізації. Для нормального крокування (без зміни напрямку) збільшення значення dirhold не має ніякого впливу. Для виконання кожного кроку потрібно два періоди загальною тривалістю 32 мкс, і ми отримуємо ту саму швидкість 31 250 кроків на секунду, яку ми отримали з Xylotex.
Значення затримки 11 мкс, яке використовується в цьому прикладі, є дуже хорошим. Якщо ви будете працювати з цими прикладами з більшою затримкою, наприклад 20 або 25 мкс, максимальна частота кроків як для Xylotex, так і для Gecko буде нижчою. Але для обчислення оптимального значення BASE_PERIOD та для налаштування dirhold або інших параметрів генератора кроків застосовуються ті самі формули.
1.5. Без здогадок!
Для швидкої та надійної програмної системи крокового двигуна не можна просто вгадувати періоди та інші параметри конфігурації. Необхідно провести вимірювання на комп’ютері та виконати розрахунки, щоб переконатися, що приводи отримують необхідні сигнали.
Щоб полегшити розрахунки, я створив таблицю Open Office Калькулятор синхронізації кроків. Ви вводите результат тесту затримки і вимоги до синхронізації крокового приводу, а таблиця обчислює оптимальний BASE_PERIOD. Далі ви перевіряєте період, щоб переконатися, що він не сповільнить роботу вашого ПК і не заблокує його. Нарешті, ви вводите фактичний період, і таблиця покаже вам налаштування параметрів stepgen, необхідні для задоволення вимог до синхронізації вашого приводу. Вона також обчислює максимальну швидкість кроку, яку ви зможете генерувати.
Я додав кілька елементів до електронної таблиці для розрахунку максимальної швидкості та електричних розрахунків крокового двигуна.