Что сделал:
1. в hal добавил пид:
Код: Выделить всё
# загружаем pid
loadrt pid names=pid.x,pid.z
.......
# добавляем функции расчета pid
addf pid.x.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
т.е. параметры pid
вывод на аналоговый выход и обработку энкодера, это все из твоего analog
Код: Выделить всё
net x-pos-cmd axis.0.motor-pos-cmd
net x-enable axis.0.amp-enable-out
# PID parameters
setp pid.x.Pgain [AXIS_0]P
setp pid.x.Igain [AXIS_0]I
setp pid.x.Dgain [AXIS_0]D
setp pid.x.bias [AXIS_0]BIAS
setp pid.x.FF0 [AXIS_0]FF0
setp pid.x.FF1 [AXIS_0]FF1
setp pid.x.FF2 [AXIS_0]FF2
setp pid.x.deadband [AXIS_0]DEADBAND
setp pid.x.maxoutput [AXIS_0]MAX_OUTPUT
# PID signals
net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-output => pid.x.output
net x-pos-cmd => pid.x.command
net x-vel-fb => pid.x.feedback-deriv
net x-pos-fb => pid.x.feedback
# Analog signals
setp hm2_5i25.0.7i77.0.1.analogout0-scalemax [AXIS_0]OUTPUT_SCALE
setp hm2_5i25.0.7i77.0.1.analogout0-minlim [AXIS_0]OUTPUT_MIN_LIMIT
setp hm2_5i25.0.7i77.0.1.analogout0-maxlim [AXIS_0]OUTPUT_MAX_LIMIT
net x-output => hm2_5i25.0.7i77.0.1.analogout0
# enable _all_ sserial pwmgens
net x-enable => hm2_5i25.0.7i77.0.1.analogena
# ---Encoder feedback signals/setup---
setp hm2_5i25.0.encoder.00.counter-mode 0
setp hm2_5i25.0.encoder.00.filter 1
setp hm2_5i25.0.encoder.00.index-invert 0
setp hm2_5i25.0.encoder.00.index-mask 0
setp hm2_5i25.0.encoder.00.index-mask-invert 0
setp hm2_5i25.0.encoder.00.scale [AXIS_0]ENCODER_SCALE
net x-pos-fb <= hm2_5i25.0.encoder.00.position
net x-vel-fb <= hm2_5i25.0.encoder.00.velocity
net x-pos-fb => axis.0.motor-pos-fb
net x-index-enable axis.0.index-enable <=> hm2_5i25.0.encoder.00.index-enable
net x-pos-rawcounts <= hm2_5i25.0.encoder.00.rawcounts
Код: Выделить всё
net x-output => hm2_5i25.0.stepgen.00.position-cmd
Пока все только для оси X...
А и еще в ini добавил параметры для pid и энкодера - все это тоже из твоего analog.
Код: Выделить всё
#********************
# Axis X
#********************
[AXIS_0]
TYPE = LINEAR
# Тут остановится после хоуминга
HOME = 0.0
# Положение датчика
HOME_OFFSET = 0.0
# Скорость поиска НОМЕ
HOME_SEARCH_VEL = 2.000000
HOME_LATCH_VEL = -1.000
# Поиск по Z метке
HOME_USE_INDEX = YES
# Рассогласование
FERROR = 100000
MIN_FERROR = 10000
# скорость и ускорение и ускорение для "шаговика"
MAX_VELOCITY = 200
MAX_ACCELERATION = 500
STEPGEN_MAX_ACCEL = 12500
# these are in nanoseconds
DIRSETUP = 1000
DIRHOLD = 1000
STEPLEN = 1200
STEPSPACE = 1200
STEP_SCALE = 1000.0
MIN_LIMIT = -1000
MAX_LIMIT = 1000
# Параметры PID
P = 1.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 0.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 10.0
ENCODER_SCALE = 4000.0
OUTPUT_SCALE = 10.0
OUTPUT_MIN_LIMIT = -10.0
OUTPUT_MAX_LIMIT = 10.0