1. Введение

HostMot2 - это конфигурация FPGA, разработанная Mesa Electronics для линейки их плат управления движением Anything I/O . Прошивка с открытым исходным кодом, портативная и гибкая. Она может быть сконфигурирована (во время сборки) с нулевым или более экземплярами (объект, создаваемый во время выполнения) каждого из нескольких модулей: энкодеры (квадратурные счетчики), ШИМ-генераторы и генераторы Step/Dir. Прошивка может быть настроена (во время выполнения) для подключения каждого из этих экземпляров к контактам ввода-вывода (I/O). Контакты ввода-вывода, не управляемые экземпляром модуля, возвращаются к цифровому двунаправленному вводу-выводу общего назначения.

2. Бинарные файлы прошивки

Карты FPGA с 50-контактным разъемом

Несколько предкомпилированных HostMot2 бинарных файлов прошивки доступны для различных плат Anything I/O. Этот список является неполным, проверьте источник hostmot2-firmware программ на предмет актуальных списков прошивок.

  • 3x20 (144 I/O контактов): используя модуль hm2_pci

    • 24 серво каналов

    • 16 серво-каналов плюс 24 генератора step/dir

  • 5I22 (96 I/O контактов): используя модуль hm2_pci

    • 16 серво-каналов

    • 8 серво-каналов плюс 24 генератора step/dir

  • 5I20, 5I23, 4I65, 4I68 (72 I/O контакта): используя модуль hm2_pci

    • 12 серво-каналов

    • 8 серво-каналов плюс 4 генератора step/dir

    • 4 серво-канала плюс 8 генераторов step/dir

  • 7I43 (48 I/O контактов): используя модуль hm2_7i43

    • 8 серво-каналов (8 ШИМ генераторов и 8 энкодеров)

    • 4 серво-канала плюс 4 генератора step/dir

DB25 FPGA карты

Карта 5I25 Superport FPGA предварительно запрограммирована при покупке и не требует бинарной прошивки.

3. Установка прошивки

В зависимости от того, как вы установили LinuxCNC, вам, возможно, придется открыть диспетчер пакетов Synaptic из меню «Система» и установить пакет для вашей карты Mesa. Самый быстрый способ их найти — выполнить поиск «hostmot2» в диспетчере пакетов Synaptic. Отметьте прошивку для установки, затем примените.

4. Загрузка HostMot2

Поддержка LinuxCNC прошивки HostMot2 разделена на общий драйвер под названием hostmot2 и два низкоуровневых драйвера ввода-вывода для плат Anything I/O. Драйверы ввода-вывода низкого уровня — hm2_7i43 и hm2_pci (для всех плат Anything I/O на базе PCI и PC-104/Plus). Сначала необходимо загрузить драйвер hostmot2 с помощью такой команды HAL:

loadrt hostmot2

Смотрите hostmot2(9) man страницу на предмет подробностей.

Драйвер hostmot2 сам по себе ничего не делает, ему нужен доступ к реальным платам, на которых установлена прошивка HostMot2. Драйверы ввода-вывода низкого уровня обеспечивают такой доступ. Драйверы ввода-вывода низкого уровня загружаются такими командами:

loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT
       num_encoders=3 num_pwmgens=3 num_stepgens=1"

Параметры конфигурации описаны на странице man hostmot2.

5. Сторожевой таймер

Прошивка HostMot2 может включать модуль сторожевого таймера; если это так, то драйвер hostmot2 будет использовать его.

LinuxCNC необходимо периодически "гладить сторожевого пса", иначе он "укусит". Функция записи hm2 (см. ниже) заботится о сторожевом таймере.

Когда сторожевой таймер срабатывает, все контакты ввода/вывода платы отключаются от своих экземпляров модуля и становятся входами с высоким импедансом (поднимаются до высокого уровня). Состояние модулей прошивки HostMot2 не нарушается (за исключением конфигурации контактов ввода/вывода). Экземпляры энкодеров продолжают считать квадратурные импульсы, а ШИМ- и шаговые генераторы продолжают генерировать сигналы (которые не передаются на двигатели, поскольку контакты ввода-вывода стали входами).

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

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

5.1. Контакты

  • has_bit - (bit i/o) True, если сторожевой таймер сработал, False, если сторожевой таймер не срабатывал. Если сторожевой таймер сработал и бит has_bit имеет значение True, пользователь может сбросить его на False, чтобы возобновить работу.

5.2. Параметры

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

6. HostMot2 Функции

  • hm2_<BoardType>.<BoardNum>.read — прочитать все входы, обновить входные контакты HAL.

  • hm2_<BoardType>.<BoardNum>.write — записать все данные выходов .

  • hm2_<BoardType>.<BoardNum>.read_gpio — чтение только входных контактов GPIO. (Эта функция недоступна на 7I43 из-за ограничений шины EPP.)

  • hm2_<BoardType>.<BoardNum>.write_gpio — записывает только регистры управления GPIO и выходные контакты. (Эта функция недоступна на 7I43 из-за ограничений шины EPP.)

Note

Вышеупомянутые функции read_gpio и write_gpio обычно не нужны, поскольку биты GPIO считываются и записываются вместе со всем остальным в стандартных функциях чтения и записи, указанных выше, которые обычно выполняются в servo thread.

Функции read_gpio и write_gpio были предусмотрены на случай, если потребуется очень быстрый (часто обновляемый) ввод-вывод. Эти функции должны выполняться в base thread. Если у вас есть в этом необходимость, отправьте электронное письмо и сообщите нам об этом и о том, какое у вас приложение.

7. Распиновка

Драйвер hostmot2 не имеет определенной распиновки. Распиновка берется из прошивки, которую драйвер hostmot2 отправляет на плату Anything I/O. Каждая прошивка имеет разную распиновку, причем распиновка зависит от того, сколько доступных encoders, pwmgen и stepgens используется. Чтобы получить список контактов для вашей конфигурации после загрузки LinuxCNC, введите в окне терминала:

dmesg > hm2.txt

Полученный текстовый файл будет содержать большое количество информации, а также распиновку HostMot2 и любые сообщения об ошибках и предупреждения.

Чтобы уменьшить беспорядок, очистив буфер сообщений перед загрузкой LinuxCNC, введите в окне терминала следующее:

sudo dmesg -c

Теперь, когда вы запускаете LinuxCNC, а затем выполняете команду dmesg > hm2.txt в терминале, в вашем файле будет только информация с момента загрузки LinuxCNC вместе с распиновкой. Файл будет находиться в текущем каталоге окна терминала. Каждая строка будет содержать имя карты, номер карты, номер контакта ввода-вывода, разъем и контакт, а также использование. Из этой распечатки вы узнаете физические подключения к вашей карте в зависимости от вашей конфигурации.

Пример конфигурации 5I20 :

[HOSTMOT2]
DRIVER=hm2_pci
BOARD=5i20
CONFIG="firmware=hm2/5i20/SVST8_4.BIT num_encoders=1 num_pwmgens=1 num_stepgens=3"

Приведенная выше конфигурация создала эту распечатку.

[ 1141.053386] hm2/hm2_5i20.0: 72 I/O Pins used:
[ 1141.053394] hm2/hm2_5i20.0: IO Pin 000 (P2-01): IOPort
[ 1141.053397] hm2/hm2_5i20.0: IO Pin 001 (P2-03): IOPort
[ 1141.053401] hm2/hm2_5i20.0: IO Pin 002 (P2-05): Encoder #0, pin B (Input)
[ 1141.053405] hm2/hm2_5i20.0: IO Pin 003 (P2-07): Encoder #0, pin A (Input)
[ 1141.053408] hm2/hm2_5i20.0: IO Pin 004 (P2-09): IOPort
[ 1141.053411] hm2/hm2_5i20.0: IO Pin 005 (P2-11): Encoder #0, pin Index (Input)
[ 1141.053415] hm2/hm2_5i20.0: IO Pin 006 (P2-13): IOPort
[ 1141.053418] hm2/hm2_5i20.0: IO Pin 007 (P2-15): PWMGen #0, pin Out0 (PWM or Up) (Output)
[ 1141.053422] hm2/hm2_5i20.0: IO Pin 008 (P2-17): IOPort
[ 1141.053425] hm2/hm2_5i20.0: IO Pin 009 (P2-19): PWMGen #0, pin Out1 (Dir or Down) (Output)
[ 1141.053429] hm2/hm2_5i20.0: IO Pin 010 (P2-21): IOPort
[ 1141.053432] hm2/hm2_5i20.0: IO Pin 011 (P2-23): PWMGen #0, pin Not-Enable (Output)
<snip>...
[ 1141.053589] hm2/hm2_5i20.0: IO Pin 060 (P4-25): StepGen #2, pin Step (Output)
[ 1141.053593] hm2/hm2_5i20.0: IO Pin 061 (P4-27): StepGen #2, pin Direction (Output)
[ 1141.053597] hm2/hm2_5i20.0: IO Pin 062 (P4-29): StepGen #2, pin (unused) (Output)
[ 1141.053601] hm2/hm2_5i20.0: IO Pin 063 (P4-31): StepGen #2, pin (unused) (Output)
[ 1141.053605] hm2/hm2_5i20.0: IO Pin 064 (P4-33): StepGen #2, pin (unused) (Output)
[ 1141.053609] hm2/hm2_5i20.0: IO Pin 065 (P4-35): StepGen #2, pin (unused) (Output)
[ 1141.053613] hm2/hm2_5i20.0: IO Pin 066 (P4-37): IOPort
[ 1141.053616] hm2/hm2_5i20.0: IO Pin 067 (P4-39): IOPort
[ 1141.053619] hm2/hm2_5i20.0: IO Pin 068 (P4-41): IOPort
[ 1141.053621] hm2/hm2_5i20.0: IO Pin 069 (P4-43): IOPort
[ 1141.053624] hm2/hm2_5i20.0: IO Pin 070 (P4-45): IOPort
[ 1141.053627] hm2/hm2_5i20.0: IO Pin 071 (P4-47): IOPort
[ 1141.053811] hm2/hm2_5i20.0: registered
[ 1141.053815] hm2_5i20.0: initialized AnyIO board at 0000:02:02.0
Note
Что контакт ввода-вывода nnn будет соответствовать номеру контакта, показанному на экране конфигурации HAL для GPIO. Некоторые из StepGen, Encoder и PWMGen также будут отображаться как GPIO на экране конфигурации HAL.

8. PIN Файлы

Распиновка по умолчанию описана в файле .PIN (читабельный текст). При установке пакета прошивки файлы .PIN устанавливаются в

/usr/share/doc/hostmot2-firmware-<board>/

9. Прошивка

Выбранная прошивка (файл .BIT) и конфигурация загружаются с материнской платы ПК на материнскую карту Mesa при запуске LinuxCNC. Если вы используете Run In Place, вам все равно необходимо установить пакет hostmot2-firmware-<board>. Более подробная информация о прошивке и настройке находится в разделе Конфигурации.

10. HAL Контакты

Контакты HAL для каждой конфигурации можно увидеть, открыв Show HAL Configuration в меню Machine. Там можно найти все контакты и параметры HAL. На следующем рисунке показана конфигурация 5I20, использованная выше.

5i20 HAL Контакты
Figure 1. 5i20 HAL Контакты

11. Конфигурации

Прошивка Hostmot2 доступна в нескольких версиях, в зависимости от того, чего вы пытаетесь достичь. Вы можете получить напоминание о том, для чего нужна конкретная прошивка, посмотрев на название. Давайте посмотрим на пару примеров.

В 7I43 (два порта) SV8 (Servo 8) будет рассчитан на 8 или меньше сервоприводов с использованием классической 4-осевой (на порт) сервоплаты 7I33. Таким образом, 8 сервоприводов будут использовать все 48 сигналов в двух портах. Но если вам нужно только 3 сервопривода, вы можете сказать num_encoders=3 и num_pwmgens=3 и восстановить 5 сервоприводов по 6 сигналов каждый, получив таким образом 30 бит GPIO.

Или, в 5I22 (четыре порта), SVST8_24 (Servo 8, Stepper 24) будет для 8 сервоприводов или меньше (снова 7I33 x2) и 24 шаговых двигателей или меньше (7I47 x2). Это приведет к использованию всех четырех портов. Если вам нужно только 4 сервопривода, вы можете сказать num_encoders=4 и num_pwmgens=4 и восстановить 1 порт (и сохранить 7I33). А если вам нужно всего 12 степперов, вы можете сказать num_stepgens=12 и освободить один порт (и сохранить 7I47). Таким образом, мы можем сохранить два порта (48 бит) для GPIO.

Вот таблицы прошивок, доступных в официальных пакетах. На веб-сайте Mesanet.com могут быть доступны дополнительные прошивки, которые еще не вошли в официальные пакеты прошивок LinuxCNC, поэтому проверьте и их.

3x20 (различные 6 портов) Конфигурации по умолчанию (3x20 поставляется в версиях вентилей 1M, 1,5M и 2M. На данный момент вся прошивка доступна для всех размеров вентилей.)

Прошивка Энкодер PWMGen StepGen GPIO

SV24

24

24

0

0

SVST16_24

16

16

24

0

5I22 (4-порта PCI) Конфигурации по умолчанию (5I22 поставляется в версиях с воротами 1M и 1,5M. На данный момент вся прошивка доступна для всех размеров вентилей.)

Прошивка Энкодер PWM StepGen GPIO

SV16

16

16

0

0

SVST2_4_7I47

4

2

4

72

SVST8_8

8

8

8

0

SVST8_24

8

8

24

0

5I23 (3-порта PCI) Конфигурации по умолчанию (5I23 имеет 400 тыс. вентилей.)

Прошивка Энкодер PWM StepGen GPIO

SV12

12

12

0

0

SVST2_8

2

2

8 (tbl5)

12

SVST2_4_7I47

4

2

4

48

SV12_2X7I48_72

12

12

0

24

SV12IM_2X7I48_72

12 (+IM)

12

0

12

SVST4_8

4

4

8 (tbl5)

0

SVST8_4

8

8

4 (tbl5)

0

SVST8_4IM2

8 (+IM)

8

4

8

SVST8_8IM2

8 (+IM)

8

8

0

SVTP6_7I39

6

0 (6 BLDC)

0

0

5I20 (3-порта PCI) Конфигурации по умолчанию (5I20 имеет 200 тыс. вентилей.)

Прошивка Энкодер PWM StepGen GPIO

SV12

12

12

0

0

SVST2_8

2

2

8 (tbl5)

12

SVST2_4_7I47

4

2

4

48

SV12_2X7I48_72

12

12

0

24

SV12IM_2X7I48_72

12 (+IM)

12

0

12

SVST8_4

8

8

4 (tbl5)

0

SVST8_4IM2

8 (+IM)

8

4

8

4I68 (3-порта PC/104) Конфигурации по умолчанию (4I68 имеет 400 тыс. вентилей.)

Прошивка Энкодер PWM StepGen GPIO

SV12

12

12

0

0

SVST2_4_7I47

4

2

4

48

SVST4_8

4

4

8

0

SVST8_4

8

8

4

0

SVST8_4IM2

8 (+IM)

8

4

8

SVST8_8IM2

8 (+IM)

8

8

0

4I65 (3-порта PC/104) Конфигурации по умолчанию (4I65 имеет 200 тыс. вентилей.)

Прошивка Энкодер PWM StepGen GPIO

SV12

12

12

0

0

SVST8_4

8

8

4

0

SVST8_4IM2

8 (+IM)

8

4

8

7I43 (2 параллельных порта) версии с 400k вентилей, Конфигурации по умолчанию

Прошивка Энкодер PWM StepGen GPIO

SV8

8

8

0

0

SVST4_4

4

4

4 (tbl5)

0

SVST4_6

4

4

6 (tbl3)

0

SVST4_12

4

4

12

0

SVST2_4_7I47

4

2

4

24

7I43 (2 порта, параллельный порт) версии 200k вентилей, конфигурации по умолчанию

Прошивка Энкодер PWM StepGen GPIO

SV8

8

8

0

0

SVST4_4

4

4

4 (tbl5)

0

SVST4_6

4

4

6 (tbl3)

0

SVST2_4_7I47

4

2

4

24

Даже если несколько карт могут иметь одинаково именованные .BIT файлы, вы не можете использовать .BIT файл от другой карты. Разные карты имеют разные тактирующие частоты, так что будьте уверены, что вы используете корректный .BIT файл для вашей карты. Кастомные прошивки hm2 могут быть созданы для специальных приложений и вы можете увидеть некоторые кастомные прошивки в директориях с прошивками по умолчанию.

Когда вы загружаете драйвер карты (hm2_pci или hm2_7i43), вы можете указать запретить экземпляры трех основных модулей (pwmgen, stepgen и encoder) уменьшением количества. Любые контакты ввода/вывода принадлежавших к запрещенным модулям экземпляров становятся вводом/выводом общего назначения (GPIO).

12. GPIO

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

Контакты GPIO имеют имена типа hm2_<BoardType>.<BoardNum>.gpio.<IONum>. IONum — трехзначное число. Сопоставление IONum с разъемом и контактом на этом разъеме записывается в системный журнал при загрузке драйвера и описано в руководстве Mesa для плат Anything I/O.

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

Контакты GPIO по умолчанию являются входами.

12.1. Контакты

  • in - (Bit, Out) Нормальное состояние аппаратного входного контакта. Этот контакт есть как у полных GPIO контактов , так и у контактов ввода/вывода, используемых в качестве входов активными экземплярами модулей.

  • in_not - (Bit, Out) Инвертированное состояние аппаратного входного контакта. Этот контакт есть как у полных GPIO контактов, так и у контактов ввода/вывода, используемых в качестве входов активными экземплярами модулей.

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

12.2. Параметры

  • invert_output — (Bit, RW) Этот параметр имеет эффект только в том случае, если параметр is_output имеет значение true. Если этот параметр имеет значение true, выходное значение GPIO будет обратным значению на контакте HAL out. Этот параметр имеют только полные GPIO контакты и контакты ввода-вывода, используемые в качестве выходов активными экземплярами модуля. Чтобы инвертировать контакт активного модуля, вам необходимо инвертировать контакт GPIO, а не контакт модуля.

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

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

13. StepGen

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

Каждый степгенератор выделяет 2–6 контактов ввода-вывода (выбирается во время компиляции прошивки), но в настоящее время использует только два: выходы Step и Direction. footnote: [В настоящее время прошивка поддерживает выходы многофазных шаговых двигателей, но драйвер этого не делает. Приглашаются заинтересованные добровольцы.]

Представление StepGen смоделировано на основе программного компонента stepgen. По умолчанию StepGen имеет активным высоким выход step (высокий во время длительности импульса, низкий во время паузы). Чтобы инвертировать выходной контакт StepGen, вы инвертируете соответствующий контакт GPIO, который используется StepGen. Чтобы найти контакт GPIO, используемый для вывода StepGen, запустите dmesg, как показано выше.

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

13.1. Контакты

  • control-type - (Bit, In) Переключает между режимом управления положением (0) и режимом управления скоростью (1). По умолчанию управление положением (0).

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

  • enable - (Bit, In) Разрешает вывод импульсов шага. Если установлено значение false, импульсы не генерируются.

  • position-cmd - (Float, In) Целевая позиция пошагового движения в единицах, определяемых пользователем.

  • position-fb - (Float, Out) Положение обратной связи в определяемых пользователем единицах измерения положения (counts/position_scale).

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

  • velocity-fb - (Float, Out) Скорость обратной связи в определяемых пользователем единицах положения в секунду.

13.2. Параметры

  • dirhold - (u32, RW) Минимальная продолжительность стабильного сигнала Direction после окончания импульса шага, в наносекундах.

  • dirsetup - (u32, RW) Минимальная длительность стабильного сигнала Direction перед началом импульса шага, в наносекундах.

  • maxaccel - (Float, RW) Максимальное ускорение, в единицах положения в секунду в секунду. Если установлено значение 0, драйвер не будет ограничивать его ускорение.

  • maxvel - (Float, RW) Максимальная скорость, в единицах положения в секунду. Если установлено значение 0, драйвер будет выбирать максимальную скорость на основе значений Steplen и Stepspace (в то время, когда maxvel был установлен в 0).

  • position-scale - (Float, RW) Преобразует число в единицы положения. position = counts / position_scale

  • step_type - (u32, RW) Формат вывода, аналогичный step_type modparam для программного компонента stepgen(9). 0 = Step/Dir, 1 = Up/Down, 2 = Quadrature. В квадратурном режиме (step_type=2) stepgen выводит один полный цикл Грея (00 -> 01 -> 11 -> 10 -> 00) для каждого принимаемого импульса шага.

  • steplen - (u32, RW) Длительность импульса шага в наносекундах.

  • stepspace - (u32, RW) Минимальный интервал между импульсами шага в наносекундах.

13.3. Выходные параметры

Выводы Step и Direction каждого StepGen имеют два дополнительных параметра. Чтобы определить, какой контакт ввода-вывода принадлежит какому выводу импульсов шага и направления, запустите команду «dmesg», как описано выше.

  • invert_output — (Bit, RW) Этот параметр имеет эффект только в том случае, если параметр is_output имеет значение true. Если этот параметр имеет значение true, выходное значение GPIO будет обратным значению на контакте HAL out.

  • is_opendrain - (Bit, RW) Если этот параметр имеет значение false, GPIO ведет себя как обычный выходной контакт: контакт ввода-вывода на разъеме переключается на значение, указанное контактом HAL out (возможно, инвертированое). Если этот параметр имеет значение true, GPIO ведет себя как контакт с открытым стоком. Запись 0 на контакт HAL out переводит контакт ввода-вывода в низкий уровень, запись 1 на контакт HAL out переводит контакт ввода-вывода в состояние с высоким импедансом. В этом состоянии с высоким импедансом контакт ввода-вывода плавает (слабо подтянут к высокому уровню), и другие устройства могут управлять значением; результирующее значение на контакте ввода-вывода доступно на выводах in и in_not. Этот параметр имеют только полные GPIO контакты и контакты ввода-вывода, используемые в качестве выходов активными экземплярами модуля.

14. PWMGen

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

В HM2 каждый генератор импульсов использует три контакта ввода/вывода: Not-Enable, Out0 и Out1. Чтобы инвертировать выходной контакт PWMGen, вы инвертируете соответствующий контакт GPIO, который используется PWMGen. Чтобы найти контакт GPIO, используемый для контакта PWMGen, запустите dmesg, как показано выше.

Функция контактов ввода/вывода Out0 и Out1 зависит от параметра типа выхода (см. ниже).

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

14.1. Контакты

  • enable - (Bit, In) Если true, pwmgen установит на своем контакте Not-Enable значение false и выдаст свои импульсы. Если enable имеет значение false, pwmgen установит для своего контакта Not-Enable значение true и не будет выводить никаких сигналов.

  • value - (Float, In) Текущее значение команды pwmgen в произвольных единицах измерения.

14.2. Параметры

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

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

  • pdm_ Frequency - (u32, RW) Определяет частоту PDM (в Гц) всех экземпляров pwmgen, работающих в режиме PDM (режим 3). Это «частота импульсного интервала»; частота, на которой генератор PDM на плате Anything I/O выбирает, выдавать ли импульс или пробел. Каждый импульс (и пауза) в последовательности импульсов PDM имеет длительность 1/pdm_frequency секунд. Например, установка pdm_frequency на 2*106 Гц (2 МГц) и рабочего цикла на 50% приводит к прямоугольному сигналу частотой 1 МГц, идентичному сигналу ШИМ с частотой 1 МГц и рабочим циклом 50%. Эффективный диапазон этого параметра составляет примерно от 1525 Гц до чуть менее 100 МГц. Обратите внимание, что максимальная частота определяется частотой ClockHigh платы Anything I/O; 5I20 и 7I43 обе имеют тактовую частоту 100 МГц, что обеспечивает максимальную частоту PDM 100 МГц. Другие платы могут иметь другие тактовые частоты, что приводит к разным максимальным частотам PDM. Если пользователь попытается установить слишком высокую частоту, она будет ограничена максимальной частотой, поддерживаемой платой.

  • pwm_frequency - (u32, RW) Определяет частоту ШИМ в Гц всех экземпляров pwmgen, работающих в режимах ШИМ (режимы 1 и 2). Это частота с переменной скважностью импульсов. Ее эффективный диапазон составляет от 1 Гц до 193 кГц. Обратите внимание, что максимальная частота определяется частотой ClockHigh платы Anything I/O; 5i20 и 7i43 обе имеют тактовую частоту 100 МГц, что обеспечивает максимальную частоту ШИМ 193 кГц. Другие платы могут иметь другие тактовые частоты, что приводит к разным максимальным частотам ШИМ. Если пользователь попытается установить слишком высокую частоту, она будет ограничена максимальной частотой, поддерживаемой платой. Частоты около 5 Гц не очень точны, но выше 5 Гц они довольно близки.

14.3. Выходные параметры

Выходные контакты каждого PWMGen имеют два дополнительных параметра. Чтобы определить, какой контакт ввода-вывода принадлежит какому выходу, запустите dmesg, как описано выше.

  • invert_output — (Bit, RW) Этот параметр имеет эффект только в том случае, если параметр is_output имеет значение true. Если этот параметр имеет значение true, выходное значение GPIO будет обратным значению на контакте HAL out.

  • is_opendrain - (Bit, RW) Если этот параметр имеет значение false, GPIO ведет себя как обычный выходной контакт: контакт ввода-вывода на разъеме переключается на значение, указанное выводом HAL out (возможно, инвертированное). Если этот параметр имеет значение true, GPIO ведет себя как контакт с открытым стоком. Запись 0 на вывод HAL «out» переводит контакт ввода-вывода в низкий уровень, запись 1 на вывод HAL «out» переводит контакт ввода-вывода в состояние с высоким импедансом. В этом состоянии с высоким импедансом контакт ввода-вывода является плавающим (слабо подтянут к высокому уровню), и другие устройства могут управлять значением; результирующее значение на контакте ввода-вывода доступно на контактах in и in_not. Этот параметр имеют только полные GPIO контакты и контакты ввода-вывода, используемые в качестве выходов активными экземплярами модуля.

15. Энкодер

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

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

Представление энкодера hm2 аналогично описанному в Canonical Device Interface (в документе HAL Общий справочник) и компоненту программного кодера. Каждый экземпляр энкодера имеет следующие контакты и параметры:

15.1. Контакты

  • count - (s32, Out) Количество отсчетов энкодера с момента предыдущего сброса.

  • index-enable - (Bit, I/O). Когда этот контакт в True, счетчик (и, следовательно, также позиция) сбрасываются в ноль при следующем индексном импульсе (Phase-Z). В то же время index-enable сбрасывается в ноль, указывая на то, что импульс был.

  • position - (Float, Out) Положение энкодера в единицах положения (count / scale).

  • rawcounts — (s32, Out) Общее количество отсчетов энкодера с момента запуска, без поправки на индекс или сброс.

  • reset - (Bit, In) Когда этот вывод имеет значение TRUE, контакты счета и положения устанавливаются в 0. На значение контакта скорости это не влияет. Драйвер не сбрасывает этот вывод на FALSE после сброса счетчика на 0, это задача пользователя.

  • velocity - (Float, Out) Расчетная скорость энкодера в единицах положения в секунду.

15.2. Параметры

  • counter-mode - (Bit, RW) Установите значение False (по умолчанию) для Quadrature. Установите значение True для Up/Down или для одного входа на Phase A. Может использоваться для преобразователя частоты в скорость с одним входом на Phase A, если установлен в значение true.

  • filter - (Bit, RW) Если установлено значение True (по умолчанию), квадратурному счетчику требуется 15 тактов для регистрации изменения на любой из трех входных линий (любой импульс короче этого значения отвергается как шум). Если установлено значение False, квадратурному счетчику потребуется всего 3 такта для регистрации изменения. Тактовая частота выборки энкодера работает на частоте 33 МГц на картах ввода-вывода PCI Anything I/O и 50 МГц на 7I43.

  • index-invert - (Bit, RW) Если установлено значение True, нарастающий фронт входного контакта индекса запускает событие Index (если index-enable равно true). Если установлено значение False, запускает задний фронт.

  • index-mask - (Bit, RW) Если установлено значение True, входной контакт Index имеет эффект только в том случае, если входной контакт Index-Mask имеет значение True (или False, в зависимости от контакта index-mask-invert ниже) .

  • index-mask-invert - (Bit, RW) Если установлено значение True, Index-Mask должен быть False, чтобы индекс имел эффект. Если установлено значение False, контакт Index-Mask должен быть True.

  • scale - (Float, RW) Преобразует из «счетных» единиц в единицы «позиции». Квадратурный энкодер обычно имеет 4 отсчета на импульс, поэтому энкодер со скоростью 100 PPR будет иметь 400 отсчетов на оборот. В .counter-mode энкодер со скоростью 100 PPR будет иметь 100 отсчетов на оборот, поскольку он использует только нарастающий фронт сигнала A и направление B.

  • vel-timeout - (Float, RW) Когда энкодер движется медленнее, чем один импульс каждый раз, когда драйвер считывает счетчик из FPGA (в функции hm2_read()), скорость оценить труднее. Драйвер может ждать поступления следующего импульса несколько итераций, при этом сообщая о верхней границе скорости энкодера, которую можно точно угадать. Этот параметр определяет, как долго ждать следующего импульса, прежде чем сообщить об остановке энкодера. Этот параметр указывается в секундах.

16. 5I25 Конфигурация

16.1. Прошивка

Прошивка 5I25 поставляется предустановленной для дочерней карты, с которой она приобретена. Таким образом, firmware=xxx.BIT не является частью строки конфигурации hm2_pci при использовании 5I25.

16.2. Конфигурация

Примеры конфигураций плат 5I25/7I76 и 5I25/7I77 включены в раздел Configuration Selector.

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

5I25 + 7I76 карта
#загрузить универсальный драйвер
loadrt hostmot2

# загрузите и настройте драйвер PCI
loadrt hm2_pci config="num_encoders=1 num_stepgens=5 sserial_port_0=0XXX"
5I25 + 7I77 карта
#загрузить универсальный драйвер
loadrt hostmot2

# загрузите и настройте драйвер PCI
loadrt hm2_pci config="num_encoders=6 num_pwmgens=6 sserial_port_0=0XXX"

16.3. SSERIAL Конфигурация

Строка конфигурации sserial_port_0=0XXX устанавливает некоторые параметры для дочерней smart serial карты. Эти параметры индивидуальны для каждой дочерней карты. Дополнительную информацию о точном использовании см. в руководстве Mesa (обычно в разделе SOFTWARE PROCESS DATA MODES) или на странице руководства SSERIAL(9).

16.4. 7I77 Пределы

Minlimit и maxlimit являются границами значения контакта (в данном случае значение аналогового выхода), а Fullscalemax — масштабный коэффициент.

По умолчанию они установлены на аналоговый вход или аналоговый диапазон (скорее всего, в вольтах).

Так, например, для аналоговых выходов 7I77 +-10 В значения по умолчанию следующие:

minlimit: -10
maxlimit: +10
maxfullscale: 10

Если вы хотите масштабировать аналоговый выход канала до IPS для сервопривода в режиме скорости (скажем, максимум 24 IPS), вы можете установить такие ограничения:

minlimit: -24
maxlimit: +24
maxfullscale: 24

Если вы хотите масштабировать аналоговый сигнал канала до числа оборотов в минуту для шпинделя от 0 до 6000 об/мин с управлением 0–10 В, вы можете установить следующие ограничения:

minlimit: 0
maxlimit: 6000
maxfullscale: 6000
(это предотвратит установку нежелательных отрицательных выходных напряжений.)

17. Примеры конфигураций

Несколько примеров конфигураций оборудования Mesa включены в состав LinuxCNC. Конфигурации расположены в разделах hm2-servo и hm2-stepper раздела Configuration Selector. Как правило, вам потребуется плата, установленная для конфигурации, которую вы выбираете для загрузки. Примеры — хорошая отправная точка, они сэкономят вам время. Просто выберите подходящий пример из Configuration Selector LinuxCNC и сохраните копию на своем компьютере, чтобы ее можно было редактировать. Чтобы увидеть точные контакты и параметры, которые предоставила вам ваша конфигурация, откройте окно "Show HAL Configuration" из меню Machine или выполните команду dmesg, как описано выше.