LinuxCNC Integrators Manual Глава VIII - Компонетны HAL
Содержание
- 1 LinuxCNC Integrators Manual Глава VIII - Компонетны HAL
- 2 Компонетны HAL
- 2.1 8.1 Команды и компоненты пользовательского пространства
- 2.2 8.2 Компоненты реального времени
- 2.2.1 8.2.1 abs
- 2.2.2 8.2.2 and2
- 2.2.3 8.2.3 at_pid
- 2.2.4 8.2.4 axis
- 2.2.5 8.2.5 biquad
- 2.2.6 8.2.6 bldc_hall3
- 2.2.7 8.2.7 blend
- 2.2.8 8.2.8 charge_pump
- 2.2.9 8.2.9 clarke2
- 2.2.10 8.2.10 clarke3
- 2.2.11 8.2.11 clarkeinv
- 2.2.12 8.2.12 classicladder
- 2.2.13 8.2.13 comp
- 2.2.14 8.2.14 constant
- 2.2.15 8.2.15 conv_bit_s32
- 2.2.16 8.2.16 conv_bit_u32
- 2.2.17 8.2.17 conv_float_s32
- 2.2.18 8.2.18 conv_float_u32
- 2.2.19 8.2.19 conv_s32_bit
- 2.2.20 8.2.20 conv_s32_float
- 2.2.21 8.2.21 conv_s32_u32
- 2.2.22 8.2.22 conv_u32_bit
- 2.2.23 8.2.23 conv_u32_float
- 2.2.24 8.2.24 conv_u32_s32
- 2.2.25 8.2.25 counter
- 2.2.26 8.2.26 ddt
- 2.2.27 8.2.27 deadzone
- 2.2.28 8.2.28 debounce
- 2.2.29 8.2.29 edge
- 2.2.30 8.2.30 encoder
- 2.2.31 8.2.31 encoder_ratio
- 2.2.32 8.2.32 estop_latch
- 2.2.33 8.2.33 feedcomp
- 2.2.34 8.2.34 flipflop
- 2.2.35 8.2.35 freqgen
- 2.2.36 8.2.36 gantrykins
- 2.2.37 8.2.37 gearchange
- 2.2.38 8.2.38 genhexkins
- 2.2.39 8.2.39 genserkins
- 2.2.40 8.2.40 hm2_7i43
- 2.2.41 8.2.41 hm2_pci
- 2.2.42 8.2.42 hostmot2
- 2.2.43 8.2.43 hypot
- 2.2.44 8.2.44 ilowpass
- 2.2.45 8.2.45 integ
- 2.2.46 8.2.46 invert
- 2.2.47 8.2.47 joyhandle
- 2.2.48 8.2.48 kins
- 2.2.49 8.2.49 knob2float
- 2.2.50 8.2.50 limit1
- 2.2.51 8.2.51 limit2
- 2.2.52 8.2.52 limit3
- 2.2.53 8.2.53 logic
- 2.2.54 8.2.54 lowpass
- 2.2.55 8.2.55 lut5
- 2.2.56 8.2.56 maj3
- 2.2.57 8.2.57 match8
- 2.2.58 8.2.58 maxkins
- 2.2.59 8.2.59 minmax
- 2.2.60 8.2.60 motion
- 2.2.61 8.2.61 mult2
- 2.2.62 8.2.62 mux2
- 2.2.63 8.2.63 mux4
- 2.2.64 8.2.64 mux8
- 2.2.65 8.2.65 near
- 2.2.66 8.2.66 not
- 2.2.67 8.2.67 offset
- 2.2.68 8.2.68 oneshot
- 2.2.69 8.2.69 or2
- 2.2.70 8.2.70 pid
- 2.2.71 8.2.71 pluto_servo
- 2.2.72 8.2.72 pluto_step
- 2.2.73 8.2.73 pwmgen
- 2.2.74 8.2.74 rotatekins
- 2.2.75 8.2.75 sample_hold
- 2.2.76 8.2.76 sampler
- 2.2.77 8.2.77 scale
- 2.2.78 8.2.78 scarakins
- 2.2.79 8.2.79 select8
- 2.2.80 8.2.80 serport
- 2.2.81 8.2.81 siggen
- 2.2.82 8.2.82 sim_encoder
- 2.2.83 8.2.83 sphereprobe
- 2.2.84 8.2.84 stepgen
- 2.2.85 8.2.85 steptest
- 2.2.86 8.2.86 streamer
- 2.2.87 8.2.87 sum2
- 2.2.88 8.2.88 supply
- 2.2.89 8.2.89 thc
- 2.2.90 8.2.90 threads
- 2.2.91 8.2.91 threadtest
- 2.2.92 8.2.92 timedelay
- 2.2.93 8.2.93 timedelta
- 2.2.94 8.2.94 toggle
- 2.2.95 8.2.95 toggle2nist
- 2.2.96 8.2.96 tripodkins
- 2.2.97 8.2.97 tristate_bit
- 2.2.98 8.2.98 tristate_float
- 2.2.99 8.2.99 trivkins
- 2.2.100 8.2.100 updown
- 2.2.101 8.2.101 wcomp
- 2.2.102 8.2.102 weighted_sum
- 2.2.103 8.2.103 xor2
- 2.3 8.3 Hal Meter
- 2.4 8.4 Stepgen
- 2.5 8.5 PWMgen
- 2.6 8.6 Энкодер
- 2.7 8.7 PID
- 2.8 8.8 Симулированный энкодер. Simulated Encoder
- 2.9 8.9 Debounce
- 2.10 8.10 Siggen
- 3 Оглавление книги LinuxCNC Integrators Manual
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 - Виртуальная панель управления |