loadrt stepgen step_type=0,0 ctrl_type=v,p
переводим степген в управление по скорости
подключаем к пид
net Xpos-cmd axis.0.motor-pos-cmd => pid.0.command
net xenable <= axis.0.amp-enable-out => pid.0.enable
net Xvel-cmd <= pid.0.output
Код: Выделить всё
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hal_parport cfg="0 out"
setp parport.0.reset-time 1000
loadrt stepgen step_type=0,0 ctrl_type=v,p
loadrt to_pci
loadrt pid names=pid.x
# 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
# LPT port
addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread
addf stepgen.capture-position servo-thread
addf stepgen.update-freq servo-thread
# -------E-STOP--------
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
net estop-out => parport.0.pin-01-out
# --- HOME-X ---
net home-x <= parport.0.pin-15-in
# ---AXIS X---
net xpos-fb => pid.x.feedback
net xpos-cmd => pid.x.command
net xenable => pid.x.enable
net xvel-cmd => pid.x.command-deriv
net xindex-enable <=> pid.x.index-enable
net xoutput => pid.x.output
setp parport.0.pin-02-out-invert 1
net xdir => parport.0.pin-02-out
net xstep => parport.0.pin-03-out
setp parport.0.pin-03-out-reset 1
net xstep <= stepgen.0.step
net xdir <= stepgen.0.dir
#---PID-X---
net xpos-cmd axis.0.motor-pos-cmd => pid.0.command
net xenable axis.0.amp-enable-out => pid.0.enable
net xvel-cmd <= pid.0.output
net xpos-fb => pid.0.feedback
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
setp pid.x.error-previous-target true
setp pid.x.maxerror .0005
# -------- FEED BACK X--------------
setp to_pci.1.feedback.enc_scale1 [AXIS_0]ENCODER_SCALE
net xpos-fb <= to_pci.1.feedback.encoder1
net xpos-fb => axis.0.motor-pos-fb
# Step Gen signals/setup
setp stepgen.0.position-scale [AXIS_0]STEP_SCALE
setp stepgen.0.steplen [AXIS_0]STEPLEN
setp stepgen.0.stepspace [AXIS_0]STEPSPACE
setp stepgen.0.dirsetup [AXIS_0]DIRSETUP
setp stepgen.0.dirhold [AXIS_0]DIRHOLD
#setp stepgen.0.step_type 0
#setp stepgen.0.control-type 1
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
#setp stepgen.0.maxvel [AXIS_0]STEPGEN_MAXVEL
# ---closedloop stepper signals---
#net xoutput <= stepgen.0.velocity-cmd
#net xpos-fb <= stepgen.0.position-fb
# ---setup home / limit switch signals---
net home-x => axis.0.home-sw-in
net xneg-limit => axis.0.neg-lim-sw-in
net xpos-limit => axis.0.pos-lim-sw-in
Извинятся определенно не за что, на оборот очень признателен за любую полезную делу информацию. Надеюсь на то что кому то эта тема про гибриды тоже пригодится.solo писал(а):я извиняюсь что вмешиваюсь
Код: Выделить всё
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt probe_parport
loadrt hal_parport cfg="0x378 out ec00 out "
setp parport.0.reset-time 3000
loadrt encoder num_chan=1
loadrt stepgen step_type=0,0,0,0 ctrl_type=p,p,v,p
loadrt at_pid num_chan=1
addf pid.0.do-pid-calcs servo-thread
addf parport.0.read base-thread
addf parport.1.read base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread
addf parport.1.write 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 spindle-cmd <= motion.spindle-speed-out
net spindle-on <= motion.spindle-on
net coolant-mist <= iocontrol.0.coolant-mist
setp parport.0.pin-01-out-invert 1
net xenable => parport.0.pin-01-out
net xstep => parport.0.pin-02-out
setp parport.0.pin-02-out-reset 1
net ystep => parport.0.pin-03-out
setp parport.0.pin-03-out-reset 1
net zstep => parport.0.pin-04-out
setp parport.0.pin-04-out-reset 1
net astep => parport.0.pin-05-out
setp parport.0.pin-05-out-reset 1
net xdir => parport.0.pin-06-out
net ydir => parport.0.pin-07-out
net zdir => parport.0.pin-08-out
net adir => parport.0.pin-09-out
net coolant-mist => parport.0.pin-16-out
net spindle-on => parport.0.pin-17-out
net all-limit <= parport.0.pin-10-in-not
net home-y <= parport.0.pin-11-in
addf encoder.update-counters base-thread
addf encoder.capture-position servo-thread
setp encoder.0.position-scale 200.000000
net zpos-phase-a encoder.0.phase-A
net zpos-phase-b encoder.0.phase-B
net zpos-phase-a <= parport.1.pin-13-in
net zpos-phase-b <= parport.1.pin-11-in
net zpos-fb <= encoder.0.position
net zpos-fb => axis.2.motor-pos-fb
#-------- PID--------#
net zpos-fb => pid.0.feedback
net zpos-cmd axis.2.motor-pos-cmd => pid.0.command
net zenable <= axis.2.amp-enable-out => pid.0.enable
net zvel-cmd <= pid.0.output
setp pid.0.Pgain 100
setp pid.0.Igain 0
setp pid.0.Dgain 0
setp pid.0.bias 0
setp pid.0.FF0 0
setp pid.0.FF1 0
setp pid.0.FF2 0
setp pid.0.deadband 0.05
#-------- PID --------#
setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 30000
setp stepgen.0.dirsetup 30000
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
net all-limit => axis.0.neg-lim-sw-in
net all-limit => axis.0.pos-lim-sw-in
setp stepgen.1.position-scale [AXIS_1]SCALE
setp stepgen.1.steplen 1
setp stepgen.1.stepspace 0
setp stepgen.1.dirhold 30000
setp stepgen.1.dirsetup 30000
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
net home-y => axis.1.home-sw-in
net all-limit => axis.1.neg-lim-sw-in
net all-limit => axis.1.pos-lim-sw-in
setp stepgen.2.position-scale [AXIS_2]SCALE
setp stepgen.2.steplen 1
setp stepgen.2.stepspace 0
setp stepgen.2.dirhold 30400
setp stepgen.2.dirsetup 30400
setp stepgen.2.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net zvel-cmd => stepgen.2.velocity-cmd
net zenable axis.2.amp-enable-out => stepgen.2.enable
net zstep <= stepgen.2.step
net zdir <= stepgen.2.dir
net both-z => axis.2.neg-lim-sw-in
net both-z => axis.2.pos-lim-sw-in
setp stepgen.3.position-scale [AXIS_3]SCALE
setp stepgen.3.steplen 1
setp stepgen.3.stepspace 0
setp stepgen.3.dirhold 30000
setp stepgen.3.dirsetup 30000
setp stepgen.3.maxaccel [AXIS_3]STEPGEN_MAXACCEL
net apos-cmd axis.3.motor-pos-cmd => stepgen.3.position-cmd
net apos-fb stepgen.3.position-fb => axis.3.motor-pos-fb
net astep <= stepgen.3.step
net adir <= stepgen.3.dir
net aenable axis.3.amp-enable-out => stepgen.3.enable
net all-limit => axis.3.neg-lim-sw-in
net all-limit => axis.3.pos-lim-sw-in
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
loadusr -W hal_manualtoolchange
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-preparedКод: Выделить всё
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hal_parport cfg="0 out"
setp parport.0.reset-time 5000
loadrt stepgen step_type=0,0,0 ctrl_type=v,v,v
loadrt at_pid num_chan=1
loadrt to_pci
loadrt pid names=pid.x
# 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 stepgen.capture-position servo-thread
addf stepgen.update-freq servo-thread
# LPT port
addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread
# -------E-STOP--------
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
net estop-out => parport.0.pin-01-out
# --- HOME-X ---
net home-x <= parport.0.pin-12-in
#---PID-X---
net xpos-cmd axis.0.motor-pos-cmd => pid.x.command
net xenable <= axis.0.amp-enable-out => pid.x.enable
net xpos-fb => pid.x.feedback
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
#set pid.x.error-previous-target true
setp pid.x.maxerror .005
# -------- FEED BACK X--------------
setp to_pci.1.feedback.enc_scale0 [AXIS_0]ENCODER_SCALE
net xpos-fb <= to_pci.1.feedback.encoder0
net xpos-fb => axis.0.motor-pos-fb
# ---AXIS X---
net xpos-fb => pid.x.feedback
net xpos-cmd => pid.x.command
net xenable => pid.x.enable
net xindex-enable <=> pid.x.index-enable
net xoutput => pid.x.output
# Step Gen signals/setup
setp parport.0.pin-02-out-invert 1
net xdir => parport.0.pin-02-out
net xstep => parport.0.pin-03-out
setp parport.0.pin-03-out-reset 1
net xstep <= stepgen.0.step
net xdir <= stepgen.0.dir
net xenable => stepgen.0.enable
# ---get-cmd from PID-X---
setp stepgen.0.position-scale [AXIS_0]STEP_SCALE
setp stepgen.0.steplen [AXIS_0]STEPLEN
setp stepgen.0.stepspace [AXIS_0]STEPSPACE
setp stepgen.0.dirsetup [AXIS_0]DIRSETUP
setp stepgen.0.dirhold [AXIS_0]DIRHOLD
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
net xvel-cmd => axis.0.joint-vel-cmd
net xvel-cmd => stepgen.0.velocity-cmd
# ---setup home / limit switch signals---
net home-x => axis.0.home-sw-in
Код: Выделить всё
DRIVER=to_pci
[EMC]
# Name of machine, for use with display, etc.
[EMC]
MACHINE = 1
DEBUG = 0
[DISPLAY]
DISPLAY = axis
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 1.2
MAX_SPINDLE_OVERRIDE = 1.000000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/mihail/linuxcnc/nc_files
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm
DEFAULT_LINEAR_VELOCITY = 2.0
MAX_LINEAR_VELOCITY = 20.000000
MIN_LINEAR_VELOCITY = 0.0
DEFAULT_ANGULAR_VELOCITY = 0.250000
MAX_ANGULAR_VELOCITY = 10.000000
MIN_ANGULAR_VELOCITY = 0.0
EDITOR = gedit
GEOMETRY = x
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]
PARAMETER_FILE = linuxcnc.var
[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
BASE_PERIOD = 100000
[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 = 1.hal
POSTGUI_HALFILE = custom_postgui.hal
[TRAJ]
AXES = 3
COORDINATES = X
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 2.00
MAX_LINEAR_VELOCITY = 20.00
POSITION_FILE = position.txt
DEFAULT_ACCELERATION = 6.0
MAX_ACCELERATION = 20.0
[AXIS_0]
TYPE = LINEAR
HOME = 0.0
FERROR = 1
STEPGEN_MAXACCEL = 25.0
MIN_FERROR = 0.1
MAX_VELOCITY = 20.0
MAX_ACCELERATION = 20.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
P = 5.0
I = 0.0
D = 0.02
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 10
ENCODER_SCALE = 1000
# these are in nanoseconds
DIRSETUP = 22000
DIRHOLD = 22000
STEPLEN = 22000
STEPSPACE = 0
STEP_SCALE = 400.0
BACKLASH = 0
MIN_LIMIT = -0.001
MAX_LIMIT = 360
HOME_OFFSET = 22.000000
HOME_SEARCH_VEL = 15.000000
HOME_LATCH_VEL = 1.250000
HOME_FINAL_VEL = 5
[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
Точно в цель, Володя спасибо, заработало как надо.vovafed писал(а):net xoutput => pid.x.output
это выход пид он подключен к сигналу xoutput
он должен подключатся сюда
net xvel-cmd => stepgen.0.velocity-cmd
но этот вход подключен к другому сигналу
net xvel-cmd => axis.0.joint-vel-cmd эта строчка лишняя походу
двойная стрелка врятли прокатит
net xindex-enable <=> pid.x.index-enable
индексы не используются ,я так понял? или отсутствуют?solo писал(а):предлагаю свой рабочий хел файл (может эта ифа будет полезна либо просто ускорит процесс наладки станка ) , правда у меня управление реализовано по двум ЛПТ портам но это ИМХО вопрос не принципиальный , то есть линейки подключены к одному лпт порту, а ШД осей подключены к другому лпт
не использую, на хомах стоят оптические концевики, здесь на форуме встречал инфу , что такие концевики имеют точность не хуже 0.02 мм , меня это устраивает , по этому с индексными метками не стал заморачиватьсяnkp писал(а):индексы не используются ,я так понял? или отсутствуют?
