Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # #######################################
- #
- # HAL file for HostMot2 with 3 smart serial analog servos
- #
- # Derived from Ted Hyde's original hm2-servo config
- #
- # Based up work and discussion with Seb & Peter & Jeff
- # GNU license references - insert here. www.linuxcnc.org
- #
- #
- # ########################################
- # Firmware files are in /lib/firmware/hm2/7i43/
- # Must symlink the hostmot2 firmware directory of sanbox to
- # /lib/firmware before running EMC2...
- # sudo ln -s $HOME/emc2-sandbox/src/hal/drivers/mesa-hostmot2/firmware /lib/firmware/hm2
- #
- # See also:
- # <http://www.linuxcnc.org/docs/devel/html/man/man9/hostmot2.9.html#config%20modparam>
- # and http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?HostMot2
- #
- # #####################################################################
- # ###################################
- # 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=3
- # 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.watchdog.timeout_ns 10000000
- # ################################################
- # THREADS
- # ################################################
- addf hm2_[HOSTMOT2](BOARD).0.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 pid.2.do-pid-calcs 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)
- # ######################################################
- # ################
- # X [0] Axis
- # ################
- # axis enable chain
- 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.7i77.0.1.analogena
- 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.7i77.0.1.analogout0-scalemax [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.7i77.0.1.analogout0
- # ################
- # Y [1] Axis
- # ################
- # axis enable chain
- newsig emcmot.01.enable bit
- sets emcmot.01.enable FALSE
- net emcmot.01.enable => pid.1.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.7i77.0.1.analogout1-scalemax [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.7i77.0.1.analogout1
- # ################
- # Z [2] Axis
- # ################
- # axis enable chain
- newsig emcmot.02.enable bit
- sets emcmot.02.enable FALSE
- net emcmot.02.enable => pid.2.enable
- net emcmot.02.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_2]INPUT_SCALE
- net motor.02.pos-fb hm2_[HOSTMOT2](BOARD).0.encoder.02.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.7i77.0.1.analogout2-scalemax [AXIS_2]OUTPUT_SCALE
- net motor.02.command pid.2.output => hm2_[HOSTMOT2](BOARD).0.7i77.0.1.analogout2
- net emcmot.02.pos-cmd axis.2.motor-pos-cmd => pid.2.command
- #######################################################
- # Jog Pendant
- loadrt mux4 count=1
- addf mux4.0 servo-thread
- loadrt gray2bin count=1
- addf gray2bin.0 servo-thread
- # for absolute mode (for every click you get a move ie, if you spin the dial it may keep moving after you stop the dial)
- # default so does not need to be set
- #axis.0.jog-vel-mode 0
- # for velocity mode (when you stop spinning the dial the axis stops)
- # must be set for each axis
- setp axis.0.jog-vel-mode 1
- setp axis.1.jog-vel-mode 1
- setp axis.2.jog-vel-mode 1
- # "times 4 mode" one count per full quadrature cycle, instead of the usual one count per edge.
- # mpg jog wheels often have a full quadrature cycle per "click" . 0 for off and 1 for on.
- # setp encoder.3.x4-mode 1
- setp mux4.0.in0 0.06666667
- setp mux4.0.in1 0.01
- setp mux4.0.in2 0.001
- net scale1 mux4.0.sel0 <= hm2_[HOSTMOT2](BOARD).0.7i77.0.0.input-04
- net scale2 mux4.0.sel1 <= hm2_[HOSTMOT2](BOARD).0.7i77.0.0.input-05
- net pend-scale axis.0.jog-scale <= mux4.0.out
- net pend-scale axis.1.jog-scale
- net pend-scale axis.2.jog-scale
- setp hm2_[HOSTMOT2](BOARD).0.encoder.03.counter-mode 1
- 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 1
- setp hm2_[HOSTMOT2](BOARD).0.encoder.03.vel-timeout .1
- #net mpg-count hm2_7i43.0.encoder.03.count
- #net mpg-count => axis.0.jog-counts
- #net mpg-count => axis.1.jog-counts
- #net mpg-count => axis.2.jog-counts
- net mpg-x axis.0.jog-enable <= hm2_[HOSTMOT2](BOARD).0.7i77.0.0.input-06
- net mpg-y axis.1.jog-enable <= hm2_[HOSTMOT2](BOARD).0.7i77.0.0.input-07
- net mpg-z axis.2.jog-enable <= hm2_[HOSTMOT2](BOARD).0.7i77.0.0.input-08
- net pend-counts axis.0.jog-counts <= hm2_[HOSTMOT2](BOARD).0.encoder.03.count
- net pend-counts axis.1.jog-counts
- net pend-counts axis.2.jog-counts
- # ##################################################
- # 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
- # 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
- #
- #MACHINE ON CONTROL
- net machine-on halui.machine.on ==> hm2_[HOSTMOT2](BOARD).0.7i77.0.0.input-00
- net machine-off halui.machine.off ==> hm2_[HOSTMOT2](BOARD).0.7i77.0.0.input-01
- net machine-onlt halui.machine.is-on <== hm2_[HOSTMOT2](BOARD).0.7i77.0.0.output-00
- #estop
- net estop-loop hm2_[HOSTMOT2](BOARD).0.7i77.0.0.input-03 iocontrol.0.emc-enable-in
- ########
- ## Spindle
- net SpindleStart hm2_[HOSTMOT2](BOARD).0.7i77.0.0.input-02 => halui.spindle.start
- net SpindleStop hm2_[HOSTMOT2](BOARD).0.7i77.0.0.input-09-not => halui.spindle.stop
- net SpindleForward hm2_[HOSTMOT2](BOARD).0.7i77.0.0.input-10 => halui.spindle.forward
- net SpindleReverse hm2_[HOSTMOT2](BOARD).0.7i77.0.0.input-11 => halui.spindle.reverse
- net spindle-enable <= motion.spindle-on
- net spindle-cw <= motion.spindle-forward
- net spindle-ccw <= motion.spindle-reverse
- net spindle-enable => hm2_[HOSTMOT2](BOARD).0.7i77.0.0.output-01
- net spindle-cw => hm2_[HOSTMOT2](BOARD).0.7i77.0.0.output-02
- net spindle-ccw => hm2_[HOSTMOT2](BOARD).0.7i77.0.0.output-03
- #
- # homing
- #
- #net home-switch <= hm2_[HOSTMOT2](BOARD).0.7i77.0.0.input-00
- #net home-switch => axis.0.home-sw-in
- #net home-switch => axis.1.home-sw-in
- #net home-switch => axis.2.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