Настройка GPIO драйвера

GPIO драйвер - это компонент программы LinuxCNC/Machinekit, который позволяет самой программе и всем её компонентам общаться с внешним миром. GPIO драйвер работает абсолютно также как LPT драйвер на настольных ПК, отличия есть только в параметрах запуска.

Параметры запуска

ВНИМАНИЕ: Нельзя указывать в списке входных пинов те, которые были в списке выходных. Нельзя указывать номера пинов, обозначенных на плате как GND (земля), 3.3V и 5V. Примеры: # --- ОШИБКА --- # пины 2,4 - это 5V, пин 1 - это 3.3V loadrt hal_gpio_h3 input_pins=1,2,3,4 # пин 8 указан в обоих списках loadrt hal_gpio_h3 output_pins=3,5,7,8 input_pins=8,33,35,37


Пины

Вместо XX надо написать номер или имя GPIO пина, указанного в списке входных/выходных пинов. Пины от 0 до 9 надо указывать как 00, 01, 02, .. , 09. Примеры: loadrt hal_gpio_h3 output_pins=3,5,7,8 input_pins=33,35,PA20 # --- ПРАВИЛЬНО --- net xstep => hal_gpio_h3.pin-03-out net xdir => hal_gpio_h3.pin-05-out net ystep => hal_gpio_h3.pin-07-out net ydir => hal_gpio_h3.pin-08-out net home-x <= hal_gpio_h3.pin-33-in net home-y <= hal_gpio_h3.pin-35-in-not net home-z <= hal_gpio_h3.pin-PA20-in # --- ОШИБКА --- net xstep => hal_gpio_h3.pin-3-out # нет такого пина net xdir => hal_gpio_h3.pin-10-out # нет такого пина net ystep => hal_gpio_h3.pin-33-in # на выход указан входной пин net ydir => hal_gpio_h3.pin-PA13-out # нет такого пина net home-x <= hal_gpio_h3.pin-8-out # на вход указан выходной пин net home-y <= hal_gpio_h3.pin-34-in # нет такого пина net home-z <= hal_gpio_h3.pin-PA20-out # нет такого пина


Параметры

Примеры: loadrt hal_gpio_h3 output_pins=3,5,7,8 setp hal_gpio_h3.reset-time 5000 # сброс пинов через 5000 наносекунд net xstep => hal_gpio_h3.pin-03-out net xdir => hal_gpio_h3.pin-05-out setp hal_gpio_h3.pin-03-out-reset 1 # сбрасывать пин 3 setp hal_gpio_h3.pin-05-out-invert 1 # инвертировать пин 5


Функции

Примеры: loadrt hal_gpio_h3 output_pins=3,5,7,8 setp hal_gpio_h3.reset-time 5000 addf hal_gpio_h3.read base-thread # чтение входных пинов addf stepgen.make-pulses base-thread # генерация шагов addf hal_gpio_h3.write base-thread # запись выходных пинов addf hal_gpio_h3.reset base-thread # сброс нужных пинов


Удваиваем частоту шагов

С помощью функции hal_gpio_h3.reset мы можем увеличить максимальную частоту шагов вдвое. Как это работает? Чтобы сделать полный шаг генератору шагов (stepgen) нужно выставить состояние пина в 1 и, через какое-то время, вернуть его обратно в 0. За время одного базового периода (base-thread) функция генератора stepgen.make-pulses сделать этого не может. Поэтому на помощь генератору идёт сам GPIO драйвер с функцией hal_gpio_h3.reset. Эта функция ждёт указанного время (hal_gpio_h3.reset-time) и сама сбрасывает состояние нужных пинов обратно в 0.

В данном примере мы будем использовать 3 генератора STEP/DIR. Максимум генераторов - 16. loadrt trivkins loadrt tp loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES kins=trivkins tp=tp loadrt hal_gpio_h3 output_pins=3,5,7,8,10,11,13 loadrt stepgen step_type=0,0,0 addf hal_gpio_h3.read base-thread addf stepgen.make-pulses base-thread addf hal_gpio_h3.write base-thread # включаем функцию hal_gpio_h3.reset addf hal_gpio_h3.reset base-thread addf stepgen.capture-position servo-thread addf motion-command-handler servo-thread addf motion-controller servo-thread addf stepgen.update-freq servo-thread net xstep => hal_gpio_h3.pin-03-out net xdir => hal_gpio_h3.pin-05-out net ystep => hal_gpio_h3.pin-07-out net ydir => hal_gpio_h3.pin-08-out net zstep => hal_gpio_h3.pin-10-out net zdir => hal_gpio_h3.pin-11-out net xenable => hal_gpio_h3.pin-13-out # указываем время сброса пинов setp hal_gpio_h3.reset-time 5000 # указываем STEP пины, которые будет сбрасывать hal_gpio_h3.reset setp hal_gpio_h3.pin-03-out-reset 1 setp hal_gpio_h3.pin-07-out-reset 1 setp hal_gpio_h3.pin-10-out-reset 1 # при настройке генераторов выставляем параметр stepspace = 0 # этим значением мы сообщаем генератору, что пин STEP # будет сбрасываться функцией hal_gpio_h3.reset setp stepgen.0.position-scale [AXIS_0]SCALE setp stepgen.0.steplen 1 setp stepgen.0.stepspace 0 setp stepgen.0.dirhold 35000 setp stepgen.0.dirsetup 35000 setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-cmd net xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb net xstep <= stepgen.0.step net xdir <= stepgen.0.dir net xenable axis.0.amp-enable-out => stepgen.0.enable setp stepgen.1.position-scale [AXIS_1]SCALE setp stepgen.1.steplen 1 setp stepgen.1.stepspace 0 setp stepgen.1.dirhold 35000 setp stepgen.1.dirsetup 35000 setp stepgen.1.maxaccel [AXIS_1]STEPGEN_MAXACCEL net ypos-cmd axis.1.motor-pos-cmd => stepgen.1.position-cmd net ypos-fb stepgen.1.position-fb => axis.1.motor-pos-fb net ystep <= stepgen.1.step net ydir <= stepgen.1.dir net yenable axis.1.amp-enable-out => stepgen.1.enable setp stepgen.2.position-scale [AXIS_2]SCALE setp stepgen.2.steplen 1 setp stepgen.2.stepspace 0 setp stepgen.2.dirhold 35000 setp stepgen.2.dirsetup 35000 setp stepgen.2.maxaccel [AXIS_2]STEPGEN_MAXACCEL net zpos-cmd axis.2.motor-pos-cmd => stepgen.2.position-cmd net zpos-fb stepgen.2.position-fb => axis.2.motor-pos-fb net zstep <= stepgen.2.step net zdir <= stepgen.2.dir net zenable axis.2.amp-enable-out => stepgen.2.enable