LinuxCNC Documentation
This page is 82% translated. Untranslated text is shown in English.

ИМЯ

hostmot2 — HAL-драйвер LinuxCNC для прошивки Mesa Electronics HostMot2.

СИНОПСИС

См. раздел config modparam ниже для настройки карты Mesa. Обычно хостmot2 загружается без параметров, если не требуется отладка.

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

debug_idrom [по умолчанию: 0]

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

debug_module_descriptors [по умолчанию: 0]

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

debug_pin_descriptors [по умолчанию: 0]

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

debug_modules [по умолчанию: 0]

Только для разработчиков/отладки! Включает ведение журнала отладки используемых модулей HostMot2.

use_serial_numbers [по умолчанию: 0]

При создании контактов HAL для устройств с smart-serial интерфейсом называйте контакты по серийному номеру платы, а не по тому, к какой плате и порту они подключены. Если для этой опции установлено значение 1, контакты будут иметь имена типа hm2_8i20.1234.current, а не hm2_5i23.0.8i20.0.1.current. Идентификатор состоит из последних 4 цифр серийного номера платы, который обычно указан на наклейке на плате. Это сделает конфигурации менее переносимыми, но означает, что платы можно будет повторно подключать менее осторожно.

ОПИСАНИЕ

hostmot2 — это драйвер устройства, который связывает прошивку Mesa или Litehm2 HostMot2 с LinuxCNC HAL. Этот драйвер сам по себе ничего не делает, платы, на которых фактически работает прошивка, требуют собственных драйверов, прежде чем что-либо произойдет. В настоящее время доступны драйверы для карт с интерфейсом PCI, Ethernet, SPI и EPP.

Прошивка HostMot2 предоставляет такие модули, как энкодеры, генераторы ШИМ, генераторы step/dir и контакты ввода-вывода общего назначения (GPIO). Эти вещи называются «Модули». Во время компиляции встроенное ПО настраивается так, чтобы предоставлять ноль или более экземпляров каждого из этих модулей.

Контакты ввода/вывода платы

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

Каждый контакт ввода-вывода во время загрузки драйвера платы может быть настроен для использования одной из двух целей: либо в качестве конкретного контакта конкретного экземпляра модуля (encoder, pwmgen, Stepgen и т. д.), либо в качестве цифрового контакта ввода-вывода общего назначения. По умолчанию все экземпляры модулей включены, и все контакты платы используются экземплярами модуля.

Пользователь может отключить экземпляры модуля во время загрузки драйвера платы, указав modparam строки конфигурации hostmot2. Любые контакты, принадлежащие отключенным экземплярам модуля, автоматически становятся GPIO.

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

config modparam

Все модули драйверов платы (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 [опционально]

    Загрузите прошивку, указанную буквой F, в FPGA на этой плате. Если строка "firmware=F" не указана, FPGA не будет перепрограммироваться, но может продолжать использовать ранее загруженную прошивку.

    Запрошенную прошивку _F_получает программа udev, которая ищет прошивку в системном пути поиска прошивки, обычно /lib/firmware. _F_обычно имеет форму "hm2/<BoardType>/file.bit"; типичное значение _F_может быть "hm2/5i20/SVST8_4.BIT". Файлы прошивки hostmot2 поставляются с пакетами прошивки hostmot2, доступными на 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 [опционально, по умолчанию: ""]

    Указывает, как будет интерпретироваться поток битов от устройства Synchronous Serial интерфейса. Для каждого подключенного устройства должна быть запись. Будут включены только каналы со спецификатором формата (поскольку программное обеспечение не может угадать скорость передачи данных и длину битов).

    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 больше количества генераторов импульсов, доступных в прошивке, плата не сможет зарегистрироваться.

    num_3pwmgens [опционально, по умолчанию: -1]

    Включите только первые N трехфазных pwmgens. Если N равно -1, все 3pwmgen включены. Если N равно 0, pwmgens не включены. Если N больше количества pwmgens, доступных в прошивке, плата не сможет зарегистрироваться.

    num_rcpwmgens [опционально, по умолчанию: -1]

    Включите только первые N pwmgen RC. Если N равно -1, все rcpwmgen включены. Если N равно 0, rcpwmgen’ы не включены. Если N больше количества rcpwmgen, доступного во встроенном ПО, плата не сможет зарегистрироваться.

    num_stepgens [опционально, по умолчанию: -1]

    Включите только первые N stepgens. Если N равно -1, все stepgens включены. Если N равно 0, stepgens не включены. Если N больше количества stepgens, доступных в прошивке, плата не сможет зарегистрироваться.

    num_xy2mods [опционально, по умолчанию: -1]

    Включите только первые N xy2mods. Если N равно -1, все xy2mods включены. Если N равно 0, xy2mods не включены. Если N больше, чем количество модулей xy2, доступных в прошивке, плата не сможет зарегистрироваться.

    stepgen_width [опционально, по умолчанию: 2]

    Используется для маскировки дополнительных, нежелательных контактов Stepgen. Для шаговых приводов обычно требуется только два контакта (step и dir), но Stepgen Hostmot2 может управлять до 8 выходными контактами для специализированных приложений (в зависимости от прошивки). Этот параметр применяется ко всем экземплярам Stepgen. Неиспользуемые замаскированные контакты будут доступны как GPIO.

    sserial_port_N (N = 0 .. 3) [опционально, по умолчанию: 00000000 для всех портов]

    К плате Mesa Anything IOможно подключить до 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 символов, и если она определяет больше режимов, чем каналов на порту, дополнительные параметры игнорируются. Нумерация каналов ведется слева направо, поэтому в приведенном выше примере последовательному устройству 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 [опционально]

    Если указано, включается режим необработанного доступа, в котором пользователь может просматривать и скачивать прошивку из HAL. См. режим Raw ниже.

dpll

Модуль hm2dpll имеет контакты типа "hm2__<BoardType>_.<BoardNum>.dpll". Вполне вероятно, что в будущем количество контактов уменьшится и что некоторые контакты станут параметрами. Этот модуль представляет собой цикл фазовой автоподстройки частоты, который синхронизируется с потоком, в котором установлена функция "чтения" hostmot2 , и запускает другие функции, выделенные для него, в указанное время до или после запуска функции «чтения». Это можно применить к трем типам абсолютных энкодеров, квадратурному энкодеру, stepgen и xy2mod. В случае абсолютных энкодеров это позволяет системе инициировать передачу данных непосредственно перед тем, как драйвер HAL прочитает данные. В случае stepgen, квадратурных энкодеров и 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)

Этот контакт устанавливает базовую частоту системы фазовой автоподстройки частоты. По умолчанию будет установлена номинальная частота потока, в котором работает ФАПЧ, и обычно ее не нужно будет менять.

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

Указывает фазовую ошибку DPLL. Если число циклов сильно колеблется, вполне вероятно, что ФАПЧ не удалось достичь фиксации и необходимо будет внести коррективы.

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

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

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

Устанавливает предел регулировки фазы ФАПЧ. Если значение равно нулю, то ФАПЧ будет работать автономно на базовой частоте независимо от скорости servo thread. Вероятно, это не то, чего вы хотите. По умолчанию 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 Общий справочник) и компоненту программного кодера. Каждый экземпляр энкодера имеет следующие контакты и параметры:

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)

Положение энкодера в единицах положения (count / scale).

position-interpolated (float out)

Интерполированное положение энкодера в единицах положения (count / scale). Действует только тогда, когда скорость приблизительно постоянна, а время между отсчетами меньше значения параметра тайм-аута скорости. Не используйте для контроля положения. Полезно для синхронизированных перемещений шпинделя с энкодерами низкого разрешения.

position-latched (float out)

Зафиксированное положение энкодера в единицах положения (count / scale).

velocity (float out)

Расчетная скорость энкодера в единицах положения в секунду.

velocity-rpm (float out)

Расчетная скорость энкодера в единицах положения в минуту.

reset (bit in)

Когда этот контакт имеет значение True, контакты отсчета и положения устанавливаются на 0 (на значение контакта скорости это не влияет). Драйвер не сбрасывает этот контакт на FALSE после сброса отсчета на 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, Index энкодера

quad-error-enable (bit in)

Когда этот вывод находится в состоянии True, отчет об ошибках квадратуры включен. Когда установлено значение False, существующие квадратурные ошибки удаляются, а отчеты об ошибках отключаются.

quad-error (bit out)

Этот бит указывает на то, что обнаружена ошибка квадратурной последовательности. Его можно установить только в том случае, если соответствующий бит quad-error-enable равен 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, если используются периоды servo thread более 1 мс.

Parameters:

scale (float r/w)

Преобразует единицы «count» в единицы «position».

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-Mask должен иметь значение False, чтобы Index имел эффект. Если установлено значение False, контакт Index-Mask должен иметь значение True.

counter-mode (bit r/w)

Установлено в False (по умолчанию) для квадратуры. Установите значение True для Step/Dir (в этом случае Step находится на контакте A, а Dir — на контакте B).

filter (bit r/w)

Если установлено значение True (по умолчанию), квадратурному счетчику требуется 15 тактов выборки для регистрации изменения на любой из трех входных линий (любой импуль короче этого отклоняется как шум). Если установлено значение False квадратурному счетчику требуется всего 3 такта для регистрации изменения. Стандартная частота выборки энкодера работает примерно на частоте от 25 до 33 МГц но ее можно изменить глобально с помощью контакта sample-frequency или muxed-sample-frequency.

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 в соответствии с настройкой таймера dpll.

Обычно timer-us должно быть отрицательным числом с величиной, большей, чем наибольшая задержка (например, -100 для системы со средней задержкой, -50 для системы с хорошей задержкой). Отрицательное число указывает фиксацию указанного времени до номинального времени чтения Hostmot2.

Если в прошивке FPGA отсутствует модуль DPLL или если модуль энкодера не поддерживает DPLL, то этот контакт не создается.

Если эта функция доступна, ее обычно следует включить. Это обычно уменьшает количество последующих ошибок.

Синхронный последовательный интерфейс (Synchronous Serial Interface (SSI))

(Не путать с интерфейсом Smart Serial Interface )

Для каждого экземпляра SSI создается один контакт независимо от формата данных:

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

Этот контакт будет установлен "True", если модуль все еще передавал данные, когда значение было считано. При наличии этой проблемы в пользовательском интерфейсе также будет выводиться ограниченное количество сообщений об ошибках. Этот контакт следует использовать для отслеживания того, решена ли проблема путем изменения конфигурации

  • the encoder read is being triggered by the hm2dpll phase-locked-loop timer (described above)

  • or by the trigger-encoders function (described below).

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

Это будет интерпретировать младший бит битового потока как контакт битового типа с именем "error", а следующие 24 бита — как счетчик энкодера с кодировкой Грея. Все контакты HAL, связанные с энкодером, начинаются со слова "position".

В строке формата не должно быть пробелов, поскольку они используются в качестве разделителя в коде низкого уровня.

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

Допустимые символы формата и контакты, которые они создают:

p: (Pad)

Не создает никаких выводов, используется для игнорирования ненужных участков потока битов.

b: (Boolean).

(bit, out) hm2_XXXX.N.ssi.MM.<name>.
Если какие-либо биты в назначенной ширине поля не равны нулю, то на контакте HAL будет "True".
(bit, out) hm2_XXXX.N.ssi.MM.<name>-not.
Инвертированная версия вышеприведенного: контакт HAL будет иметь значение "True", если все биты в поле равны нулю.

u: (Unsigned)

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

s: (Signed)

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

f: (bitField)

(bit, out) hm2_XXXX.N.ssi.MM.<name>-NN.
Значение каждого отдельного бита в поле данных. NN начинается с 00 и до количества битов в поле.
(bit, out) hm2_XXXX.N.ssi.MM.<name>-NN-not.
Инвертированная версия значений отдельных битов.

e: (Encoder)

(s32, out) hm2_XXXX.N.ssi.MM.<name>.count.
Младшие 32 бита общего количества импульсов энкодера. Это значение сбрасывается как контактами …​reset, так и контактами …​index-enable.
(s32, out) hm2_XXXX.N.ssi.MM.<name>.rawcounts.
Младшие 32 бита от общего числа отсчётов энкодеров. Контакт не подвержен влиянию reset и index.
(float, out) hm2_XXXX.N.ssi.MM.<name>.position.
Положение энкодера в единицах станка. Рассчитывается на основе полных 64-битных буферов, поэтому будет показывать значение True даже после закольцевания контактов отсчётов. Обнуляется сбросом и разрешением индекса.
(bit, IO) hm2_XXXX.N.ssi.MM.<name>.index-enable.
Если этот контакт установлен в "True", модуль будет ждать, пока необработанные отсчеты энкодера не пройдут через целое число, кратное числу отсчетов, заданному параметром counts-per-rev, а затем он обнуляет контакты отсчётов и позиции , а также устанавливает вывод разрешения индексации обратно в "False" в качестве сигнала системе о том, что "index" пройден. Этот контакт используется для spindle-synchronised движения и index-homing.
(bit, in) (bit, out) hm2_XXXX.N.ssi.MM.<name>.reset.
Когда этот контакт установлен в высокий уровень, контакты отсчетов и положения обнуляются.

h: (Split encoder, high-order bits)

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

l: (Split encoder, low-order bits)

Младшие биты (см. «h»)

g: (Gray-code)

Это модификатор, который указывает, что следующая строка формата закодирована в коде Грея. Это действительно только для энкодеров (e, h l) и типов данных unsigned (u).

m: (Multi-turn)

Это модификатор, указывающий, что следующая строка формата является многооборотным энкодером. Это справедливо только для энкодеров (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: (Pad)

Нет параметров.

b: (Boolean)

Нет параметров.

u: (Unsigned)

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

s: (Signed)

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

f: (bitField)

Нет параметров.

e: (Encoder)

(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 phase-locked-loop timer (описанный выше) или функцией trigger-encoders (описанной ниже).

Имена контактов, созданных модулем BiSS, будут полностью зависеть от строки формата для каждого канала, указанной в командной строке loadrt, и точно соответствовать формату, определенному выше для SSI. В настоящее время пакеты данных длиной до 96 бит поддерживаются драйвером LinuxCNC, хотя модуль Mesa Hostmot2 может обрабатывать 512-битные пакеты. Возможно расширить количество пакетов, поддерживаемых драйвером, если в этом есть необходимость.

Fanuc encoder

The pins and format specifier for this module are identical to the SSI module described above, except that at least one pre-configured format is provided. A modparam of fanuc_chan_N=AA64 (case sensitive) will configure the channel for a Fanuc Aa64 encoder. The pins created are:

hm2XXXX._N.fanuc.MM.batt

indicates battery state

hm2XXXX._N.fanuc.MM.batt-not

inverted version of above

hm2XXXX._N.fanuc.MM.comm

The 0-1023 absolute output for motor commutation

hm2XXXX._N.fanuc.MM.crc

The CRC checksum. Currently HAL has no way to use this

hm2XXXX._N.fanuc.MM.encoder.count

Отсчеты энкодера

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

Simulated index. Set by counts-per-rev parameter

hm2XXXX._N.fanuc.MM.encoder.position

Отсчеты масштабируются по параметру …​scale

hm2XXXX._N.fanuc.MM.encoder.rawcounts

Raw counts, unaffected by reset or index

hm2XXXX._N.fanuc.MM.encoder.reset

If high/True then counts and position = 0

hm2XXXX._N.fanuc.MM.valid

Indicates that the absolute position is valid

hm2XXXX._N.fanuc.MM.valid-not

Инвертированная версия

resolver

Резольверы имеют имена типа hm2_<BoardType>.<BoardNum>.resolver.<Instance>. <Instance> — это двухзначное число, которое для платы 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)

Это идентично контактам отсчетов, за исключением отсутствия сброса от контактов «index» или «reset». Это контакт, который был бы связан с компонентом HAL bldc, если бы резольвер использовался для коммутации двигателя.

reset (bit, in)

Немедленно сбрасывает в ноль контакты положения и отсчетов.

joint-pos-fb (bit, in)

Драйвер резольвера Mesa имеет возможность эмулировать абсолютный энкодер с использованием файла положения (см. раздел руководства по INI-конфигурации ) и однооборотную абсолютную работу резольверов. При запуске и только если для параметра use-position-file установлено значение "True", драйвер резольвера будет ждать записи значения системой на контакт axis.N.joint-pos-fb ( который должен быть подключен к этому выводу резольвера) и рассчитает количество полных оборотов, которое лучше всего соответствует текущему положению резольвера. Затем он предварительно загрузит вывод драйвера с этим смещением. Это следует использовать только в системах, где движение оси в обесточенном состоянии маловероятно. Эта функция будет работать правильно только в том случае, если станок изначально находится в исходном положении "index" и если исходные положения осей равны нулю.

index-enable (bit, in/out)

Если на этом контакте установлен высокий уровень, контакты положения и отсчетов будут сброшены в следующий раз, когда резольвер пройдет через нулевое положение. В то же время на контакте устанавливается низкий уровень, чтобы указать подключенным модулям, что индекс был виден и что счетчики были сброшены.

error (bit, out)

Указывает на ошибку в конкретном канале. Если это значение "True", то сообщаемые положение и скорость недействительны.

Parameters:

scale (float, read/write)

Масштаб позиции, в единицах станка на электрический оборот резольвера.

velocity-scale (float, read/write)

Коэффициент преобразования между скоростью вращения резольвера и скоростью станка. Значение 1 обычно дает скорость двигателя в об/сек, значение 0,01666667 дает (приблизительное) число об/мин.

index-divisor (default 1) (u32, read/write)

Компонент резольвера эмулирует индекс в фиксированной точке цикла sin/cos. Некоторые резольверы имеют несколько циклов на оборот (часто в зависимости от количества пар полюсов подключенного двигателя). LinuxCNC требует индекса один раз за оборот для правильной резьбы и т. д. Этот параметр должен быть установлен на количество циклов на оборот резольвера. ПРЕДУПРЕЖДЕНИЕ: Используемый псевдоиндекс не обязательно будет одинаковым при запуске LinuxCNC. Не ожидайте перезапуска thread после перезапуска 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 (qv) эмулирует абсолютные энкодеры.

pwmgen

pwmgens имеют имена типа "hm2_<BoardType>.<BoardNum>.pwmgen.<Instance>". <Instance> — это двузначное число, соответствующее номеру экземпляра pwmgen HostMot2. Существует "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)

Коэффициент масштабирования для преобразования "value" из произвольных единиц в рабочий цикл: dc = value / scale. Рабочий цикл имеет эффективный диапазон от -1,0 до +1,0 включительно, все, что выходит за пределы этого диапазона, обрезается. Масштаб по умолчанию — 1,0.

output-type (s32 rw)

Это эмулирует аргумент output_type во время загрузки для программного компонента pwmgen. Этот параметр можно изменить во время выполнения, но в большинстве случаев вам, вероятно, захочется установить его при запуске, а затем оставить в покое. Допустимые значения: 1 (PWM на выходе 0 и Direction на выходе 1), 2 (Up на Out0 и Down на Out1), 3 (режим PDM, PDM на Out0 и Dir на Out1) и 4 (Direction на Out0 и PWM на Out1, "для заблокированной противофазы").

offset-mode (bit input)

Когда значение True, режим смещения изменяет поведение ШИМ так, что значение ШИМ, равное 0, приводит к коэффициенту заполнения 50 % на выходе ШИМ, значение -1 приводит к коэффициенту заполнения 0%, а +1 приводит к коэффициенту заполнения 100 % (с масштабированием по умолчанию). Этот режим используется некоторыми электроприводами с ШИМ и преобразователями ШИМ в аналоговый. Обычно сигнал направления в этом режиме не используется.

dither (bit input)

When True, dither causes the PWM output to dither between two adjacent PWM register values at the PWM frequency. This increases the PWM resolution when used for analog output purposes, increasing the maximum resolution from 12 to 16 bits. Dither is only supported with PWMGen firmware version 1 or greater and only affects PWM outputs, not PDM outputs.

В дополнение к параметрам HAL для каждого экземпляра, перечисленным выше, существует несколько параметров HAL, которые влияют на все экземпляры pwmgen:

pwm_frequency (u32 rw)

Этот параметр определяет частоту ШИМ в Гц для всех экземпляров pwmgen, работающих в режимах ШИМ (режимы 1 и 2). Это частотный сигнал с переменной скважностью. Эффективный диапазон составляет от 1 Гц до 386 кГц. Обратите внимание, что максимальная частота определяется частотой ClockHigh платы Anything IO; 5I25 и 7I92 имеют тактовую частоту 200 МГц, что обеспечивает максимальную частоту ШИМ 386 кГц. Другие платы могут иметь другие тактовые частоты, что приводит к разным максимальным частотам ШИМ. Если пользователь попытается установить слишком высокую частоту, она будет ограничена максимально поддерживаемой частотой платы. Частоты ниже 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 МГц, идентичному сигналу ШИМ частотой 1 МГц с коэффициентом заполнения 50 %. Эффективный диапазон этого параметра составляет примерно от 1525 Гц до чуть менее 200 МГц. Обратите внимание, что максимальная частота определяется частотой ClockHigh платы Anything IO; 5I25 и 7I92 имеют тактовую частоту 100 МГц, что обеспечивает максимальную частоту PDM 100 МГц. Другие платы могут иметь другие тактовые частоты, что приводит к разным максимальным частотам PDM. Если пользователь попытается установить слишком высокую частоту, она будет ограничена максимально поддерживаемой частотой платы. Значение pdm_ frequency по умолчанию составляет 20 000 Гц (20 кГц).

3ppwmgen

Трёхфазные ШИМ-генераторы (3pwmgen) предназначены для управления затворами верхнего и нижнего плеч 3-фазного драйвера двигателя. Эта функция включена для поддержки дочерних плат контроллера двигателя Mesa, но может использоваться для непосредственного управления IGBT или аналогичным драйвером. 3pwmgen имеют имена вида "hm2_<BoardType>.<BoardNum>.3pwmgen.<Instance>", где <Instance> — двузначное число. Всего будет создано num_3pwmgens экземпляров, начиная с 00. Каждый экземпляр выделяет 7 выходных и один входной контакты на разъёмах платы Mesa. Выходы: PWM A, PWM B, PWM C, /PWM A, /PWM B, /PWM C, Enable. Первые три контакта — это драйверы верхнего плеча, вторые три — их комплементарные драйверы нижнего плеча. Бит разрешения предназначен для управления сервоусилителем. Входной бит представляет собой бит неисправности, обычно подключаемый к датчику перегрузки по току. Установка этого бита отключает ШИМ-генератор. Коэффициенты заполнения трёх фаз регулируются индивидуально в диапазоне от -Scale до +Scale. Обратите внимание, что 0 соответствует коэффициенту заполнения 50%, и это инициализирующее значение.

Pins:

A-value, B-value, C-value (float input)

Значение команды ШИМ для каждой фазы, ограниченное +/- "scale". По умолчанию установлено нулевое значение, что соответствует рабочему циклу 50 % на контактах верхнего и нижнего плеча (но см. параметр "deadtime").

enable (bit input)

При высоком уровне ШИМ включен до тех пор, пока бит неисправности не установлен внешним входным контактом неисправности. При низком уровне ШИМ отключается, при этом драйверы как верхнего, так и нижнего плеча находятся в низком состоянии. Это не то же самое, что выходной сигнал 0 (50% рабочий цикл на обоих наборах контактов) или отрицательная полная шкала (когда драйверы нижнего плеча "включены" 100% времени).

fault (bit output)

Указывает состояние бита неисправности. Этот выход фиксируется на высоком уровне после установки контакта физической неисправности до тех пор, пока на выводе "enable" не будет установлен высокий уровень.

Parameters:

deadtime (u32 rw)

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

scale (float rw)

Устанавливает полумасштаб указанного 3-фазного генератора ШИМ. Допустимы значения ШИМ от -scale до +scale. По умолчанию +/- 1,0

fault-invert (bit rw)

Устанавливает полярность входного контакта неисправности. Значение 1 означает, что неисправность возникает при высоком уровне контакта, а 0 означает, что неисправность возникает при низком уровне контакта. По умолчанию 0, неисправность = низкий уровень, поэтому ШИМ работает с неподключенным контактом неисправности.

sample-time (u32 rw)

Устанавливает время в течение цикла, когда генерируется импульс АЦП. 0 = начало цикла ШИМ и 1 = конец. В настоящее время бесполезно для LinuxCNC. По умолчанию 0,5.

В дополнение к параметрам для каждого экземпляра, указанным выше, есть следующий параметр, который влияет на все экземпляры:

frequency (u32 rw)

Устанавливает основную частоту ШИМ. Максимум составляет около 48 кГц, минимум — 1 кГц. По умолчанию 20 кГц.

oneshot

Oneshot — это аппаратное устройство oneshot, подходящее для различных функций синхронизации, задержки, обработки сигнала, генерации ШИМ и сторожевого таймера. Модуль oneshot включает в себя 2 таймера, чтобы обеспечить переменные задержки импульсов для таких приложений, как управление фазой. Источниками триггера могут быть программное обеспечение, внешние входы, таймер DPLL, встроенный генератор частоты или другой таймер. Oneshot имеют имена типа "hm2_<BoardType>.<BoardNum>.oneshot.<Instance>", где <Instance> — двузначное число. Будет num_oneshots экземпляров, начиная с 00. Каждый экземпляр выделяет до двух входных и двух выходных контактов.

Pins:

width1 (float rw)

Устанавливает длительность импульса таймера 1 в мс. По умолчанию — 1 мс (1/1000 с).

width2 (float rw)

Устанавливает длительность импульса таймера 2 в мс. По умолчанию — 1 мс (1/1000 с).

filter1 (float rw)

Устанавливает постоянную времени цифрового фильтра для входа внешнего триггера timer1. Время фильтра указывается в мс. Постоянная времени фильтра по умолчанию составляет 0,1 мс. Реакция внешнего триггера будет задержана настройкой времени фильтра.

filter2 (float rw)

Устанавливает постоянную времени цифрового фильтра для входа внешнего триггера timer2. Время фильтра указывается в мс. Постоянная времени фильтра по умолчанию составляет 0,1 мс. Реакция внешнего триггера будет задержана настройкой времени фильтра.

rate (float rw)

Устанавливает частоту встроенного генератора частоты (в Гц)

trigger_select1,trigger_select2 (u32 rw)

Устанавливает источник запуска для timer1 и timer2 соответственно. Источниками запуска являются:

0 Триггер отключен
1 Программный триггер: срабатывает, когда на контакте hal swtrigger1 установлено значение true
2 Внешнее оборудование: триггер
3 Триггер DPLL: запускается выбранным таймером DPLL
4 Триггер скорости: запускается встроенным генератором скорости.
5 Триггер timer1: запускается выходом timer1
6 Триггер timer2: запускается выходом timer2
trigger_on_rise1, trigger_on_rise2 (bit rw)

Если true, timer1 и timer2 запускаются соответственно по фронту источника запуска.

trigger_on_fall1, trigger_on_fall2 (bit rw)

Когда true, timer1 и timer2 запускаются соответственно по срезу источника запуска.

retriggerable1, retriggerable2 (bit rw)

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

enable1, enable2 (bit rw)

Разрешение триггера для timer1 и timer2 соответственно True для включения.

reset1, reset2 (bit rw)

Если true, сбрасывает timer1 и timer2 соответственно, прерывая любой текущий импульс.

out1,out2 (bit ro)

Биты состояния импульсного выхода для timer1 и timer2.

exttrigger1, exttrigger2 (bit ro)

Биты состояния внешнего триггерного входа для timer1 и timer2. Они контролируют отфильтрованные входы.

swtrigger1, swtrigger2 (bit rw)

Программные триггерные входы для запуска timer1 и timer2.

periodm

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)

Количество periods/widths для усреднения. От 1 до 4095. Скорость обновления period, width, duty cycle, и frequency будет являться входной частотой/усреднения.

frequency (float r)

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

minimum_frequency (float w)

Минимальная входная частота в Гц. Если входная частота ниже этого порога, бит достоверности будет сброшен.

filtertc_us (float w)

Входной сигнал periodm обрабатывается цифровым фильтром для подавления шума. Постоянная времени этого фильтра устанавливается через этот контакт в единицах микросекунд. Импульсы короче этой постоянной времени не будут распознаваться.

valid (bit out)

Действительный выходной бит в true, когда присутствует входной сигнал и входная частота превышает настройку минимальной частоты.

invert (bit in)

Бит инвертирования устанавливает входную полярность. Когда false, вход является прямым, что означает, что время высокого уровня входа определяет ширину. Если установлено значение true, вход инвертируется, поэтому время низкого уровня входа будет определять ширину.

input_status (bit out)

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

rcpwmgen

rcpwmgen — это простой генератор ШИМ, оптимизированный для использования со стандартными сервоприводами RC, которые используют ширину импульса для определения положения. У rcpwmgen есть имена типа "hm2_<BoardType>.<BoardNum>.rcpwmgen.<Instance>", где <Instance> — двузначное число. Будет num_rcpwmgens-множество экземпляров, начиная с 00. Каждый экземпляр выделяет один выходной контакт. В отличие от стандартного генератора ШИМ, выход rcpwmgen указывается шириной, а не рабочим циклом, поэтому ширина импульса не зависит от рабочей частоты. Разрешение составляет приблизительно 1/2000 для стандартных сервоприводов RC с диапазоном от 1 до 2 мс.

Pins:

rate (float rw)

Устанавливает частоту ШИМ ведущего RC. Максимум — 1 кГц, минимум — 0.01 Гц. По умолчанию 50 Гц.

width (float rw)

Устанавливает ширину импульса для каждого канала в (ms/scale).

offset (float rw)

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

scale (float rw)

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

stepgen

stepgen’ы имеют имена типа "hm2_<BoardType>.<BoardNum>.stepgen.<Instance>". <Instance> — это двузначное число, которое соответствует номеру экземпляра Stepgen HostMot2. Существует "num_stepgens"-множество экземпляров, начиная с 00.

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

Каждый stepgen использует от 2 до 8 контактов ввода-вывода. Сигналы на этих выводах зависят от параметра Step_type (описанного ниже).

Представление Stepgen смоделировано на основе программного компонента Stepgen. Каждый экземпляр Stepgen имеет следующие контакты и параметры:

Pins:

position-cmd (float input)

Целевое положение шагового движения, в произвольных единицах положения. Этот контакт используется только тогда, когда шаговый генератор находится в режиме управления положением (control-type=0).

velocity-cmd (float input)

Целевая скорость шагового движения в произвольных единицах положения в секунду. Этот контакт используется только тогда, когда stepgen находится в режиме управления скоростью (control-type=1).

counts (s32 output)

Положение обратной связи в отсчетах (количество шагов).

position-fb (float output)

Положение обратной связи в масштабированных единицах положения. Это похоже на «counts/position_scale», но имеет более точное разрешение, чем шаг.

position-latched (float output)

latched-position в масштабированных единицах положения. Это похоже на «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. Полезно для шпинделей с step/dir управлением при переключении между режимами шпинделя и сочленения.

control-type (bit input)

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

index-enable (bit in/out)

Когда этот контакт в True, счетчик шагов (и, следовательно, также положение) сбрасывается в ноль при следующем импульсе индекса stepgen. В то же время index-enable сбрасывается в ноль, указывая на то, что импульс произошел.

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, драйвер всегда будет использовать максимально возможную скорость, основанную на текущем времени шага и position-scale. Максимальная скорость изменится, если изменится время шага или position-scale. По умолчанию 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)

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

dirhold (u32 r/w)

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

step_type (u32 r/w)

Выходной формат, такой же как modparam step_type для программного компонента stepgen(9) : 0 = Step/Dir, 1 = Up/Down, 2 = Quadrature, 3+ = режим table-lookup. В этом режиме параметр step_type определяет длину последовательности импульсов шага. Кроме того, параметр stepgen_width в строке конфигурации loadrt должен быть установлен в соответствии с требуемым количеством контактов stepgen. Любые контакты Stepgen выше этого номера будут доступны для GPIO. По умолчанию эта маска равна 2. Максимальная длина — 16. Обратите внимание, что режим Table включен не во всех прошивках, но если вы видите GPIO контакты между экземплярами Stepgen в dmesg/log списке аппаратных контактов , тогда эта опция может быть доступна.

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

swap_step_dir (bit input)

Это поменяет местами выходные данные шага и направления выбранного stepgen. Этот параметр доступен только в том случае, если прошивка поддерживает эту опцию.

table-data-N (u32 r/w)

Существует 4 параметра table-data--N : от table-data-0 до table-data-3. Каждый из них содержит 4 байта, соответствующие 4 этапам последовательности шагов. Например, table-data-0 = 0x00000001 установит контакт Stepgen 0 (всегда называемый "Step" в выводе dmesg) на первой фазе последовательности импульсов шагов, а table-data-4 = 0x20000000 установит контакт Stepgen 6 ("Table5Pin" в выводе dmesg) на 16-й фазе последовательности шагов.

hm2_XXXX.N.stepgen.timer-number (по умолчанию: -1) (s32 r/w)

Устанавливает экземпляр таймера hm2dpll, который будет использоваться для фиксации отсчетов stepgen. Настройка -1 не фиксирует количество отсчетов. Установка 0 фиксирует одновременно с основным чтением hostmot2. При настройке 1..4 используется смещение по времени от основного чтения hostmot2 в соответствии с настройкой dpll параметра timer-us .

Обычно timer-us должно быть отрицательным числом с величиной, большей, чем наибольшая задержка (например, -100 для системы со средней задержкой, -50 для системы с хорошей задержкой). Отрицательное число указывает фиксацию указанного времени до номинального времени чтения Hostmot2.

Если в прошивке FPGA отсутствует модуль DPLL или модуль Stepgen не поддерживает DPLL, то этот контакт не создается.

Если эта функция доступна, ее обычно следует включить. Это обычно уменьшает количество последующих ошибок.

Smart Serial Interface

Smart Serial Interface позволяет подключать к одной карте FPGA до 32х различных устройств, таких как трехфазный привод Mesa 8i20 мощностью 2,2 кВт или 48-контактные карты ввода-вывода 7I64. Драйвер автоматически определяет подключенный порт оборудования, канал и тип устройства. Устройства можно подключать в любом порядке к любому активному каналу активного порта (см. определение config 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_<имя платы>.<индекс платы>.bspi.<индекс>, например, 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 доступен).

Представление hm2 GPIO смоделировано по образцу цифровых входов и цифровых выходов, описанных в интерфейсе устройств Canonical (часть документа HAL Общая Справка). Каждый GPIO может иметь следующие контакты HAL:

in & in_not (bit out)

Состояние (нормальное и инвертированное) аппаратного входного контакта. Эти контакты есть как у полных контактов GPIO, так и у контактов ввода-вывода, используемых в качестве входов экземплярами активного модуля.

out (bit in)

Значение, которое будет записано (возможно, инвертировано) на аппаратный выходной контакт. Этот контакт есть только у полных контактов GPIO.

Каждый GPIO может иметь следующие параметры:

is_output (bit r/w)

Если установлено значение 0, GPIO является входом. Контакт ввода-вывода переводится в состояние с высоким импедансом (слабо поддянут вверх), чтобы он мог управляться другими устройствами. Логическое значение на выводе IO доступно на контактах HAL «in» и «in_not». Запись на выходной контакт HAL не оказывает никакого эффекта. Если для этого параметра установлено значение 1, GPIO является выходом; тогда его поведение зависит от параметра «is_opendrain». Этот параметр есть только у полных контактов GPIO.

is_opendrain (bit r/w)

Этот параметр имеет эффект только в том случае, если параметр "is_output" имеет значение True. Если этот параметр имеет значение False, GPIO ведет себя как обычный выходной контакт: вывод IO на разъеме получает значение, указанное выводом HAL out (возможно, инвертированное), а значение "in" и "in_not" контаков HAL не определено. Если этот параметр имеет значение True, GPIO ведет себя как контакт с открытым стоком. Запись 0 на контакт HAL "out" переводит вывод IO в низкий уровень, запись 1 на контакт HAL out переводит контакт IO в состояние с высоким импедансом. В этом состоянии высокого импеданса контакт ввода-вывода является плавающим (слабо подтянут вверх), и другие устройства могут управлять этим значением; результирующее значение на контакте IO доступно на выводах "in" и "in_not". Этот параметр имеют только полные контакты GPIO и контакты ввода-вывода, используемые в качестве выходов активными экземплярами модуля.

invert_output (bit r/w)

Этот параметр имеет эффект только в том случае, если параметр "is_output" имеет значение True. Если этот параметр имеет значение True, выходное значение GPIO будет обратным значению на "out" контакте HAL. Этот параметр имеют только полные контакты 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 простых квадратурных счетчиков для использования РГИ. Квадратурные входы для энкодеров РГИ от 0 до 3 представляют собой контакты inm/inmux от 0 до 7. Входы РГИ A, B используют постоянные времени фильтра, запрограммированные для входов 0–7. Каждый входной контакт inm/inmux может иметь медленную или быструю константу фильтра. Постоянные времени фильтра указаны в единицах времени сканирования. inm имеют имена типа "hm2_<BoardType>..<BoardNum>.inm.<Instance>". inmux’ы имеют имена типа "hm2_<BoardType>.<BoardNum>.inmux.<Instance>". "Instance" — это двузначное число, соответствующее номеру экземпляра HostMot2 inm или inmux. Существуют экземпляры «num_inms» или numx_inmuxs, начинающиеся с 00.

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

Pins:

input and input-not (bit out)

Прямые и инвертированные фильтрованные входные состояния.

raw-input and raw-input-not (bit out)

Прямые и инвертированные нефильтрованные входные состояния.

input-slow (bit in)

Если True, выбирается фильтр длинной постоянной времени для соответствующего входного бита, если False, используется короткая постоянная времени.

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

Счетчики РГИ от 0 до 3.

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

Сброс счетчиков РГИ от 0 до 3, счетчик принудительно устанавливается на 0, если true.

Parameters:

scan_rate (u32 in)

Устанавливает частоту входного сканирования в Гц. Частота сканирования по умолчанию составляет 20 кГц (период сканирования 50 мкс).

fast_scans (u32 in)

Это устанавливает быструю постоянную времени для всех входных контактов. Это постоянная времени, используемая, когда input-slow контакт для соответствующего входа имеет значение False. Диапазон составляет от 0 до 63 периодов сканирования, значение по умолчанию 5 = 250 мкс при scan_rate 20 кГц по умолчанию.

slow_scans (u32 in)

Это устанавливает медленную постоянную времени для всех входных контактов. Это постоянная времени, используемая, когда вывод input-slow для соответствующего входа имеет значение True. Диапазон составляет от 0 до 1023 периодов сканирования, а значение по умолчанию 500 = 25 мс при scan_rate по умолчанию 20 кГц.

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

Они устанавливают режимы работы энкодера РГИ на 4X в случае True и 1X в случае False.

scan_width (u32 out)

Этот параметр только для чтения определяет количество входов, сканируемых модулем.

СИД (led)

Создает контакты HAL для светодиодов на плате FPGA.

Pins:

CR<NN> (bit in)

Контакты пронумерованы от CR01 по возрастанию, а имя соответствует шелкографии на печатной плате. Установка бита в «True» или 1 зажигает светодиод.

Твердотельное реле (Solid State Relay)

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, выход NN SSR замкнут, когда вывод out-NN равен 0, и разомкнут, когда вывод out-NN равен 1.

OutM Простой модуль вывода

OutM имеют имена типа "hm2_<BoardType>.<BoardNum>.OutM.<Instance>". Instance — это двузначное число, которое соответствует номеру экземпляра HostMot2 OutM. Существует num_outms экземпляров, начиная с 00.

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

Pins:

out-NN (bit in)

Устанавливает состояние NN-го выхода этого экземпляра OutM. Обычно выходной контакт соответствует состоянию этого контакта , но может быть инвертирован контактом HAL invert-nn.

invert-NN (bit in)

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

xy2mod

xy2mod — это интерфейс гальванометра xy2-100. Он поддерживает 16- и 18-битные режимы данных и включает параболическую интерполяцию для обеспечения обновления положения между вызовами servo thread.

Pins:

posx_cmd, posy_cmd (float in)

Команды положения X и Y. Полный масштаб равен +-posn_scale. Полный масштаб по умолчанию (устанавливается posx_scale и posi_scale) равен +- 1

posx_fb, posy_fb (float out)

Обратная связь по положению X и Y. Полная шкала +-posN_scale по умолчанию полная шкала +- 1. Это обратная связь от интерполятора, а не от гальванометра.

velx_cmd, vely_cmd (float in)

Команды скорости X и Y в единицах fullscale_position/second

velx_fb, vely_fb (float out)

Обратная связь по скорости X и Y в единицах fullscale_position/second

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 управляющий бит, поэтому значения от 0 до 7 действительны в 16-битном режиме, но только 0 и 4 действительны в 18-битном режиме.

commandx, commandy (u32 in)

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

commandmodex, commandmodey (bit in)

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

18bitmodex, 18bitmodey (bit in)

Если установлено значение True, они включают режим 18-битных данных для соответствующего канала.

posx-overflow, posy-overflow (bit out)

Когда true, это указывает на попытку перемещения позиции за пределы значения полной шкалы.

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 не нарушено (кроме конфигурации выводов IO). Экземпляры энкодеров продолжают считать квадратурные импульсы, а ШИМ- и шаговые генераторы продолжают генерировать сигналы (которые не передаются на двигатели, поскольку контакты ввода-вывода стали входами).

Сброс сторожевого таймера (путем сброса контакта has_bit, см. ниже) возобновляет связь и сбрасывает контакты ввода-вывода в конфигурацию, выбранную во время загрузки.

Если прошивка включает сторожевой таймер, будут экспортированы следующие объекты HAL:

Pins:

has_bit (bit in/out)

True, если сторожевой таймер укусил, False, если сторожевой таймер не укусил. Если сторожевой таймер имеет бит и бит has_bit имеет значение True, пользователь может сбросить его на False, чтобы возобновить работу.

Parameters:

timeout_ns (u32 read/write)

Тайм-аут сторожевого таймера в наносекундах. Он инициализируется значением 5000000 (5 миллисекунд) во время загрузки модуля. Если между вызовами функции hm2 write() пройдет больше этого времени, сторожевой таймер сработает.

Необработанный режим (Raw Mode)

Если указано ключевое слово конфигурации "enable_raw", некоторые дополнительные контакты отладки становятся доступными в HAL. Имена выводов HAL в необработанном режиме начинаются с "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

См. setserial(9) для текущего способа установки параметров eeprom smart-serial.

FUNCTIONS

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

На платах с длительным временем ожидания чтения (на момент написания это относится только к платам Ethernet) эта функция отправляет запрос на чтение. При использовании нескольких плат это может сократить время выполнения servo thread. В этом случае соответствующий порядок потоков будет таким

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

Это считывают счетчики энкодера, сигналы обратной связи stepgen и входные контакты 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 I/O доступна по адресу https://www.mesanet.com.

LICENSE

GPL