Страница 33 из 72

Re: Настраиваем контроллер to_pci.

Добавлено: 12 апр 2018, 16:57
mmv
Прикрепите сюда свои ini и hal

Re: Настраиваем контроллер to_pci.

Добавлено: 12 апр 2018, 22:51
Nikomas
Вот.

Re: Настраиваем контроллер to_pci.

Добавлено: 12 апр 2018, 23:00
mmv
В этом конфиге разомкнута обратная связь.
Поставьте назад OUTPUT_SCALE = 1
Тут нужно проверить вот что: Изменяя положение оси X.( фактически axis.0.motor-pos-cmd) в пределах от -10 до 10 можно наблюдать равное этому значению напряжение на выходе первого канала. И проверить что соответствует направление вращения в нужную сторону.

Re: Настраиваем контроллер to_pci.

Добавлено: 13 апр 2018, 07:00
Nikomas
Не могли бы вы исправить hal так, чтобы все заработало? Пока мотор стартует на макс. скорости не могу поменять даже направление вращения. Но на макс скорости напр. 9,98В. Это китайским мультиметром. Может оно на самом деле и 10В.

Re: Настраиваем контроллер to_pci.

Добавлено: 13 апр 2018, 19:11
mmv
Nikomas писал(а):Не могли бы вы исправить hal так, чтобы все заработало?
#net x-pos-fb => pid.x.feedback - в этой строке уберите знак "решётка".
Nikomas писал(а):Но на макс скорости напр. 9,98В. Это китайским мультиметром. Может оно на самом деле и 10В.
Это не важно 10в или 9.98

Re: Настраиваем контроллер to_pci.

Добавлено: 15 апр 2018, 20:35
mmv
Nikomas, всё у вас заработало?

Re: Настраиваем контроллер to_pci.

Добавлено: 15 апр 2018, 20:57
Nikomas
mmv писал(а):Nikomas, всё у вас заработало?
Да, спасибо за наводку. Но основательно проверить приводы без настроенной ПИД петли не получается. Например, нажимаю переместиться на 0,1 по оси. Нет реакции. Нажимаю второй - стоим. Третий - стоим. Четвертый - едем на 1мм...

Re: Настраиваем контроллер to_pci.

Добавлено: 15 апр 2018, 23:41
mmv
Так у вас подключен энкодер?

Re: Настраиваем контроллер to_pci.

Добавлено: 16 апр 2018, 09:02
Nikomas
mmv писал(а):Так у вас подключен энкодер?
Да, конечно.

Re: Настраиваем контроллер to_pci.

Добавлено: 16 апр 2018, 20:37
mmv
Тогда все должно работать нормально и без подстройки pid. Просто при старте ошибка набегать должна и тормозить будет с небольшой инерцией.

Re: Настраиваем контроллер to_pci.

Добавлено: 17 апр 2018, 13:28
Nikomas
mmv писал(а):Просто при старте ошибка набегать должна и тормозить будет с небольшой инерцией
Так и есть. Останавливается с ошибкой в пару сотых.

Re: Настраиваем контроллер to_pci.

Добавлено: 17 апр 2018, 23:52
Lexxa
Спрошу тут о подключении кабеля управления приводом.
На приводе дифференциальный вход для задания, т.е. +Uз, -Uз и Земля.
На плате AOUTx и AGND.
AGND соединен с землей.
Вопрос о подключении экрана. Куда подключать экран со стороны управления?
Если подключить экран на приводе на землю, а на плате управления на AGND, то могут возникнуть блуждающие токи, наводки и от экрана только хуже будет.
Если подключить экран только с одной стороны, что теоретически допускается в нашем случае, со стороны источника, то к AGND или к централизованной шине заземления?
Ну и как пожелание будущей ревизии платы управления приводом - сделать отдельную клемму заземления кабеля управления.
Литература по теме http://www.bookasutp.ru/Chapter3_5.aspx

Re: Настраиваем контроллер to_pci.

Добавлено: 18 апр 2018, 06:49
Duhas
имхо, экран на AGND со стороны источника сигнала

Re: Настраиваем контроллер to_pci.

Добавлено: 18 апр 2018, 19:30
mmv
Важно помнить одно: для того что бы наводки на провода не оказывали влияния необходимо что бы токи в проводах шли в разных направлениях.
Я думаю что экран должен быть подключен так, что бы через него не шёл ток. Т.е. можно подключить только с одной стороны или не подключать вовсе.
Всё равно он является проводящей поверхностью и оказывает сильное ослабляющее действие.

Re: Настраиваем контроллер to_pci.

Добавлено: 18 апр 2018, 19:56
Serg
Duhas писал(а):имхо, экран на AGND со стороны источника сигнала
Наоборот, тогда около входа приёмника сопротивление между экраном и землёй будет минимально.

Re: Настраиваем контроллер to_pci.

Добавлено: 20 май 2018, 22:10
Nikomas
Мой вариант размещения плат в системнике. Изначально платы висели на задней стенке шкафа, но оказалось крайне неудобно что-либо подключать или отключать.
DSC09742.JPG (2819 просмотров) <a class='original' href='./download/file.php?id=139406&mode=view' target=_blank>Загрузить оригинал (102.73 КБ)</a>
DSC09748.JPG (2819 просмотров) <a class='original' href='./download/file.php?id=139405&mode=view' target=_blank>Загрузить оригинал (86.86 КБ)</a>

Re: Настраиваем контроллер to_pci.

Добавлено: 22 май 2018, 18:02
Nikomas
Вот по этим конфигам двигается только одна ось Х1. Y и Z так и не сдвинулись, хотя энкодеры показывает четко. Что-то делаю не так, а вот что - не понимаю.

Код: Выделить всё

[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



Как починить ось А оси Х?

Re: Настраиваем контроллер to_pci.

Добавлено: 22 май 2018, 19:33
mmv

Код: Выделить всё

# ######################################################
# 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

Думаю для оси Z должно быть так.

Если поедет сравните с тем что написано у вас, и на всех осях сделайте так же

Re: Настраиваем контроллер to_pci.

Добавлено: 22 май 2018, 21:21
Nikomas
mmv писал(а):Если поедет
Без изменений. Завтра попробую напрямую батарейкой поехать.

UPD. Извиняюсь, затупил - не перевел усилки с режима "Положение" в режим "Скорость". Но теперь при включении SON ось сама Z стартует (на пине dcontrol2 10) пока не упрется. На индикаторе энкодера -500мм. Может из-за этого? Но как сбросить счетчик энкодера - я без понятия. Выключение и включение компа и усилка не помогает. Энкодер инкрементный, а не абсолютный.

UUPD. Даже при сбрасывании показаний энкодера ось стартует до упора. На выходе PWM 2 (к нему подключена ось Z) постоянно 15В. Даже без запущенной LCNC.

Re: Настраиваем контроллер to_pci.

Добавлено: 19 июл 2018, 08:50
K@RLSON
По материалам сообщений #332-#337 из темы http://www.cnc-club.ru/forum/viewtopic. ... &start=320
Поставил 1,5кОм и не подключил привод. Все отлично(хотя и раньше без привода было аналогично).