Re: Шаг + серво на Pluto-P
Добавлено: 19 июн 2015, 14:41
Спасибо вроде начало работать.
Статьи, обзоры, цены на станки и комплектующие.
https://cnc-club.ru/forum/
Которая? Схема на КМОП-транзисторе - да. Но она вряд ли повысит помехоустойчивость. А буферные микросхемы нужно переключать внешними сигналами. Без этого они двунаправленности не обеспечат.Techno писал(а):то что я предложил двунаправленная передача данных.
Код: Выделить всё
[EMC]
VERSION = $Revision$
MACHINE = LATHE-PLUTO
DEBUG = 0
[DISPLAY]
#PYVCP = vcp.xml
DISPLAY = axis
#LATHE = 1
CYCLE_TIME = 0.200
POSITION_OFFSET = MACHINE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 1.5
PROGRAM_PREFIX = /home/cnc/linuxcnc/nc_files
# Editor to be used with Axis
EDITOR = gedit
[FILTER]
PROGRAM_EXTENSION = .py Python Script
PROGRAM_EXTENSION = .NGC rs274ngc files
py = python
[TASK]
TASK = milltask
CYCLE_TIME = 0.001
[RS274NGC]
PARAMETER_FILE = emc.var
[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
COMM_WAIT = 0.010
SERVO_PERIOD = 500000
[HAL]
HALFILE = lathe-pluto.hal
HALFILE = axis_manualtoolchange.hal
#POSTGUI_HALFILE = postgui.hal
[TRAJ]
AXES = 3
COORDINATES = X Y Z
HOME = 0 0 0
LINEAR_UNITS = 1.0
ANGULAR_UNITS = 1.0
CYCLE_TIME = 0.0010
DEFAULT_VELOCITY = 300
MAX_VELOCITY = 300
DEFAULT_ACCELERATION = 1500
MAX_ACCELERATION = 1500
[AXIS_0]
TYPE = LINEAR
UNITS = 1.0
HOME = 0.0
HOME_SEQUENCE = 0
MAX_VELOCITY = 300
MAX_ACCELERATION = 1500
BACKLASH = 0.00
CYCLE_TIME = 0.001000
INPUT_SCALE = 102.5
OUTPUT_SCALE = 1.000
MIN_LIMIT = 0.0
MAX_LIMIT = 280.50001
FERROR = 10000
MIN_FERROR = 10000
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
P = 75.99
I = 0.76
D = 0.165
BIAS = 0
FF0 = 0.012
FF1 = 0.033
FF2 = 0.002
DEADBAND=.00009
[AXIS_1]
TYPE = LINEAR
UNITS = 1.0
HOME = 0.0
HOME_SEQUENCE = 0
MAX_VELOCITY = 250
MAX_ACCELERATION = 1500
BACKLASH = 0.00
CYCLE_TIME = 0.001000
INPUT_SCALE = 119.7
OUTPUT_SCALE = 1.000
MIN_LIMIT = 0.0
MAX_LIMIT = 280.0
FERROR = 10000
MIN_FERROR = 10000
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
P = 80
I = 1
D = 0.13
BIAS = 0
FF0 = 0.032
FF1 = 0.058
FF2 = 0.001
DEADBAND= .00009
[AXIS_2]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 10
MAX_ACCELERATION = 15.0
BACKLASH = 0.000
SCALE = -100
OUTPUT_SCALE = 1.000
MIN_LIMIT = 0.0
MAX_LIMIT = 34.0
FERROR = 0.950
MIN_FERROR = 0.910
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0.0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = YES
[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = emc.tbl
TOOL_CHANGE_POSITION = 40 0 20
Код: Выделить всё
# load realtime modules
loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt pid num_chan=2 debug=1
loadrt ddt count=4
loadrt pluto_servo
loadrt scale
loadrt mux2
loadrt debounce cfg=1
loadrt limit1 count=1
addf pluto-servo.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.0.do-pid-calcs servo-thread
addf pid.1.do-pid-calcs servo-thread
addf pluto-servo.write servo-thread
addf ddt.0 servo-thread
addf ddt.1 servo-thread
addf ddt.2 servo-thread
addf ddt.3 servo-thread
addf scale.0 servo-thread
addf mux2.0 servo-thread
addf debounce.0 servo-thread
addf limit1.0 servo-thread
# Step
setp pluto-servo.stepgen.2.scale [AXIS_2]SCALE
net Zpos-cmd axis.2.motor-pos-cmd => pluto-servo.stepgen.2.position-cmd
net Zpos-fb pluto-servo.stepgen.2.position-fb => axis.2.motor-pos-fb
net Zen axis.2.amp-enable-out => pluto-servo.stepgen.2.enable
setp pluto-servo.stepgen.steplen 40000
setp pluto-servo.stepgen.stepspace 40000
setp pluto-servo.stepgen.dirtime 40000
#end Step
setp pluto-servo.encoder.0.scale [AXIS_0]INPUT_SCALE
setp pluto-servo.encoder.1.scale [AXIS_1]INPUT_SCALE
setp pluto-servo.encoder.2.scale -4096
setp pluto-servo.pwm.0.scale 26 # volts supply
setp pluto-servo.pwm.1.scale 26
setp pid.0.maxoutput 26 # volts at motor
setp pid.1.maxoutput 26
# the values below come from the ini
setp pid.0.Pgain [AXIS_0]P
setp pid.0.Igain [AXIS_0]I
setp pid.0.Dgain [AXIS_0]D
setp pid.0.bias [AXIS_0]BIAS
setp pid.0.FF0 [AXIS_0]FF0
setp pid.0.FF1 [AXIS_0]FF1
setp pid.0.FF2 [AXIS_0]FF2
setp pid.0.deadband [AXIS_0]DEADBAND
setp pid.1.Pgain [AXIS_1]P
setp pid.1.Igain [AXIS_1]I
setp pid.1.Dgain [AXIS_1]D
setp pid.1.bias [AXIS_1]BIAS
setp pid.1.FF0 [AXIS_1]FF0
setp pid.1.FF1 [AXIS_1]FF1
setp pid.1.FF2 [AXIS_1]FF2
setp pid.1.deadband [AXIS_1]DEADBAND
net Xpos-fb pluto-servo.encoder.0.position => pid.0.feedback axis.0.motor-pos-fb
net Ypos-fb pluto-servo.encoder.1.position => pid.1.feedback axis.1.motor-pos-fb
net Xpos-cmd axis.0.motor-pos-cmd => pid.0.command ddt.0.in
net Ypos-cmd axis.1.motor-pos-cmd => pid.1.command ddt.2.in
net Xvel-cmd pid.0.output => pluto-servo.pwm.0.value
net Yvel-cmd pid.1.output => pluto-servo.pwm.1.value
net Xvel ddt.0.out => ddt.1.in
net Xacc ddt.1.out
net Yvel ddt.2.out => ddt.3.in
net Yacc ddt.3.out
# machine ON
net Xenable axis.0.amp-enable-out => pid.0.enable pluto-servo.pwm.0.enable pluto-servo.dout.09
net Yenable axis.1.amp-enable-out => pid.1.enable pluto-servo.pwm.1.enable
net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in
# spindle SSR
# net spindle-fwd motion.spindle-forward pluto-servo.dout.00
setp debounce.0.delay 3
#net Xswitch pluto-servo.din.00-not => debounce.0.0.in
#net Xswitch-debounced debounce.0.0.out => axis.0.home-sw-in axis.0.pos-lim-sw-in
#net Yswitch pluto-servo.din.01-not => debounce.0.1.in
#net Yswitch-debounced debounce.0.1.out => axis.1.home-sw-in axis.1.pos-lim-sw-in
# tool loading loopback
net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed
# spindle speed control
setp pluto-servo.pwm.3.enable 1
# this needs scale/offset to give the right speeds, but 0 should be 0
net spindle-speed-cmd motion.spindle-speed-out => limit1.0.in
net spindle-speed-cmd-limited limit1.0.out => scale.0.in
setp scale.0.gain 0.00026315789 # 1/3800
setp scale.0.offset 0.105
setp mux2.0.in0 0
# setp limit1.0.max 1300
net spindle-speed-scaled scale.0.out => mux2.0.in1
net spindle-fwd motion.spindle-forward => mux2.0.sel pluto-servo.dout.00
net spindle-pwm mux2.0.out => pluto-servo.pwm.3.value
# spindle position, for threading
net spindle-index motion.spindle-index-enable <=> pluto-servo.encoder.2.index-enable
net spindle-pos pluto-servo.encoder.2.position => motion.spindle-revs
net spindle-speed-fb pluto-servo.encoder.2.velocity => motion.spindle-speed-in
pluto-servo.pwm.M.pwmdir bit rw (M=0..3) (default: 0)
Set to TRUE use PWM+direction mode. Set to FALSE to use Up/Down mode.