Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [HOSTMOT2]
- DRIVER=hm2_pci
- BOARD=5i20
- #CONFIG="firmware=hm2/5i20/SVST8_4.BIT num_encoders=3 num_pwmgens=3 num_stepgens=0"
- #CONFIG="firmware=hm2/5i20/SVST8_4.BIT num_encoders=3 num_pwmgens=3 num_stepgens=3"
- #CONFIG="firmware=hm2/5i20/SVST6_6_7I52S.BIT num_encoders=3 num_pwmgens=0 num_stepgens=3"
- CONFIG="firmware=hm2/5i20/SVST6_6_7I52S.BIT num_encoders=3 num_stepgens=3"
- [EMC]
- # Name of machine, for use with display, etc.
- MACHINE = HM2-Servo-Stepper
- # 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, in seconds, that display will sleep between polls
- CYCLE_TIME = 0.0500
- # Path to help file
- HELP_FILE = tklinucnc.txt
- # Initial display setting for position, RELATIVE or MACHINE
- POSITION_OFFSET = RELATIVE
- # Initial display setting for position, COMMANDED or ACTUAL
- POSITION_FEEDBACK = ACTUAL
- # Highest value that will be allowed for feed override, 1.0 = 100%
- MAX_FEED_OVERRIDE = 1.5
- # Prefix to be used
- PROGRAM_PREFIX = /home/nick/linuxcnc/nc_files
- # Introductory graphic
- INTRO_GRAPHIC = linuxcnc.gif
- INTRO_TIME = 5
- [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 = hm2-servo.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
- [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 = hm2-servo.hal
- # list of halcmd commands to execute
- # commands are executed in the order in which they appear
- #HALCMD = save neta
- [TRAJ]
- AXES = 3
- # COORDINATES = X Y Z R P W
- COORDINATES = X Y Z
- HOME = 0 0 0 0
- LINEAR_UNITS = inch
- ANGULAR_UNITS = degree
- CYCLE_TIME = 0.010
- DEFAULT_VELOCITY = 3.0
- MAX_VELOCITY = 4.0
- DEFAULT_ACCELERATION = 6.0
- MAX_ACCELERATION = 7.0
- [AXIS_0]
- TYPE = LINEAR
- MAX_VELOCITY = 1.0
- MAX_ACCELERATION = 4.0
- BACKLASH = 0.000
- FERROR = 0.010
- MIN_FERROR = 0.002
- INPUT_SCALE = 81920
- OUTPUT_SCALE = -1.000
- OUTPUT_OFFSET = 0.0
- MAX_OUTPUT = 1.0
- MIN_LIMIT = -3.0
- MAX_LIMIT = 10.0
- HOME = 0.000
- HOME_OFFSET = -2.9
- HOME_SEARCH_VEL = -0.50
- HOME_LATCH_VEL = 0.10
- # the X axis servo's encoder does not have an index channel, so we have to home without index
- HOME_USE_INDEX = NO
- HOME_IGNORE_LIMITS = YES
- # PID tuning params
- DEADBAND = 0.000015
- P = 100.0
- I = 0.000
- D = 0.000
- FF0 = 0.000
- FF1 = 1.000
- FF2 = 0.0
- BIAS = 0.000
- [AXIS_1]
- TYPE = LINEAR
- MAX_VELOCITY = 1.0
- MAX_ACCELERATION = 4.0
- BACKLASH = 0.000
- FERROR = 0.010
- MIN_FERROR = 0.002
- INPUT_SCALE = -81920
- OUTPUT_SCALE = 1.000
- OUTPUT_OFFSET = 0.0
- MAX_OUTPUT = 1.0
- MIN_LIMIT = -3.0
- MAX_LIMIT = 10.0
- HOME = 0.000
- HOME_OFFSET = -2.9
- HOME_SEARCH_VEL = -0.50
- HOME_LATCH_VEL = 0.10
- # the Y axis servo's encoder has an index channel, so we use it to improve the home accuracy
- HOME_USE_INDEX = YES
- HOME_IGNORE_LIMITS = YES
- # PID tuning params
- DEADBAND = 0.000015
- P = 100.0
- I = 0.000
- D = 0.000
- FF0 = 0.000
- FF1 = 1.000
- FF2 = 0.0
- BIAS = 0.000
- [AXIS_2]
- TYPE = LINEAR
- MAX_VELOCITY = 1.0
- MAX_ACCELERATION = 4.0
- BACKLASH = 0.000
- FERROR = 0.010
- MIN_FERROR = 0.002
- INPUT_SCALE = 81920
- OUTPUT_SCALE = -1.000
- OUTPUT_OFFSET = 0.0
- MAX_OUTPUT = 1.0
- MIN_LIMIT = -3.0
- MAX_LIMIT = 3.0
- HOME = 0.0
- HOME_OFFSET = -2.9
- HOME_SEARCH_VEL = -0.50
- HOME_LATCH_VEL = 0.10
- # the Z axis servo's encoder does not have an index channel, so we have to home without index
- HOME_USE_INDEX = NO
- HOME_IGNORE_LIMITS = YES
- # PID tuning params
- DEADBAND = 0.000015
- P = 100.0
- I = 0.000
- D = 0.000
- FF0 = 0.000
- FF1 = 1.000
- FF2 = 0.0
- BIAS = 0.000
- [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
- _____________________________________________________________________________________________
- Hal File
- # #######################################
- #
- # HAL file for HostMot2 with 3 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
- # 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
- #added lines
- setp hm2_5i20.0.stepgen.00.control-type 1
- setp hm2_5i20.0.stepgen.01.control-type 1
- # ################################################
- # 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.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
- 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
- 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.02.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.pwmgen.02.output-type 1 #pwm on pin1, dir on pin2
- #setp hm2_[HOSTMOT2](BOARD).0.pwmgen.02.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.02.value
- # ##################################################
- # 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
- #
- # 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 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