LinuxCNC Integrators Manual Глава VIII - Компонетны HAL

Материал из cnc-club
Перейти к: навигация, поиск

Содержание

LinuxCNC Integrators Manual Глава VIII - Компонетны HAL

Подробно можно найти - http://www.linuxcnc.org/docs/html/man/man9/ (англ.)

Компонетны HAL

8.1 Команды и компоненты пользовательского пространства

У некоторых из этих компонент будут развернутые описания из страниц man. У некоторых будет только ограниченное описание. Все компоненты имеют подробные описания в man. Из этого списка вы узнаете какие компоненты существуют и сможете использовать man для получения дополнительной информации. Например, в окне терминала наберите

man 1 axis

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

axis-remote.1 = Удаленный интерфейс AXIS

axis.1 = Графический пользовательский интерфейс AXIS EMC (The Enhanced Machine Controller)

bfload.1 = Программа для загрузки программы Xilinx Bitfile в FPGA платы Anything I/O Mesa

comp.1 = Собрать, скомпилировать и установить компоненты HAL EMC

emc.1 = EMC (The Enhanced Machine Controller)

hal_input.1 = Контроллирует пины HAL с любым устройством ввода Linux, включая устройства USB

HID

halcmd.1 = манипулирует Enhanced Machine Controller HAL (EMC HAL) из командной строки

halmeter.1 = просматривает пины, сигналы и параметры HAL

halrun.1 = управляет Enhanced Machine Controller HAL из командной строки

halsampler.1 = забирает информацию из HAL в реальном времени

halstreamer.1 = направляет информацию из файла в HAL в реальном времени

halui.1 = просматривает пины HAL и команды EMC через NML

io.1 = принимает команды ввода\вывода NML, взаимодействует с HAL в пользовательском пространстве

iocontrol.1 = принимает команды ввода\вывода NML, взаимодействует с HAL в пользовательском пространстве

pyvcp.1 = Virtual Control Panel для EMC2

8.2 Компоненты реального времени

У некоторых из этих компонент будут развернутые описания из страниц man. У некоторых будет только ограниченное описание. Все компоненты имеют подробные описания в man. Из этого списка вы узнаете какие компоненты существуют и сможете использовать man для получения дополнительной информации.


8.2.1 abs

Вычисляет абсолютное значение (модуль) и знак входного сигнала


Загрузка

loadrt abs [count=N|names=name1[,name2...]]


Функции

addf abs.N|name thread-name


Пины

abs.N.in (float in) Входное значение

abs.N.out (float out) Выходное значение, всегда положительное

abs.N.sign (bit out) Знак входного значения, false = положительный, true = отрицательный

Первый загруженный abs будет abs.0, для каждого следующего число "N" будет увеличиваться.

8.2.2 and2

Двух входовый вентиль AND. Для того, чтобы на выходе была истина, на обоих входах должна быть истина.


Загрузка

loadrt and2 [count=N|names=name1[,name2...]]


Функции

addf and2.N|name thread-name


Пины

and2.N.in0 (bit in) Вход 0

and2.N.in1 (bit in) Вход 1

and2.N.out (bit out) Выход

8.2.3 at_pid

proportional/integral/derivative контроллер с автоматической настройкой

8.2.4 axis

принимает команды ввода\вывода NML, взаимодействует с HAL в реальном времени

8.2.5 biquad

Биквадратный IIR фильтр

8.2.6 bldc_hall3

3-проводной Биполярный трапециевидный коммутатор BLDC драйвера мотора использую сенсоры Hall

8.2.7 blend

Производит линейную интерполяцию между двумя значениями


Загрузка

loadrt blend [count=N|names=name1[,name2...]]


Функции

addf blend.N|name thread-name


Пины

blend.N.in1 (float in) Первый ввод.

blend.N.in2 (float in) Второй ввод.

blend.N.select (float in) Выбор ввода.

blend.N.out (float out) Выходное значение.


Параметры

blend.N.open (bit r/w)


Описание

Если select равен 0.0, вывод равен in1.

Если select равен 1.0, вывод равен in2.

Для значений select между 0.0 и 1.0 вывод равен линейному преобразованию от in1 и in2 (select*in2 + (1-select)*in1).

Если blend.N.open равен true, значения select вне промежутка от 0.0 до 1.0 дают значения вне промежутка от in1 до in2. Если равен false выводы обрезаются границами интервала от in1 до in2.

8.2.8 charge_pump

Создает сигнал "charge pump" с квадратной формой волны для некоторых контроллеров.


Загрузка

loadrt charge_pump


Функции

addf charge-pump


Пины

charge-pump.out (bit out)

charge-pump.enable (bit in) default = TRUE


Описание

Выводит квадратную волну, если enable равен TRUE или не подсоединен, 0 если enable равен FALSE.

8.2.9 clarke2

Двух вводная версия Clarke преобразования.


Загрузка

loadrt clarke2 [count=N|names=name1[,name2...]]


Функции

addf clarke2.N | name


Пины

clarke2.N.a (float in) phase a input

clarke2.N.b (float in) phase b input

clarke2.N.x (float out) cartesian components of output

clarke2.N.y (float out) cartesian components of output


Описание

Преобразование Кларка может быть использовано для переноса величины вектора из трехфазной системы (три компонента разнесенные на 120 градусов) в двухфазную Прямоугольную систему. clarke2 реализует специальный случай преобразования Кларка, которому нужно только две из трез входных фаз. В трех проводной системе, сумма токов или напряжения или трех фаз должна всегда быть равна 0. В результате нужно только две фазы для полного описания тока или напряжения. clarke2 подразумевает, что сумма равна 0, поэтому оно использует только фазы А и В. Т.к. H (униполярный) вывод всегда будет равен 0, в этом случае он не генерируется.

8.2.10 clarke3

Преобразование кларка (3 фазы в прямоугольную систему)


Загрузка

loadrt clarke3 [count=N|names=name1[,name2...]]


Функции

addf clarke3.N | name


Пины

clarke3.N.a (float in) three phase input vector

clarke3.N.b (float in) three phase input vector

clarke3.N.c (float in) three phase input vector

clarke3.N.x (float out) cartesian components of output

clarke3.N.y (float out) cartesian components of output

clarke3.N.h (float out) homopolar component of output


Описание

Преобразование Кларка может быть использовано для переноса величины вектора из трехфазной системы (три компонента разнесенные на 120 градусов) в двухфазную Прямоугольную систему (плюс униполярная компонента если сумма трех фаз не равна 0).

clarke3 реализует общий случай преобразования, использую все три фазы. Если известно, что сумма трех фаз равна 0, используйте более простую версию clarke2.

8.2.11 clarkeinv

Обратное преобразование Кларка.

Загрузка

loadrt clarkeinv [count=N|names=name1[,name2...]]


Функции

addf clarkeinv.N | name


Пины

clarkeinv.N.x (float in) cartesian components of input
clarkeinv.N.y (float in) cartesian components of input
clarkeinv.N.h (float in) homopolar component of input (usually zero)
clarkeinv.N.a (float out) three phase output vector
clarkeinv.N.b (float out) three phase output vector
clarkeinv.N.c (float out) three phase output vector

Параметры

Описание

Обратное преобразование Кларка может быть использовано для перевода величины вектора из прямоугольной системы координат в трехфазную систему (три компонента разнесенные на 120 градусов).

8.2.12 classicladder

Программный (software) plc реального времени, основанный на лестничной логике (ladder logic)

8.2.13 comp

Компаратор двух входов с гистерезисом.

Загрузка

loadrt comp [count=N|names=name1[,name2...]]

Пины

comp.N.in0 float in - Вход инверсный компаратора
comp.N.in1 float in - Вход неинверсный компаратора.
comp.N.out bit out - Выход компаратора. На выходе TRUE, если in1 > in0 (при параметре hyst равном нулю).
comp.N.equal bit out - Выход, которые равен TRUE при разнице in0 и in1 меньше, чем hyst/2

Параметры

comp.N.hyst float rw  - Гистерезис компаратора (по умолчанию 0.0)

При нулевом гистерезисе, выход TRUE, когда in1> in0. С отличным от нуля гистерезисом, выход включается и выключается при двух различных значениях, разделенных расстоянием HYST вокруг точки, где in1 = in0. Имейте в виду, что вычисления с плавающей запятой никогда не абсолютны и имеет смысл всегда устанавливать HYST, если вы собираетесь использовать равенство.

8.2.14 constant

Используйте параметр, чтобы установить значение пина.

8.2.15 conv_bit_s32

Конвертирует значение из типа bit в тип s32

8.2.16 conv_bit_u32

Конвертирует значение из типа bit в тип u32

8.2.17 conv_float_s32

Конвертирует значение из типа float в тип s32

8.2.18 conv_float_u32

Конвертирует значение из типа float в тип u32

8.2.19 conv_s32_bit

Конвертирует значение из типа s32 в тип bit

8.2.20 conv_s32_float

Конвертирует значение из типа s32 в тип float

8.2.21 conv_s32_u32

Конвертирует значение из типа s32 в тип u32

8.2.22 conv_u32_bit

Конвертирует значение из типа u32 в тип biy

8.2.23 conv_u32_float

Конвертирует значение из типа u32 в тип float

8.2.24 conv_u32_s32

Конвертирует значение из типа u32 в тип s32

8.2.25 counter

Считает количество входных импульсов (устаревший компонент)

8.2.26 ddt

Вычисляет производную входной функции

Загрузка

loadrt ddt [count=N|names=name1[,name2...]]

Пины

ddt.N.in float in - Вход.
ddt.N.out float out - Выход.

8.2.27 deadzone

Возвращает центр, если в пределах порога

8.2.28 debounce

Фильтрует зашумленный цифровой ввод, подробнее см. 8.9

8.2.29 edge

Детектор граней

8.2.30 encoder

Программный счетчик квадратуры сигналов энкодера, подробнее см. 8.6

8.2.31 encoder_ratio

Электронная "шестеренка", для синхронизации двух осей

8.2.32 estop_latch

ESTOP latch

8.2.33 feedcomp

Умножает ввод на значение текущей скорости для получения скорости подачи.

8.2.34 flipflop

Триггер типа D

Загрузка

loadrt flipflop [count=N|names=name1[,name2...]]

Пины

flipflop.N.data bit in - Ввод данных (вход D D-триггера)
flipflop.N.clk bit in - Вход C, записывает состояние на входе D по переднему фронту входного импульса.
flipflop.N.set bit in - Вход S, если на этом входе единица, то триггер устанавливается в единицу на выходе.
flipflop.N.reset bit in - Вход R, если на этом входе единица, то триггер устанавливается в ноль на выходе.
flipflop.N.out bit io - Выход триггера.

8.2.35 freqgen

Программный генератор импульсов

8.2.36 gantrykins

Модуль кинематики, который отображает одну ось на несколько сочленений (шарниров)

8.2.37 gearchange

Выибрает из одного двух диапазонов скоростей (Select from one two speed ranges)

8.2.38 genhexkins

Дает шесть степеней свободы в положении и ориентации (XYZABC). Расположение моторов задается во время компиляции.

8.2.39 genserkins

Кинематика, которая может моделировать последовательно связанный манипулятор содержащий до 6 поворотных шарниров.

8.2.40 hm2_7i43

Драйвер HAL для Mesa Electronics 7i43 EPP Anything IO board с HostMot2

8.2.41 hm2_pci

Драйвер HAL для the Mesa Electronics 5i20, 5i22, 5i23, 4i65, и 4i68 Anything IO boards, с прошивкой HostMot2

8.2.42 hostmot2

Драйвер HAL для прошивок Mesa Electronics HostMot2

8.2.43 hypot

Калькулятор трех-входовой гипотенузы (Расстояния между точками в трехмерном Евклидовом пространстве)

Загрузка

loadrt hypot [count=N|names=name1[,name2...]]

Пины

hypot.N.in0 float in
hypot.N.in1 float in
hypot.N.in2 float in
hypot.N.out float out

out = sqrt(in0^2 + in1^2 + in2^2)

8.2.44 ilowpass

Низкочастотный фильтр с целочисленными вводами и выводами

8.2.45 integ

Интегратор

8.2.46 invert

Вычисляет обратное значение от входного сигнала

Загрузка

loadrt invert [count=N|names=name1[,name2...]]

Пины

invert.N.in float in
invert.N.out float out

Параметры

invert.N.deadband float rw

Выход будет равен нулю, если значение IN будет между -deadband и +deadband , чтобы исключить ситуацию деления на ноль.

out = 1/in

8.2.47 joyhandle

Устанавливает перемещения, мертвые зоны и масштабы нелинейного джойстика

8.2.48 kins

Определения кинематики для EMC2

8.2.49 knob2float

Конвертирует количество тиков (возможно от энкодера) в число с плавающей запятой

8.2.50 limit1

Ограничивает выходной сигнал, чтобы он падал между min и max

Загрузка

loadrt limit1 [count=N|names=name1[,name2...]]

Пины

limit1.N.in float in
limit1.N.out float out

Параметры

limit1.N.min float rw (по умолчанию: -1e20)
limit1.N.max float rw (по умолчанию: 1e20)

8.2.51 limit2

Ограничивает выходной сигнал, чтобы он падал между min и max, и ограничивает скорость нарастания выходного сигнала до менее, чем максимум в секунду.

Загрузка

loadrt limit2 [count=N|names=name1[,name2...]]

Пины

limit2.N.in float in
limit2.N.out float out
limit2.N.load bit in Если равен TRUE, то выход становится равен входу, не взирая на ограничения

Параметры

limit2.N.min float rw (по умолчанию: -1e20)
limit2.N.max float rw (по умолчанию: 1e20)
limit2.N.maxv float rw (по умолчанию: 1e20)

8.2.52 limit3

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

Загрузка

loadrt limit3 [count=N|names=name1[,name2...]]

Пины

limit3.N.in float in
limit3.N.out float out
limit3.N.load bit in Если равен TRUE, то выход становится равен входу, не взирая на ограничения по скорости и ускорению.

Параметры

limit3.N.min float rw (по умолчанию: -1e20)
limit3.N.max float rw (по умолчанию: 1e20)
limit3.N.maxv float rw (по умолчанию: 1e20)
limit3.N.maxa float rw (по умолчанию: 1e20)

8.2.53 logic

Экспериментальный компонент функций общей логики

8.2.54 lowpass

Низкочастотный фильтр

8.2.55 lut5

Произвольные 5-входовые логические функции основанные на таблице поиска

8.2.56 maj3

Вычисляет большинство из трех входов

8.2.57 match8

8-ми битный детектор совпадений

8.2.58 maxkins

Кинематика настольного 5-ти осного фрезерного станка называемого "max" с поворотной головой (ось B) и горизонтальным поворотным столом (ось C). Предоставляет перемещения вдоль UVW в повернутой координатной системе. Исходный файл maxkins.c может быть полезной отправной точкой для других 5-ти осных систем.

8.2.59 minmax

Передает минимальное и максимальное значение входов на выходы.

Загрузка

loadrt minmax [count=N|names=name1[,name2...]]

Пины

limit3.N.in float in
limit3.N.reset bit in  При этом сигнале значение IN записывается на выходы.
minmax.N.max float out
minmax.N.min float out

8.2.60 motion

принимает команды перемещения NML, взаимодействует с HAL в режиме реального времени

8.2.61 mult2

Произведение двух входов

Загрузка

loadrt mult2 [count=N|names=name1[,name2...]]

Пины

mult2.N.in0 float in
mult2.N.in1 float in
mult2.N.out float out

out = in0 * in1

8.2.62 mux2

Выбирает одно из двух значений входа

Пины:

mux2.N.sel bit in - битовый вход управления
mux2.N.in0 float in
mux2.N.in1 float in - два входа
mux2.N.out float out - выход

Если: sel0=FALSE ,то out = in0

Если: sel0=TRUE ,то out = in1

8.2.63 mux4

Выбирает одно из четырех значений входа


Пины:

mux4.N.sel0 bit in
mux4.N.sel1 bit in - два битовых входа управления
mux4.N.in0 float in
mux4.N.in1 float in
mux4.N.in2 float in
mux4.N.in3 float in - четыре входа
mux4.N.out float out - выход

Если: sel1=FALSE, sel0=FALSE ,то out = in0

Если: sel1=FALSE, sel0=TRUE ,то out = in1

Если: sel1=TRUE, sel0=FALSE ,то out = in2

Если: sel1=TRUE, sel0=TRUE ,то out = in3

8.2.64 mux8

Выбирает одно из восьми значений входа.


Пины:

mux8.N.sel0 bit in
mux8.N.sel1 bit in
mux8.N.sel2 bit in - три битовых входа управления
mux8.N.in0 float in
mux8.N.in1 float in
mux8.N.in2 float in
mux8.N.in3 float in
mux8.N.in4 float in
mux8.N.in5 float in
mux8.N.in6 float in
mux8.N.in7 float in - восемь входов
mux8.N.out float out - выход


Если: sel2=FALSE, sel1=FALSE, sel0=FALSE , то out = in0

Если: sel2=FALSE, sel1=FALSE, sel0=TRUE ,то out = in1

Если: sel2=FALSE, sel1=TRUE, sel0=FALSE ,то out = in2

Если: sel2=FALSE, sel1=TRUE, sel0=TRUE ,то out = in3

Если: sel2=TRUE, sel1=FALSE, sel0=FALSE ,то out = in4

Если: sel2=TRUE, sel1=FALSE, sel0=TRUE ,то out = in5

Если: sel2=TRUE, sel1=TRUE, sel0=FALSE ,то out = in6

Если: sel2=TRUE, sel1=TRUE, sel0=TRUE ,то out = in7

8.2.65 near

Определяет являются ли два значения почти одинаковыми

Загрузка

loadrt near [count=N|names=name1[,name2...]]

Пины

near.N.in1 float in
near.N.in2 float in
near.N.out float out  TRUE, если in1 и in2 находятся в пределах масштаба (при положительном in1: in1/scale <= in2 <= in1*scale ) или их абсолютная разница меньше difference (|in1-in2| <= difference )

Параметры

near.N.scale float rw (по умолчанию: 1)
near.N.difference float rw (по умолчанию: 0)

8.2.66 not

Обратное логическое значение

Загрузка

loadrt not [count=N|names=name1[,name2...]]

Пины

not.N.in bit in
not.N.out bit out

8.2.67 offset

Добавляет отступ к входу, и вычитает его из значения обратной связи

8.2.68 oneshot

Одновибратор. Создает переменную длину выходного импульса, при изменении состояния входного сигнала.

Загрузка

loadrt oneshot [count=N|names=name1[,name2...]]

Выгрузка

unloadrt oneshot [count=N|names=name1[,name2...]]

Пины

oneshot.N.in (bit in) - Вход триггера
oneshot.N.out (bit out) - Выход активного высокого уровня
oneshot.N.out-not (bit out) - Выход активного низкого уровня
oneshot.N.width (float in) (по умолчанию: 0) - Длительность импульса в секундах
oneshot.N.time-left (float out) - Сколько осталось времени до конца импульса

Параметры

oneshot.N.retriggerable (bit) – Allow additional edges to extend pulse.
oneshot.N.rising (bit) – Запуск по нарастающему фронту.
oneshot.N.falling (bit) – Запуск по заднему фронту.

8.2.69 or2

Двух вводный вентиль ИЛИ

8.2.70 pid

PID (proportional/integral/derivative) контроллер, подробнее см. 8.7

8.2.71 pluto_servo

Аппаратный драйвер и прошивка для Pluto-P, для использованием с серво двигателями.

8.2.72 pluto_step

Аппаратный драйвер и прошивка для Pluto-P, для использованием с шаговыми двигателями.

8.2.73 pwmgen

Программный генератор ШИМ/ЧМ, подробнее см 8.5

8.2.74 rotatekins

Оси X и Y повернутые на 45 градусов сравнительно с joint 0 и 1.

8.2.75 sample_hold

Взять пробу и зафиксировать (Sample and Hold)

8.2.76 sampler

Проба данных из HAL в реальном времени

8.2.77 scale

Применяет масштабирование и отступ к своим входам

8.2.78 scarakins

кинематика для роботов типа SCARA

8.2.79 select8

8-ми битный детектор совпадений

8.2.80 serport

Аппаратный драйвер для цифровых битов вводи и вывода последовательного порта 8520 и 16550

8.2.81 siggen

Генератор сигнала, подробнее см. 8.10

8.2.82 sim_encoder

Симулированный квадратурный энкодер, подробнее см. 8.8.

8.2.83 sphereprobe

Сферический пробник

8.2.84 stepgen

Программный генератор импульсов шагов, подробнее см 8.4

8.2.85 steptest

Используется Stepconf для того чтобы проводить тесты значений ускорения и скорости осей.

8.2.86 streamer

Выводит данные из файла в HAL в реальном времени

8.2.87 sum2

Суммирует два ввода (каждый с усилением) и отступом

out = in0 * gain0 + in1 * gain1 + offset

Пины:

sum2.N.in0 float in
sum2.N.in1 float in
sum2.N.out float out

Параметры:

sum2.N.gain0 float rw (default: 1.0)
sum2.N.gain1 float rw (default: 1.0)
sum2.N.offset float rw

8.2.88 supply

Устанавливает выводные пины в значения из параметров (устаревший компонент)

8.2.89 thc

Контроллер длинны пламени (Torch Height Control) использую карту Mesa THC.

8.2.90 threads

Создает поток HAL реального времени

8.2.91 threadtest

Компонент для тестирования поведения потока

8.2.92 timedelay

Эквивалент реле задержки по времени

Загрузка

loadrt timedelay [count=N|names=name1[,name2...]]

Пины

timedelay.N.in (bit in) - Вход
timedelay.N.out (bit out) - Выход
timedelay.N.on-delay (float in) (по умолчанию: 0.5) - Время задержки включения "реле" (переключения в состояние TRUE), в секундах
timedelay.N.off-delay (float in) (по умолчанию: 0.5) - Время задержки выключения "реле" (переключения в состояние FALSE), в секундах
timedelay.N.elapsed (float out) - Значение внутреннего таймера.

8.2.93 timedelta

Компонент, который измеряет поведение по задержкам планировщика потоков

8.2.94 toggle

Вкл, выкл механических кнопок (устраняет дребезг контактов)

8.2.95 toggle2nist

Переключить кнопку в nist логику

8.2.96 tripodkins

Шарниры задают дистанцию до контроллируемой точки от трех заранее заданных точек (расположение моторов), дает три степени свободы в перемещении (XYZ).

8.2.97 tristate_bit

Отправляет сигнал на пин ввода/вывода, только когда включен, сходно трехпозиционному буферу в электронике.

8.2.98 tristate_float

Отправляет сигнал на пин ввода/вывода, только когда включен, сходно трехпозиционному буферу в электронике.

8.2.99 trivkins

Это однозначное 1:1 отображение между шарнирами и осями. Большинство фрезерных и токарных станков использует модуль тривиальной кинематики.

8.2.100 updown

Считает вверх или вниз, с опциональными пределами havior

8.2.101 wcomp

Оконный компаратор

8.2.102 weighted_sum

Конвертирует группу битов в целое число

8.2.103 xor2

Двух входовый XOR (исключающий ИЛИ) вентиль

8.3 Hal Meter

Hal Meter может быть загружен из терминала или из Axis. HAL Meter быстрее чем HAL Show отображает значения. Hal Meter имеет два окна, одно для подбора пина, сигнала или параметра, и одно для отображения значения. Несколько Hal Meter может быть открыто одновременно. Если вы используете скрипт для загрузки нескольких Hal Meter, вы можете установить положение для каждого при помощи -g X Y относительно левого верхнего угла экрана. Подробнее о параметрах см. страницы man.

loadusr halmeter pin hm2.0.stepgen.00.velocity-fb -g 0 500

[attachment=3:gdwwa9p3]EMC2 перевод руководства на русский язык HAL Meter.png[/attachment][attachment=2:gdwwa9p3]EMC2 перевод документации на русский язык HAL Meter.png[/attachment]


Рис. 8.1: Hal Meter

8.4 Stepgen

Этот компонент предоставляет программную генерацию импульсов шага в ответ на команды положения и скорости. В режиме положения, у него есть встроенный предварительно настроенный цикл положения, поэтому настройка PID не требуется. В режиме скорости, он управляет мотором на заданной скорости, подчиняясь пределам скорости и ускорения. Это компонент только реального времени, и зависит от скорости процессора и прочего, его возможности к максимальной частоте шагов от 10kHz до, возможно, 50kHz. Рис 8.2 показывает три блок схемы, каждая это одношаговый генератор импульсов. Первая схема для шагов типа "0", (шаг и направление), вторая для шагов типа "1" (вверх/вниз или псевдо-ШИМ) и третья для шагов типов от 2 до 14 (различные шаблоны шагов). Первые две диаграммы показывают контроль в режиме положения а третья показывает режим скорости. Режим управления и тип шага устанавливаются независимо и может быть выбрана любая комбинация.

...


8.4.1 Загрузка

emc2$ halcmd loadrt stepgen step_type=<type-array> [ctrl_type=<ctrl_array>]

<type-array> ряд разделенных запятыми целых чисел. Каждое число вызывает запуск генератора одиночных импульсов, значение числа определяет тип шагов.<ctrl_array> - ряд разделенных запятыми букв “p” или “v”, для определения режима упраеления положение или скорость. ctrl_type - не обязательный параметр, если он опущен то все генераторы будут работать в режиме положения.

Например:

emc2# halcmd loadrt stepgen step_type=0,0,2 ctrl_type=p,p,v

Запустит три генератора шагов. Первые два типа "0" (шаг и направление) и в режиме положения. Последний использует тип шагов "2" (квадратурный) и работает в режиме скорости. Значение по умолчанию для <config-array> равно “0,0,0”, что запустит три генератора типа "0" (step/dir). Максимальное количество генераторов равно 8 (это ограничение установленно параметром MAX_CHAN в stepgen.c). Каждый генератор независим, но все обновляются одной функцией(функциями) в одно и тоже время. В следующих описаниях, <chan> это номер конкретного генератора. Первый генератор имеет номер 0.


8.4.2 Выгрузка (удаление)

emc2$ halcmd unloadrt stepgen


8.4.3 Пины

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


  • (bit) stepgen.<chan>.enable - обеспечивает выходные шаги step - если false, никаких шагов не генерируются.
  • (FLOAT) stepgen.<chan>.position-cmd – Желаемое положение мотора, в единицах измерения положения (только для режима положения).
  • (FLOAT) stepgen.<chan>.velocity-cmd – Желаемая скорость мотора, в единицах измерения положения в секунду (только в режиме контроля скорости).
  • (S32) stepgen.<chan>.counts – Обратная связь положения в тиках счетчика, обновляется посредством capture_position().
  • (FLOAT) stepgen.<chan>.position-fb – Обратная связь положения в единицах измерения положения, обновляется при помощи capture_position().
  • (BIT) stepgen.<chan>.step – Вывод импульса шага (только для шагов типа 0).
  • (BIT) stepgen.<chan>.dir – Вывод направления (только для шагов типа 0).
  • (BIT) stepgen.<chan>.up – Вывод псевдо-ШИМ ВВЕРХ (UP) (только для шагов типа 1).
  • (BIT) stepgen.<chan>.down – Вывод псевдо-ШИМ ВНИЗ (только для шагов типа 1).
  • (BIT) stepgen.<chan>.phase-A – Вывод фазы A (только для шагов типов 2-14).
  • (BIT) stepgen.<chan>.phase-B – Вывод фазы B (только для шагов типов 2-14).
  • (BIT) stepgen.<chan>.phase-C – Вывод фазы C (только для шагов типов 3-14).
  • (BIT) stepgen.<chan>.phase-D – Вывод фазы D (только для шагов типов 5-14).
  • (BIT) stepgen.<chan>.phase-E – Вывод фазы E (только для шагов типов 11-14).

8.4.4 Параметры

  • (FLOAT) stepgen.<chan>.position-scale – Шагов на единицу измерения положения. Этот параметр используется для обоих вывода и обратной связи.
  • (FLOAT) stepgen.<chan>.maxvel – Максимальная скорость, в единицах измерения положения в секунду. Если равен 0.0, не имеет эффекта.
  • (FLOAT) stepgen.<chan>.maxaccel – Максимальная величина ускорения/торможения, в единицах измерения положения в секунду в квадрате. Если равен 0.0, не имеет эффекта.
  • (FLOAT) stepgen.<chan>.frequency – Текущая частота шагов, в шагах в секунду.
  • (FLOAT) stepgen.<chan>.steplen – Длинна импульса шага (тип шага 1 и 0) или минимальное время в данном положении для (типов шага 2-14), в наносекундах.
  • (FLOAT) stepgen.<chan>.stepspace – Минимальный промежуток между двумя импульсами шага (для типов шага 0 и 1) в наносекундах.
  • (FLOAT) stepgen.<chan>.dirsetup – Минимальное время между изменением направления и началом следующего шага (только для типа шага 0) в наносекундах.
  • (FLOAT) stepgen.<chan>.dirhold – Минимальное время от конца импульса шага до изменения направления (только для типа шага 0) в наносекундах.
  • (FLOAT) stepgen.<chan>.dirdelay – Минимальное время между любыми двумя шагами в разных направлениях (только для типов шага 1-14), в наносекундах.
  • (S32) stepgen.<chan>.rawcounts – Количество raw feedback, обновляется make_pulses().

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

Для более подробной информации, включая "черную коробку" "уравнения управления", смотрите исходный код.

В режиме скорости, maxvel (максимальная скорость) это просто предел который применяется к заданной скорости, а maxaccel используется для сглаживания текущей частоты, если заданная скорость резко меняется. Как в и режиме положения, правильные значения для этих параметров гарантируют, что мотор сможет следовать сгенерированной последовательности импульсов.

8.4.5 Типы шагов

Генераторы шагов поддерживают 15 разных "типов шагов". Тип шага 0 является наиболее употребляемым, стандартный "шаг и направление". Когда установлен тип шага 0, есть еще четыре дополнительных параметра, которые определяют точные тайминги сигналов шага и направления. См. рис. 8.4 для значения этих параметров. Параметры задаются в наносекундах, но они будут округленны вверх до целого количества периодов потока, который вызывает make_pulses(). Например, если make_pulses() вызывается каждые 16 uS, и steplen равен 20000, тогда длительность сигнала шага будет равна 2 х 16 = 32uS. Значение по умолчанию для всех параметров 1uS, оно автоматическое округление применяется во время первого запуска кода. Т.к. один шаг требует steplen uS высокого сигнала и stepspace uS низкого, то максимальная частота равна 1.000.000.000 поделенное на (steplen+stepspace). Если maxfreq установлено большим чем этот предел, то значение будет уменьшено автоматически. Если maxfreq равно 0, оно останется 0, но выходная частота все равно будет ограничена.

[attachment=3:258866lw]EMC2 перевод руководства на русский язык Тайминг шагов и направления.png[/attachment]


Рис. 8.4 Тайминг сигналов шага и направления

Тип шага 1 имеет два вывода, вверх и вниз (up и down). Импульсы возникают на одном или на другом, в зависимости от направления движения. Каждый импульс имеет длину steplen, и импульсы разделены как минимум на stepspace uS. Максимальная частота такая же как и для шагов типа 0. Если maxfreq установлено большим чем этот предел, то значение будет уменьшено автоматически. Если maxfreq равно 0, оно останется 0, но выходная частота все равно будет ограничена.

Шаги типов от 2 до 14 основаны на состоянии, и имеют от двух до пяти выводов. На каждом шаге, счетчик состояния увеличивается или уменьшается. Рис. 8.5, 8.6 и 8.7 показывают выходные образцы как функцию от значения счетчика состояний. Максимальная частота равна 1.000.000.000 поделенное на steplen, и, также как и в других режимах, значение maxfreq будет уменьшено если оно превышает предел.

[attachment=2:258866lw]EMC2 перевод руководства на русский язык трехфазный типы шагов.png[/attachment]


Рис 8.5 Трехфазные типы шагов

[attachment=1:258866lw]EMC2 перевод руководства на русский язык четырехфазные типы шагов.png[/attachment]


Рис 8.6 Четырех фазные типы шагов

[attachment=0:258866lw]EMC2 перевод руководства на русский язык пятифазные типы шагов.png[/attachment]


Рис 8.7 Пяти фазные типы шагов

8.4.6 Функции

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


  • (FUNCT) stepgen.make-pulses – Высокоскоростная функция для генерации и подсчета импульсов (без чисел с плавающей запятой).
  • (FUNCT) stepgen.update-freq – Медленная функция выполняет преобразование положения в скорость, масштабирование и ограничение.
  • (FUNCT) stepgen.capture-position – Медленная функция для обратной связи, обновляет положение уточнений и масштабирует положение.

Высокоскоростная функция stepgen.make-pulses должна выполняться в очень быстром потоке, от 10 до 50uS в зависимости от возможностей компьютера. Период этого потока определяет максимальную частоту шагов, т.к. since steplen, stepspace, dirsetup, dirhold, и dirdelay округляются до целого значения длин периодов в наносекундах. Две другие функции могут вызываться с гораздо более низкой частотой.


8.5 PWMgen

Этот компонент предоставляет программное генерирование ШИМ (PWM - Pulse Width Modulation) и частотно-импульсной модуляции (PDM - Pulse Density Modulation) форм сигнала. Это компонент исключительно реального времени и, в зависити от частоты процессора и прочего, способен генерировать ШИМ частотами от нескольких сотен Гц с достаточно хорошим разрешением, до возможно, 10 КГц с ограниченным разрешением.


8.5.1 Загрузка

emc2$ halcmd loadrt pwmgen output_type=<config-array>

<config-array> это ряд разделенных запятыми десятичных целых чисел. Каждое число вызывает создание одного PWM генератора, значение числа определяет тип вывода. Например:

emc2$ halcmd loadrt pwmgen output_type=0,1,2

Запустит три генератора. Первый будет выводить сигнал типа "0" (только ШИМ), следующие используют вывод типа "1" (ШИМ и направление) и последний использует тип "2" (ВВЕРХ и ВНИЗ). Не существует значение по умолчанию для <config-array>, если он не указан, то не будет создано ни одного генератора. Максимальное количество частотных генераторов равно 8 (как заданно параметром MAX_CHAN в pwmgen.c). Каждый генератор независим, но все обновляются одинаковыми функциями(ей) в одно и тоже время. В следующих описаниях <chan> значит номер конкретного генератора. Номер первого генератора равен 0.


8.5.2 Выгрузка

emc2$ halcmd unloadrt pwmgen


8.5.3 Пины

Каждый генератор ШИМ имеет следующие пины:


  • (FLOAT) pwmgen.<chan>.value – Установленное значение, в произвольных единицах. Будет масштабирован на парамер scale (см. ниже).
  • (BIT) pwmgen.<chan>.enable – Включает или выключает вывод ШИМ.

Каждый генератор ШИМ будет также иметь некоторые из этих пинов, в зависимости от выбранного типа вывода:


  • (BIT) pwmgen.<chan>.pwm – вывод PWM (или PDM) (ШИМ или ЧИМ), (только для типов вывода 0 и 1).
  • (BIT) pwmgen.<chan>.dir – Направление вывода (только для типа вывода 1).
  • (BIT) pwmgen.<chan>.up – PWM/PDM вывод для положительного входного значения (только для типа вывода 2).
  • (BIT) pwmgen.<chan>.down – PWM/PDM вывод для отрицательного входного значения (только для типа вывода 2).


8.5.4 Параметры

  • (FLOAT) pwmgen.<chan>.scale – Фактор масштаба для преобразования значения из произвольных единиц измерения в скважность сигнала.
  • (FLOAT) pwmgen.<chan>.pwm-freq – Желаемая частота ШИМ в Гц. Если 0.0 генерирует частотно импульсную модуляцию вместо ШИМ. Если установлено значение больше внутренних пределов, следующий вызов update_freq() установит его значение равное пределу. Если не нулевое и dihter равен false, следующий вызов update_freq() установит значение равное ближайшему целому количеству периодов функции make_pulses().
  • (BIT) pwmgen.<chan>.dither-pwm – Если равно true, включает сглаживание для достижения средней частоты ШИМ или скважности которые не возможно получить при помощи чистой ШИМ. Если равно false, обе частота ШИМ и скважность будут округлены до значений, которые могут быть достигнуты точно.
  • (FLOAT) pwmgen.<chan>.min-dc – Минимальная скважность, между 0.0 и 1.0 (скважностьбудет установленна в 0 если отключена, вне зависимости от этого значения).
  • (FLOAT) pwmgen.<chan>.max-dc – Максимальная скважность, между 0.0 и 1.0.
  • (FLOAT) pwmgen.<chan>.curr-dc – Текущая скважность- после всех ограничений и округлений (read only - только для чтения).


8.5.5 Типы вывода

Генераторы ШИМ поддерживают несколько "типов вывода". Тип 0 имеет одиночный выходной пин. Принимаются только положительные значения, отрицательные считаются нулем (и к ним будет применен min-dc, если он не 0). У типа 1 есть два выходных пина, один для ШИМ/ЧИМ сигнала и один для индикации направления. Скважность на пине ШИМ основана на абсолютном значении команды, поэтому отрицательные значения приемлемы. Пин направления равен false для положительных команд и true для отрицательных. Наконец-то, тип 2 имеет два вывода, называемые вверх и вниз. Для отрицательных команд сигнал ШИМ появляется на выводе down (вниз). Для положительных команд, сигнал ШИМ появляется на выводе up (вверх), а вывод down становится равным false. Тип 2 подходит для управления большинством H-мостов (H-bridge)


8.5.6 Функции

Компонент экспортирует две функции. Каждая функция оперирует со всеми генераторами ШИМ - работа разных генераторов в разных потоках не поддерживается.


  • (FUNCT) pwmgen.make-pulses – Высокоскоростная функция для генерации ШИМ форм волны (без floating point).
  • (FUNCT) pwmgen.update – Низкоскоростная функция для преобразования и ограничения значений и обработки других параметров.

Высокоскоростная функция pwmgen.make-pulses должна запускаться только в очени быстрых потоках от 10 до 50 uS в зависимости от возможностей процессора. Период этого потока определяет максимальную несущую частоту ШИМ, также как и разрешение ШИМ и ЧИМ сигналов. Другие функции могут вызываться с гораздо более низкой частотой.


8.6 Энкодер

Этот компонент предоставляет программный счетчик сигналов от квадратурных энкодеров. Это компонент строго реального времени, и в зависимости от скорости процессора, латентности и прочего его возможная максимальная частота отсчета от 10кГц до, возможно, 50кГц. Рис. 8.8 является блок схемой одного канала счетчика энкодера.

[attachment=0:9s5v4juc]EMC2 руководство на русском языке Блок схема энкодера.png[/attachment]


Рис 8.8: Блок схема счетчика энкодера

8.6.1 Загрузка

emc2$ halcmd loadrt encoder [num_chan=<counters>]

<counters> это количество энкодеров, которое вы хотите загрузить. Если numchan не указано, то 3 энкодера будут загружены. Максимальное количество счетчиков равно 8 (как установлено в MAX_CHAN в encoder.c). Каждый счетчик независим, но все обновляются одной и той же функцией(ями) в одно и тоже время. В следующих описаниях, <chan> это номер специфичного счетчика. Первый счетчик имеет номер 0.


8.6.2 Выгрузка

emc2$ halcmd unloadrt encoder


8.6.3 Пины

  • encoder.<chan>.counter-mode (bit, I/O) – Когда установлен в true ввод Phase B игнорируется.
  • encoder.<chan>.counts (s32, Out)
  • encoder.<chan>.index-enable (bit, I/O) – См. канонический интерфейс энкодера.
  • encoder.<chan>.phase-A (bit, In) – Phase A квадратурного сигнала энкодера.
  • encoder.<chan>.phase-B (bit, In) – Phase B квадратурного сигнала энкодера.
  • encoder.<chan>.phase-Z (bit, In) – Phase Z (index pulse - индексный импульс) квадратурного сигнала энкодера.
  • encoder.<chan>.position (float, Out) – См. канонический интерфейс энкодера.
  • encoder.<chan>.position-interpolated (float, Out) – См ниже.
  • encoder.<chan>.position-scale (float, I/O)
  • encoder.<chan>.rawcounts (s32, In)
  • encoder.<chan>.reset (bit, In) – См. канонический интерфейс энкодера руководства по HAL.
  • encoder.<chan>.velocity (float, Out) – Оценочная скорость квадратурного сигнала.
  • encoder.<chan>.x4-mode (bit, I/O) – Устанавливает энкодер в режим 4х или 1х. Режим 1х полезен для некоторых колесиков прокрутки.

Пин position-interpolated пытается интерполировать значения между отсчетами энкодера, основываясь на самых свежих измеренных скоростях. Он не должен использоваться для управления положением, т.к. это значение не правильно на маленьких скоростях, во время изменения направления и во время изменения скорости. Однако, он позволяет использовать медленный ppr энкодер (pulse per revolution - импульсов за оборот, включая один импульс за оборот) для токарной обработки и может иметь другие применения.


8.6.4 Параметры

  • encoder.<chan>.capture-position.time (s32, RO)
  • encoder.<chan>.capture-position.tmax (s32, RW)
  • encoder.<chan>.update-counters.time (s32, RO)
  • encoder.<chan>.update-counter.tmax (s32, RW)


8.6.5 Функции

Этот компонент экспортирует две функции. Каждая функция действует на все энкодеры - выполнение разных счетчиков в разных потоках не поддерживается.


  • (FUNCT) encoder.update-counters – Высокоскоростная функция для подсчета импульсов (без floating point).
  • (FUNCT) encoder.capture-position – Низкоскоростная функция для обновления защелок и масштабирования положения.



8.7 PID

Этот компонент предоставляет Proportional/Integeral/Derivative циклы управления. Это компонент строго реального времени. Для простоты, это обсуждение подразумевает что мы говорим о циклах положения, однако, этот компонент может быть использован чтобы реализовывать другие циклы обратной связи, такие как скорость, длина пламени горелки, температура и т.п. Рис. 8.9 это блок схема одиночного PID цикла.


8.7.1 Загрузка

emc2$ halcmd loadrt pid [num_chan=<loops>] [debug=1]

<loops> это количество циклов PID которое вы хотите загрузить. Если num_chan не указан, будет создан один цикл. Максимальное количество циклов равно 16 (как задано в MAX_CHAN в pid.c). Каждый цикл полностью независим. В следующих описаниях <loopnum> это номер цикла специфичного цикла. Первый цикл имеет номер 0.

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


8.7.2 Выгрузка

emc2$ halcmd unloadrt pid


8.7.3 Пины

Три наиболее важных пина это:


  • (FLOAT) pid.<loopnum>.command – Желаемое положение, устанавливаемое другим системным компонентом.
  • (FLOAT) pid.<loopnum>.feedback – Текущее положение, измеряемое устройством обратной связи таким, как энкодер.
  • (FLOAT) pid.<loopnum>.output – Команда скорости, которая пытается переместиться из текущего положения в желаемое положение.

Для цикла положения, "command" и "feedback", в единицах измерения положения. Для линейных осей, это могут быть дюймы, мм, метры, или любая уместная единица.Также для поворотных осей, это могут быть градусы, радианы и т.д. Единицы пина "output" являются необходимым изменением чтобы feedback соответствовал command. По существу, для цикла положения "output" это скорость, в дюймах/с, мм/с, градусах/с и т.д. Единицы времени всегда секунды, а единицы скорости совпадают с единицами измерения положения. Если command и feedback в метрах, то output будет в метрах в секунду.

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


  • (FLOAT) pid.<loopnum>.error – Равен .command минус .feedback.
  • (BIT) pid.<loopnum>.enable – Бит, который включает цикл. Если .enable равен false, все интеграторы сбрасываются, и выводы принудительно становятся 0. Если .enable равен true, цикл выполняется нормально.

Пины для отслеживания насыщения. Насыщение появляется когда выводы блока PID находятся на своих максимальных или минимальных пределах.


  • (BIT) pid.<loopnum>.saturated – Равен true когда вывод насыщен.
  • (FLOAT) pid.<loopnum>.saturated_s – Время, которое вывод был насыщен.
  • (S32) pid.<loopnum>.saturated_count – Количество раз которое вывод был насыщен.

[attachment=0:36csjk21]EMC2 перевод справки Блок схема цикла PID.png[/attachment]


Рис. 8.9: Блок схема цикла PID

8.7.4 Параметры

Усиления, пределы и другие "настраиваемые" возможности PID реализованы в виде параметров.


  • (FLOAT) pid.<loopnum>.Pgain – Пропорциональный член
  • (FLOAT) pid.<loopnum>.Igain – Интегральный член
  • (FLOAT) pid.<loopnum>.Dgain – Дифференциальный член
  • (FLOAT) pid.<loopnum>.bias – Постоянный отступ на выводе
  • (FLOAT) pid.<loopnum>.FF0 – Нулевой порядок упреждения - вывод пропорционального члена в command (положение).
  • (FLOAT) pid.<loopnum>.FF1 – Первый порядок упреждения - вывод пропорционального члена в первую производную command (скорость).
  • (FLOAT) pid.<loopnum>.FF2 – Второй порядок упреждения - вывод пропорционального члена во вторую производную command (ускорение)1.
  • (FLOAT) pid.<loopnum>.deadband – Размер отклонения, который будет игнорироваться
  • (FLOAT) pid.<loopnum>.maxerror – Предел отклонения
  • (FLOAT) pid.<loopnum>.maxerrorI – Предел отклонения интегратора
  • (FLOAT) pid.<loopnum>.maxerrorD – Предел отклонения производной
  • (FLOAT) pid.<loopnum>.maxcmdD – Предел на производной command
  • (FLOAT) pid.<loopnum>.maxcmdDD – Предел на второй производной command
  • (FLOAT) pid.<loopnum>.maxoutput – Предел на выводимом значении

Все максимумы??? пределы выполнены таким образом, что если значение параметра равно 0, то нет никакого предела.

Если было указанно debug=1 во время загрузки компонента, четыре дополнительных параметра будет экспортировано:


  • (FLOAT) pid.<loopnum>.errorI – Интеграл отклонения.
  • (FLOAT) pid.<loopnum>.errorD – Производная отклонения.
  • (FLOAT) pid.<loopnum>.commandD – Производная command.
  • (FLOAT) pid.<loopnum>.commandDD – Вторая производная command.


8.7.5 Функции

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


  • (FUNCT) pid.<loopnum>.do_pid_calcs – Выполняет все вычисления для одиночного цикла PID.

Если вы хотите понимать точный алгоритм использующийся для вычисления выводов цикла PID, смотрите рис. 8.9, компоненты в начале beginning of emc2/src/hal/components/pid.c и, конечно, сам исходный код. Вычисления цикла написаны на С function calc_pid().

1 FF2 на данный момент еще не реализован, но будет добавлен. Рассматривайте это замечание как “FIXME” для исходного кода.


8.8 Симулированный энкодер. Simulated Encoder

Симулированный энкодер является именно этим. Он производит квадратурные импульсы с индексным импульсом, со скоростью контролируемой пином HAL. Чаще всего используется для тестирования.


8.8.1 Загрузка

emc2$ halcmd loadrt sim_encoder num_chan=<number>

<number> это количество энкодеров которые вы хотите симулировать. Если не указано, то будет загружен один энкодер. Максимальное количество равно 8 (определено в MAX_CHAN в sim_encoder.c).


8.8.2 Выгрузка

emc2$ halcmd unloadrt sim_encoder


8.8.3 Пины

(FLOAT) sim-encoder.<chan-num>.speed – Заданная скорость для симулированной оси.

(BIT) sim-encoder.<chan-num>.phase-A – Квадратурный вывод.

(BIT) sim-encoder.<chan-num>.phase-B – Квадратурный вывод.

(BIT) sim-encoder.<chan-num>.phase-Z – Вывод индексного импульса.

Когда .speed положительна, .phase-A идет перед .phase-B.


8.8.4 Параметры

(U32) sim-encoder.<chan-num>.ppr – Импульсов на оборот.

(FLOAT) sim-encoder.<chan-num>.scale – Коэффициент умножения для скорости. Значение по умолчанию равно 1.0, что означает скорость задана в оборотах в секунду. Измените на 60 для оборотов в минуту, на 360 для градусов в секунду 6.283185 для радиан в секунду и т.д..

Заметьте, что "импульсов за оборот" не тоже самое, что "counts (отсчетов) за оборот". Импульс это завершенный квадратурный цикл. Большинство энкодеров будет отсчитывать 4 раза за полный оборот.


8.8.5 Функции

Этот компонент экспортирует две функции. Каждая оказывает влияние на все симулированные энкодеры.

(FUNCT) sim-encoder.make-pulses – Высоко скоростная функция для генерации квадратурных импульсов (без floating point).

(FUNCT) sim-encoder.update-speed – Низко скоростная функция для чтения скорости, масштабирования и настройки .make-pulses.


8.9 Debounce

Debounce это компонент реального времени, который может фильтровать помехи создаваемые контактами механических переключателей. Он также может быть полезен в других, где короткие импульсы должны быть отвергнуты.


8.9.1 Загрузка

emc2$ halcmd loadrt debounce cfg=<config-string>

<config-string> это последовательность разделенных запятыми целых чисел. Каждое число загружает группу идентичных фильтров debounce, число определяет сколько фильтров будет в группе.

Например:

emc2$ halcmd loadrt debounce cfg=1,4,2

загрузит три группы фильтров. Группа 0 содержит 1 фильтр, группа 1 - 4 фильтра, группа 2 - 2 фильтра. Значение по-умолчанию для <config-string> равно "1", что загружает одну группу содержащую 1 фильтр. Максимальное количество групп равно 8 (определенно параметром MAX_GROUPS в debounce.c). Максимальное количество фильтров в группе ограничено только размером памяти. Каждая группа полностью независима. Все фильтры в одной группе одинаковы, и все они обновляются одной функцией, в одно и тоже время. В следующих описаниях <G> это номер группы и <F> это номер фильтра в группе. Первая фильтр это группа 0 фильтр 0.


8.9.2 Выгрузка

emc2$ halcmd unloadrt debounce


8.9.3 Пины

Каждый индивидуальный фильтр имеет два пина:


  • (BIT) debounce.<G>.<F>.in – Ввод фильтра <F> в группе <G>.
  • (BIT) debounce.<G>.<F>.out – Вывод фильтра <F> в группе <G>.


8.9.4 Параметры

Каждая группа фильтров имеет один параметр2.


  • (S32) debounce.<G>.delay – Задержка фильтра для всех фильтров в группе <G>.

Задержка фильтра измеряется в периодах потока (thread). Минимальная задержка равна 0. Вывод фильтра нулевой задержки в точности повторяет его ввод - он ничего не делает. С увельичением задержки, все более длинные помехи (глюки) отклоняются. Если задержка равна 4, все сигналы короче или равные 4 периодам потока будут отклонены.


8.9.5 Функции

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


  • (FUNCT) debounce.<G> – Обновляет все фильтры в группе <G>.

2 Каждый индивидуальный фильтр также имеет внутреннюю переменную состояния. Есть возможность экспортировать эту переменную в качестве параметра (задается во время компиляции). Это введено для целей тестирования, и просто тратит зазря память в обычных условиях.


8.10 Siggen

Siggen это компонент реального времени который генерирует квадратные, треугольные или синусоидальные волны. Он преимущественно используется для тестирования.


8.10.1 Загрузка

[cmd]emc2$ halcmd loadrt siggen [num_chan=<chans>][/cmd]

<chans> это количество генераторов сигналов которое вы хотите загрузить. Если numchan не указан один генератор сигналов будет загружен. Максимально количество генераторов 16 (заданно параметром MAX_CHAN в siggen.c). Каждый генератор полностью независим. В следующих описаниях <chan> это номер специфичного генератора сигналов (нумерация начинается с 0).


8.10.2 Выгрузка

[cmd]emc2$ halcmd unloadrt siggen[/cmd]


8.10.3 Пины

Каждый генератор имеет 6 выходных пинов.


  • (FLOAT) siggen.<chan>.sine – Синусоидальный вывод.
  • (FLOAT) siggen.<chan>.cosine – Косинусоидальный вывод.
  • (FLOAT) siggen.<chan>.sawtooth – Пилообразный вывод.
  • (FLOAT) siggen.<chan>.triangle – Треугольный вывод.
  • (FLOAT) siggen.<chan>.square – Квадратный вывод. Положителен, когда треугольный или косинусоидальный сигналы возрастают, и синусоидальный сигнал отрицательный.
  • (FLOAT) siggen.<chan>.clock – Тактовая частота.

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


  • (FLOAT) siggen.<chan>.frequency – Устанавливает частоту в Герцах, значение по умолчанию 1 Гц.
  • (FLOAT) siggen.<chan>.amplitude – Устанавливает пик амплитуды выходных волн, по умолчанию 1 Гц.
  • (FLOAT) siggen.<chan>.offset – Устанавливает DC отступ выходных волн, по умолчанию 0.

Например, если siggen.0.amplitude равна 1.0 и siggen.0.offset равен 0.0, выводы будут перемещаться от -1.0 до +1.0. Если siggen.0.amplitude равна 2.5 и siggen.0.offset равен 10.0, тогда выводы будут от 7.5 до 12.5.

8.10.4 Параметры 3

Нет.


8.10.5 Функции

  • (FUNCT) siggen.<chan>.update – Вычисляет новые значения для всех пяти выводов.

3 До версии 2.1, frequency, amplitude и offset были параметрами. Они были заменены пинами, чтобы разрешить их управление другими компонентами.


Оглавление книги LinuxCNC Integrators Manual

Глава Название
Глава 1 LinuxCNC Integrators Manual Глава I - Важные определения
Глава 2 LinuxCNC Integrators Manual Глава II - Аппаратное обеспечение (Hardware)
Глава 3 LinuxCNC Integrators Manual Глава III - Конфигурационные файлы
Глава 4 Доделать! LinuxCNC Integrators Manual Глава IV - Файл INI
Глава 5 Доделать! LinuxCNC Integrators Manual Глава V - LinuxCNC и HAL
Глава 6 Доделать! LinuxCNC Integrators Manual Глава VI - Основы HAL
Глава 7 Доделать! LinuxCNC Integrators Manual Глава VII - Настройка шаговых двигателей
Глава 8 Доделать! LinuxCNC Integrators Manual Глава VIII - Компонетны HAL
Глава 9 Забыли перевести! LinuxCNC Integrators Manual Глава IX - Параллельный порт
Глава 10 Доделать! LinuxCNC Integrators Manual Глава X - Пользовательский интерфейс HAL (Halui)
Глава 11 Доделать! LinuxCNC Integrators Manual Глава XI - Примеры HAL
Глава 12 Доделать! LinuxCNC Integrators Manual Глава XII - Virtual Control Panel - Виртуальная панель управления