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

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 - (bool i/o) True if the watchdog has bit, False if the watchdog has not bit. If the watchdog has bit and the has_bit bool is True, the user can reset it to False to resume operation.

5.2. Параметры

  • timeout_ns - (uint read/write) Watchdog timeout, in nanoseconds. This is initialized to 5,000,000 (5 milliseconds) at module load time. If more than this amount of time passes between calls to the hm2 write function, the watchdog will bite.

6. HostMot2 Функции

  • hm2_<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 - (bool, out) Normal state of the hardware input pin. Both full GPIO pins and I/O pins used as inputs by active module instances have this pin.

  • in_not - (bool, out) Inverted state of the hardware input pin. Both full GPIO pins and I/O pins used as inputs by active module instances have this pin.

  • out - (bool, in) Value to be written (possibly inverted) to the hardware output pin. Only full GPIO pins have this pin.

12.2. Параметры

  • invert_output - (bool, rw) This parameter only has an effect if the is_output parameter is true. If this parameter is true, the output value of the GPIO will be the inverse of the value on the out HAL pin. Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter. To invert an active module pin you have to invert the GPIO pin not the module pin.

  • is_opendrain - (bool, rw) This parameter only has an effect if the is_output parameter is true. If this parameter is false, the GPIO behaves as a normal output pin: the I/O pin on the connector is driven to the value specified by the out HAL pin (possibly inverted), and the value of the in and in_not HAL pins is undefined. If this parameter is true, the GPIO behaves as an open-drain pin. Writing 0 to the out HAL pin drives the I/O pin low, writing 1 to the out HAL pin puts the I/O pin in a high-impedance state. In this high-impedance state the I/O pin floats (weakly pulled high), and other devices can drive the value; the resulting value on the I/O pin is available on the in and in_not pins. Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter.

  • is_output - (bool, rw) If set to 0, the GPIO is an input. The I/O pin is put in a high-impedance state (weakly pulled high), to be driven by other devices. The logic value on the I/O pin is available in the in and in_not HAL pins. Writes to the out HAL pin have no effect. If this parameter is set to 1, the GPIO is an output; its behavior then depends on the is_opendrain parameter. Only full GPIO pins have this parameter.

13. StepGen

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 - (bool, in) Switches between position control mode (0) and velocity control mode (1). Defaults to position control (0).

  • counts - (sint, out) Feedback position in counts (number of steps).

  • enable - (bool, in) Enables output steps. When false, no steps are generated.

  • position-cmd - (real, in) Target position of stepper motion, in user-defined position units.

  • position-fb - (real, out) Feedback position in user-defined position units (counts / position_scale).

  • velocity-cmd - (real, in) Target velocity of stepper motion, in user-defined position units per second. This pin is only used when the stepgen is in velocity control mode (control-type=1).

  • velocity-fb - (real, out) Feedback velocity in user-defined position units per second.

13.2. Параметры

  • dirhold - (uint, rw) Minimum duration of stable Direction signal after a step ends, in nanoseconds.

  • dirsetup - (uint, rw) Minimum duration of stable Direction signal before a step begins, in nanoseconds.

  • maxaccel - (real, rw) Maximum acceleration, in position units per second per second. If set to 0, the driver will not limit its acceleration.

  • maxvel - (real, rw) Maximum speed, in position units per second. If set to 0, the driver will choose the maximum velocity based on the values of steplen and stepspace (at the time that maxvel was set to 0).

  • position-scale - (real, rw) Converts from counts to position units. position = counts / position_scale

  • step_type - (uint, rw) Output format, like the step_type modparam to the software stepgen(9) component. 0 = Step/Dir, 1 = Up/Down, 2 = Quadrature. In Quadrature mode (step_type=2), the stepgen outputs one complete Gray cycle (00 -> 01 -> 11 -> 10 -> 00) for each step it takes.

  • steplen - (uint, rw) Duration of the step signal, in nanoseconds.

  • stepspace - (uint, rw) Minimum interval between step signals, in nanoseconds.

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

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

  • invert_output - (bool, rw) This parameter only has an effect if the is_output parameter is true. If this parameter is true, the output value of the GPIO will be the inverse of the value on the out HAL pin.

  • is_opendrain - (bool, rw) If this parameter is false, the GPIO behaves as a normal output pin: the I/O pin on the connector is driven to the value specified by the out HAL pin (possibly inverted). If this parameter is true, the GPIO behaves as an open-drain pin. Writing 0 to the out HAL pin drives the I/O pin low, writing 1 to the out HAL pin puts the I/O pin in a high-impedance state. In this high-impedance state the I/O pin floats (weakly pulled high), and other devices can drive the value; the resulting value on the I/O pin is available on the in and in_not pins. Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter.

14. PWMGen

PWMgens имеют имена типа hm2_<BoardType>.<BoardNum>.pwmgen.<Instance>. Instance — это двузначное число, соответствующее номеру экземпляра 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 - (bool, in) If true, the pwmgen will set its Not-Enable pin false and output its pulses. If enable is false, pwmgen will set its Not-Enable pin true and not output any signals.

  • value - (real, in) The current pwmgen command value, in arbitrary units.

14.2. Параметры

  • output-type - (sint, rw) This emulates the output_type load-time argument to the software pwmgen component. This parameter may be changed at runtime, but most of the time you probably want to set it at startup and then leave it alone. Accepted values are 1 (PWM on Out0 and Direction on Out1), 2 (Up on Out0 and Down on Out1), 3 (PDM mode, PDM on Out0 and Dir on Out1), and 4 (Direction on Out0 and PWM on Out1, for locked antiphase).

  • scale - (real, rw) Scaling factor to convert value from arbitrary units to duty cycle: dc = value / scale. Duty cycle has an effective range of -1.0 to +1.0 inclusive, anything outside that range gets clipped.

  • pdm_frequency - (uint, rw) This specifies the PDM frequency, in Hz, of all the pwmgen instances running in PDM mode (mode 3). This is the pulse slot frequency; the frequency at which the pdm generator in the Anything I/O board chooses whether to emit a pulse or a space. Each pulse (and space) in the PDM pulse train has a duration of 1/pdm_frequency seconds. For example, setting the pdm_frequency to 2*106 Hz (2 MHz) and the duty cycle to 50% results in a 1 MHz square wave, identical to a 1 MHz PWM signal with 50% duty cycle. The effective range of this parameter is from about 1525 Hz up to just under 100 MHz. Note that the max frequency is determined by the ClockHigh frequency of the Anything I/O board; the 5I20 and 7I43 both have a 100 MHz clock, resulting in a 100 MHz max PDM frequency. Other boards may have different clocks, resulting in different max PDM frequencies. If the user attempts to set the frequency too high, then it will be clipped to the max supported frequency of the board.

  • pwm_frequency - (uint, rw) This specifies the PWM frequency, in Hz, of all the pwmgen instances running in the PWM modes (modes 1 and 2). This is the frequency of the variable-duty-cycle wave. Its effective range is from 1 Hz up to 193 kHz. Note that the max frequency is determined by the ClockHigh frequency of the Anything I/O board; the 5i20 and 7i43 both have a 100 MHz clock, resulting in a 193 kHz max PWM frequency. Other boards may have different clocks, resulting in different max PWM frequencies. If the user attempts to set the frequency too high, then it will be clipped to the max supported frequency of the board. Frequencies below about 5 Hz are not terribly accurate, but above 5 Hz they are pretty close.

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

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

  • invert_output - (bool, rw) This parameter only has an effect if the is_output parameter is true. If this parameter is true, the output value of the GPIO will be the inverse of the value on the out HAL pin.

  • is_opendrain - (bool, rw) If this parameter is false, the GPIO behaves as a normal output pin: The I/O pin on the connector is driven to the value specified by the out HAL pin (possibly inverted). If this parameter is true, the GPIO behaves as an open-drain pin. Writing 0 to the out HAL pin drives the I/O pin low, writing 1 to the out HAL pin puts the I/O pin in a high-impedance state. In this high-impedance state the I/O pin floats (weakly pulled high), and other devices can drive the value; the resulting value on the I/O pin is available on the in and in_not pins. Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter.

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 - (sint, out) Number of encoder counts since the previous reset.

  • index-enable - (bool, i/o) When this pin is set to True, the count (and therefore also position) are reset to zero on the next Index (Phase-Z) pulse. At the same time, index-enable is reset to zero to indicate that the pulse has occurred.

  • position - (real, out) Encoder position in position units (count / scale).

  • rawcounts - (sint, out) Total number of encoder counts since the start, not adjusted for index or reset.

  • reset - (bool, in) When this pin is TRUE, the count and position pins are set to 0. The value of the velocity pin is not affected by this. The driver does not reset this pin to FALSE after resetting the count to 0, that is the user’s job.

  • velocity - (real, out) Estimated encoder velocity in position units per second.

15.2. Параметры

  • counter-mode - (bool, rw) Set to False (the default) for Quadrature. Set to True for Up/Down or for single input on Phase A. Can be used for a frequency to velocity converter with a single input on Phase A when set to true.

  • filter - (bool, rw) If set to True (the default), the quadrature counter needs 15 clocks to register a change on any of the three input lines (any pulse shorter than this is rejected as noise). If set to False, the quadrature counter needs only 3 clocks to register a change. The encoder sample clock runs at 33 MHz on the PCI Anything I/O cards and 50 MHz on the 7I43.

  • index-invert - (bool, rw) If set to True, the rising edge of the Index input pin triggers the Index event (if index-enable is True). If set to False, the falling edge triggers.

  • index-mask - (bool, rw) If set to True, the Index input pin only has an effect if the Index-Mask input pin is True (or False, depending on the index-mask-invert pin below).

  • index-mask-invert - (bool, rw) If set to True, Index-Mask must be False for Index to have an effect. If set to False, the Index-Mask pin must be True.

  • scale - (real, rw) Converts from count units to position units. A quadrature encoder will normally have 4 counts per pulse so a 100 PPR encoder would be 400 counts per revolution. In .counter-mode a 100 PPR encoder would have 100 counts per revolution as it only uses the rising edge of A and direction is B.

  • vel-timeout - (real, rw) When the encoder is moving slower than one pulse for each time that the driver reads the count from the FPGA (in the hm2_read() function), the velocity is harder to estimate. The driver can wait several iterations for the next pulse to arrive, all the while reporting the upper bound of the encoder velocity, which can be accurately guessed. This parameter specifies how long to wait for the next pulse, before reporting the encoder stopped. This parameter is in seconds.

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

16.1. Прошивка

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

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

Примеры конфигураций плат 5I25/7I76 и 5I25/7I77 включены в раздел 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, как описано выше.