Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # ###################################
- # Core EMC/HAL Loads
- # ###################################
- # kinematics
- loadrt trivkins
- # motion controller, get name and thread periods from ini file
- loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
- # standard components
- loadrt pid num_chan=5
- loadrt encoder num_chan=1
- loadrt mux4 count=1
- loadrt and2 count=3
- loadrt or2 count=3
- loadrt scale count=3
- # only the 7i43 needs this, but it doesnt hurt the others
- loadrt probe_parport
- # hostmot2 driver
- # if you have any firmware trouble, enable the debug flags here and see what's going on in the syslog
- #loadrt hostmot2 debug_idrom=1 debug_module_descriptors=1 debug_pin_descriptors=1 debug_modules=1
- loadrt hostmot2
- # load low-level driver
- loadrt [HOSTMOT2](DRIVER) config=[HOSTMOT2](CONFIG)
- setp hm2_[HOSTMOT2](BOARD).0.pwmgen.pwm_frequency 40000
- setp hm2_[HOSTMOT2](BOARD).0.watchdog.timeout_ns 10000000
- # ################################################
- # THREADS
- # ################################################
- addf hm2_[HOSTMOT2](BOARD).0.read servo-thread
- addf scale.0 servo-thread
- addf scale.1 servo-thread
- addf scale.2 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 pid.2.do-pid-calcs servo-thread
- addf pid.3.do-pid-calcs servo-thread
- addf pid.4.do-pid-calcs servo-thread
- addf encoder.capture-position servo-thread
- addf encoder.update-counters servo-thread
- addf mux4.0 servo-thread
- addf and2.0 servo-thread
- addf and2.1 servo-thread
- addf and2.2 servo-thread
- addf or2.0 servo-thread
- addf or2.1 servo-thread
- addf or2.2 servo-thread
- addf hm2_[HOSTMOT2](BOARD).0.write servo-thread
- addf hm2_[HOSTMOT2](BOARD).0.pet_watchdog servo-thread
- # ######################################################
- # Axis-of-motion Specific Configs (not the GUI)
- # ######################################################
- # ################
- # MPG
- # ################
- setp encoder.0.x4-mode 1
- setp mux4.0.in0 0.001
- setp mux4.0.in1 0.01
- setp mux4.0.in2 0.1
- # hm2_[HOSTMOT2](BOARD).0.gpio.025.in_not
- # mesa con 0 pin0 - pin 23
- # mesa con 0 pin24 - pin 47
- # mesa con 0 pin48 - pin 71
- net scale1 mux4.0.sel0 <= hm2_[HOSTMOT2](BOARD).0.gpio.050.in_not
- net scale2 mux4.0.sel1 <= hm2_[HOSTMOT2](BOARD).0.gpio.051.in_not
- net pend-scale axis.0.jog-scale <= mux4.0.out
- net pend-scale axis.1.jog-scale
- net pend-scale axis.2.jog-scale
- net pend-scale axis.3.jog-scale
- net mpg-a encoder.0.phase-A <= hm2_[HOSTMOT2](BOARD).0.gpio.048.in_not
- net mpg-b encoder.0.phase-B <= hm2_[HOSTMOT2](BOARD).0.gpio.049.in_not
- net mpg-x axis.0.jog-enable <= hm2_[HOSTMOT2](BOARD).0.gpio.052.in_not
- net mpg-y axis.1.jog-enable <= hm2_[HOSTMOT2](BOARD).0.gpio.053.in_not
- net mpg-z axis.2.jog-enable <= hm2_[HOSTMOT2](BOARD).0.gpio.054.in_not
- net mpg-r axis.3.jog-enable <= hm2_[HOSTMOT2](BOARD).0.gpio.055.in_not
- net pend-counts axis.0.jog-counts <= encoder.0.counts
- net pend-counts axis.1.jog-counts
- net pend-counts axis.2.jog-counts
- net pend-counts axis.3.jog-counts
- # Connect index enables to motion controller, for homing.
- net Xindex-enable hm2_[HOSTMOT2](BOARD).0.encoder.00.index-enable <=> axis.0.index-enable
- net Yindex-enable hm2_[HOSTMOT2](BOARD).0.encoder.01.index-enable <=> axis.1.index-enable
- net Zindex-enable hm2_[HOSTMOT2](BOARD).0.encoder.04.index-enable <=> axis.2.index-enable
- net Xindex-enable => pid.0.index-enable
- net Yindex-enable => pid.1.index-enable
- net Zindex-enable => pid.2.index-enable
- # ################
- # X [0] Axis
- # ################
- # axis enable chain
- setp axis.0.jog-vel-mode 1
- newsig emcmot.00.enable bit
- sets emcmot.00.enable FALSE
- net emcmot.00.enable => pid.0.enable
- net emcmot.00.enable => hm2_[HOSTMOT2](BOARD).0.pwmgen.00.enable
- net emcmot.00.enable <= axis.0.amp-enable-out
- # encoder feedback
- setp hm2_[HOSTMOT2](BOARD).0.encoder.00.counter-mode 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.00.filter 1
- setp hm2_[HOSTMOT2](BOARD).0.encoder.00.index-invert 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.00.index-mask 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.00.index-mask-invert 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.00.scale [AXIS_0]INPUT_SCALE
- net motor.00.pos-fb hm2_[HOSTMOT2](BOARD).0.encoder.00.position => pid.0.feedback
- net motor.00.pos-fb => axis.0.motor-pos-fb #push copy back to Axis GUI
- # set PID loop gains from inifile
- 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.0.maxoutput [AXIS_0]MAX_OUTPUT
- # position command signals
- setp hm2_[HOSTMOT2](BOARD).0.pwmgen.00.output-type 1 #pwm on pin1, dir on pin2
- setp hm2_[HOSTMOT2](BOARD).0.pwmgen.00.scale [AXIS_0]OUTPUT_SCALE
- net emcmot.00.pos-cmd axis.0.motor-pos-cmd => pid.0.command
- net motor.00.command pid.0.output => hm2_[HOSTMOT2](BOARD).0.pwmgen.00.value
- # ################
- # Y [1] Axis
- # ################
- # axis enable chain
- setp axis.1.jog-vel-mode 1
- newsig emcmot.01.enable bit
- sets emcmot.01.enable FALSE
- net emcmot.01.enable => pid.1.enable
- net emcmot.01.enable => hm2_[HOSTMOT2](BOARD).0.pwmgen.01.enable
- net emcmot.01.enable <= axis.1.amp-enable-out
- # encoder feedback
- setp hm2_[HOSTMOT2](BOARD).0.encoder.01.counter-mode 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.01.filter 1
- setp hm2_[HOSTMOT2](BOARD).0.encoder.01.index-invert 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.01.index-mask 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.01.index-mask-invert 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.01.scale [AXIS_1]INPUT_SCALE
- net motor.01.pos-fb hm2_[HOSTMOT2](BOARD).0.encoder.01.position => pid.1.feedback
- net motor.01.pos-fb => axis.1.motor-pos-fb #push copy back to Axis GUI
- # set PID loop gains from inifile
- 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
- setp pid.1.maxoutput [AXIS_1]MAX_OUTPUT
- # position command signals
- setp hm2_[HOSTMOT2](BOARD).0.pwmgen.01.output-type 1 #pwm on pin1, dir on pin2
- setp hm2_[HOSTMOT2](BOARD).0.pwmgen.01.scale [AXIS_1]OUTPUT_SCALE
- net emcmot.01.pos-cmd axis.1.motor-pos-cmd => pid.1.command
- net motor.01.command pid.1.output => hm2_[HOSTMOT2](BOARD).0.pwmgen.01.value
- # ################
- # Z [2] Axis
- # ################
- # axis enable chain
- setp axis.2.jog-vel-mode 1
- newsig emcmot.02.enable bit
- sets emcmot.02.enable FALSE
- net emcmot.02.enable => pid.2.enable
- net emcmot.02.enable => hm2_[HOSTMOT2](BOARD).0.pwmgen.04.enable
- net emcmot.02.enable <= axis.4.amp-enable-out
- # encoder feedback
- setp hm2_[HOSTMOT2](BOARD).0.encoder.04.counter-mode 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.04.filter 1
- setp hm2_[HOSTMOT2](BOARD).0.encoder.04.index-invert 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.04.index-mask 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.04.index-mask-invert 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.04.scale [AXIS_2]INPUT_SCALE
- net motor.02.pos-fb hm2_[HOSTMOT2](BOARD).0.encoder.04.position => pid.2.feedback
- net motor.02.pos-fb => axis.2.motor-pos-fb #push copy back to Axis GUI
- # set PID loop gains from inifile
- setp pid.2.Pgain [AXIS_2]P
- setp pid.2.Igain [AXIS_2]I
- setp pid.2.Dgain [AXIS_2]D
- setp pid.2.bias [AXIS_2]BIAS
- setp pid.2.FF0 [AXIS_2]FF0
- setp pid.2.FF1 [AXIS_2]FF1
- setp pid.2.FF2 [AXIS_2]FF2
- setp pid.2.deadband [AXIS_2]DEADBAND
- setp pid.2.maxoutput [AXIS_2]MAX_OUTPUT
- # position command signals
- setp hm2_[HOSTMOT2](BOARD).0.pwmgen.04.output-type 1 #pwm on pin1, dir on pin2
- setp hm2_[HOSTMOT2](BOARD).0.pwmgen.04.scale [AXIS_2]OUTPUT_SCALE
- net emcmot.02.pos-cmd axis.2.motor-pos-cmd => pid.2.command
- net motor.02.command pid.2.output => hm2_[HOSTMOT2](BOARD).0.pwmgen.04.value
- # ################
- # A [3] Axis
- # ################
- # axis enable chain
- #setp axis.3.jog-vel-mode 1
- newsig emcmot.03.enable bit
- sets emcmot.03.enable FALSE
- net emcmot.03.enable => pid.3.enable
- net emcmot.03.enable => hm2_[HOSTMOT2](BOARD).0.pwmgen.03.enable
- net emcmot.03.enable <= axis.3.amp-enable-out
- # encoder feedback
- setp hm2_[HOSTMOT2](BOARD).0.encoder.03.counter-mode 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.03.filter 1
- setp hm2_[HOSTMOT2](BOARD).0.encoder.03.index-invert 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.03.index-mask 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.03.index-mask-invert 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.03.scale [AXIS_3]INPUT_SCALE
- net motor.03.pos-fb hm2_[HOSTMOT2](BOARD).0.encoder.03.position => pid.3.feedback
- net motor.03.pos-fb => axis.3.motor-pos-fb #push copy back to Axis GUI
- # set PID loop gains from inifile
- setp pid.3.Pgain [AXIS_3]P
- setp pid.3.Igain [AXIS_3]I
- setp pid.3.Dgain [AXIS_3]D
- setp pid.3.bias [AXIS_3]BIAS
- setp pid.3.FF0 [AXIS_3]FF0
- setp pid.3.FF1 [AXIS_3]FF1
- setp pid.3.FF2 [AXIS_3]FF2
- setp pid.3.deadband [AXIS_3]DEADBAND
- setp pid.3.maxoutput [AXIS_3]MAX_OUTPUT
- # position command signals
- setp hm2_[HOSTMOT2](BOARD).0.pwmgen.03.output-type 1 #pwm on pin1, dir on pin2
- setp hm2_[HOSTMOT2](BOARD).0.pwmgen.03.scale [AXIS_3]OUTPUT_SCALE
- net emcmot.03.pos-cmd axis.3.motor-pos-cmd => pid.3.command
- net motor.03.command pid.3.output => hm2_[HOSTMOT2](BOARD).0.pwmgen.03.value
- # ################
- # C [4] Axis
- # ################
- # axis enable chain
- newsig emcmot.04.enable bit
- sets emcmot.04.enable FALSE
- net emcmot.04.enable => pid.4.enable
- net emcmot.04.enable => hm2_[HOSTMOT2](BOARD).0.pwmgen.02.enable
- net emcmot.04.enable <= axis.2.amp-enable-out
- # encoder feedback
- setp hm2_[HOSTMOT2](BOARD).0.encoder.02.counter-mode 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.02.filter 1
- setp hm2_[HOSTMOT2](BOARD).0.encoder.02.index-invert 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.02.index-mask 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.02.index-mask-invert 0
- setp hm2_[HOSTMOT2](BOARD).0.encoder.02.scale [AXIS_4]INPUT_SCALE
- net motor.04.pos-fb hm2_[HOSTMOT2](BOARD).0.encoder.02.position => pid.4.feedback
- net motor.04.pos-fb => axis.4.motor-pos-fb #push copy back to Axis GUI
- # set PID loop gains from inifile
- setp pid.4.Pgain [AXIS_4]P
- setp pid.4.Igain [AXIS_4]I
- setp pid.4.Dgain [AXIS_4]D
- setp pid.4.bias [AXIS_4]BIAS
- setp pid.4.FF0 [AXIS_4]FF0
- setp pid.4.FF1 [AXIS_4]FF1
- setp pid.4.FF2 [AXIS_4]FF2
- setp pid.4.deadband [AXIS_4]DEADBAND
- setp pid.4.maxoutput [AXIS_4]MAX_OUTPUT
- # position command signals
- setp hm2_[HOSTMOT2](BOARD).0.pwmgen.02.output-type 1 #pwm on pin1, dir on pin2
- setp hm2_[HOSTMOT2](BOARD).0.pwmgen.02.scale [AXIS_4]OUTPUT_SCALE
- net emcmot.04.pos-cmd axis.4.motor-pos-cmd => pid.4.command
- net motor.04.command pid.4.output => hm2_[HOSTMOT2](BOARD).0.pwmgen.02.value
- #net spindle-velocity hm2_[HOSTMOT2](BOARD).0.encoder.02.velocity
- #net spindle-velocity scale.0.in
- #net spindle-velocity-scaled scale.0.out
- #net spindle-velocity-scaled => motion.spindle-speed-in
- #net spindle-index-enable hm2_[HOSTMOT2](BOARD).0.encoder.04.index-enable motion.spindle-index-enable
- #net motor.04.pos-fb hm2_[HOSTMOT2](BOARD).0.encoder.04.position => motion.spindle-revs
- #net spindle-velocity-scaled => pid.4.feedback
- #net spindle-velocity-scaled => axis.4.motor-pos-fb #push copy back to Axis GUI
- # position command signals
- #setp hm2_[HOSTMOT2](BOARD).0.pwmgen.02.output-type 1 #pwm on pin1, dir on pin2
- #setp hm2_[HOSTMOT2](BOARD).0.pwmgen.02.scale [AXIS_3]OUTPUT_SCALE
- #net emcmot.04.pos-cmd motion.spindle-speed-out-rps => pid.4.command
- #net motor.04.command pid.4.output => hm2_[HOSTMOT2](BOARD).0.pwmgen.04.value
- setp hm2_[HOSTMOT2](BOARD).0.pwmgen.05.output-type 1 #pwm on pin1, dir on pin2
- setp hm2_[HOSTMOT2](BOARD).0.pwmgen.05.scale 1
- setp hm2_[HOSTMOT2](BOARD).0.gpio.069.is_output 1 # out 5 on kara
- setp hm2_[HOSTMOT2](BOARD).0.gpio.069.invert_output 1
- net spindle-enable => hm2_[HOSTMOT2](BOARD).0.pwmgen.05.enable
- setp scale.2.gain 0.0001667
- #net spindle-speed-scale motion.spindle-speed-out => hm2_[HOSTMOT2](BOARD).0.pwmgen.05.value
- net spindle-speed-scale motion.spindle-speed-out => scale.2.in
- net spindle-speed-DAC scale.2.out => hm2_[HOSTMOT2](BOARD).0.pwmgen.05.value
- net spindle-enable motion.spindle-on => hm2_[HOSTMOT2](BOARD).0.gpio.069.out
- # ##################################################
- # Standard I/O Block - EStop, Etc
- # ##################################################
- # create a signal for the estop loopback
- net estop-loop iocontrol.0.user-enable-out => iocontrol.0.emc-enable-in
- ###############################################
- # Servo enable signals
- ###############################################
- setp hm2_[HOSTMOT2](BOARD).0.gpio.064.is_output 1
- setp hm2_[HOSTMOT2](BOARD).0.gpio.064.invert_output 1
- net emcmot.00.enable and2.0.in0
- net emcmot.01.enable and2.0.in1
- net emcmot.02.enable and2.1.in0
- net emcmot.03.enable and2.1.in1
- net ampena5 and2.2.in0 <= and2.0.out
- net ampena6 and2.2.in1 <= and2.1.out
- net ampenable and2.2.out => hm2_[HOSTMOT2](BOARD).0.gpio.064.out
- setp hm2_[HOSTMOT2](BOARD).0.gpio.066.is_output 1
- setp hm2_[HOSTMOT2](BOARD).0.gpio.066.invert_output 1
- net mpg-x or2.0.in0
- net mpg-y or2.0.in1
- net mpg-z or2.1.in0
- net mpg-r or2.1.in1
- net jogena1 or2.2.in0 <= or2.0.out
- net jogena2 or2.2.in1 <= or2.1.out
- net jogenable or2.2.out => hm2_[HOSTMOT2](BOARD).0.gpio.066.out
- # create signals for 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
- #
- # homing
- #
- #
- # In this example, each of the three axes have their own home switch. All
- # home switches are connected to GPIO 25, though hostmot2 boards generally
- # have enough GPIO pins to put each axis' home switch on its own pin.
- #
- # Each switch is normally open, momentarily closed. When the switch is open,
- # GPIO 25 floats high (because that is the hostmot2 way). When the switch is
- # closed, it shorts GPIO 25 to ground.
- #
- # EMC expects the value on the .home-sw-in HAL pin to be active high, ie
- # True when the switch is closed and False when the switch is open.
- # We get this behavior by linking the GPIO .in_not pin instead of the .in
- # pin.
- #
- #net home-switch <= hm2_[HOSTMOT2](BOARD).0.gpio.025.in_not
- net Axis_Hard_Limit <= hm2_[HOSTMOT2](BOARD).0.gpio.057.in
- net HomeX <= hm2_[HOSTMOT2](BOARD).0.gpio.061.in_not
- net HomeY <= hm2_[HOSTMOT2](BOARD).0.gpio.058.in_not
- net HomeZ <= hm2_[HOSTMOT2](BOARD).0.gpio.059.in_not
- #net HomeA <= hm2_[HOSTMOT2](BOARD).0.gpio.055.in_not
- #net HomeB <= hm2_[HOSTMOT2](BOARD).0.gpio.055.in_not
- net Axis_Hard_Limit axis.0.pos-lim-sw-in
- net Axis_Hard_Limit axis.1.pos-lim-sw-in
- net Axis_Hard_Limit axis.2.pos-lim-sw-in
- net HomeX => axis.0.home-sw-in
- net HomeY => axis.1.home-sw-in
- net HomeZ => axis.2.home-sw-in
- net scale1 => axis.3.home-sw-in
- net scale1 => axis.4.home-sw-in
- # only the Y servo has an index, X and Z home without using the index
- # net y-index-enable hm2_[HOSTMOT2](BOARD).0.encoder.01.index-enable <=> axis.1.index-enable
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement