LinuxCNC Documentation

СИНТАКСИС

Дивіться розділ config modparam нижче для налаштування карти Mesa. Зазвичай hostmot2 завантажується без параметрів, якщо не потрібне налагодження.

loadrt hostmot2 [ debug_idrom=N ] [ debug_module_descriptors=N ] [ debug_pin_descriptors=N ] [ debug_modules=N ]

debug_idrom [за замовчуванням: 0]

Тільки для розробників/налагодження! Увімкнути ведення журналу налагодження заголовка HostMot2 IDROM.

debug_module_descriptors [за замовчуванням: 0]

Тільки для розробників/налагодження! Вмикає ведення журналу налагодження дескрипторів модуля HostMot2.

debug_pin_descriptors [за замовчуванням: 0]

Тільки для розробників/налагодження! Вмикає ведення журналу налагодження дескрипторів контактів HostMot2.

debug_modules [за замовчуванням: 0]

Тільки для розробників/налагодження! Вмикає ведення журналу налагодження використовуваних модулів HostMot2.

use_serial_numbers [за замовчуванням: 0]

При створенні HAL-контактів для інтелектуальних послідовних пристроїв називайте контакти за серійним номером плати, а не за тим, до якої плати і порту вони підключені. Якщо для цього параметра встановлено значення 1, контакти матимуть такі імена, як «hm2_8i20.1234.current», а не «hm2_5i23.0.8i20.0.1.current». Ідентифікатор складається з останніх 4 цифр серійного номера плати, який зазвичай вказано на наклейці на платі. Це зробить конфігурації менш портативними, але означає, що плати можна підключати знову, не дотримуючись таких ретельних вимог.

ОПИС

hostmot2 — це драйвер пристрою, який забезпечує взаємодію прошивки Mesa або litehm2 HostMot2 з LinuxCNC HAL. Сам по собі цей драйвер нічого не робить, для роботи прошивки необхідні власні драйвери. Наразі доступні драйвери для карт з інтерфейсами PCI, Ethernet, SPI та EPP.

Прошивка HostMot2 надає такі модулі, як кодери, генератори PWM, генератори кроку/напрямку та універсальні виводи вводу/виводу (GPIO). Ці елементи називаються «модулями». Прошивка налаштовується під час компіляції прошивки для надання нульової або більшої кількості екземплярів кожного з цих модулів.

Контакти вводу/виводу плати

Прошивка HostMot2 працює на платі FPGA. Плата взаємодіє з комп’ютером через PCI, Ethernet, SPI або EPP, а також взаємодіє з апаратним забезпеченням управління рухом, таким як сервоприводи та крокові двигуни, через виводи вводу-виводу на платі.

Кожен вивід вводу/виводу може бути налаштований під час завантаження драйвера плати для виконання однієї з двох функцій: як конкретний вивід вводу/виводу конкретного екземпляра модуля (енкодер, pwmgen, stepgen тощо) або як цифровий вивід вводу/виводу загального призначення. За замовчуванням усі екземпляри модулів увімкнені, і всі виводи плати використовуються екземплярами модулів.

Користувач може вимкнути екземпляри модулів під час завантаження драйвера плати, вказавши конфігураційний рядок modparam hostmot2. Всі контакти, що належать до вимкнених екземплярів модулів, автоматично стають GPIO.

Всі виводи вводу-виводу мають певну присутність HAL, незалежно від того, чи належать вони до активного екземпляра модуля, чи є повними GPIO. GPIO можна змінювати (під час виконання) між входами, звичайними виходами та відкритими стоками, і вони мають гнучкий інтерфейс HAL. Виводи вводу-виводу, що належать до активних екземплярів модуля, обмежені вимогами модуля-власника і мають більш обмежений інтерфейс в HAL. Це описано в розділі «Вводу-виводу загального призначення» нижче.

параметр модифікації конфігурації

Всі модулі драйверів плат (hm2_pci, hm2_eth тощо) приймають параметр modparam типу масив рядків, названий «config», під час завантаження. Цей масив містить один рядок конфігурації для кожної плати, яку повинен використовувати драйвер. Рядок конфігурації кожної плати передається драйверу hostmot2 і аналізується ним, коли драйвер плати реєструє плату.

Рядок конфігурації може містити пробіли, тому зазвичай гарною ідеєю є обгортання всього рядка подвійними лапками (символ ").

Символ коми (,) відокремлює елементи масиву конфігурації один від одного.

Наприклад, якщо ваш керуючий комп’ютер має один 5I20 та один 5I23, ви можете завантажити драйвер hm2_pci за допомогою команди HAL (у halcmd) приблизно так:

loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT num_encoders=3 num_pwmgens=3 num_stepgens=3,firmware=hm2/5i23/SVSS8_8.BIT sserial_port_0=0000 num_encoders=4"

Примітка: Це припускає, що драйвер hm2_pci спочатку виявляє 5I20, а потім 5I23. Якщо порядок виявлення не збігається з порядком конфігураційних рядків, драйвер hostmot2 відмовлятиметься завантажувати прошивку, і драйвер плати (hm2_pci тощо) не завантажиться. Наскільки мені відомо, неможливо передбачити порядок, в якому драйвер виявить PCI-плати, але порядок виявлення буде незмінним, доки PCI-плати не будуть переміщені. Найкраще спробувати завантажити його і подивитися, який буде порядок виявлення.

Дійсні записи у рядку формату:

  • [firmware=F]

  • [num_dplls=N]

  • [num_encoders=N]

  • [ssi_chan_N=abc%nq]

  • [biss_chan_N=abc%nq]

  • [fanuc_chan_N=abc%nq]

  • [num_inmux=N]

  • [num_inms=N]

  • [num_resolvers=N]

  • [num_pwmgens=N]

  • [num_3pwmgens=N]

  • [num_oneshots=N]

  • [num_periodms=N]

  • [num_rcpwmgens=N]

  • [num_stepgens=N]

  • [stepgen_width=N]

  • [sserial_port_0=00000000]

  • [num_bspis=N]

  • [num_leds=N]

  • [num_ssrs=N]

  • [num_outms=N]

  • [num_xy2mods=N]

  • [enable_raw]

    firmware [optional]

    Завантажте прошивку, вказану в F, у FPGA на цій платі. Якщо рядок «firmware=F» не вказано, FPGA не буде перепрограмовано, але може продовжувати працювати з раніше завантаженою прошивкою.

    Запитане мікропрограмне забезпечення F отримується за допомогою udev, яке шукає мікропрограмне забезпечення в системному шляху пошуку мікропрограмного забезпечення, зазвичай /lib/firmware. F зазвичай має вигляд «hm2/<BoardType>/file.bit»; типовим значенням для F може бути «hm2/5i20/SVST8_4.BIT». Файли прошивки hostmot2 надаються пакетами hostmot2-firmware, доступними на linuxcnc.org, і зазвичай їх можна встановити, ввівши команду «sudo apt-get install hostmot2-firmware-5i23», щоб встановити файли підтримки для 5I23, наприклад.

    Новіші карти FPGA постачаються з попередньо запрограмованим прошиванням, і з цими картами не слід використовувати рядок «firmware=». Для зміни прошивання на цих картах слід використовувати утиліту «mesaflash». Цілком допустимо і розумно завантажувати ці карти без будь-якого рядка конфігурації.

    num_dplls [необов’язково, за замовчуванням: -1]

    hm2dpll — це модуль таймера з фазовою автопідстроюваною петлею, який може використовуватися для зменшення коливань часу вибірки та запису для деяких модулів hm2. Цей параметр можна використовувати для вимкнення hm2dpll, встановивши значення 0. Існує тільки один модуль цього типу з 4 каналами таймера, тому інші допустимі значення — -1 (увімкнути все) і 1, які в кінцевому підсумку означають одне й те саме.

    num_encoders [необов’язково, за замовчуванням: -1]

    Увімкніть тільки перші N кодери. Якщо N дорівнює -1, увімкнені всі кодери. Якщо N дорівнює 0, кодери не увімкнені. Якщо N перевищує кількість кодерів, доступних у прошивці, плата не зможе зареєструватися.

    ssi_chan_N [необов’язково, за замовчуванням: ""]

    Вказує, як буде інтерпретуватися потік бітів від пристрою з синхронним послідовним інтерфейсом. Для кожного підключеного пристрою має бути створено запис. Будуть увімкнені лише канали з визначником формату (оскільки програмне забезпечення не може вгадати швидкість передачі даних та довжину бітів).

    biss_chan_N [необов’язково, за замовчуванням: ""]

    Як і для ssi_chan_N, але для пристроїв BiSS.

    fanuc_chan_N [необов’язково, за замовчуванням: ""]

    Вказує, як буде інтерпретуватися бітовий потік від абсолютного енкодера Fanuc. Для кожного підключеного пристрою повинен бути запис. Будуть ввімкнені тільки канали з визначником формату (оскільки програмне забезпечення не може вгадати швидкість передачі даних і довжину бітів).

    num_resolvers [необов’язково, за замовчуванням: -1]

    Увімкніть тільки перші N резолвери. Якщо N = -1, то ввімкнені всі резолвери. Цей модуль не працює з загальними резолверами (на відміну від модуля кодера, який працює з будь-яким кодером). На момент написання цієї статті функція Hostmot2 Resolver працює тільки з картою Mesa 7I49.

    num_pwmgens [необов’язково, за замовчуванням: -1]

    Увімкніть тільки перші N pwmgens. Якщо N дорівнює -1, увімкнені всі pwmgens. Якщо N дорівнює 0, жоден pwmgens не увімкнений. Якщо N перевищує кількість pwmgens, доступних у прошивці, плата не зможе зареєструватися.

    num_3pwmgens [необов’язково, за замовчуванням: -1]

    Увімкніть тільки перші N трифазних pwmgens. Якщо N дорівнює -1, увімкнені всі 3 pwmgens. Якщо N дорівнює 0, жоден pwmgen не увімкнений. Якщо N перевищує кількість pwmgens, доступних у прошивці, плата не зможе зареєструватися.

    num_rcpwmgens [необов’язково, за замовчуванням: -1]

    Увімкніть тільки перші N RC pwmgens. Якщо N дорівнює -1, увімкнені всі rcpwmgens. Якщо N дорівнює 0, жодні rcpwmgens не увімкнені. Якщо N перевищує кількість rcpwmgens, доступних у прошивці, плата не зможе зареєструватися.

    num_stepgens [необов’язково, за замовчуванням: -1]

    Увімкніть тільки перші N степгенів. Якщо N дорівнює -1, увімкнені всі степгени. Якщо N дорівнює 0, степгени не увімкнені. Якщо N перевищує кількість степгенів, доступних у прошивці, плата не зможе зареєструватися.

    num_xy2mods [необов’язково, за замовчуванням: -1]

    Увімкніть тільки перші N xy2mods. Якщо N дорівнює -1, увімкнені всі xy2mods. Якщо N дорівнює 0, xy2mods не увімкнені. Якщо N перевищує кількість xy2mods, доступних у прошивці, плата не зможе зареєструватися.

    stepgen_width [необов’язково, за замовчуванням: 2]

    Використовується для маскування зайвих, небажаних контактів stepgen. Приводи крокових двигунів зазвичай потребують лише двох контактів (step і dir), але stepgen Hostmot2 може керувати до 8 вихідними контактами для спеціалізованих застосувань (залежно від прошивки). Цей параметр застосовується до всіх екземплярів stepgen. Невикористані, замасковані контакти будуть доступні як GPIO.

    sserial_port_N (N = 0 .. 3) [необов’язково, за замовчуванням: 00000000 для всіх портів]

    До плати Mesa Anything I/O можна підключити до 32 пристроїв Smart Serial, залежно від використовуваного прошивання та кількості фізичних підключень на платі. Вони розташовані в 1-4 портах (N) від 1 до 8 каналів. Деякі карти Smart Serial (SSLBP) пропонують більше ніж одну конфігурацію завантаження, наприклад, всі входи або всі виходи, або додатковий аналоговий вхід на деяких цифрових контактах. Щоб встановити режими для порту 0, використовуйте, наприклад, sserial_port_0=0120xxxx. «0» у рядку встановлює відповідний канал у режим 0, «1» — у режим 1 і так далі до режиму 9. «X» у будь-якій позиції вимикає цей канал і робить відповідні контакти FPGA доступними як GPIO. Рядок може містити до 8 символів, і якщо він визначає більше режимів, ніж є каналів на порту, то зайві ігноруються. Нумерація каналів йде зліва направо, тому у наведеному вище прикладі sserial-пристрій 0.0 буде встановлений у режим 0, 0.1 — у режим 1, 0.2 — у режим 2, 0.3 — у режим 0, а канали 0.4 і далі будуть вимкнені. Драйвер sserial автоматично виявляє підключені пристрої, додаткова конфігурація не потрібна. Непідключені канали за замовчуванням будуть працювати в режимі GPIO, але значення контактів будуть змінюватися напіввипадково під час завантаження, коли працює виявлення карт, тому найкраще активно вимкнути будь-який канал, який буде використовуватися для GPIO. Дивіться SSERIAL(9) для додаткової інформації.

    num_bspis [необов’язково, за замовчуванням: -1]

    Увімкніть лише перші N буферизованих драйверів SPI. Якщо N дорівнює -1, то всі драйвери увімкнено. Кожен драйвер BSPI може адресувати 16 пристроїв.

    num_leds [необов’язково, за замовчуванням: -1]

    Увімкніть лише перші N світлодіодів на платі FPGA. Якщо N дорівнює -1, то будуть створені виводи HAL для всіх світлодіодів. Якщо N=0, то жодних виводів не буде додано.

    num_ssrs [необов’язково, за замовчуванням: -1]

    Увімкніть лише перші N модулів SSR на платі FPGA. Якщо N дорівнює -1, то будуть створені виводи HAL для всіх виходів SSR. Якщо N=0, то жодних виводів не буде додано.

    enable_raw [optional]

    Якщо вказано, це вмикає режим необробленого доступу, за допомогою якого користувач може переглядати та завантажувати прошивку з HAL. Див. Режим необробленого доступу нижче.

dpll

Модуль hm2dpll має контакти типу «hm2__<BoardType>_.<BoardNum>.dpll». Ймовірно, що в майбутньому кількість контактів зменшиться, а деякі контакти стануть параметрами. Цей модуль є фазовим синхронізатором, який синхронізується з потоком, в якому встановлена функція «read» hostmot2, і запускає інші функції, які йому призначені, у визначений час до або після виконання функції «read». Це можна застосувати до трьох типів абсолютних енкодерів: квадратурного енкодера, stepgen та xy2mod. У випадку абсолютних енкодерів це дозволяє системі запускати передачу даних безпосередньо перед тим, як драйвер HAL зчитує дані. У випадку stepgens, квадратурних енкодерів та xy2mod таймери можуть використовуватися для зменшення коливань вибірки положення. Це особливо цінно для карт з інтерфейсом Ethernet.

Pins:

hm2<BoardType>.<BoardNum>.dpll._NN.timer-us (float, in)

This pin sets the triggering offset of the associated timer. There are 4 timers numbered 01 to 04, represented by the NN digits in the pin name. The units are microseconds (µs). Generally the value for reads will be negative, and positive for writes, so that input data is sampled prior to the main hostmot read and output data is written some time after the main hostmot2 read. + For stepgen and quadrature encoders, the value needs to be more than the maximum variation between read times. -100 will suffice for most systems, and -50 will work on systems with good performance and latency. + For serial encoders, the value also needs to include the time it takes to transfer the absolute encoder position. For instance, if 50 bits must be read at 500 kHz then subtract an additional 50/500 kHz = 100 µs to get a starting value of -200. + The xy2mod uses 2 DPLL timers, one for read and one for write. The read timer value can be the same as used by the stepgen and quadrature encoders so the same timer channel can be shared. The write timer is typically set to a time after the main hostmot2 write this may take some experimentation.

hm2<BoardType>.<BoardNum>.dpll.base-freq-khz (float, in)

Цей висновок встановлює базову частоту фазового автопідстроювання частоти. За замовчуванням вона буде встановлена на номінальну частоту потоку, в якому працює PLL, і зазвичай її не потрібно змінювати.

hm2<BoardType>.<BoardNum>.dpll.phase-error-us (float, out)

Вказує на фазову помилку DPLL. Якщо кількість циклів значно змінюється, ймовірно, PLL не вдалося зафіксувати, і потрібно буде внести корективи.

hm2_<BoardType>.<BoardNum>.dpll.time-const (u32, in)

Часова константа фільтра для PLL. Значення за замовчуванням є компромісом між нечутливістю до коливань одного циклу та стійкістю до змін шкали часу Linux CLOCK_MONOTONIC, яка може миттєво змінюватися на ±500ppm від номінального значення, зазвичай за допомогою програмного забезпечення для відстеження часу, такого як ntpd та ntpdate. Значення за замовчуванням 2000 (0x7d0).

hm2_<BoardType>.<BoardNum>.dpll.plimit (u32, in)

Встановлює межу регулювання фази PLL. Якщо значення дорівнює нулю, PLL буде працювати у вільному режимі на базовій частоті незалежно від швидкості сервоприводу. Це, ймовірно, не те, що вам потрібно. За замовчуванням 4194304 (0x400000) Одиниці виміру невідомі…​

hm2_<BoardType>.<BoardNum>.dpll.ddsize (u32, out)

Використовується водієм внутрішньо, ймовірно, зникне.

hm2_<BoardType>.<BoardNum>.dpll.prescale (u32, in)

Коефіцієнт попереднього масштабування для генератора швидкості. За замовчуванням 1.

Енкодер

Енкодери мають такі імена: hm2_<BoardType>.<BoardNum>.encoder.<Instance>.". "Instance" — це двозначне число, яке відповідає номеру екземпляра енкодера HostMot2. Існує "num_encoders" екземплярів, починаючи з 00.

Так, наприклад, контакт HAL, який має поточне положення другого енкодера першої плати 5I25, є: hm2_5i25.0.encoder.01.position (це передбачає, що прошивка на цій платі налаштована таким чином, що цей об’єкт HAL є доступним).

Кожен енкодер використовує три або чотири вхідні контакти вводу-виводу, залежно від того, як було скомпільовано прошивку. Триконтактні енкодери використовують A, B та Index (іноді також відомий як Z). Чотириконтактні енкодери використовують A, B, Index та Index-mask.

Представлення кодера hm2 схоже на те, що описано в Canonical Device Interface (у документі HAL General Reference), та на компонент програмного кодера. Кожен екземпляр кодера має такі контакти та параметри:

Pins:

count (s32 out)

Number of encoder counts since the previous reset. 32-bit truncation of the 64-bit internal counter; position is computed from the full-width internal value so it does not wrap.

position (float out)

Положення енкодера в одиницях вимірювання положення (кількість / масштаб).

position-interpolated (float out)

Інтерпольоване положення енкодера в одиницях положення (кількість / шкала). Дійсно тільки тоді, коли швидкість є приблизно постійною, а час між підрахунками менше, ніж значення параметра часу очікування швидкості. Не використовуйте для керування положенням. Корисно для синхронізованих рухів шпинделя з енкодерами низької роздільної здатності.

position-latched (float out)

Фіксоване положення енкодера в одиницях позиції (кількість / шкала).

velocity (float out)

Розрахункова швидкість енкодера в одиницях позиції за секунду.

velocity-rpm (float out)

Розрахункова швидкість енкодера в одиницях позиції за хвилину.

reset (bit in)

Коли цей вивід має значення True, виводи count і position встановлюються в 0 (це не впливає на значення виводу velocity). Драйвер не скидає цей вивід в FALSE після скидання count в 0, це завдання користувача.

index-enable (bit in/out)

Коли цей вивід встановлений у стан True (а no-clear-on-index — у стан false), лічильник (а отже, і позиція) обнуляються при наступному імпульсі Index (Phase-Z). Одночасно index-enable обнуляється, щоб вказати на те, що імпульс відбувся.

no-clear-on-index (bit in)

Коли цей вивід встановлений у стан True, лічильник (а отже, і позиція) НЕ обнуляються при наступному імпульсі індексу (Phase\-Z). При події індексу зафіксований лічильник і позиція встановлюються так, щоб вказати лічильник і позицію, де відбувся індекс.

probe-enable (bit in/out)

Коли цей вивід встановлений у стан True, лічильник енкодера (а отже, і положення) фіксується на наступному активному фронті зонда. Одночасно з цим, зонд-активація скидається до нуля, щоб вказати, що відбулася фіксація. (присутній тільки якщо підтримується прошивкою)

probe-invert (bit r/w)

Якщо встановлено значення True, наростаючий фронт вхідного контакту зонда запускає подію фіксації (якщо probe-enable має значення True). Якщо встановлено значення False, спрацьовує спадаючий фронт. (присутнє лише за підтримки прошивки)

rawcounts (s32 out)

Total number of encoder counts since the start, not adjusted for index or reset. Truncated view of the internal 64-bit counter.

count_latch (s32 out)

Encoder count at latch event (index or probe). Truncated view of the internal 64-bit latched count.

input-a, input-b, input-index (bit out)

Фільтровані значення сигналів A, B, індексних енкодерів у реальному часі

quad-error-enable (bit in)

Коли цей вивід має значення True, звітування про квадратурні помилки ввімкнено. Коли значення False, існуючі квадратурні помилки очищуються, а звітування про помилки вимикається.

quad-error (bit out)

Цей біт вказує на виявлення помилки квадратурної послідовності. Його можна встановити, лише якщо відповідний біт увімкнення помилки квадратурної послідовності має значення «True».

hm2_XXXX.N.encoder.sample-frequency (u32 in)

Це частота дискретизації, яка визначає часову постійну цифрового фільтра всіх стандартних каналів кодера (див. параметр фільтра).

hm2_XXXX.N.encoder.muxed-sample-frequency (u32 in)

Це частота дискретизації, яка визначає постійну часу цифрового фільтра всіх каналів мультиплексованого кодера (див. параметр фільтра). Вона також встановлює частоту мультиплексування кодера.

hm2_XXXX.N.encoder.muxed-skew (float in)

Це встановлює затримку часу вибірки мультиплексованого кодера (в нс) від мультиплексного сигналу. Правильне налаштування цього параметра може збільшити корисну частоту мультиплексування та компенсувати затримки кабелю (рекомендоване значення становить 3* довжина кабелю в футах +20).

hm2_XXXX.N.encoder.hires-timestamp (bit in)

Коли цей вивід має значення True, частота лічильника часових міток енкодера становить приблизно 10 МГц. Коли значення False, частота лічильника часових міток становить приблизно 2 МГц. Для додатків підрахунку частоти це значення слід встановити на True, щоб поліпшити роздільну здатність. Воно повинно бути встановлено на False, коли використовуються періоди сервопотоку, довші за 1 мс.

Parameters:

scale (float r/w)

Перетворює одиниці вимірювання "кількість" на одиниці вимірювання "позиція".

index-invert (bit r/w)

Якщо встановлено значення True, наростаючий фронт вхідного виводу Index запускає подію Index (якщо index-enable має значення True). Якщо встановлено значення False, спрацьовує спадаючий фронт.

index-mask (bit r/w)

Якщо встановлено значення True, вхідний контакт Index має ефект лише тоді, коли вхідний контакт Index-Mask має значення True (або False, залежно від контакту index-mask-invert нижче).

index-mask-invert (bit r/w)

Якщо встановлено значення True, для ефекту Index Index-Mask має бути значення False. Якщо встановлено значення False, контакт Index-Mask має бути значенням True.

counter-mode (bit r/w)

Встановіть значення False (значення за замовчуванням) для Quadrature. Встановіть значення True для Step/Dir (у цьому випадку Step знаходиться на виводі A, а Dir — на виводі B).

filter (bit r/w)

Якщо встановлено значення True (за замовчуванням), квадратурний лічильник потребує 15 тактів вибірки для реєстрації зміни на будь-якій з трьох вхідних ліній (будь-який імпульс, коротший за цей, відкидається як шум). Якщо встановлено значення False, квадратурний лічильник потребує лише 3 тактових імпульси для реєстрації зміни. Тактова частота зразка кодера за замовчуванням становить приблизно 25–33 МГц, але її можна змінити глобально за допомогою виводу зразкової частоти або мультиплексованої зразкової частоти.

vel-timeout (float r/w)

Коли енкодер рухається повільніше, ніж один імпульс за кожен раз, коли драйвер зчитує лічильник з FPGA (у функції hm2_read()), швидкість важче оцінити. Драйвер може чекати кілька ітерацій на наступний імпульс, весь час повідомляючи про верхню межу швидкості енкодера, яку можна точно вгадати. Цей параметр визначає, скільки часу чекати на наступний імпульс, перш ніж повідомити про зупинку енкодера. Цей параметр вимірюється в секундах.

hm2_XXXX.N.encoder.timer-number (за замовчуванням: -1) (s32 r/w)

Встановлює екземпляр таймера hm2dpll, який буде використовуватися для фіксації лічильників енкодера. Значення -1 означає, що лічильники енкодера не фіксуються. Значення 0 означає, що фіксація відбувається одночасно з основним зчитуванням hostmot2. Значення 1..4 означає, що використовується часовий зсув від основного зчитування hostmot2 відповідно до налаштування timer-us dpll.

Зазвичай timer-us повинен бути від’ємним числом, величина якого перевищує найбільшу затримку (наприклад, -100 для системи з середньою затримкою, -50 для системи з хорошою затримкою). Від’ємне число вказує на фіксацію зазначеного часу до номінального часу зчитування hostmot2.

Якщо в прошивці FPGA немає модуля DPLL або якщо модуль енкодера не підтримує DPLL, то цей контакт не створюється.

Якщо ця функція доступна, її зазвичай слід увімкнути. Це, як правило, зменшує кількість наступних помилок.

Синхронний послідовний інтерфейс (SSI)

(Не плутати з інтелектуальним послідовним інтерфейсом)

Для кожного екземпляра SSI створюється один пін-код, незалежно від формату даних:

hm2_XXXX.NN.ssi.MM.data-incomplete (bit, in)

Цей контакт буде встановлений у стан «True», якщо модуль все ще передавав дані під час зчитування значення. При наявності цієї проблеми на інтерфейсі користувача також буде відображатися обмежена кількість повідомлень про помилки. Цей контакт слід використовувати для контролю того, чи була проблема вирішена шляхом зміни конфігурації. Рішення проблеми залежить від того, чи

  • Зчитування енкодера запускається таймером фазового автопідстроювання частоти hm2dpll (описаним вище)

  • або функцією тригерних кодерів (описано нижче).

Імена контактів, створених модулем SSI, повністю залежатимуть від форматного рядка для кожного каналу, вказаного в командному рядку loadrt. Типовим форматним рядком може бути ssi_chan_0=error%1bposition%24g.

Це інтерпретувало б молодший біт (MDL) бітового потоку як бітовий вивід з назвою "error" (помилка), а наступні 24 біти - як лічильник кодувальника Грея. Усі виводи HAL, пов’язані з кодувальником, починалися б з "position" (позиція).

У рядку форматування не повинно бути пробілів, оскільки він використовується як роздільник низькорівневим кодом.

Формат складається з рядка буквено-цифрових символів, які утворюють імена виводів HAL, за якими слідують символ %, кількість бітів і тип даних. Усі біти в пакеті повинні бути визначені, навіть якщо вони не використовуються. Загальна кількість бітів обмежена 64 бітами.

Допустимі символи форматування та створені ними піни:

p: (Прокладка)

Не створює жодних виводів, використовується для ігнорування непотрібних ділянок бітового потоку.

b: (Булеве значення).

(біт, вихід) hm2_XXXX.N.ssi.MM.<ім’я>.
Якщо будь-які біти в зазначеній ширині поля мають значення, відмінне від нуля, то вивід HAL буде «True».
(біт, вихід) hm2_XXXX.N.ssi.MM.<ім’я>-not.
Інвертована версія вищезазначеного, вивід HAL буде «True», якщо всі біти в полі мають значення нуль.

u: (Без підпису)

(float, out) hm2_XXXX.N.ssi.MM.<name>. Значення бітів, що інтерпретуються як ціле число без знака, потім масштабується таким чином, що значення виводу буде дорівнювати значенню параметра scalemax, коли всі біти мають високий рівень. (Наприклад, якщо поле має ширину 8 бітів, а параметр scalmax дорівнює 20, то значення 255 поверне 20, а 0 поверне 0.

s: (Підписано)

(float, out) hm2_XXXX.N.ssi.MM.<name>.
Значення бітів, інтерпретованих як число зі знаком у додатковому до 2, масштабується аналогічно беззнаковому варіанту, за винятком симетричного розташування навколо нуля.

f: (бітФілд)

(біт, вихід) hm2_XXXX.N.ssi.MM.<ім’я>-NN.
Значення кожного окремого біта в полі даних. NN починається з 00 і досягає числа бітів у полі.
(біт, вихід) hm2_XXXX.N.ssi.MM.<ім’я>-NN-not.
Інвертована версія значень окремих бітів.

e: (Енкодер)

(s32, out) hm2_XXXX.N.ssi.MM.<name>.count.
Нижні 32 біти загального лічильника енкодера. Це значення скидається як за допомогою контактів …​reset, так і за допомогою контактів …​index-enable.
(s32, out) hm2_XXXX.N.ssi.MM.<name>.rawcounts.
Нижні 32 біти загального лічильника енкодера. Контакт не залежить від скидання та індексу.
(float, out) hm2_XXXX.N.ssi.MM.<name>.position.
Позиція енкодера в одиницях машини. Вона обчислюється з повних 64-бітних буферів, тому буде показувати значення True навіть після завершення роботи контактів підрахунку. Вона обнуляється за допомогою reset та index enable.
(bit, IO) hm2_XXXX.N.ssi.MM.<name>.index-enable.
Коли цей вивід встановлений у стан «True», модуль чекатиме, поки наступні необроблені лічильники енкодера не пройдуть через ціле число, кратне кількості лічильників, вказаній параметром counts-per-rev, а потім обнулить виводи лічильників і позиції та поверне вивід index-enable у стан «False» як сигнал системі про те, що «індекс» пройшов. Цей вивід використовується для синхронізованого руху шпинделя та індексації.
(біт, вхід) (біт, вихід) hm2_XXXX.N.ssi.MM.<name>.reset.
Коли цей вивід встановлений у високий стан, виводи counts і position обнуляються.

h: (Розділений кодер, старші біти)

Деякі енкодери (включаючи Fanuc) розміщують підрахунки частин обертів енкодера та підрахунки повних обертів в окремих, несуміжних полях. Цей тег визначає старші біти такого модуля енкодера. На кожен канал може бути тільки один тег h та один тег l, поведінка з декількома такими каналами буде невизначеною.

l: (Розділений кодер, молодші біти)

Молодші біти (див. "h")

g: (Грей-код)

Це модифікатор, який вказує, що наступний рядок формату закодовано за кодом Грея. Це дійсне лише для типів даних кодувальників (e, h l) та беззнакового (u).

m: (Багатооборотний)

Це модифікатор, який вказує, що наступний форматний рядок є багатооборотним енкодером. Це дійсно тільки для енкодерів (e, h l). Стрибок у положенні енкодера, що перевищує половину повної шкали, інтерпретується як повний оборот, і підрахунки обертаються. У випадку багатооборотного енкодера це, ймовірно, буде лише збій даних, що призведе до постійного зміщення. Цей прапор гарантує, що такі енкодери ніколи не будуть обертатися.

Parameters

Для всіх екземплярів SSI універсально створюються два параметри

hm2_XXXX.N.ssi.MM.frequency-khz (float r/w)

Цей параметр встановлює тактову частоту SSI. Одиниці вимірювання — кГц, тому 500 дасть тактову частоту 500 000 Гц.

hm2_XXXX.N.ssi.timer-number-num (s32 r/w)

Цей параметр призначає модуль SSI конкретному екземпляру таймера hm2dpll. Цей вивід використовується тільки в прошивках, що містять функцію hm2dpll, і за замовчуванням має значення 1, якщо така функція є, і 0, якщо її немає. Вивід можна використовувати для відключення зчитування енкодера, встановивши неіснуючий номер таймера або значення 0.

Інші параметри залежать від типів даних, зазначених у рядку конфігурації.

p: (Прокладка)

Без параметрів.

b: (Булеве значення)

Без параметрів.

u: (Без підпису)

(float, r/w) hm2_XXXX.N.ssi.MM.<name>-scalemax. Коефіцієнт масштабування для каналу.

s: (Підписано)

(float, r/w) hm2_XXXX.N.ssi.MM.<name>-scalemax. Коефіцієнт масштабування для каналу.

f: (бітФілд)

Без параметрів.

e: (Енкодер)

(float, r/w) hm2_XXXX.N.ssi.MM.<name>.scale: (float, r.w) Шкала енкодера в одиницях на одиницю машини. (u32, r/w) hm2_XXXX.N.ssi.MM.<name>.counts-per-rev (u32, r/w) Використовується для емуляції поведінки індексу інкрементального + індексного енкодера. Зазвичай це значення встановлюється на фактичну кількість імпульсів на оберт енкодера, але може бути будь-яким цілим числом обертів. Цілі дільники або множники справжнього PPR можуть бути корисними для індексації. Нецілі множники можуть бути доречними, якщо між енкодером і шпинделем або кульковою гвинтовою парою існує синхронне передавальне число.

BiSS

BiSS — це двонаправлений варіант SSI. Наразі LinuxCNC підтримує лише один напрямок (від кодера до ПК).

Для кожного екземпляра BiSS створюється один пін-код, незалежно від формату даних:

hm2_XXXX.NN.biss.MM.data-incomplete (bit, in)

Цей вивід буде встановлений у стан «True», якщо модуль все ще передавав дані під час зчитування значення. При наявності цієї проблеми на інтерфейсі користувача також буде відображатися обмежена кількість повідомлень про помилки. Цей вивід слід використовувати для контролю того, чи була проблема вирішена шляхом зміни конфігурації. Рішення проблеми залежить від того, чи зчитування кодера запускається таймером фазового автопідстроювання hm2dpll (описаним вище) або функцією тригерних кодерів (описаною нижче).

Імена контактів, створених модулем BiSS, повністю залежатимуть від форматного рядка для кожного каналу, вказаного в командному рядку loadrt, і будуть точно відповідати формату, визначеному вище для SSI. Наразі драйвер LinuxCNC підтримує пакети даних розміром до 96 біт, хоча модуль Mesa Hostmot2 може обробляти пакети розміром 512 біт. За необхідності можна розширити кількість пакетів, що підтримуються драйвером.

Енкодер Fanuc

Контакти та специфікатор формату для цього модуля ідентичні модулю SSI, описаному вище, за винятком того, що надається принаймні один попередньо налаштований формат. Modparam fanuc_chan_N=AA64 (з урахуванням регістру) налаштує канал для енкодера Fanuc Aa64. Створені контакти:

hm2XXXX._N.fanuc.MM.batt

вказує стан батареї

hm2XXXX._N.fanuc.MM.batt-not

перевернута версія вищезазначеного

hm2XXXX._N.fanuc.MM.comm

Абсолютний вихід 0-1023 для комутації двигуна

hm2XXXX._N.fanuc.MM.crc

Контрольна сума CRC. Наразі HAL не має можливості її використовувати

hm2XXXX._N.fanuc.MM.encoder.count

Кількість кодерів

hm2XXXX._N.fanuc.MM.encoder.index-enable

Імітований індекс. Встановлюється параметром кількості обертів

hm2XXXX._N.fanuc.MM.encoder.position

Кількість, масштабована параметром …​scale

hm2XXXX._N.fanuc.MM.encoder.rawcounts

Необроблені підрахунки, на які не впливає скидання або індексація

hm2XXXX._N.fanuc.MM.encoder.reset

Якщо високе/Істина, то рахунок рахується, а позиція = 0

hm2XXXX._N.fanuc.MM.valid

Вказує на те, що абсолютна позиція є дійсною

hm2XXXX._N.fanuc.MM.valid-not

Перевернута версія

вирішити

Резолвери мають такі імена: hm2_<BoardType>.<BoardNum>.resolver.<Instance>. <Instance> — це 2-значне число, яке для плати 7I49 буде в діапазоні від 00 до 05. Ця функція працює тільки з платами інтерфейсу Mesa Resolver (з яких 7I49 є єдиним прикладом на момент написання). Ця плата використовує інтерфейс SPI для підключення до карти FPGA і буде працювати тільки з правильним прошиванням. Призначені контакти будуть перераховані у виведенні dmesg, але навряд чи їх можна буде ефективно перевірити за допомогою інструментів HAL.

Pins:

angle (float, out)

Цей штифт вказує кутове положення резольвера. Це число від 0 до 1 для кожного електричного обертання.

position (float, out)

Розраховується як кількість повних та часткових обертів з моменту запуску, скидання або скидання індексу, помножена на параметр масштабу.

velocity (float, out)

Розраховується на основі швидкості обертання та параметра шкали швидкості. Шкала за замовчуванням – електричні оберти за секунду.

velocity-rpm (float, out)

Просто швидкість масштабована в 60 разів для зручності.

count (s32, out)

Цей вивід виводить імітований лічильник енкодера зі швидкістю 224 відліків на оберт (16777216 відліків).

rawcounts (s32, out)

Він ідентичний контакту підрахунку, за винятком того, що не скидається контактами «індекс» або «скидання». Це контакт, який буде пов’язаний з компонентом bldc HAL, якщо резольвер використовується для комутації двигуна.

reset (bit, in)

Скидає положення та негайно дораховує контакти до нуля.

joint-pos-fb (bit, in)

Драйвер резольвера Mesa має можливість емулювати абсолютний енкодер за допомогою файлу позиції (див. розділ INI-config у посібнику) та однообертову абсолютну роботу резольверів. Під час запуску, і тільки якщо параметр use-position-file встановлений на «True», драйвер резольвера буде чекати, поки система запише значення на контакт axis.N.joint-pos-fb (який повинен бути підключений до цього контакту резольвера), і обчислить кількість повних обертів, яка найкраще відповідає поточній позиції резольвера. Потім він попередньо завантажить вихід драйвера з цим зміщенням. Це слід використовувати тільки в системах, де рух осі в неактивному стані малоймовірний. Ця функція буде працювати належним чином, тільки якщо машина спочатку встановлена в положення «індекс» і якщо вихідні положення осі дорівнюють точно нулю.

index-enable (bit, in/out)

Коли цей вивід встановлений у високий стан, виводи положення та лічильника будуть скинуті наступного разу, коли резольвер пройде через нульове положення. Одночасно вивід переводиться у низький стан, щоб повідомити підключеним модулям, що індекс був виявлений і лічильники були скинуті.

error (bit, out)

Вказує на помилку в певному каналі. Якщо це значення дорівнює "True", то повідомлені положення та швидкість є недійсними.

Parameters:

scale (float, read/write)

Шкала положення, в машинних одиницях на один електричний оберт резольвера.

velocity-scale (float, read/write)

Коефіцієнт перетворення між швидкістю обертання резольвера та швидкістю машини. Значення 1 зазвичай дає швидкість двигуна в обертах за хвилину (RPS), значення 0,01666667 дає (приблизні) оберти за хвилину.

index-divisor (за замовчуванням 1) (u32, read/write)

Компонент резольвера емулює індекс у фіксованій точці циклу sin/cos. Деякі резольвери мають кілька циклів на оберт (часто це пов’язано з кількістю пар полюсів на підключеному двигуні). LinuxCNC вимагає індексу один раз на оберт для правильного нарізання різьби тощо. Цей параметр слід встановити на кількість циклів на оберт резольвера. УВАГА: Псевдоіндекс, який використовується, не обов’язково буде однаковим між запусками LinuxCNC. Не очікуйте, що після перезапуску LinuxCNC можна буде перезапустити різьбу. Недоцільно використовувати цей параметр для індексації приводів осей.

excitation-khz (float, read/write)

Цей вивід встановлює частоту збудження для резольвера. Цей вивід є виводом на рівні модуля, а не на рівні екземпляра, оскільки всі резольвери мають однакову частоту збудження. Допустимі значення: 10 (приблизно 10  кГц), 5 (приблизно 5   кГц) і 2,5 (приблизно 2,5  кГц). Фактична частота залежить від частоти FPGA і відповідає CLOCK_LOW/5000, CLOCK_LOW/10000 та CLOCK_LOW/20000 відповідно. Параметр буде встановлено на найближчу з трьох доступних частот. Значення -1 (за замовчуванням) означає, що поточне налаштування має бути збережено.

use-position-file (bit, read/write)

У поєднанні з joint-pos-fb (див. вище) емулює абсолютні енкодери.

pwmgen

pwmgens мають такі імена: «hm2_<BoardType>.<BoardNum>.pwmgen.<Instance>». <Instance> — це двозначне число, яке відповідає номеру екземпляра HostMot2 pwmgen. Існує «num_pwmgens» екземплярів, починаючи з 00.

Так, наприклад, контакт HAL, який вмикає вихід з четвертого pwmgen першої плати 7I43, має вигляд: hm2_7i43.0.pwmgen.03.enable (це припускає, що прошивка на цій платі налаштована таким чином, що цей об’єкт HAL доступний).

У HM2 кожен pwmgen використовує три вихідні контакти вводу/виводу: Not-Enable, Out0 та Out1. Функція контактів вводу/виводу Out0 та Out1 залежить від параметра типу виводу (див. нижче).

Представлення hm2 pwmgen подібне до програмного компонента pwmgen. Кожен екземпляр pwmgen має такі контакти та параметри:

Pins:

enable (bit input)

Якщо значення «True» («Так»), pwmgen встановить свій контакт «Not-Enable» («Невключено») у значення «False» («Неправда») та видаватиме імпульси. Якщо значення «enable» («Увімкнено») має значення «False» («Неправда»), pwmgen встановить свій контакт «Not-Enable» («Невключено») у значення «True» («Так») та не видаватиме жодних сигналів.

value (float input)

Поточне значення команди pwmgen у довільних одиницях.

Parameters:

scale (float rw)

Коефіцієнт масштабування для перетворення «значення» з довільних одиниць в робочий цикл: dc = значення / масштаб. Робочий цикл має ефективний діапазон від -1,0 до +1,0 включно, все, що виходить за межі цього діапазону, обрізається. За замовчуванням масштаб дорівнює 1,0.

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, «для заблокованої антифази»).

offset-mode (bit input)

Коли True, режим зміщення модифікує поведінку PWM таким чином, що значення PWM 0 призводить до вихідного сигналу PWM з робочим циклом 50%, значення -1 призводить до робочого циклу 0%, а +1 призводить до робочого циклу 100% (з масштабуванням за замовчуванням). Цей режим використовується деякими приводами двигунів PWM і перетворювачами PWM в аналогові. Зазвичай сигнал напрямку в цьому режимі не використовується.

dither (bit input)

Якщо значення True, дрожання призводить до того, що вихід PWM дрожить між двома сусідніми значеннями регістра PWM на частоті PWM. Це збільшує роздільну здатність PWM при використанні для аналогового виходу, збільшуючи максимальну роздільну здатність з 12 до 16 біт. Дрожання підтримується тільки з прошивкою PWMGen версії 1 або вище і впливає тільки на виходи PWM, а не на виходи PDM.

Окрім перелічених вище параметрів HAL для кожного екземпляра, існує кілька параметрів HAL, які впливають на всі екземпляри pwmgen:

pwm_frequency (u32 rw)

Це визначає частоту PWM, в Гц, для всіх екземплярів pwmgen, що працюють в режимах PWM (режими 1 і 2). Це частота хвилі зі змінним робочим циклом. Її ефективний діапазон становить від 1 Гц до 386 кГц. Зверніть увагу, що максимальна частота визначається частотою ClockHigh плати Anything IO; 5I25 і 7I92 мають тактову частоту 200 МГц, що дає максимальну частоту PWM 386 кГц. Інші плати можуть мати інші тактові частоти, що дає різні максимальні частоти PWM. Якщо користувач спробує встановити занадто високу частоту, вона буде обмежена максимальною частотою, що підтримується платою. Частоти нижче приблизно 5 Гц не надто точні, але вище 5 Гц вони досить близькі до реальних. За замовчуванням pwm_frequency становить 20 000 Гц (20 кГц).

pdm_frequency (u32 rw)

Це визначає частоту PDM, в Гц, всіх екземплярів pwmgen, що працюють в режимі PDM (режим 3). Це «частота імпульсного слота»; частота, з якою генератор pdm на платі AnyIO вибирає, чи випромінювати імпульс, чи проміжок. Кожен імпульс (і проміжок) в послідовності імпульсів PDM має тривалість 1/pdm_frequency секунд. Наприклад, встановлення pdm_frequency на 2e6 (2 МГц) і робочого циклу на 50% дає прямокутну хвилю 1 МГц, ідентичну сигналу PWM 1 МГц з робочим циклом 50%. Ефективний діапазон цього параметра становить від приблизно 1525 Гц до трохи менше 200 МГц. Зверніть увагу, що максимальна частота визначається частотою ClockHigh плати Anything IO; плати 5I25 і 7I92 мають тактову частоту 100 МГц, що дає максимальну частоту PDM 100 МГц. Інші плати можуть мати інші тактові частоти, що дає різні максимальні частоти PDM. Якщо користувач спробує встановити занадто високу частоту, вона буде обмежена максимальною частотою, що підтримується платою. За замовчуванням pdm_frequency становить 20 000 Гц (20 кГц).

3ppwmgen

Трифазні генератори PWM (3pwmgens) призначені для керування верхніми та нижніми затворами в трифазному драйвері двигуна. Ця функція включена для підтримки дочірніх плат контролера двигуна Mesa, але може використовуватися для безпосереднього керування IGBT або подібним драйвером. 3pwmgens мають назви типу «hm2_<BoardType>.<BoardNum>.3pwmgen.<Instance>», де <Instance> — це 2-значне число. Буде num_3pwmgens екземплярів, починаючи з 00. Кожен екземпляр виділяє 7 вихідних і один вхідний контакти на роз’ємах плати Mesa. Виходи: PWM A, PWM B, PWM C, /PWM A, /PWM B, /PWM C, Enable. Перші три контакти є драйверами високого рівня, другі три — їх доповнюючими драйверами низького рівня. Біт enable призначений для керування сервопідсилювачем. Вхідний біт є бітом несправності, який зазвичай підключається до системи виявлення перевантаження. Коли він встановлений, генератор PWM вимикається. Трифазні робочі цикли можна індивідуально регулювати від -Scale до +Scale. Зверніть увагу, що 0 відповідає 50% робочому циклу і є початковим значенням.

Pins:

A-значення, B-значення, C-значення (float input)

Значення команди PWM для кожної фази, обмежене +/- "шкалою". За замовчуванням встановлено на нуль, що дорівнює 50% робочому циклу на контактах високого та низького рівнів (але дивіться параметр "час затримки").

enable (bit input)

При високому рівні PWM вмикається, доки біт несправності не встановлений зовнішнім вхідним контактом несправності. При низькому рівні PWM вимикається, при цьому драйвери високого та низького рівня знаходяться в низькому стані. Це не те саме, що вихід 0 (50% робочий цикл на обох наборах контактів) або негативний повний діапазон (де драйвери низького рівня знаходяться в «увімкненому» стані 100% часу).

fault (bit output)

Вказує стан біта несправності. Цей вихід фіксується у високому рівні після встановлення фізичним виводом несправності, доки виводу "ввімкнення" не буде встановлено високий рівень.

Parameters:

deadtime (u32 rw)

Встановлює час затримки між вимкненням драйвера високого рівня та увімкненням драйвера низького рівня і навпаки. Мертвий час віднімається від часу увімкнення і додається до часу вимкнення симетрично. Наприклад, при 20 кГц PWM (період 50 мкс), 50% робочому циклі і нульовому мертвому часі, виходи PWM і NPWM будуть прямокутними хвилями (NPWM інвертований від PWM) з високими часами 25 мкс. При тих самих налаштуваннях, але з мертвим часом 1 мкс, виходи PWM і NPWM матимуть високі часи 23 мкс (25 - (2X 1 мкс), 1 мкс на фронт). Значення вказується в наносекундах (нс) і за замовчуванням становить досить консервативні 5000 нс. Встановлення занадто низького значення цього параметра може бути як дорогим, так і небезпечним, оскільки якщо обидва затвори відкриті одночасно, фактично виникає коротке замикання в джерелі живлення.

scale (float rw)

Встановлює половину шкали зазначеного 3-фазного PWM-генератора. Дійсні значення PWM від -шкали до +шкали. За замовчуванням +/- 1.0

fault-invert (bit rw)

Встановлює полярність вхідного контакту несправності. Значення 1 означає, що несправність спрацьовує, коли контакт знаходиться у високому стані, а 0 означає, що несправність спрацьовує, коли контакт знаходиться у низькому стані. За замовчуванням 0, несправність = низький рівень, так що PWM працює, коли контакт несправності не підключений.

sample-time (u32 rw)

Встановлює час протягом циклу, коли генерується імпульс АЦП. 0 = початок циклу ШІМ та 1 = кінець. Наразі не корисно для LinuxCNC. Значення за замовчуванням — 0,5.

Окрім параметрів для кожного екземпляра, наведених вище, є наступний параметр, який впливає на всі екземпляри:

frequency (u32 rw)

Встановлює головну частоту ШІМ. Максимальна частота становить приблизно 48 кГц, мінімальна – 1 кГц. За замовчуванням – 20 кГц.

один постріл

Oneshot — це апаратний одноразовий пристрій, придатний для різних функцій синхронізації, затримки, обробки сигналів, генерації PWM та сторожового таймера. Модуль oneshot включає 2 таймери, що дозволяють змінювати затримку імпульсів для таких застосувань, як фазове регулювання. Джерелами тригера можуть бути програмне забезпечення, зовнішні входи, таймер DPLL, вбудований генератор частоти або інший таймер. Oneshots мають такі назви: «hm2_<BoardType>.<BoardNum>.oneshot.<Instance>», де <Instance> — це 2-значне число. Буде num_oneshots екземплярів, починаючи з 00. Кожен екземпляр виділяє до двох вхідних і двох вихідних контактів.

Pins:

width1 (float rw)

Встановлює тривалість імпульсу таймера1 у мс. За замовчуванням — 1 мс (1/1000 s).

width2 (float rw)

Встановлює тривалість імпульсу таймера2 у мс. За замовчуванням — 1 мс (1/1000 s).

filter1 (float rw)

Встановлює постійну часу цифрового фільтра для зовнішнього тригерного входу таймера 1. Час фільтрації вимірюється в мілісекундах. За замовчуванням постійна часу фільтра становить 0,1 мс. Реакція зовнішнього тригера буде затримана на час, встановлений для фільтра.

filter2 (float rw)

Встановлює постійну часу цифрового фільтра для зовнішнього тригерного входу таймера 2. Час фільтрації вимірюється в мілісекундах. За замовчуванням постійна часу фільтра становить 0,1 мс. Реакція зовнішнього тригера буде затримана на час, встановлений для фільтрації.

rate (float rw)

Встановлює частоту вбудованого генератора швидкості (у Гц)

trigger_select1,trigger_select2 (u32 rw)

Встановлює джерело запуску для таймера1, таймера2 відповідно. Джерелами запуску є:

0 Тригер вимкнений
1 Програмний тригер: спрацьовує, коли вивід hal pin swtrigger1 має значення true
2 Зовнішнє апаратне забезпечення: тригер
3 Тригер DPLL: спрацьовує за допомогою вибраного таймера DPLL
4 Тригер частоти: спрацьовує за допомогою вбудованого генератора частоти.
5 Тригер Timer1: спрацьовує за допомогою виходу таймера 1
6 Тригер Timer2: спрацьовує за допомогою виходу таймера 2
trigger_on_rise1, trigger_on_rise2 (bit rw)

Коли значення true, запускає таймер1, таймер2 відповідно на наростаючому фронті джерела запуску.

trigger_on_fall1, trigger_on_fall2 (bit rw)

Коли значення true, запускає таймер1, таймер2 відповідно на спадаючому фронті джерела запуску.

retriggerable1, retriggerable2 (bit rw)

Якщо значення true, відповідний таймер можна перезапустити, тобто таймер буде скинутий до повного часу при спрацьовуванні тригера навіть під час періоду вихідного імпульсу. Якщо значення false, таймер не можна перезапустити, тобто він ігноруватиме спрацьовування тригера під час періоду вихідного імпульсу.

enable1, enable2 (bit rw)

Увімкнення тригера для таймера 1 та таймера 2 відповідно. Значення True для увімкнення.

reset1, reset2 (bit rw)

Якщо встановлено значення true, таймер1 та таймер2 скидають відповідно, перериваючи будь-який імпульс, що виконується.

out1,out2 (bit ro)

Біти стану імпульсного виходу для таймера1 та таймера2.

exttrigger1, exttrigger2 (bit ro)

Біти стану зовнішнього тригерного входу для таймера 1 та таймера 2. Вони контролюють відфільтровані входи.

swtrigger1, swtrigger2 (bit rw)

Програмні тригерні входи для запуску таймера 1 та таймера 2.

період

periodm — це модуль вимірювання періоду/ширини/коефіцієнта заповненості. Він може вимірювати період, частоту, ширину імпульсу та коефіцієнт заповненості. Він також може усереднювати показники для фільтрації шуму.

Pins:

period_us (float r)

Період введення в мікросекундах.

width_us (float r)

Ширина вхідного імпульсу в мікросекундах.

duty_cycle (float r)

Масштабування та зміщення вхідного робочого циклу (ширина/період) можна змінювати.

duty_cycle_scale (float rw)

Встановлює шкалу значення шпаруватості, за замовчуванням – 100.

duty_cycle_offset (float rw)

Встановлює зміщення значення шпаруватості, що додається після масштабування. За замовчуванням — 0.

averages (float rw)

Кількість періодів/ширини для усереднення. Від 1 до 4095. Частота оновлення періоду, ширини, шпаруватості та частоти будуть введеними значеннями частоти/усереднення.

frequency (float r)

Вхідна частота в Гц.

minimum_frequency (float w)

Мінімальна вхідна частота в Гц. Якщо вхідна частота нижча за цей поріг, дійсний біт буде очищено.

filtertc_us (float w)

Вхідний сигнал periodm обробляється цифровим фільтром для придушення шуму. Часова константа цього фільтра встановлюється за допомогою цього виводу в мікросекундах. Імпульси, тривалість яких менше цієї часової константи, не розпізнаються.

valid (bit out)

Дійсний вихідний біт є істинним, коли вхідний сигнал присутній, а вхідна частота перевищує мінімальне значення частоти.

invert (bit in)

Біт інвертування встановлює полярність входу. Якщо він має значення false, вхід є прямим, що означає, що ширина визначається часом високого рівня входу. Якщо він має значення true, вхід інвертується, тому ширина визначається часом низького рівня входу.

input_status (bit out)

Біт input_status зчитує стан фільтрованого входу в реальному часі (на який впливає інвертований вивід).

rcpwmgen

rcpwmgen — це простий генератор PWM, оптимізований для використання зі стандартними RC-сервоприводами, які використовують ширину імпульсу для визначення положення. rcpwmgens мають такі імена: «hm2_<BoardType>.<BoardNum>.rcpwmgen.<Instance>», де <Instance> — це 2-значне число. Буде num_rcpwmgens-багато екземплярів, починаючи з 00. Кожен екземпляр виділяє один вихідний контакт. На відміну від стандартного генератора PWM, вихід rcpwmgen визначається за шириною, а не за робочим циклом, тому ширина імпульсу не залежить від робочої частоти. Роздільна здатність становить приблизно 1/2000 для стандартних RC-сервоприводів діапазону від 1 до 2 мс.

Pins:

rate (float rw)

Встановлює частоту PWM головного RC-перетворювача. Максимальна — 1 кГц, мінімальна — 0,01 Гц. За замовчуванням — 50 Гц.

width (float rw)

Встановлює ширину імпульсу для кожного каналу в (мс/шкала).

offset (float rw)

Встановлює зміщення ширини імпульсу для кожного каналу в мс. Для сервоприводів з часом імпульсу 1-2 мс для центрального положення 0 це значення має бути встановлено на 1,5 мс.

scale (float rw)

Встановлює масштабування ширини імпульсу для кожного каналу. Наприклад, встановлення масштабу на 90 і зміщення на 1,5 мс призведе до діапазону положення +-45 градусів і масштабу в градусах для сервоприводів 1-2 мс з повним діапазоном руху 90 градусів.

stepgen

stepgens мають такі імена: «hm2_<BoardType>.<BoardNum>.stepgen.<Instance>». <Instance> — це двозначне число, яке відповідає номеру екземпляра HostMot2 stepgen. Існує «num_stepgens» екземплярів, починаючи з 00.

Так, наприклад, контакт HAL, який має зворотний зв’язок про поточне положення від першого stepgen другої плати 5I22, має вигляд: hm2_5i22.1.stepgen.00.position-fb (це припускає, що прошивка на цій платі налаштована таким чином, що цей об’єкт HAL доступний).

Кожен степген використовує від 2 до 8 контактів вводу/виводу. Сигнали на цих контактах залежать від параметра step_type (описаного нижче).

Представлення stepgen змодельовано на основі програмного компонента stepgen. Кожен екземпляр stepgen має такі контакти та параметри:

Pins:

position-cmd (float input)

Цільове положення руху крокового двигуна, у довільних одиницях позиції. Цей контакт використовується лише тоді, коли кроковий генератор знаходиться в режимі керування положенням (тип керування = 0).

velocity-cmd (float input)

Цільова швидкість руху крокового генератора, у довільних одиницях положення за секунду. Цей висновок використовується лише тоді, коли кроковий генератор знаходиться в режимі керування швидкістю (тип керування = 1).

counts (s32 output)

Позиція зворотного зв’язку в підрахунках (кількість кроків).

position-fb (float output)

Позиція зворотного зв’язку в масштабованих одиницях позиції. Це схоже на "counts/position_scale", але має точнішу роздільну здатність, ніж крок.

position-latched (float output)

фіксована позиція в масштабованих одиницях позиції. Це схоже на "counts/position_scale", але має точнішу роздільну здатність, ніж крок.

velocity-fb (float output)

Швидкість зворотного зв’язку в довільних одиницях положення за секунду.

enable (bit input)

Цей прапорець вмикає екземпляр генератора кроків. Коли значення True, екземпляр stepgen працює як очікується. Коли значення False, кроки не генеруються і velocity-fb негайно переходить до 0. Якщо stepgen рухається, коли значення enable стає False, він негайно зупиняється, не дотримуючись обмеження maxaccel.

position-reset (bit input)

Скидає положення до 0, якщо значення True. Корисно для шпинделів з покроковим/напрямним керуванням під час перемикання між режимами шпинделя та з’єднання.

control-type (bit input)

Перемикається між режимом керування положенням (0) та режимом керування швидкістю (1). За замовчуванням використовується керування положенням (0).

index-enable (bit in/out)

Коли цей вивід встановлений у стан True, кількість кроків (а отже, і положення) обнуляються при наступному імпульсі індексу stepgen. Одночасно індекс-включення обнуляється, щоб вказати, що імпульс відбувся.

index-invert (bit r/w)

Якщо встановлено значення True, наростаючий фронт вхідного виводу індексу запускає подію очищення позиції (якщо index-enable має значення True). Якщо встановлено значення False, спрацьовує спадаючий фронт.

probe-enable (bit in/out)

Коли цей вивід встановлений у стан True, кількість кроків (а отже, і положення) фіксується на наступному активному фронті датчика stepgen. Одночасно з цим, датчик probe-enable скидається до нуля, щоб вказати на те, що відбулася фіксація.

probe-invert (bit r/w)

Якщо встановлено значення True, наростаючий фронт вхідного контакту зонда запускає подію фіксації (якщо probe-enable має значення True). Якщо встановлено значення False, спрацьовує спадаючий фронт.

Parameters:

position-scale (float r/w)

Перетворює з одиниць підрахунку в одиниці позиції. position = counts / position_scale

maxvel (float r/w)

Максимальна швидкість, в одиницях положення за секунду. Якщо встановлено значення 0, драйвер завжди використовуватиме максимально можливу швидкість на основі поточних інтервалів кроків і шкали положення. Максимальна швидкість змінюватиметься, якщо зміняться інтервали кроків або шкала положення. За замовчуванням встановлено значення 0.

maxaccel (float r/w)

Максимальне прискорення, в одиницях положення за секунду за секунду. За замовчуванням встановлено значення 1,0. Якщо встановлено значення 0, драйвер не обмежуватиме прискорення взагалі. Для цього необхідно, щоб контакт position-cmd або velocity-cmd керувався таким чином, щоб не перевищувати можливості машини. Це, ймовірно, те, що вам потрібно, якщо ви збираєтеся використовувати планувальник траєкторій LinuxCNC для ручного переміщення або виконання G-коду.

steplen (u32 r/w)

Тривалість ступінчастого сигналу, у наносекундах.

stepspace (u32 r/w)

Мінімальний інтервал між ступінчастими сигналами, у наносекундах.

dirsetup (u32 r/w)

Мінімальна тривалість стабільного сигналу напрямку перед початком кроку, у наносекундах.

dirhold (u32 r/w)

Мінімальна тривалість стабільного сигналу напрямку після завершення кроку, у наносекундах.

step_type (u32 r/w)

Формат виводу, як і параметр step_type modparam для програмного компонента stepgen(9): 0 = Step/Dir, 1 = Up/Down, 2 = Quadrature, 3+ = режим пошуку в таблиці. У цьому режимі параметр step_type визначає довжину послідовності кроків. Крім того, параметр stepgen_width у конфігураційному рядку loadrt повинен бути встановлений відповідно до кількості виводів, необхідних для stepgen. Будь-які контакти stepgen, що перевищують цю кількість, будуть доступні для GPIO. Ця маска за замовчуванням має значення 2. Максимальна довжина становить 16. Зверніть увагу, що режим таблиці не ввімкнено в усіх прошивках, але якщо ви бачите контакти GPIO між екземплярами stepgen у списку контактів апаратного забезпечення dmesg/log, то ця опція може бути доступною.

У режимі квадратури (step_type=2) генератор кроків видає один повний цикл Грея (00 → 01 → 11 → 10 → 00) для кожного «кроку», який він робить, тому шкала повинна бути розділена на 4 відносно стандартного кроку/напрямку. У табличному режимі до 6 виводів вводу/виводу індивідуально керуються в довільній послідовності довжиною до 16 фаз.

swap_step_dir (bit input)

Це змінює місцями виходи кроку та напрямку на вибраному генераторі кроків. Цей параметр доступний, лише якщо прошивка підтримує цю опцію.

table-data-N (u32 r/w)

Є 4 параметри table-data-N, від table-data-0 до table-data-3. Кожен з них містить 4 байти, що відповідають 4 етапам послідовності кроків. Наприклад, table-data-0 = 0x00000001 встановить вивід stepgen 0 (у виведенні dmesg завжди називається «Step») на першому етапі послідовності кроків, а table-data-4 = 0x20000000 встановить контакт stepgen 6 («Table5Pin» у виведенні dmesg) на 16-му етапі послідовності кроків.

hm2_XXXX.N.stepgen.timer-number (за замовчуванням: -1) (s32 r/w)

Встановлює екземпляр таймера hm2dpll, який буде використовуватися для фіксації лічильників stepgen. Значення -1 означає, що лічильники stepgen не фіксуються. Значення 0 означає, що фіксація відбувається одночасно з читанням головного hostmot2. Значення 1..4 означає, що використовується часовий зсув від головного hostmot2 відповідно до налаштування timer-us dpll.

Зазвичай timer-us повинен бути від’ємним числом, величина якого перевищує найбільшу затримку (наприклад, -100 для системи з середньою затримкою, -50 для системи з хорошою затримкою). Від’ємне число вказує на фіксацію зазначеного часу до номінального часу зчитування hostmot2.

Якщо в прошивці FPGA немає модуля DPLL або якщо модуль stepgen не підтримує DPLL, то цей висновок не створюється.

Якщо ця функція доступна, її зазвичай слід увімкнути. Це, як правило, зменшує кількість наступних помилок.

Інтелектуальний послідовний інтерфейс

Інтелектуальний послідовний інтерфейс дозволяє підключити до однієї плати FPGA до 32 різних пристроїв, таких як 3-фазний привід Mesa 8i20 потужністю 2,2 кВт або 48-канальні плати вводу-виводу 7I64. Драйвер автоматично визначає підключений апаратний порт, канал і тип пристрою. Пристрої можна підключати в будь-якому порядку до будь-якого активного каналу активного порту (див. визначення конфігурації modparam вище).

Повну інформацію про пристрої Smart-serial див. у sserial(9).

BSPI

Драйвер BSPI (Buffered SPI) є незвичайним тим, що він не створює жодних контактів HAL. Натомість драйвер експортує набір функцій, які можуть використовуватися піддрайвером для підключеного обладнання. Зазвичай вони записуються в «comp».

Мова попередньої обробки: детальнішу інформацію див. https://linuxcnc.org/docs/html/hal/comp.html або man halcompile. Детальнішу інформацію про типовий піддрайвер див. mesa_7i65(9) та вихідний код mesa_7i65.comp. Див. hm2_bspi_setup_chan(3), hm2_bspi_write_chan(3), hm2_tram_add_bspi_frame(3), hm2_allocate_bspi_tram(3), hm2_bspi_set_read_function(3) та hm2_bspi_set_write_function(3) для експортованих функцій.

Назви доступних каналів виводяться на стандартний вивід під час процесу завантаження драйвера та мають такий вигляд hm2_<board name>.<board index>.bspi.<index>, e.g., hm2_5i23.0.bspi.0.

UART

Драйвер UART також не створює жодних контактів HAL, натомість він оголошує дві прості функції читання/запису та функцію налаштування, які використовуються кодом, написаним користувачем. Зазвичай це пишеться мовою попередньої обробки «comp»: див. https://linuxcnc.org/docs/html/hal/comp.html або man halcompile для отримання додаткової інформації. Детальніше про типовий піддрайвер див. mesa_uart(9) та вихідний код mesa_uart.comp. Див. hm2_uart_setup_chan(3), hm2_uart_send(3), hm2_uart_read(3) та hm2_uart_setup(3).

Назви доступних каналів UART виводяться на стандартний вивід під час завантаження драйвера та мають такий вигляд: hm2_<board name>.<board index>.uart.<index>, e.g., hm2_5i23.0.uart.0.

Загальний ввід/вивід

Контакти вводу-виводу на платі, які не використовуються екземпляром модуля, експортуються в HAL як «повні» контакти GPIO. Повні контакти GPIO можна налаштувати під час виконання як входи, виходи або відкриті стоки, і вони мають інтерфейс HAL, який забезпечує таку гнучкість. Контакти вводу-виводу, що належать активному екземпляру модуля, обмежуються вимогами модуля-власника і мають обмежений інтерфейс HAL.

GPIO мають такі імена: «hm2_<BoardType>.<BoardNum>.gpio.<IONum>». <IONum> — це тризначне число. Відповідність між <IONum> та роз’ємом і контактом на цьому роз’ємі записується в системний журнал під час завантаження драйвера і задокументована в посібнику Mesa для плат Anything I/O.

Так, наприклад, контакт HAL, який має інвертоване значення вхідного сигналу, зчитане з GPIO 012 другої плати 7I43, має вигляд: hm2_7i43.1.gpio.012.in-not (це припускає, що прошивка на цій платі налаштована таким чином, що цей об’єкт HAL є доступним).

Параметр HAL, який контролює, чи є останній GPIO першого 5I22 входом чи виходом, є: hm2_5i22.0.gpio.095.is_output (це передбачає, що прошивка на цій платі налаштована таким чином, що цей об’єкт HAL є доступним).

Представлення GPIO hm2 моделюється на основі цифрових входів і цифрових виходів, описаних у Canonical Device Interface (частина документа HAL General Reference). Кожен GPIO може мати такі контакти HAL:

in & in_not (bit out)

Стан (нормальний та інвертований) вхідного контакту апаратного забезпечення. Ці контакти мають як повноцінні контакти GPIO, так і контакти вводу/виводу, що використовуються як вхідні дані активними екземплярами модулів.

out (bit in)

Значення, яке буде записано (можливо, інвертовано) на вихідний контакт апаратного забезпечення. Тільки повноцінні контакти GPIO мають цей контакт.

Кожен GPIO може мати такі параметри:

is_output (bit r/w)

Якщо встановлено значення 0, GPIO є входом. Контакт вводу-виводу переводиться у стан високого імпедансу (слабо підтягнутий до високого рівня), щоб керуватися іншими пристроями. Логічне значення на контакті вводу-виводу доступне в контактах HAL «in» та «in_not». Записи в контакт HAL «out» не мають ефекту. Якщо цей параметр встановлений на 1, GPIO є виходом; його поведінка залежить від параметра «is_opendrain». Тільки повні контакти GPIO мають цей параметр.

is_opendrain (bit r/w)

Цей параметр діє тільки в тому випадку, якщо параметр «is_output» має значення True. Якщо цей параметр має значення False, GPIO працює як звичайний вихідний контакт: контакт вводу-виводу на роз’ємі приводиться до значення, заданого контактом HAL «out» (можливо інвертованим), а значення контактів HAL «in» і «in_not» не визначені. Якщо цей параметр має значення True, GPIO працює як вивід з відкритим стоком. Запис 0 у вивід HAL «out» приводить вивід вводу-виводу в низький стан, запис 1 у вивід HAL «out» переводить вивід вводу-виводу у стан високого імпедансу. У цьому стані високого імпедансу контакт вводу/виводу плаває (слабо підтягується до високого рівня), і інші пристрої можуть керувати значенням; отримане значення на контакті вводу/виводу доступне на контактах «in» і «in_not». Тільки повні контакти GPIO і контакти вводу/виводу, що використовуються як виходи активними екземплярами модулів, мають цей параметр.

invert_output (bit r/w)

Цей параметр діє тільки в тому випадку, якщо параметр «is_output» має значення True. Якщо цей параметр має значення True, вихідне значення GPIO буде оберненим до значення на виводі HAL «out». Тільки повні виводи GPIO та виводи вводу-виводу, що використовуються як виходи активними екземплярами модулів, мають цей параметр.

Коли фізичний вивід вводу-виводу використовується спеціальною функцією, відповідні параметри HAL is_output та is_opendrain отримують псевдонім спеціальної функції. Наприклад, якщо gpio 1 переймає перший вихід pwmgen 0, то автоматично створюються псевдоніми, такі як hm2_7i92.0.pwmgen.00.out0.invert_output (що посилається на hm2_7i92.0.gpio.001.invert_output). Коли до однієї спеціальної функції підключено більше одного GPIO, додається додатковий .#., щоб налаштування для кожного пов’язаного GPIO можна було встановити окремо. Наприклад, для прошивки SV12IM_2X7I48_72 псевдоніми hm2_5i20.0.pwmgen.00.0.enable.invert_output (що посилається на hm2_5i20.0.gpio.000.invert_output) і hm2_5i20.0.pwmgen.00.1.enable.invert_output (що посилається на hm2_5i20.0.gpio.023.invert_output) створюються обидва.

inm та inmux

inm/inmuxs — це модулі дебаунсингу входу, які підтримують апаратне цифрове фільтрування вхідних контактів. Окрім функції фільтрування входу, модулі inm/inmux підтримують до 4 простих квадратурних лічильників для використання MPG. Квадратурні входи для кодерів MPG від 0 до 3 — це контакти inm/inmux від 0 до 7. Входи MPG A, B використовують постійні часу фільтра, запрограмовані для входів 0..7. Кожен вхідний контакт inm/inmux може мати повільну або швидку константу фільтра. Постійні часу фільтра вказуються в одиницях часу сканування. inms мають назви типу «hm2_<BoardType>.<BoardNum>.inm.<Instance>». inmuxes мають назви типу «hm2_<BoardType>.* <BoardNum>.inmux.*<Instance>". "Instance" — це двозначне число, яке відповідає номеру екземпляра HostMot2 inm або inmux. Існує "num_inms" або numx_inmuxs" екземплярів, починаючи з 00.

Кожен екземпляр зчитує від 8 до 32 вхідних контактів. inm та inmux ідентичні, за винятком назв контактів та фізичного інтерфейсу.

Pins:

вхід та невхід (bit out)

Істинні та інвертовані відфільтровані вхідні стани.

необроблені-вхідні-дані та необроблені-вхідні-дані (bit out)

Істинні та інвертовані нефільтровані вхідні стани.

input-slow (bit in)

Якщо True, вибирається фільтр довготривалої постійної часу для відповідного вхідного біта, якщо False, використовується короткотривала стала часу.

enc0-count,enc1-count,enc2-count,enc3-count (s32 out)

Лічильники MPG від 0 до 3.

enc0-reset,enc1-reset,enc2-reset,enc3-reset (bit in)

Скидання лічильників MPG від 0 до 3, якщо значення true, лічильник примусово встановлюється на 0.

Parameters:

scan_rate (u32 in)

Це встановлює швидкість сканування вхідного сигналу в Гц. Швидкість сканування за замовчуванням становить 20 кГц (період сканування 50 мкс).

fast_scans (u32 in)

Це встановлює швидку постійну часу для всіх вхідних виводів. Це постійна часу, яка використовується, коли вивід input-slow для відповідного входу має значення False. Діапазон становить від 0 до 63 періодів сканування, а значення за замовчуванням дорівнює 5 = 250 мкс при стандартній частоті сканування 20 кГц.

slow_scans (u32 in)

Це встановлює повільну постійну часу для всіх вхідних контактів. Це постійна часу, яка використовується, коли вхідний повільний контакт для відповідного входу має значення True. Діапазон становить від 0 до 1023 періодів сканування, а значення за замовчуванням становить 500 = 25 мс при стандартній частоті сканування 20 кГц.

enc0_4xmode, enc1_4xmode, enc2_4xmode, і enc3_4xmode (bit in)

Вони встановлюють режими роботи MPG-енкодера на 4X, коли значення True, та 1X, коли значення False.

scan_width (u32 out)

Цей параметр, доступний лише для читання, визначає кількість вхідних сигналів, що скануються модулем.

led

Створює виводи HAL для світлодіодів на платі FPGA.

Pins:

CR<NN> (bit in)

Виводи пронумеровані, починаючи з CR01 і вище, з назвою, що відповідає шовкографії друкованої плати. Встановлення біта в "True" або 1 запалює світлодіод.

Твердотільне реле

SSR мають такі імена: «hm2_<BoardType>.<BoardNum>.ssr.<Instance>». Instance — це двозначне число, яке відповідає номеру екземпляра SSR HostMot2. Існує num_ssrs екземплярів, починаючи з 00.

Кожен екземпляр має контакт керування швидкістю та від 1 до 32 вихідних контактів.

Pins:

rate (u32 in)

Встановіть внутрішню частоту екземпляра SSR в Гц (приблизно). Діапазон значень становить від 25 кГц до 25 МГц. Значення нижче мінімального будуть використовувати мінімальне значення, а значення вище максимального будуть використовувати максимальне значення. 1 МГц є типовим значенням, яке підходить для всіх карт Mesa і є значенням за замовчуванням. Встановіть значення 0, щоб вимкнути цей екземпляр SSR.

out-NN (bit in)

Стан NN-го виходу цього екземпляра SSR. Встановіть значення 0, щоб вихідні контакти працювали як розімкнутий перемикач (без з’єднання), встановіть значення 1, щоб вони працювали як замкнутий перемикач.

invert-NN (bit in)

Інвертує стан виходу NN-го екземпляра SSR, за замовчуванням значення дорівнює 0. Коли invert-NN встановлено на 1, вихід SSR NN замикається, коли вихідний вивід NN дорівнює 0, і вимикається, коли вихідний вивід NN дорівнює 1.

OutM Простий вихідний модуль

OutM мають такі імена: «hm2_<BoardType>.<BoardNum>.OutM.<Instance>». Instance — це двозначне число, яке відповідає номеру екземпляра HostMot2 OutM. Існує num_outms екземплярів, починаючи з 00.

Кожен екземпляр має від 1 до 32 вихідних контактів.

Pins:

out-NN (bit in)

Встановлює стан виходу NNth цього екземпляра OutM. Зазвичай вихідний контакт відповідає стану цього виводу, але може бути інвертований виводом HAL invert-nn.

invert-NN (bit in)

Інвертує стан виходу NNth цього екземпляра OutM, за замовчуванням 0. Коли invert-NN встановлено на 1, вихід OutM NN має високий рівень, коли вивід out-NN дорівнює 0, і низький рівень, коли вивід out-NN дорівнює 1.

xy2mod

xy2mod — це інтерфейс гальванометра xy2-100. Він підтримує 16- та 18-бітні режими передачі даних і включає параболічну інтерполяцію для забезпечення оновлення позиції між викликами потоків сервоприводів.

Pins:

posx_cmd, posy_cmd (float in)

Команди позиціонування X та Y. Повна шкала +-posn_scale, за замовчуванням повна шкала (встановлена posx_scale та posy_scale) +- 1

posx_fb, posy_fb (float out)

Зворотний зв’язок щодо положення X та Y. Повна шкала +-posN_scale, за замовчуванням повна шкала +- 1. Це зворотний зв’язок від інтерполятора, а не гальванометра.

velx_cmd, vely_cmd (float in)

Команди швидкості X та Y в одиницях fullscale_position/секунда

velx_fb, vely_fb (float out)

Зворотний зв’язок щодо швидкості X та Y в одиницях повної шкали_позиції/секунда

accx_cmd, accy_cmd (float in)

Команди прискорення X та Y в одиницях fullscale_position/second2

posx_scale, posy_scale (float in)

Це встановлює повний діапазон шкали команди положення та зворотного зв’язку, значення за замовчуванням +/- 1,0.

enable (bit in)

Коли значення False (Хибність), вихідні дані дорівнюють 0, всі значення інтерполятора встановлюються на 0, а прапорці переповнення очищуються. Для нормальної роботи має бути значення True (Істина).

controlx, controly (u32 in)

Вони встановлюють біти керування гальванометром. У 16-бітному режимі на кожен канал припадає 3 біти, але в 18-бітному режимі — лише 1 біт керування, тому в 16-бітному режимі дійсними є значення від 0 до 7, а в 18-бітному режимі — лише 0 і 4.

commandx, commandy (u32 in)

Вони встановлюють необроблені 16-бітні дані, що надсилаються до гальванометра, в командному режимі.

commandmodex, commandmodey (bit in)

Коли ці параметри встановлені, вони активують командний режим, у якому 16-бітні командні дані надсилаються на гальванометр.

18bitmodex, 18bitmodey (bit in)

Коли значення True (Істина), вони вмикають 18-бітний режим даних для відповідного каналу.

posx-overflow, posy-overflow (bit out)

Коли ці значення істинні, це означає спробу переміщення позиції за межі значення повної шкали.

velx-overflow, vely-overflow (bit out)

Якщо значення True (Істина), це вказує на спробу оновлення швидкості, яка виходить за межі повного значення шкали.

status (u32 out)

Необроблений 16-бітний повернений статус від гальванометра.

Parameters:

read-timer-number (s32 in)

Вибирає номер таймера DPLL для попереднього зчитування вибірки регістрів положення та швидкості. Якщо встановлено значення -1, попереднє зчитування вибірки вимкнено.

write-timer-number (s32 in)

Вибирає номер таймера DPLL для оновлення регістрів положення та швидкості після запису. Якщо встановлено значення -1, оновлення після запису вимкнено.

Сторожовий пес

Прошивка HostMot2 може містити модуль сторожового механізму; якщо він є, драйвер hostmot2 використовуватиме його. HAL-представлення сторожового механізму називається "hm2_<BoardType>.<BoardNum>.watchdog".

Сторожовий таймер спочатку перебуває в сплячому та неактивному стані. Після першого доступу до плати за допомогою функції HAL hm2 write() (див. нижче) сторожовий таймер прокидається. Відтепер його потрібно періодично «гладити», інакше він «кусатиметься». «Гладьте» сторожовий таймер за допомогою функції HAL hm2 write().

Коли сторожовий таймер спрацьовує, всі виводи вводу-виводу плати від’єднуються від своїх екземплярів модулів і стають входами з високим імпедансом (підтягнутими до високого рівня), а вся комунікація з платою припиняється. Стан модулів прошивки HostMot2 не порушується (за винятком конфігурації виводів вводу/виводу). Інстанції енкодера продовжують рахувати квадратурні імпульси, а генератори pwm і step продовжують генерувати сигнали (які не передаються на двигуни, оскільки виводи вводу/виводу стали входами).

Скидання сторожового таймера (шляхом очищення виводу has_bit, див. нижче) відновлює зв’язок і скидає виводи вводу/виводу до конфігурації, вибраної під час завантаження.

Якщо прошивка містить сторожовий таймер, будуть експортовані такі об’єкти HAL:

Pins:

has_bit (bit in/out)

True, якщо сторожовий таймер має біт, False, якщо сторожовий таймер не має біта. Якщо сторожовий таймер має біт, а біт has_bit має значення True, користувач може скинути його до False, щоб відновити роботу.

Parameters:

timeout_ns (u32 read/write)

Тайм-аут сторожового пристрою, в наносекундах. Він ініціалізується до 5,000,000 (5 мілісекунд) під час завантаження модуля. Якщо між викликами функції hm2 write() пройде більше часу, сторожовий пристрій спрацює.

Режим RAW

Якщо вказано ключове слово конфігурації "enable_raw", у HAL стають доступними деякі додаткові налагоджувальні контакти. Назви контактів HAL у режимі RAW починаються з "hm2_<BoardType>.<BoardNum>.raw".

Якщо ввімкнено режим Raw, користувач може переглядати та завантажувати прошивку з HAL, а також виводити внутрішній стан драйвера hostmot2 у системний журнал.

Pins:

read_address (u32 in)

Нижні 16 бітів цього коду використовуються як адреса для зчитування.

read_data (u32 out)

Щоразу, коли викликається функція hm2_read(), цей вивід оновлюється значенням .read_address.

write_address (u32 in)

Нижні 16 бітів цього коду використовуються як адреса для запису.

write_data (u32 in)

Це значення, яке потрібно записати до .write_address.

write_strobe (bit in)

Щоразу, коли викликається функція hm2_write(), цей контакт перевіряється. Якщо він має значення True, то значення .write_data записується на адресу .write_address, а .write_strobe знову встановлюється на False.

dump_state (bit in/out)

Зазвичай цей контакт має значення False. Якщо для нього встановлено значення True, драйвер hostmot2 запише своє представлення внутрішнього стану плати в системний журнал і знову встановить для контакту значення False.

Налаштування пристроїв Smart Serial

Дивіться setsserial(9) для ознайомлення з поточним способом встановлення параметрів smart-serial eeprom.

ФУНКЦІЇ

hm2_<BoardType>.<BoardNum>.read-request

На платах з тривалим часом обробки запитів на читання (на момент написання статті це стосується тільки плат Ethernet) ця функція надсилає запит на читання. При використанні декількох плат це може скоротити час виконання сервопотоку. У цьому випадку відповідним порядком потоків буде

addf hm2_7i80.0.read-request
addf hm2_7i80.1.read-request
addf hm2_7i80.0.read
addf hm2_7i80.1.read

що призводить до надсилання запиту на читання на плату 1 перед очікуванням відповіді на запит на читання від плати 0.

hm2_<BoardType>.<BoardNum>.read

Це зчитує лічильники енкодера, зворотні зв’язки ступінчастого генератора та вхідні контакти GPIO з FPGA.

hm2_<BoardType>.<BoardNum>.write

Це оновлює робочі цикли ШІМ, частоти поетапного генератора та виходи GPIO на FPGA. Будь-які зміни в конфігураційних виводах, такі як синхронізація поетапного генератора, інверсії GPIO тощо, також залежать від цієї функції.

hm2_<BoardType>.<BoardNum>.read_gpio

Зчитування вхідних контактів GPIO. Зверніть увагу, що ефект цієї функції є підмножиною ефекту функції .read(), описаної вище. Зазвичай використовується тільки .read(). Єдина причина для виклику цієї функції — якщо ви хочете виконувати операції GPIO в потоці, швидшому за сервопривід. (Ця функція недоступна на 7I43 через обмеження шини EPP.)

hm2_<BoardType>.<BoardNum>.write_gpio

Запишіть регістри керування GPIO та вивідні контакти. Зверніть увагу, що ефект цієї функції є підмножиною ефекту функції .write(), описаної вище. Зазвичай використовується тільки .write(). Єдина причина для виклику цієї функції — якщо ви хочете виконувати операції GPIO швидше, ніж у серво-потоці. (Ця функція недоступна на 7I43 через обмеження шини EPP.)

hm2_<BoardType>.<BoardNum>.trigger-encoders

Ця функція з’явиться тільки в тому випадку, якщо прошивка містить модуль енкодера BiSS, Fanuc або SSI і якщо прошивка не містить модуль hm2dpll (qv) або якщо modparam містить num_dplls=0. Ця функція повинна бути вставлена першою в потік, щоб дані енкодера були готові, коли запускається основна функція hm2_*XXXX.NN.read*. Якщо зчитування енкодера не буде завершено вчасно, з’явиться повідомлення про помилку. Цього можна уникнути, збільшивши швидкість передачі даних. Якщо проблема не зникне і «застарілі» дані є прийнятними, функцію можна розмістити пізніше в потоці, що дозволить виконати повний сервоцикл для передачі даних з пристроїв. Якщо це можливо, краще використовувати синхронну функцію запуску hm2dpll.

ДИВІТЬСЯ ТАКОЖ

hm2_pci(9), hm2_eth(9), hm2_spi(9), hm2_rpspi(9), hm2_7i43(9), hm2_7i90(9)

Документація Mesa для плат вводу/виводу Anything доступна за адресою https://www.mesanet.com.

ЛІЦЕНЗІЯ

GPL