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 - (bool i/o) True if the watchdog has bit, False if the watchdog has not bit. If the watchdog has bit and the has_bit bool is True, the user can reset it to False to resume operation.
5.2. Параметри
-
timeout_ns - (uint read/write) Watchdog timeout, in nanoseconds. This is initialized to 5,000,000 (5 milliseconds) at module load time. If more than this amount of time passes between calls to the hm2 write function, the watchdog will bite.
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 - (bool, out) Normal state of the hardware input pin. Both full GPIO pins and I/O pins used as inputs by active module instances have this pin.
-
in_not - (bool, out) Inverted state of the hardware input pin. Both full GPIO pins and I/O pins used as inputs by active module instances have this pin.
-
out - (bool, in) Value to be written (possibly inverted) to the hardware output pin. Only full GPIO pins have this pin.
12.2. Параметри
-
invert_output - (bool, rw) This parameter only has an effect if the is_output parameter is true. If this parameter is true, the output value of the GPIO will be the inverse of the value on the out HAL pin. Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter. To invert an active module pin you have to invert the GPIO pin not the module pin.
-
is_opendrain - (bool, rw) This parameter only has an effect if the is_output parameter is true. If this parameter is false, the GPIO behaves as a normal output pin: the I/O pin on the connector is driven to the value specified by the out HAL pin (possibly inverted), and the value of the in and in_not HAL pins is undefined. If this parameter is true, the GPIO behaves as an open-drain pin. Writing 0 to the out HAL pin drives the I/O pin low, writing 1 to the out HAL pin puts the I/O pin in a high-impedance state. In this high-impedance state the I/O pin floats (weakly pulled high), and other devices can drive the value; the resulting value on the I/O pin is available on the in and in_not pins. Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter.
-
is_output - (bool, rw) If set to 0, the GPIO is an input. The I/O pin is put in a high-impedance state (weakly pulled high), to be driven by other devices. The logic value on the I/O pin is available in the in and in_not HAL pins. Writes to the out HAL pin have no effect. If this parameter is set to 1, the GPIO is an output; its behavior then depends on the is_opendrain parameter. Only full GPIO pins have this parameter.
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 - (bool, in) Switches between position control mode (0) and velocity control mode (1). Defaults to position control (0).
-
counts - (sint, out) Feedback position in counts (number of steps).
-
enable - (bool, in) Enables output steps. When false, no steps are generated.
-
position-cmd - (real, in) Target position of stepper motion, in user-defined position units.
-
position-fb - (real, out) Feedback position in user-defined position units (counts / position_scale).
-
velocity-cmd - (real, in) Target velocity of stepper motion, in user-defined position units per second. This pin is only used when the stepgen is in velocity control mode (control-type=1).
-
velocity-fb - (real, out) Feedback velocity in user-defined position units per second.
13.2. Параметри
-
dirhold - (uint, rw) Minimum duration of stable Direction signal after a step ends, in nanoseconds.
-
dirsetup - (uint, rw) Minimum duration of stable Direction signal before a step begins, in nanoseconds.
-
maxaccel - (real, rw) Maximum acceleration, in position units per second per second. If set to 0, the driver will not limit its acceleration.
-
maxvel - (real, rw) Maximum speed, in position units per second. If set to 0, the driver will choose the maximum velocity based on the values of steplen and stepspace (at the time that maxvel was set to 0).
-
position-scale - (real, rw) Converts from counts to position units. position = counts / position_scale
-
step_type - (uint, rw) Output format, like the step_type modparam to the software stepgen(9) component. 0 = Step/Dir, 1 = Up/Down, 2 = Quadrature. In Quadrature mode (step_type=2), the stepgen outputs one complete Gray cycle (00 -> 01 -> 11 -> 10 -> 00) for each step it takes.
-
steplen - (uint, rw) Duration of the step signal, in nanoseconds.
-
stepspace - (uint, rw) Minimum interval between step signals, in nanoseconds.
13.3. Вихідні параметри
Виводи Step та Direction кожного StepGen мають два додаткові параметри. Щоб знайти, який вивід вводу/виводу належить до якого виводу кроку та напрямку, виконайте команду dmesg, як описано вище.
-
invert_output - (bool, rw) This parameter only has an effect if the is_output parameter is true. If this parameter is true, the output value of the GPIO will be the inverse of the value on the out HAL pin.
-
is_opendrain - (bool, rw) If this parameter is false, the GPIO behaves as a normal output pin: the I/O pin on the connector is driven to the value specified by the out HAL pin (possibly inverted). If this parameter is true, the GPIO behaves as an open-drain pin. Writing 0 to the out HAL pin drives the I/O pin low, writing 1 to the out HAL pin puts the I/O pin in a high-impedance state. In this high-impedance state the I/O pin floats (weakly pulled high), and other devices can drive the value; the resulting value on the I/O pin is available on the in and in_not pins. Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter.
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 - (bool, in) If true, the pwmgen will set its Not-Enable pin false and output its pulses. If enable is false, pwmgen will set its Not-Enable pin true and not output any signals.
-
value - (real, in) The current pwmgen command value, in arbitrary units.
14.2. Параметри
-
output-type - (sint, rw) This emulates the output_type load-time argument to the software pwmgen component. This parameter may be changed at runtime, but most of the time you probably want to set it at startup and then leave it alone. Accepted values are 1 (PWM on Out0 and Direction on Out1), 2 (Up on Out0 and Down on Out1), 3 (PDM mode, PDM on Out0 and Dir on Out1), and 4 (Direction on Out0 and PWM on Out1, for locked antiphase).
-
scale - (real, rw) Scaling factor to convert value from arbitrary units to duty cycle: dc = value / scale. Duty cycle has an effective range of -1.0 to +1.0 inclusive, anything outside that range gets clipped.
-
pdm_frequency - (uint, rw) This specifies the PDM frequency, in Hz, of all the pwmgen instances running in PDM mode (mode 3). This is the pulse slot frequency; the frequency at which the pdm generator in the Anything I/O board chooses whether to emit a pulse or a space. Each pulse (and space) in the PDM pulse train has a duration of 1/pdm_frequency seconds. For example, setting the pdm_frequency to 2*106 Hz (2 MHz) and the duty cycle to 50% results in a 1 MHz square wave, identical to a 1 MHz PWM signal with 50% duty cycle. The effective range of this parameter is from about 1525 Hz up to just under 100 MHz. Note that the max frequency is determined by the ClockHigh frequency of the Anything I/O board; the 5I20 and 7I43 both have a 100 MHz clock, resulting in a 100 MHz max PDM frequency. Other boards may have different clocks, resulting in different max PDM frequencies. If the user attempts to set the frequency too high, then it will be clipped to the max supported frequency of the board.
-
pwm_frequency - (uint, rw) This specifies the PWM frequency, in Hz, of all the pwmgen instances running in the PWM modes (modes 1 and 2). This is the frequency of the variable-duty-cycle wave. Its effective range is from 1 Hz up to 193 kHz. Note that the max frequency is determined by the ClockHigh frequency of the Anything I/O board; the 5i20 and 7i43 both have a 100 MHz clock, resulting in a 193 kHz max PWM frequency. Other boards may have different clocks, resulting in different max PWM frequencies. If the user attempts to set the frequency too high, then it will be clipped to the max supported frequency of the board. Frequencies below about 5 Hz are not terribly accurate, but above 5 Hz they are pretty close.
14.3. Вихідні параметри
Вихідні контакти кожного PWM-генератора мають два додаткові параметри. Щоб знайти, який контакт вводу/виводу належить до якого виходу, запустіть dmesg, як описано вище.
-
invert_output- (bool, rw) This parameter only has an effect if theis_outputparameter is true. If this parameter is true, the output value of the GPIO will be the inverse of the value on theoutHAL pin. -
is_opendrain- (bool, rw) If this parameter is false, the GPIO behaves as a normal output pin: The I/O pin on the connector is driven to the value specified by theoutHAL pin (possibly inverted). If this parameter is true, the GPIO behaves as an open-drain pin. Writing 0 to theoutHAL pin drives the I/O pin low, writing 1 to theoutHAL pin puts the I/O pin in a high-impedance state. In this high-impedance state the I/O pin floats (weakly pulled high), and other devices can drive the value; the resulting value on the I/O pin is available on theinandin_notpins. Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter.
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- (sint, out) Number of encoder counts since the previous reset. -
index-enable- (bool, i/o) When this pin is set to True, the count (and therefore also position) are reset to zero on the next Index (Phase-Z) pulse. At the same time, index-enable is reset to zero to indicate that the pulse has occurred. -
position- (real, out) Encoder position in position units (count / scale). -
rawcounts- (sint, out) Total number of encoder counts since the start, not adjusted for index or reset. -
reset- (bool, in) When this pin is TRUE, the count and position pins are set to 0. The value of the velocity pin is not affected by this. The driver does not reset this pin to FALSE after resetting the count to 0, that is the user’s job. -
velocity- (real, out) Estimated encoder velocity in position units per second.
15.2. Параметри
-
counter-mode- (bool, rw) Set to False (the default) for Quadrature. Set to True for Up/Down or for single input on Phase A. Can be used for a frequency to velocity converter with a single input on Phase A when set to true. -
filter- (bool, rw) If set to True (the default), the quadrature counter needs 15 clocks to register a change on any of the three input lines (any pulse shorter than this is rejected as noise). If set to False, the quadrature counter needs only 3 clocks to register a change. The encoder sample clock runs at 33 MHz on the PCI Anything I/O cards and 50 MHz on the 7I43. -
index-invert- (bool, rw) If set to True, the rising edge of the Index input pin triggers the Index event (if index-enable is True). If set to False, the falling edge triggers. -
index-mask- (bool, rw) If set to True, the Index input pin only has an effect if the Index-Mask input pin is True (or False, depending on theindex-mask-invertpin below). -
index-mask-invert- (bool, rw) If set to True, Index-Mask must be False for Index to have an effect. If set to False, theIndex-Maskpin must be True. -
scale- (real, rw) Converts from count units to position units. A quadrature encoder will normally have 4 counts per pulse so a 100 PPR encoder would be 400 counts per revolution. In.counter-modea 100 PPR encoder would have 100 counts per revolution as it only uses the rising edge of A and direction is B. -
vel-timeout- (real, rw) When the encoder is moving slower than one pulse for each time that the driver reads the count from the FPGA (in the hm2_read() function), the velocity is harder to estimate. The driver can wait several iterations for the next pulse to arrive, all the while reporting the upper bound of the encoder velocity, which can be accurately guessed. This parameter specifies how long to wait for the next pulse, before reporting the encoder stopped. This parameter is in seconds.
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, як описано вище.