1. Вступ
HostMot2 — це конфігурація FPGA, розроблена компанією Mesa Electronics для своєї лінійки карт управління рухом «Anything I/O». Прошивка є відкритою, портативною та гнучкою. Її можна налаштувати (під час компіляції) з нульовою або більшою кількістю екземплярів (об’єкт, створений під час виконання) кожного з декількох модулів: енкодерів (квадратурних лічильників), генераторів PWM та генераторів кроку/напрямку. Прошивка може бути налаштована (під час виконання) для підключення кожного з цих екземплярів до контактів на роз’ємах вводу-виводу. Контакти вводу-виводу, що не керуються екземпляром модуля, повертаються до двонаправленого цифрового вводу-виводу загального призначення.
2. Бінарні файли прошивки
Для різних плат вводу/виводу Anything доступні кілька попередньо скомпільованих бінарних файлів прошивки HostMot2. Цей список неповний, перевірте дистрибутив hostmot2-firmware для отримання актуальних списків прошивок.
-
3x20 (144 контакти вводу/виводу): використання модуля hm2_pci
-
24-канальний сервопривід
-
16-канальний сервопривід плюс 24 генератори кроків/напрямків
-
-
5I22 (96 контактів вводу/виводу): використання модуля hm2_pci
-
16-канальний сервопривід
-
8-канальний сервопривід плюс 24 генератори кроків/напрямків
-
-
5I20, 5I23, 4I65, 4I68 (72 контакти вводу/виводу): використання модуля hm2_pci
-
12-канальний сервопривід
-
8-канальний сервопривід плюс 4 генератори кроків/напрямків
-
4-канальний сервопривід плюс 8 генераторів кроків/напрямків
-
-
7I43 (48 контактів вводу/виводу): використання модуля hm2_7i43
-
8-канальний сервопривід (8 PWM-генераторів та 8 енкодерів)
-
4-канальний сервопривід плюс 4 генератори кроків/напрямків
-
Плата 5I25 Superport FPGA попередньо запрограмована під час придбання та не потребує двійкового файлу прошивки.
3. Встановлення прошивки
Залежно від того, як ви встановили LinuxCNC, можливо, вам доведеться відкрити Synaptic Package Manager (Менеджер пакетів Synaptic) з меню System (Система) і встановити пакет для вашої карти Mesa. Найшвидший спосіб знайти їх — це виконати пошук за «hostmot2» в Synaptic Package Manager. Позначте прошивку для встановлення, а потім застосуйте.
4. Завантаження HostMot2
Підтримка LinuxCNC для прошивки HostMot2 розділена на загальний драйвер під назвою «hostmot2» та два низькорівневі драйвери вводу-виводу для плат Anything I/O. Низькорівневі драйвери вводу-виводу — це «hm2_7i43» та «hm2_pci» (для всіх плат Anything I/O на базі PCI та PC-104/Plus). Драйвер hostmot2 необхідно завантажити першим, використовуючи таку команду HAL:
loadrt hostmot2
Дивіться сторінку довідки hostmot2(9) для отримання детальної інформації.
Драйвер hostmot2 сам по собі нічого не робить, йому потрібен доступ до реальних плат, на яких працює прошивка HostMot2. Цей доступ забезпечують драйвери низького рівня вводу-виводу. Драйвери низького рівня вводу-виводу завантажуються за допомогою таких команд:
loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT num_encoders=3 num_pwmgens=3 num_stepgens=1"
Параметри конфігурації описані на сторінці довідки hostmot2.
5. Сторожовий пес
Прошивка HostMot2 може містити модуль сторожового таймера; якщо він є, драйвер hostmot2 використовуватиме його.
Сторожовий таймер повинен періодично пестити LinuxCNC, інакше він вкусить. Функція запису hm2 (див. нижче) пестить сторожовий таймер.
Коли сторожовий таймер спрацьовує, всі виводи вводу-виводу плати від’єднуються від своїх екземплярів модулів і стають входами з високим імпедансом (підтягнутими до високого рівня). Стан модулів прошивки HostMot2 не порушується (за винятком конфігурації виводів вводу/виводу). Інстанції енкодера продовжують підраховувати квадратурні імпульси, а генератори pwm і step продовжують генерувати сигнали (які не передаються на двигуни, оскільки виводи вводу/виводу стали входами).
Скидання сторожового таймера скидає налаштування контактів вводу/виводу до конфігурації, вибраної під час завантаження.
Якщо прошивка містить сторожовий таймер, будуть експортовані такі об’єкти HAL:
5.1. Піни
-
has_bit - (біт вводу/виводу) True, якщо сторожовий таймер має біт, False, якщо сторожовий таймер не має біта. Якщо сторожовий таймер має біт, а біт has_bit має значення True, користувач може скинути його до False, щоб відновити роботу.
5.2. Параметри
-
timeout_ns - (u32 читання/запис) Тайм-аут сторожового таймера, в наносекундах. Він ініціалізується до 5000000 (5 мілісекунд) під час завантаження модуля. Якщо між викликами функції запису hm2 пройде більше часу, ніж зазначено, сторожовий таймер спрацює.
6. Функції HostMot2
-
hm2_<ТипПлати>.<НомерПлати>.read - Зчитати всі входи, оновити вхідні HAL-піни.
-
hm2_<ТипПлати>.<НомерПлати>.write - Записати всі виходи.
-
hm2_<ТипПлати>.<НомерПлати>.read_gpio – Зчитує лише вхідні контакти GPIO. (Ця функція недоступна на 7I43 через обмеження шини EPP.)
-
hm2_<ТипПлати>.<НомерПлати>.write_gpio – Запис лише в регістри керування GPIO та вихідні контакти. (Ця функція недоступна на 7I43 через обмеження шини EPP.)
|
Note
|
Вищезазначені функції «read_gpio» та «write_gpio» зазвичай не потрібні, оскільки біти GPIO читаються та записуються разом з усім іншим у стандартних функціях «read» та «write», які зазвичай виконуються в серво-потоці. Функції «read_gpio» та «write_gpio» були надані на випадок, якщо знадобиться дуже швидкий (часто оновлюваний) ввід-вивід. Ці функції слід запускати в базовому потоці. Якщо вам це потрібно, надішліть нам електронного листа та повідомте про це, а також про те, що це за програма. |
7. Розпіновки
Драйвер hostmot2 не має певної розкладки виводів. Розкладка виводів визначається прошивкою, яку драйвер hostmot2 надсилає на плату Anything I/O. Кожна прошивка має різну розкладку виводів, яка залежить від кількості доступних енкодерів, pwmgens та stepgens, що використовуються. Щоб отримати список розкладки виводів для вашої конфігурації після завантаження LinuxCNC у вікні терміналу, введіть:
dmesg > hm2.txt
Отриманий текстовий файл міститиме багато інформації, а також розпіновку HostMot2 та будь-які повідомлення про помилки та попередження.
Щоб зменшити кількість зайвих повідомлень, очистивши буфер повідомлень перед завантаженням LinuxCNC, введіть наступну команду у вікні терміналу:
sudo dmesg -c
Тепер, коли ви запускаєте LinuxCNC, а потім виконуєте команду «dmesg > hm2.txt» у терміналі, у вашому файлі буде тільки інформація з моменту завантаження LinuxCNC разом із розкладкою виводів. Файл буде знаходитися в поточному каталозі вікна терміналу. Кожен рядок буде містити назву карти, номер карти, номер виводу вводу/виводу, роз’єм і вивід, а також використання. З цього роздрукованого документа ви дізнаєтеся про фізичні підключення до вашої карти на основі вашої конфігурації.
Приклад конфігурації 5I20:
[HOSTMOT2] DRIVER=hm2_pci BOARD=5i20 CONFIG="firmware=hm2/5i20/SVST8_4.BIT num_encoders=1 num_pwmgens=1 num_stepgens=3"
Вищевказана конфігурація призвела до цього роздруківку.
[ 1141.053386] hm2/hm2_5i20.0: 72 I/O Pins used:
[ 1141.053394] hm2/hm2_5i20.0: IO Pin 000 (P2-01): IOPort
[ 1141.053397] hm2/hm2_5i20.0: IO Pin 001 (P2-03): IOPort
[ 1141.053401] hm2/hm2_5i20.0: IO Pin 002 (P2-05): Encoder #0, pin B (Input)
[ 1141.053405] hm2/hm2_5i20.0: IO Pin 003 (P2-07): Encoder #0, pin A (Input)
[ 1141.053408] hm2/hm2_5i20.0: IO Pin 004 (P2-09): IOPort
[ 1141.053411] hm2/hm2_5i20.0: IO Pin 005 (P2-11): Encoder #0, pin Index (Input)
[ 1141.053415] hm2/hm2_5i20.0: IO Pin 006 (P2-13): IOPort
[ 1141.053418] hm2/hm2_5i20.0: IO Pin 007 (P2-15): PWMGen #0, pin Out0 (PWM or Up) (Output)
[ 1141.053422] hm2/hm2_5i20.0: IO Pin 008 (P2-17): IOPort
[ 1141.053425] hm2/hm2_5i20.0: IO Pin 009 (P2-19): PWMGen #0, pin Out1 (Dir or Down) (Output)
[ 1141.053429] hm2/hm2_5i20.0: IO Pin 010 (P2-21): IOPort
[ 1141.053432] hm2/hm2_5i20.0: IO Pin 011 (P2-23): PWMGen #0, pin Not-Enable (Output)
<snip>...
[ 1141.053589] hm2/hm2_5i20.0: IO Pin 060 (P4-25): StepGen #2, pin Step (Output)
[ 1141.053593] hm2/hm2_5i20.0: IO Pin 061 (P4-27): StepGen #2, pin Direction (Output)
[ 1141.053597] hm2/hm2_5i20.0: IO Pin 062 (P4-29): StepGen #2, pin (unused) (Output)
[ 1141.053601] hm2/hm2_5i20.0: IO Pin 063 (P4-31): StepGen #2, pin (unused) (Output)
[ 1141.053605] hm2/hm2_5i20.0: IO Pin 064 (P4-33): StepGen #2, pin (unused) (Output)
[ 1141.053609] hm2/hm2_5i20.0: IO Pin 065 (P4-35): StepGen #2, pin (unused) (Output)
[ 1141.053613] hm2/hm2_5i20.0: IO Pin 066 (P4-37): IOPort
[ 1141.053616] hm2/hm2_5i20.0: IO Pin 067 (P4-39): IOPort
[ 1141.053619] hm2/hm2_5i20.0: IO Pin 068 (P4-41): IOPort
[ 1141.053621] hm2/hm2_5i20.0: IO Pin 069 (P4-43): IOPort
[ 1141.053624] hm2/hm2_5i20.0: IO Pin 070 (P4-45): IOPort
[ 1141.053627] hm2/hm2_5i20.0: IO Pin 071 (P4-47): IOPort
[ 1141.053811] hm2/hm2_5i20.0: registered
[ 1141.053815] hm2_5i20.0: initialized AnyIO board at 0000:02:02.0
|
Note
|
Що I/O Pin nnn буде відповідати номеру виводу, показаному на екрані конфігурації HAL для GPIO. Деякі StepGen, Encoder і PWMGen також будуть відображатися як GPIO на екрані конфігурації HAL. |
8. PIN-файли
Розташування контактів за замовчуванням описано у файлі .PIN (текст, що читається людиною). Під час встановлення пакета прошивки файли .PIN встановлюються у
/usr/share/doc/hostmot2-firmware-<board>/
9. Прошивка
Вибране вбудоване програмне забезпечення (.BIT файл) та конфігурація завантажуються з материнської плати ПК на материнську плату Mesa під час запуску LinuxCNC. Якщо ви використовуєте Run In Place, вам все одно необхідно встановити пакет hostmot2-firmware-<board>. Більше інформації про вбудоване програмне забезпечення та конфігурацію можна знайти в розділі «Конфігурації».
10. Піни HAL
Конфігурацію контактів HAL для кожної конфігурації можна переглянути, відкривши пункт «Show HAL Configuration» (Показати конфігурацію HAL) в меню «Machine» (Машина). Там можна знайти всі контакти та параметри HAL. На малюнку нижче показано конфігурацію 5I20, яка використовувалася вище.
11. Конфігурації
Прошивка Hostmot2 доступна в декількох версіях, залежно від того, що ви намагаєтеся досягти. Ви можете дізнатися, для чого призначена конкретна прошивка, подивившись на її назву. Давайте розглянемо кілька прикладів.
У 7I43 (два порти) SV8 («Servo 8») призначений для 8 сервоприводів або менше, використовуючи «класичну» 4-осьову (на порт) сервоплату 7I33. Отже, 8 сервоприводів використають усі 48 сигналів у двох портах. Але якщо вам потрібно лише 3 сервоприводи, ви можете вказати «num_encoders=3» і «num_pwmgens=3» і відновити 5 сервоприводів по 6 сигналів кожен, отримавши таким чином 30 бітів GPIO.
Або, в 5I22 (чотири порти), SVST8_24 («Серво 8, Степпер 24») буде для 8 сервоприводів або менше (знову 7I33 x2) і 24 степперів або менше (7I47 x2). Це використає всі чотири порти. Якщо вам потрібно лише 4 сервоприводи, ви можете вказати «num_encoders=4» і «num_pwmgens=4» і звільнити 1 порт (і заощадити 7I33). А якщо вам потрібно лише 12 крокових двигунів, ви можете вказати «num_stepgens=12» і звільнити один порт (і заощадити 7I47). Таким чином, ми можемо заощадити два порти (48 бітів) для GPIO.
Ось таблиці прошивок, доступних в офіційних пакетах. На веб-сайті Mesanet.com можуть бути доступні додаткові прошивки, які ще не увійшли до офіційних пакетів прошивок LinuxCNC, тому перевірте і там.
3x20 (різні 6-портові) конфігурації за замовчуванням (3x20 постачається у версіях з вентилями 1M, 1.5M та 2M. Наразі вся прошивка доступна для вентилів усіх розмірів.)
| Прошивка | Енкодер | PWMGen | StepGen | GPIO |
|---|---|---|---|---|
SV24 |
24 |
24 |
0 |
0 |
SVST16_24 |
16 |
16 |
24 |
0 |
Конфігурації 5I22 (4-портовий PCI) за замовчуванням (5I22 постачається у версіях з вентилями 1M та 1.5M. Наразі вся прошивка доступна для всіх розмірів вентилів.)
| Прошивка | Енкодер | PWM | StepGen | GPIO |
|---|---|---|---|---|
SV16 |
16 |
16 |
0 |
0 |
SVST2_4_7I47 |
4 |
2 |
4 |
72 |
SVST8_8 |
8 |
8 |
8 |
0 |
SVST8_24 |
8 |
8 |
24 |
0 |
5I23 (3-портовий PCI) Конфігурації за замовчуванням (5I23 має 400k вентилів.)
| Прошивка | Енкодер | PWM | StepGen | GPIO |
|---|---|---|---|---|
SV12 |
12 |
12 |
0 |
0 |
SVST2_8 |
2 |
2 |
8 (tbl5) |
12 |
SVST2_4_7I47 |
4 |
2 |
4 |
48 |
SV12_2X7I48_72 |
12 |
12 |
0 |
24 |
SV12IM_2X7I48_72 |
12 (+IM) |
12 |
0 |
12 |
SVST4_8 |
4 |
4 |
8 (tbl5) |
0 |
SVST8_4 |
8 |
8 |
4 (tbl5) |
0 |
SVST8_4IM2 |
8 (+IM) |
8 |
4 |
8 |
SVST8_8IM2 |
8 (+IM) |
8 |
8 |
0 |
SVTP6_7I39 |
6 |
0 (6 BLDC) |
0 |
0 |
5I20 (3-портовий PCI) Конфігурації за замовчуванням (5I20 має 200k вентилів.)
| Прошивка | Енкодер | PWM | StepGen | GPIO |
|---|---|---|---|---|
SV12 |
12 |
12 |
0 |
0 |
SVST2_8 |
2 |
2 |
8 (tbl5) |
12 |
SVST2_4_7I47 |
4 |
2 |
4 |
48 |
SV12_2X7I48_72 |
12 |
12 |
0 |
24 |
SV12IM_2X7I48_72 |
12 (+IM) |
12 |
0 |
12 |
SVST8_4 |
8 |
8 |
4 (tbl5) |
0 |
SVST8_4IM2 |
8 (+IM) |
8 |
4 |
8 |
4I68 (3-портовий PC/104) Конфігурації за замовчуванням (4I68 має 400k вентилів.)
| Прошивка | Енкодер | PWM | StepGen | GPIO |
|---|---|---|---|---|
SV12 |
12 |
12 |
0 |
0 |
SVST2_4_7I47 |
4 |
2 |
4 |
48 |
SVST4_8 |
4 |
4 |
8 |
0 |
SVST8_4 |
8 |
8 |
4 |
0 |
SVST8_4IM2 |
8 (+IM) |
8 |
4 |
8 |
SVST8_8IM2 |
8 (+IM) |
8 |
8 |
0 |
4I65 (3-портовий PC/104) Конфігурації за замовчуванням (4I65 має 200k вентилів.)
| Прошивка | Енкодер | PWM | StepGen | GPIO |
|---|---|---|---|---|
SV12 |
12 |
12 |
0 |
0 |
SVST8_4 |
8 |
8 |
4 |
0 |
SVST8_4IM2 |
8 (+IM) |
8 |
4 |
8 |
7I43 (2-портовий паралельний) версії з вентилем 400k, конфігурації за замовчуванням
| Прошивка | Енкодер | PWM | StepGen | GPIO |
|---|---|---|---|---|
SV8 |
8 |
8 |
0 |
0 |
SVST4_4 |
4 |
4 |
4 (tbl5) |
0 |
SVST4_6 |
4 |
4 |
6 (tbl3) |
0 |
SVST4_12 |
4 |
4 |
12 |
0 |
SVST2_4_7I47 |
4 |
2 |
4 |
24 |
7I43 (2-портовий паралельний) версії з вентилями 200k, конфігурації за замовчуванням
| Прошивка | Енкодер | PWM | StepGen | GPIO |
|---|---|---|---|---|
SV8 |
8 |
8 |
0 |
0 |
SVST4_4 |
4 |
4 |
4 (tbl5) |
0 |
SVST4_6 |
4 |
4 |
6 (tbl3) |
0 |
SVST2_4_7I47 |
4 |
2 |
4 |
24 |
Незважаючи на те, що кілька карт можуть мати файл .BIT з однаковою назвою, ви не можете використовувати файл .BIT, який не призначений для цієї карти. Різні карти мають різні тактові частоти, тому переконайтеся, що ви завантажуєте файл .BIT, який підходить для вашої карти. Для спеціальних застосувань можна створити власні прошивки hm2, і ви можете побачити деякі власні прошивки hm2 у каталогах із стандартними прошивками.
Коли ви завантажуєте драйвер плати (hm2_pci або hm2_7i43), ви можете вказати йому вимкнути екземпляри трьох основних модулів (pwmgen, stepgen та encoder), встановивши нижче значення лічильника. Будь-які виводи вводу-виводу, що належать до вимкнених екземплярів модулів, стають GPIO.
12. GPIO
Контакти вводу-виводу загального призначення на платі, які не використовуються екземпляром модуля, експортуються в HAL як «повні» контакти GPIO. Повні контакти GPIO можна налаштувати під час виконання як входи, виходи або відкриті стоки, і вони мають інтерфейс HAL, який забезпечує таку гнучкість. Контакти вводу-виводу, що належать активному екземпляру модуля, обмежуються вимогами модуля-власника і мають обмежений інтерфейс HAL.
GPIO мають такі імена: «hm2_<BoardType>.<BoardNum>.gpio.<IONum>». IONum — це тризначне число. Відповідність між IONum, роз’ємом і контактом на цьому роз’ємі записується в системний журнал під час завантаження драйвера і описана в посібнику Mesa для плат Anything I/O.
Представлення hm2 GPIO змодельовано за зразком цифрових входів та цифрових виходів, описаних у Canonical Device Interface (частина документа HAL General Reference).
Виводи GPIO за замовчуванням встановлені на вхід.
12.1. Піни
-
in - (Bit, Out) Нормальний стан вхідного контакту апаратного забезпечення. Цей контакт мають як повноцінні контакти GPIO, так і контакти вводу/виводу, що використовуються як вхідні дані активними екземплярами модулів.
-
in_not - (Біт, Вихід) Інвертований стан вхідного контакту апаратного забезпечення. Цей контакт мають як повноцінні контакти GPIO, так і контакти вводу/виводу, що використовуються як вхідні дані активними екземплярами модулів.
-
out - (Bit, In) Значення, яке буде записано (можливо, інвертовано) на вихідний контакт апаратного забезпечення. Тільки повноцінні контакти GPIO мають цей контакт.
12.2. Параметри
-
invert_output - (біт, RW) Цей параметр діє тільки в тому випадку, якщо параметр is_output має значення true. Якщо цей параметр має значення true, вихідне значення GPIO буде оберненим до значення на виводі HAL out. Тільки повні виводи GPIO та виводи вводу-виводу, що використовуються як виходи активними екземплярами модулів, мають цей параметр. Щоб інвертувати вивід активного модуля, потрібно інвертувати вивід GPIO, а не вивід модуля.
-
is_opendrain - (біт, RW) Цей параметр діє тільки в тому випадку, якщо параметр is_output має значення true. Якщо цей параметр має значення false, GPIO працює як звичайний вихідний контакт: контакт вводу-виводу на роз’ємі приводиться в стан, визначений контактом HAL out (можливо інвертованим), а значення контактів HAL in і in_not не визначені. Якщо цей параметр має значення true, GPIO працює як вивід з відкритим стоком. Запис 0 у вивід HAL «out» приводить вивід вводу-виводу в низький стан, запис 1 у вивід HAL «out» переводить вивід вводу-виводу у стан високого імпедансу. У цьому стані з високим імпедансом контакт вводу-виводу плаває (слабо підтягується до високого рівня), і інші пристрої можуть керувати значенням; отримане значення на контакті вводу-виводу доступне на контактах «in» і «in_not». Тільки повні контакти GPIO і контакти вводу-виводу, що використовуються як виходи активними екземплярами модулів, мають цей параметр.
-
is_output - (біт, RW) Якщо встановлено значення 0, GPIO є входом. Контакт вводу-виводу переводиться у стан високого імпедансу (слабко підтягнутий до високого рівня), щоб керуватися іншими пристроями. Логічне значення на контакті вводу-виводу доступне на контактах HAL in та in_not. Записи в контакт HAL «out» не мають ефекту. Якщо цей параметр встановлений на 1, GPIO є виходом; його поведінка тоді залежить від параметра «is_opendrain». Тільки повні контакти GPIO мають цей параметр.
13. StepGen
StepGens мають такі імена: «hm2_<BoardType>.<BoardNum>.stepgen.<Instance>». «Instance» — це двозначне число, яке відповідає номеру екземпляра HostMot2 stepgen. Існує «num_stepgens» екземплярів, починаючи з 00.
Кожен stepgen виділяє 2-6 виводів вводу-виводу (вибираються під час компіляції прошивки), але в даний час використовує тільки два: виводи Step і Direction. Примітка: [В даний час прошивка підтримує багатофазні крокові виводи, але драйвер - ні. Зацікавлені волонтери запрошуються.]
Представлення StepGen моделюється на основі програмного компонента stepgen. За замовчуванням StepGen має активний високий вихідний сигнал (високий під час кроку, низький під час проміжку між кроками). Щоб інвертувати вихідний контакт StepGen, інвертуйте відповідний контакт GPIO, який використовується StepGen. Щоб знайти контакт GPIO, який використовується для виходу StepGen, запустіть dmesg, як показано вище.
Кожен екземпляр StepGen має такі контакти та параметри:
13.1. Піни
-
control-type - (Bit, In) Перемикається між режимом керування положенням (0) та режимом керування швидкістю (1). За замовчуванням використовується керування положенням (0).
-
counts - (s32, Out) Позиція зворотного зв’язку в лічильниках (кількість кроків).
-
enable - (Bit, In) Вмикає вихідні кроки. Якщо значення false, кроки не генеруються.
-
position-cmd - (Float, In) Цільова позиція руху крокового механізму, у визначених користувачем одиницях позиції.
-
position-fb - (Float, Out) Позиція зворотного зв’язку в одиницях вимірювання позиції, визначених користувачем (counts / position_scale).
-
velocity-cmd - (Float, In) Цільова швидкість руху крокового двигуна, у визначених користувачем одиницях позиції за секунду. Цей контакт використовується лише тоді, коли кроковий генератор перебуває в режимі керування швидкістю (control-type=1).
-
velocity-fb - (Float, Out) Швидкість зворотного зв’язку в одиницях положення, визначених користувачем, за секунду.
13.2. Параметри
-
dirhold - (u32, RW) Мінімальна тривалість стабільного сигналу напрямку після завершення кроку, у наносекундах.
-
dirsetup - (u32, RW) Мінімальна тривалість стабільного сигналу напрямку перед початком кроку, у наносекундах.
-
maxaccel - (Float, RW) Максимальне прискорення, в одиницях позиції за секунду за секунду. Якщо встановлено значення 0, драйвер не обмежуватиме своє прискорення.
-
maxvel - (Float, RW) Максимальна швидкість, в одиницях положення за секунду. Якщо встановлено значення 0, драйвер вибере максимальну швидкість на основі значень steplen і stepspace (на момент, коли maxvel було встановлено на 0).
-
position-scale - (Float, RW) Перетворює з одиниць вимірювання позиції на одиниці вимірювання позиції. position = counts / position_scale
-
step_type - (u32, RW) Формат виводу, як modparam step_type для компонента програмного забезпечення stegen(9). 0 = Крок/Напрямок, 1 = Вгору/Вниз, 2 = Квадратура. У режимі Quadrature (step_type=2) stepgen виводить один повний цикл Грея (00 -> 01 -> 11 -> 10 -> 00) для кожного «кроку», який він робить.
-
steplen - (u32, RW) Тривалість ступінчастого сигналу в наносекундах.
-
stepspace - (u32, RW) Мінімальний інтервал між сигналами кроків, у наносекундах.
13.3. Вихідні параметри
Виводи Step та Direction кожного StepGen мають два додаткові параметри. Щоб знайти, який вивід вводу/виводу належить до якого виводу кроку та напрямку, виконайте команду dmesg, як описано вище.
-
invert_output - (біт, RW) Цей параметр діє тільки в тому випадку, якщо параметр is_output має значення true. Якщо цей параметр має значення true, вихідне значення GPIO буде оберненим до значення на виводі HAL out.
-
is_opendrain - (біт, RW) Якщо цей параметр має значення false, GPIO працює як звичайний вихідний контакт: контакт вводу-виводу на роз’ємі приводиться до значення, заданого контактом HAL out (можливо інвертованим). Якщо цей параметр має значення true, GPIO працює як контакт з відкритим стоком. Запис 0 на вивід HAL «out» приводить вивід вводу-виводу в низький стан, запис 1 на вивід HAL «out» переводить вивід вводу-виводу у стан високого імпедансу. У цьому стані високого імпедансу вивід вводу-виводу плаває (слабо підтягується до високого рівня), і інші пристрої можуть керувати значенням; отримане значення на виводі вводу-виводу доступне на виводах «in» і «in_not». Цей параметр мають тільки повні контакти GPIO і контакти вводу-виводу, які використовуються як виходи активними екземплярами модулів.
14. PWMGen
PWMgens мають такі імена: «hm2_<BoardType>.<BoardNum>.pwmgen.<Instance>». «Instance» — це двозначне число, яке відповідає номеру екземпляра HostMot2 pwmgen. Існує «num_pwmgens» екземплярів, починаючи з 00.
У HM2 кожен pwmgen використовує три виходи I/O: Not-Enable, Out0 та Out1. Щоб інвертувати вихідний вивід PWMGen, інвертуйте відповідний вивід GPIO, який використовується PWMGen. Щоб знайти вивід GPIO, який використовується для виводу PWMGen, запустіть dmesg, як показано вище.
Функція контактів вводу/виводу Out0 та Out1 залежить від параметра типу виводу (див. нижче).
Представлення hm2 pwmgen подібне до програмного компонента pwmgen. Кожен екземпляр pwmgen має такі контакти та параметри:
14.1. Піни
-
enable - (Біт, Вхід) Якщо значення true (істина), pwmgen встановить свій пін Not-Enable у значення false (неправда) та видаватиме імпульси. Якщо значення enable має значення false (хиба), pwmgen встановить свій пін Not-Enable у значення true та не видаватиме жодних сигналів.
-
value - (Float, In) Поточне значення команди pwmgen у довільних одиницях.
14.2. Параметри
-
output-type - (s32, RW) Емулює аргумент output_type load-time для програмного компонента pwmgen. Цей параметр можна змінювати під час виконання, але в більшості випадків його слід встановлювати під час запуску і не змінювати. Прийнятні значення: 1 (PWM на Out0 і Direction на Out1), 2 (Up на Out0 і Down на Out1), 3 (режим PDM, PDM на Out0 і Dir на Out1) і 4 (Direction на Out0 і PWM на Out1, «для заблокованої антифази»).
-
«scale» — (Float, RW) Коефіцієнт масштабування для перетворення «value» з довільних одиниць у робочий цикл: dc = value / scale. Робочий цикл має ефективний діапазон від -1,0 до +1,0 включно, все, що виходить за межі цього діапазону, обрізається.
-
pdm_frequency - (u32, RW) Вказує частоту PDM, в Гц, для всіх екземплярів pwmgen, що працюють у режимі PDM (режим 3). Це «частота імпульсного слота»; частота, з якою генератор pdm на платі Anything I/O вибирає, чи випромінювати імпульс, чи проміжок. Кожен імпульс (і проміжок) у послідовності імпульсів PDM має тривалість 1/pdm_frequency секунд. Наприклад, якщо встановити pdm_frequency на 2*106 Hz (2 MHz) і робочий цикл на 50%, отримаємо прямокутну хвилю 1 MHz, ідентичну сигналу PWM 1 MHz з робочим циклом 50%. Ефективний діапазон цього параметра становить від приблизно 1525 Hz до трохи менше 100 MHz. Зверніть увагу, що максимальна частота визначається частотою ClockHigh плати Anything I/O; плати 5I20 і 7I43 мають тактову частоту 100 MHz, що дає максимальну частоту PDM 100 MHz. Інші плати можуть мати інші тактові частоти, що призводить до різних максимальних частот PDM. Якщо користувач спробує встановити занадто високу частоту, вона буде обмежена максимальною частотою, що підтримується платою.
-
pwm_frequency - (u32, RW) Вказує частоту PWM, в Гц, для всіх екземплярів pwmgen, що працюють в режимах PWM (режими 1 і 2). Це частота хвилі зі змінним робочим циклом. Її ефективний діапазон становить від 1 Гц до 193 кГц. Зверніть увагу, що максимальна частота визначається частотою ClockHigh плати Anything I/O; плати 5i20 і 7i43 мають тактову частоту 100 МГц, що дає максимальну частоту PWM 193 кГц. Інші плати можуть мати інші тактові частоти, що призводить до різних максимальних частот PWM. Якщо користувач спробує встановити занадто високу частоту, вона буде обмежена максимальною частотою, що підтримується платою. Частоти нижче приблизно 5 Гц не є надто точними, але вище 5 Гц вони досить близькі до точних.
14.3. Вихідні параметри
Вихідні контакти кожного PWM-генератора мають два додаткові параметри. Щоб знайти, який контакт вводу/виводу належить до якого виходу, запустіть dmesg, як описано вище.
-
invert_output- (біт, RW) Цей параметр діє тільки в тому випадку, якщо параметрis_outputмає значення true. Якщо цей параметр має значення true, вихідне значення GPIO буде оберненим до значення на виводі HALout. -
is_opendrain- (біт, RW) Якщо цей параметр має значення false, GPIO працює як звичайний вихідний контакт: контакт вводу-виводу на роз’ємі приводиться до значення, заданого контактом HALout(можливо інвертованим). Якщо цей параметр має значення true, GPIO працює як контакт з відкритим стоком. Запис 0 у вивід HALoutприводить вивід вводу-виводу в низький стан, запис 1 у вивід HALoutпереводить вивід вводу-виводу у стан високого імпедансу. У цьому стані з високим імпедансом контакт вводу/виводу плаває (слабо підтягується до високого рівня), і інші пристрої можуть керувати значенням; отримане значення на контакті вводу/виводу доступне на контактахinтаin_not. Цей параметр мають лише повні контакти GPIO та контакти вводу/виводу, які використовуються як виходи активними екземплярами модулів.
15. Енкодер
Енкодери мають такі імена: hm2_<BoardType>.<BoardNum>.encoder.<Instance>.. Instance — це двозначне число, яке відповідає номеру екземпляра енкодера HostMot2. Існує num_encoders екземплярів, починаючи з 00.
Кожен енкодер використовує три або чотири вхідні контакти вводу-виводу, залежно від того, як було скомпільовано прошивку. Триконтактні енкодери використовують A, B та Index (іноді також відомий як Z). Чотириконтактні енкодери використовують A, B, Index та Index-mask.
Представлення кодера hm2 схоже на те, що описано в Canonical Device Interface (у документі HAL General Reference), та на компонент програмного кодера. Кожен екземпляр кодера має такі контакти та параметри:
15.1. Піни
-
count- (s32, Out) Кількість підрахунків енкодера з моменту останнього скидання. -
index-enable- (біт, ввід/вивід) Коли цей вивід встановлений у стан True, лічильник (а отже, і позиція) обнуляються при наступному імпульсі індексу (фаза Z). Одночасно index-enable обнуляється, щоб вказати на те, що імпульс відбувся. -
position- (Float, Out) Положення енкодера в одиницях позиції (підрахунок / масштаб). -
rawcounts- (s32, Out) Загальна кількість підрахунків енкодера з початку, без урахування індексу або скидання. -
reset- (біт, вхід) Коли цей вивід має значення TRUE, виводи підрахунку та позиції встановлюються на 0. Це не впливає на значення виводу швидкості. Драйвер не скидає цей вивід на FALSE після скидання підрахунку на 0, це завдання користувача. -
velocity- (Float, Out) Орієнтовна швидкість енкодера в одиницях позиції за секунду.
15.2. Параметри
-
counter-mode- (біт, RW) Встановіть значення False (за замовчуванням) для квадратури. Встановіть значення True для Up/Down або для одного входу на фазі A. Може використовуватися для перетворювача частоти в швидкість з одним входом на фазі A, якщо встановлено значення true. -
filter- (біт, RW) Якщо встановлено значення True (за замовчуванням), квадратурний лічильник потребує 15 тактів, щоб зареєструвати зміну на будь-якій з трьох вхідних ліній (будь-який імпульс, коротший за цей, відкидається як шум). Якщо встановлено значення False, квадратурний лічильник потребує лише 3 тактів, щоб зареєструвати зміну. Тактова частота зразка кодера становить 33 МГц на картах PCI Anything I/O і 50 МГц на 7I43. -
index-invert- (біт, RW) Якщо встановлено значення True, наростаючий фронт вхідного виводу Index запускає подію Index (якщо index-enable має значення True). Якщо встановлено значення False, спрацьовує спадаючий фронт. -
index-mask- (біт, RW) Якщо встановлено значення True, вхідний контакт Index має ефект лише тоді, коли вхідний контакт Index-Mask має значення True (або False, залежно від контактуindex-mask-invertнижче). -
index-mask-invert- (Bit, RW) Якщо встановлено значення True, Index-Mask має бути False, щоб Index мав ефект. Якщо встановлено значення False, контактIndex-Maskмає бути True. -
scale- (Float, RW) Перетворює одиниці виміру з «count» в одиниці виміру «position». Квадратурний енкодер зазвичай має 4 імпульси на імпульс, тому енкодер 100 PPR матиме 400 імпульсів на оберт. У режимі.counter-modeенкодер 100 PPR матиме 100 імпульсів на оберт, оскільки він використовує тільки передній фронт A, а напрямок - B. -
vel-timeout- (Float, RW) Коли енкодер рухається повільніше, ніж один імпульс за кожен раз, коли драйвер зчитує лічильник з FPGA (у функції hm2_read()), швидкість важче оцінити. Драйвер може чекати кілька ітерацій на наступний імпульс, весь час повідомляючи про верхню межу швидкості енкодера, яку можна точно вгадати. Цей параметр визначає, скільки часу чекати на наступний імпульс, перш ніж повідомити про зупинку енкодера. Цей параметр вимірюється в секундах.
16. Конфігурація 5I25
16.1. Прошивка
Прошивка 5I25 постачається попередньо завантаженою для дочірньої карти, з якою вона придбана. Тому firmware=xxx.BIT не є частиною рядка конфігурації hm2_pci під час використання 5I25.
16.2. Конфігурація
Приклади конфігурацій плат 5I25/7I76 та 5I25/7I77 наведено у Вибір конфігурації.
Якщо ви бажаєте налаштувати власну конфігурацію, наступні приклади показують, як завантажити драйвери у файл HAL.
# завантажити універсальний драйвер loadrt hostmot2 # завантажте драйвер PCI та налаштуйте його loadrt hm2_pci config="num_encoders=1 num_stepgens=5 sserial_port_0=0XXX"
# завантажити універсальний драйвер loadrt hostmot2 # завантажте драйвер PCI та налаштуйте його loadrt hm2_pci config="num_encoders=6 num_pwmgens=6 sserial_port_0=0XXX"
16.3. Конфігурація SSERIAL
Конфігураційний рядок sserial_port_0=0XXX встановлює деякі параметри для інтелектуальної дочірньої карти послідовного порту. Ці параметри є специфічними для кожної дочірньої карти. Дивіться посібник Mesa для отримання додаткової інформації про точне використання (зазвичай у розділі під назвою РЕЖИМИ ОБРОБКИ ДАНИХ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ) або дивіться сторінку посібника за посиланням:../man/man9/sserial.9.html[SSERIAL(9)].
16.4. 7I77 Ліміти
Minlimit та maxlimit – це обмеження для значення виводу (у цьому випадку значення аналогового виходу), fullscalemax – це коефіцієнт масштабування.
За замовчуванням вони встановлені на аналоговий вхід або аналоговий діапазон (найімовірніше, у вольтах).
Наприклад, для аналогових виходів 7I77 +-10 В значення за замовчуванням такі:
minlimit: -10
maxlimit: +10
maxfullscale: 10
Якщо ви хочете масштабувати аналоговий вихід каналу до IPS для сервоприводу в режимі швидкості (скажімо, максимум 24 IPS), ви можете встановити обмеження ось так:
minlimit: -24
maxlimit: +24
maxfullscale: 24
Якщо ви хочете масштабувати аналоговий сигнал з каналу до обертів за хвилину для шпинделя від 0 до 6000 об/хв з керуванням 0-10 В, ви можете встановити обмеження таким чином:
minlimit: 0
maxlimit: 6000
maxfullscale: 6000
(це запобігло б встановленню небажаної негативної вихідної напруги)
17. Приклади конфігурацій
LinuxCNC містить кілька прикладів конфігурацій для апаратного забезпечення Mesa. Конфігурації знаходяться в розділах hm2-servo та hm2-stepper Configuration Selector. Зазвичай для завантаження обраної конфігурації потрібно встановити плату. Приклади є хорошим початком і допоможуть заощадити час. Просто виберіть відповідний приклад із селектора конфігурації LinuxCNC і збережіть його копію на своєму комп’ютері, щоб мати можливість редагувати. Щоб побачити точні контакти та параметри, які надала ваша конфігурація, відкрийте вікно «Показати конфігурацію HAL» у меню «Машина» або виконайте команду dmesg, як описано вище.