Re: Настраиваем контроллер to_pci.
Добавлено: 12 апр 2018, 16:57
Прикрепите сюда свои ini и hal
Статьи, обзоры, цены на станки и комплектующие.
https://cnc-club.ru/forum/
#net x-pos-fb => pid.x.feedback - в этой строке уберите знак "решётка".Nikomas писал(а):Не могли бы вы исправить hal так, чтобы все заработало?
Это не важно 10в или 9.98Nikomas писал(а):Но на макс скорости напр. 9,98В. Это китайским мультиметром. Может оно на самом деле и 10В.
Да, спасибо за наводку. Но основательно проверить приводы без настроенной ПИД петли не получается. Например, нажимаю переместиться на 0,1 по оси. Нет реакции. Нажимаю второй - стоим. Третий - стоим. Четвертый - едем на 1мм...mmv писал(а):Nikomas, всё у вас заработало?
Да, конечно.mmv писал(а):Так у вас подключен энкодер?
Так и есть. Останавливается с ошибкой в пару сотых.mmv писал(а):Просто при старте ошибка набегать должна и тормозить будет с небольшой инерцией
Наоборот, тогда около входа приёмника сопротивление между экраном и землёй будет минимально.Duhas писал(а):имхо, экран на AGND со стороны источника сигнала
Код: Выделить всё
[EMC]
# Name of machine, for use with display, etc.
MACHINE = to_pci
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
#DEBUG = 0x00000003
#DEBUG = 0x00000007
DEBUG = 0
[DISPLAY]
# Name of display program, e.g., tkemc
DISPLAY = axis
CYCLE_TIME = 0.200
MAX_FEED_OVERRIDE = 1.500000
MAX_SPINDLE_OVERRIDE = 1.000000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/cnc/linuxcnc/nc_files
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 20.000000
MAX_LINEAR_VELOCITY = 125.000000
MIN_LINEAR_VELOCITY = 0.010000
DEFAULT_ANGULAR_VELOCITY = 30.000000
MAX_ANGULAR_VELOCITY = 250.000000
MIN_ANGULAR_VELOCITY = 0.010000
EDITOR = gedit
GEOMETRY = XYZ
PYVCP = Panel.xml
[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python
[TASK]
# Name of task controller program, e.g., milltask
TASK = milltask
# Cycle time, in seconds, that task controller will sleep between polls
CYCLE_TIME = 0.010
[RS274NGC]
# File containing interpreter variables
#PARAMETER_FILE
[EMCMOT]
EMCMOT = motmod
# Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0
# Interval between tries to emcmot, in seconds
COMM_WAIT = 0.010
# Servo task period, in nanoseconds
SERVO_PERIOD = 1000000
[HAL]
# The run script first uses halcmd to execute any HALFILE
# files, and then to execute any individual HALCMD commands.
# list of hal config files to run through halcmd
# files are executed in the order in which they appear
HALFILE = egantry_test.hal
POSTGUI_HALFILE = custom_postgui.hal
[TRAJ]
AXES = 4
JOINTS = 2
COORDINATES = X Y Z
HOME = 0 0 0 0
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 100.0
MAX_VELOCITY = 250.0
DEFAULT_ACCELERATION = 200.0
MAX_ACCELERATION = 10
[AXIS_0]
NAME = X1
TYPE = LINEAR
HOME = 0.0
FERROR = 1000.0
MIN_FERROR = 1000.0
MAX_VELOCITY = 200.0
MAX_ACCELERATION = 5000.0
P = 1
I = 0
D = 0
FF0 = 0
FF1 = 0.02
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 10
ENCODER_SCALE = 2000
OUTPUT_SCALE = 1
MIN_LIMIT = -250.0
MAX_LIMIT = 250.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = 3.00000
HOME_LATCH_VEL = -0.1
HOME_FINAL_VEL = 0.01000
HOME_USE_INDEX = YES
HOME_SEQUENCE = 1
HOME_IGNORE_LIMITS = YES
[AXIS_1]
NAME = Y
TYPE = LINEAR
HOME = 0.0
FERROR = 1000.0
MIN_FERROR = 1000.0
MAX_VELOCITY = 200.0
MAX_ACCELERATION = 5000.0
P = 1
I = 0
D = 0
FF0 = 0
FF1 = 0.02
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 10
ENCODER_SCALE = 2000
OUTPUT_SCALE = 1
MIN_LIMIT = -250.0
MAX_LIMIT = 250.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = 3.00000
HOME_LATCH_VEL = -0.1
HOME_FINAL_VEL = 0.01000
HOME_USE_INDEX = YES
HOME_SEQUENCE = 1
HOME_IGNORE_LIMITS = YES
[AXIS_2]
NAME = Z
TYPE = LINEAR
HOME = 0.0
FERROR = 1000.0
MIN_FERROR = 1000.0
MAX_VELOCITY = 200.0
MAX_ACCELERATION = 5000.0
P = 1
I = 0
D = 0
FF0 = 0
FF1 = 0
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 10
ENCODER_SCALE = 500
OUTPUT_SCALE = 10
MIN_LIMIT = -250.0
MAX_LIMIT = 250.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = 3.00000
HOME_LATCH_VEL = -0.1
HOME_FINAL_VEL = 0.01000
HOME_USE_INDEX = YES
HOME_SEQUENCE = 1
HOME_IGNORE_LIMITS = YES
[AXIS_3]
NAME = X2
TYPE = LINEAR
HOME = 0.0
FERROR = 1000.0
MIN_FERROR = 1000.0
MAX_VELOCITY = 200.0
MAX_ACCELERATION = 5000.0
P = 1
I = 0
D = 0
FF0 = 0
FF1 = 0.02
FF2 = 0
BIAS = 0
DEADBAND = 0
MAX_OUTPUT = 10
ENCODER_SCALE = 2000
OUTPUT_SCALE = 1
MIN_LIMIT = -250.0
MAX_LIMIT = 250.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = 3.00000
HOME_LATCH_VEL = -0.1
HOME_FINAL_VEL = 0.01000
HOME_USE_INDEX = YES
HOME_SEQUENCE = 1
HOME_IGNORE_LIMITS = YES
[EMCIO]
# Name of IO controller program, e.g., io
EMCIO = io
# cycle time, in seconds
CYCLE_TIME = 0.100
# tool table file
TOOL_TABLE = tool.tbl
Код: Выделить всё
loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
# My driver
loadrt to_pci
loadrt pid names=pid.x,pid.y,pid.z,pid.a
# ################################################
# THREADS
# ################################################
addf to_pci.1.update servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs servo-thread
addf pid.a.do-pid-calcs servo-thread
addf pid.y.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
# ######################################################
# -------E-STOP--------
# ######################################################
net estop-ext iocontrol.0.emc-enable-in <= iocontrol.0.user-enable-out
# ######################################################
# AXIS X1
# ######################################################
# -------PID--------
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
net x-vel-cmd => pid.x.command-deriv
net x-output => pid.x.output
net x-vel-fb => pid.x.feedback-deriv
net x-enable => pid.x.enable
net x-output pid.x.output
net x-pos-cmd => pid.x.command
net x-pos-fb => pid.x.feedback
# --------feed back--------------
setp to_pci.1.feedback.enc_scale0 [AXIS_0]ENCODER_SCALE
net x-pos-fb <= to_pci.1.feedback.encoder0
net x-pos-fb => axis.0.motor-pos-fb
net x-index-enable axis.0.index-enable <=> to_pci.1.feedback.index_en0
# ------PWM Generator signals/setup----------------------
net x-enable axis.0.amp-enable-out
net x-enable => to_pci.1.enable_drive
setp to_pci.1.PWM.out_scale0 [AXIS_0]OUTPUT_SCALE
net x-output => to_pci.1.PWM.dcontrol0
net x-pos-cmd axis.0.motor-pos-cmd
# ######################################################
# AXIS X2
# ######################################################
# -------PID--------
setp pid.a.Pgain [AXIS_0]P
setp pid.a.Igain [AXIS_0]I
setp pid.a.Dgain [AXIS_0]D
setp pid.a.bias [AXIS_0]BIAS
setp pid.a.FF0 [AXIS_0]FF0
setp pid.a.FF1 [AXIS_0]FF1
setp pid.a.FF2 [AXIS_0]FF2
setp pid.a.deadband [AXIS_0]DEADBAND
setp pid.a.maxoutput [AXIS_0]MAX_OUTPUT
net a-vel-cmd => pid.a.command-deriv
net a-output => pid.a.output
net a-vel-fb => pid.a.feedback-deriv
net a-enable => pid.a.enable
net a-output pid.a.output
net a-pos-cmd => pid.a.command
net a-pos-fb => pid.a.feedback
# --------feed back--------------
setp to_pci.1.feedback.enc_scale1 [AXIS_0]ENCODER_SCALE
net a-pos-fb <= to_pci.1.feedback.encoder1
net a-pos-fb => axis.3.motor-pos-fb
net a-index-enable axis.3.index-enable <=> to_pci.1.feedback.index_en1
# ------PWM Generator signals/setup----------------------
net a-enable axis.3.amp-enable-out
#net a-enable => to_pci.1.enable_drive
setp to_pci.1.PWM.out_scale0 [AXIS_3]OUTPUT_SCALE
net a-output => to_pci.1.PWM.dcontrol1
net a-pos-cmd axis.3.motor-pos-cmd
# ######################################################
# AXIS Y
# ######################################################
# -------PID--------
setp pid.y.Pgain [AXIS_0]P
setp pid.y.Igain [AXIS_0]I
setp pid.y.Dgain [AXIS_0]D
setp pid.y.bias [AXIS_0]BIAS
setp pid.y.FF0 [AXIS_0]FF0
setp pid.y.FF1 [AXIS_0]FF1
setp pid.y.FF2 [AXIS_0]FF2
setp pid.y.deadband [AXIS_0]DEADBAND
setp pid.y.maxoutput [AXIS_0]MAX_OUTPUT
net y-vel-cmd => pid.y.command-deriv
net y-output => pid.y.output
net y-vel-fb => pid.y.feedback-deriv
net y-enable => pid.y.enable
net y-output pid.y.output
net y-pos-cmd => pid.y.command
net y-pos-fb => pid.y.feedback
# --------feed back--------------
setp to_pci.1.feedback.enc_scale3 [AXIS_0]ENCODER_SCALE
net y-pos-fb <= to_pci.1.feedback.encoder3
net y-pos-fb => axis.1.motor-pos-fb
net y-index-enable axis.1.index-enable <=> to_pci.1.feedback.index_en3
# ------PWM Generator signals/setup----------------------
net y-enable axis.1.amp-enable-out
#net y-enable => to_pci.1.enable_drive
setp to_pci.1.PWM.out_scale0 [AXIS_1]OUTPUT_SCALE
net y-output => to_pci.1.PWM.dcontrol3
net y-pos-cmd axis.1.motor-pos-cmd
# ######################################################
# AXIS Z
# ######################################################
# -------PID--------
setp pid.z.Pgain [AXIS_0]P
setp pid.z.Igain [AXIS_0]I
setp pid.z.Dgain [AXIS_0]D
setp pid.z.bias [AXIS_0]BIAS
setp pid.z.FF0 [AXIS_0]FF0
setp pid.z.FF1 [AXIS_0]FF1
setp pid.z.FF2 [AXIS_0]FF2
setp pid.z.deadband [AXIS_0]DEADBAND
setp pid.z.maxoutput [AXIS_0]MAX_OUTPUT
net z-vel-cmd => pid.z.command-deriv
net z-output => pid.z.output
net z-vel-fb => pid.z.feedback-deriv
net z-enable => pid.z.enable
net z-output pid.z.output
net z-pos-cmd => pid.z.command
net z-pos-fb => pid.z.feedback
# --------feed back--------------
setp to_pci.1.feedback.enc_scale2 [AXIS_2]ENCODER_SCALE
net z-pos-fb <= to_pci.1.feedback.encoder2
net z-pos-fb => axis.2.motor-pos-fb
net z-index-enable axis.2.index-enable <=> to_pci.1.feedback.index_en2
# ------PWM Generator signals/setup----------------------
net z-enable axis.2.amp-enable-out
#net z-enable => to_pci.1.enable_drive
setp to_pci.1.PWM.out_scale0 [AXIS_0]OUTPUT_SCALE
net z-output => to_pci.1.PWM.dcontrol2
net z-pos-cmd axis.2.motor-pos-cmd
#-----------DISCRET SIGNALS -----------------------------------
#net buton_test => to_pci.1.pins.pin-05-out
#-----------INPUTS --------------------------------------------
net led-alm => to_pci.1.pins.pin-00-in
net led-son => to_pci.1.pins.pin-01-in
net led-rdy-x1 => to_pci.1.pins.pin-02-in
net led-rdy-x2 => to_pci.1.pins.pin-03-in
net led-rdy-y => to_pci.1.pins.pin-04-in
net led-rdy-z => to_pci.1.pins.pin-05-in
#-----------OUTPUTS --------------------------------------------
net x-enable => to_pci.1.pins.pin-00-out
Код: Выделить всё
# ######################################################
# AXIS Z
# ######################################################
# -------PID--------
setp pid.z.Pgain [AXIS_2]P
setp pid.z.Igain [AXIS_2]I
setp pid.z.Dgain [AXIS_2]D
setp pid.z.bias [AXIS_2]BIAS
setp pid.z.FF0 [AXIS_2]FF0
setp pid.z.FF1 [AXIS_2]FF1
setp pid.z.FF2 [AXIS_2]FF2
setp pid.z.deadband [AXIS_2]DEADBAND
setp pid.z.maxoutput [AXIS_2]MAX_OUTPUT
net z-vel-cmd => pid.z.command-deriv
net z-output => pid.z.output
net z-vel-fb => pid.z.feedback-deriv
net z-enable => pid.z.enable
net z-output pid.z.output
net z-pos-cmd => pid.z.command
net z-pos-fb => pid.z.feedback
# --------feed back--------------
setp to_pci.1.feedback.enc_scale2 [AXIS_2]ENCODER_SCALE
net z-pos-fb <= to_pci.1.feedback.encoder2
net z-pos-fb => axis.2.motor-pos-fb
net z-index-enable axis.2.index-enable <=> to_pci.1.feedback.index_en2
# ------PWM Generator signals/setup----------------------
net z-enable axis.2.amp-enable-out
#net z-enable => to_pci.1.enable_drive
setp to_pci.1.PWM.out_scale2 [AXIS_2]OUTPUT_SCALE
net z-output => to_pci.1.PWM.dcontrol2
net z-pos-cmd axis.2.motor-pos-cmd
Без изменений. Завтра попробую напрямую батарейкой поехать.mmv писал(а):Если поедет