Master branch gantry Mesa 7i96
Thanks @rodw for your great example at forum.linuxcnc.org/47-hal-examples/34072...ranch-gantry-example
You helped me a lot when I was using the cheap Chines Bob and a gantry. Now I am using a Mesa 7i96 and I can not get it to work again. I want a functioning gantry for my Y axes, I had it working with the parallel Bob's.
I finally got the limit and home switches working, I had to invert them and it took me a long time to figure out that I can not use the
-not
_not
But I can not get the gantry to work with both Y motors working as they should. I can see in the hallmonitor that three signals are generated, I seem to miss the fourth signal for the second Y motor.
Can you please take a look and tell me what I am doing wrong? Would be really appreciated
(my git repo: git.cnckloon.nl/CNCZone/Mesa_2019 )
7i96.hal
# #######################################
#
# HAL file for HostMot2 with 3 steppers
#
# 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 [KINS]KINEMATICS
# motion controller, get name and thread periods from ini file
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
# hostmot2 driver
loadrt hostmot2
# load low-level driver
loadrt [HOSTMOT2](DRIVER) config=[HOSTMOT2](CONFIG)
# load estop latch component
loadrt estop_latch
####https://forum.linuxcnc.org/49-basic-configuration/33867-how-to-connect-home-switches-for-dual-motor-on-3-axis-machine-2-8-pre-master#104933
loadrt stepgen step_type=0,0,0,0
# ################################################
# THREADS
# ################################################
addf hm2_[HOSTMOT2](BOARD).0.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
# revel in the free time here from not having to run PID
addf hm2_[HOSTMOT2](BOARD).0.write servo-thread
addf estop-latch.0 servo-thread
# --- MAX-X ---
#net max-x <= hm2_7i96.0.gpio.010.in
# --- ESTOP ---
net estop-ext <= hm2_7i96.0.gpio.010.in
net estop-out <= iocontrol.0.user-enable-out
net home-x <= hm2_7i96.0.gpio.000.in_not
net home-yR <= hm2_7i96.0.gpio.001.in_not
net home-yL <= hm2_7i96.0.gpio.002.in_not
net home-z <= hm2_7i96.0.gpio.003.in_not
#probe
#net probe-in => motion.probe-input
#net probe-in <= hm2_7i96.0.gpio.009.in
# --- GMoccapy tool probe
net probe motion.probe-input <= hm2_7i96.0.gpio.009.in
# ######################################################
# 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 <= joint.0.amp-enable-out
net emcmot.00.enable => hm2_[HOSTMOT2](BOARD).0.stepgen.00.enable
# position command and feedback
net emcmot.00.pos-cmd <= joint.0.motor-pos-cmd
net emcmot.00.pos-cmd => hm2_[HOSTMOT2](BOARD).0.stepgen.00.position-cmd
net motor.00.pos-fb <= hm2_[HOSTMOT2](BOARD).0.stepgen.00.position-fb
net motor.00.pos-fb => joint.0.motor-pos-fb
# timing parameters
setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.dirsetup [JOINT_0]DIRSETUP
setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.dirhold [JOINT_0]DIRHOLD
setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.steplen [JOINT_0]STEPLEN
setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.stepspace [JOINT_0]STEPSPACE
setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.position-scale [JOINT_0]SCALE
setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.maxvel [JOINT_0]STEPGEN_MAX_VEL
setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.maxaccel [JOINT_0]STEPGEN_MAX_ACC
setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.step_type 0
# ################
# Yr [1] Axis
# ################
# axis enable chain
newsig emcmot.01.enable bit
sets emcmot.01.enable FALSE
net emcmot.01.enable <= joint.1.amp-enable-out
net emcmot.01.enable => hm2_[HOSTMOT2](BOARD).0.stepgen.01.enable
# position command and feedback
net emcmot.01.pos-cmd <= joint.1.motor-pos-cmd
net emcmot.01.pos-cmd => hm2_[HOSTMOT2](BOARD).0.stepgen.01.position-cmd
net motor.01.pos-fb <= hm2_[HOSTMOT2](BOARD).0.stepgen.01.position-fb
net motor.01.pos-fb => joint.1.motor-pos-fb
# timing parameters
setp hm2_[HOSTMOT2](BOARD).0.stepgen.01.dirsetup [JOINT_1]DIRSETUP
setp hm2_[HOSTMOT2](BOARD).0.stepgen.01.dirhold [JOINT_1]DIRHOLD
setp hm2_[HOSTMOT2](BOARD).0.stepgen.01.steplen [JOINT_1]STEPLEN
setp hm2_[HOSTMOT2](BOARD).0.stepgen.01.stepspace [JOINT_1]STEPSPACE
setp hm2_[HOSTMOT2](BOARD).0.stepgen.01.position-scale [JOINT_1]SCALE
setp hm2_[HOSTMOT2](BOARD).0.stepgen.01.maxvel [JOINT_1]STEPGEN_MAX_VEL
setp hm2_[HOSTMOT2](BOARD).0.stepgen.01.maxaccel [JOINT_1]STEPGEN_MAX_ACC
setp hm2_[HOSTMOT2](BOARD).0.stepgen.01.step_type 0
# ################
# Yl [2] Axis
# ################
# axis enable chain
newsig emcmot.02.enable bit
sets emcmot.02.enable FALSE
net emcmot.02.enable <= joint.2.amp-enable-out
net emcmot.02.enable => hm2_[HOSTMOT2](BOARD).0.stepgen.02.enable
# position command and feedback
net emcmot.02.pos-cmd <= joint.2.motor-pos-cmd
net emcmot.02.pos-cmd => hm2_[HOSTMOT2](BOARD).0.stepgen.02.position-cmd
net motor.02.pos-fb <= hm2_[HOSTMOT2](BOARD).0.stepgen.02.position-fb
net motor.02.pos-fb => joint.2.motor-pos-fb
# timing parameters
setp hm2_[HOSTMOT2](BOARD).0.stepgen.02.dirsetup [JOINT_1]DIRSETUP
setp hm2_[HOSTMOT2](BOARD).0.stepgen.02.dirhold [JOINT_1]DIRHOLD
setp hm2_[HOSTMOT2](BOARD).0.stepgen.02.steplen [JOINT_1]STEPLEN
setp hm2_[HOSTMOT2](BOARD).0.stepgen.02.stepspace [JOINT_1]STEPSPACE
setp hm2_[HOSTMOT2](BOARD).0.stepgen.02.position-scale [JOINT_1]SCALE
setp hm2_[HOSTMOT2](BOARD).0.stepgen.02.maxvel [JOINT_1]STEPGEN_MAX_VEL
setp hm2_[HOSTMOT2](BOARD).0.stepgen.02.maxaccel [JOINT_1]STEPGEN_MAX_ACC
setp hm2_[HOSTMOT2](BOARD).0.stepgen.02.step_type 0
# ################
# Z [2] Axis
# ################
# axis enable chain
newsig emcmot.03.enable bit
sets emcmot.03.enable FALSE
net emcmot.03.enable <= joint.3.amp-enable-out
net emcmot.03.enable => hm2_[HOSTMOT2](BOARD).0.stepgen.03.enable
# position command and feedback
net emcmot.03.pos-cmd <= joint.3.motor-pos-cmd
net emcmot.03.pos-cmd => hm2_[HOSTMOT2](BOARD).0.stepgen.03.position-cmd
net motor.03.pos-fb <= hm2_[HOSTMOT2](BOARD).0.stepgen.03.position-fb
net motor.03.pos-fb => joint.3.motor-pos-fb
# timing parameters
setp hm2_[HOSTMOT2](BOARD).0.stepgen.03.dirsetup [JOINT_3]DIRSETUP
setp hm2_[HOSTMOT2](BOARD).0.stepgen.03.dirhold [JOINT_3]DIRHOLD
setp hm2_[HOSTMOT2](BOARD).0.stepgen.03.steplen [JOINT_3]STEPLEN
setp hm2_[HOSTMOT2](BOARD).0.stepgen.03.stepspace [JOINT_3]STEPSPACE
setp hm2_[HOSTMOT2](BOARD).0.stepgen.03.position-scale [JOINT_3]SCALE
setp hm2_[HOSTMOT2](BOARD).0.stepgen.03.maxvel [JOINT_3]STEPGEN_MAX_VEL
setp hm2_[HOSTMOT2](BOARD).0.stepgen.03.maxaccel [JOINT_3]STEPGEN_MAX_ACC
setp hm2_[HOSTMOT2](BOARD).0.stepgen.03.step_type 0
#
# The Mesa AnyIO output pins can be in open-drain mode (drive low, float
# high) or push/pull mode (drive low, drive high).
#
# When a logical output is 1 in open-drain mode, the FPGA lets the pin
# float and it gets pulled high to +5V via a 10K resistor.
#
# When a logical output is 1 in push/pull mode, the FPGA pushes the pin
# high but only to +3.3V. This is problematic on some kinds of inputs.
#
#setp hm2_[HOSTMOT2](BOARD).0.gpio.048.is_opendrain 1
#setp hm2_[HOSTMOT2](BOARD).0.gpio.049.is_opendrain 1
#setp hm2_[HOSTMOT2](BOARD).0.gpio.054.is_opendrain 1
#setp hm2_[HOSTMOT2](BOARD).0.gpio.055.is_opendrain 1
#setp hm2_[HOSTMOT2](BOARD).0.gpio.060.is_opendrain 1
#setp hm2_[HOSTMOT2](BOARD).0.gpio.061.is_opendrain 1
# ##################################################
# Standard I/O Block - EStop, Etc
# ##################################################
# A basic estop loop that only includes the hostmot watchdog.
net user-enable iocontrol.0.user-request-enable => estop-latch.0.reset
net enable-latch estop-latch.0.ok-out => iocontrol.0.emc-enable-in
net watchdog hm2_[HOSTMOT2](BOARD).0.watchdog.has_bit => estop-latch.0.fault-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
7i96.ini
[EMC]
# The version string for this INI file.
VERSION = 1.1
# Name of machine, for use with display, etc.
MACHINE = 7i96 Ton CNC
# 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., tklinuxcnc
#DISPLAY = tklinuxcnc
DISPLAY = gmoccapy
# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME = 0.0500
# Path to help file
HELP_FILE = tklinuxcnc.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/ton/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
[RS274NGC]
# File containing interpreter variables
PARAMETER_FILE = 7i96.var
[EMCMOT]
EMCMOT = motmod
# Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0
# Servo task period, in nanoseconds
SERVO_PERIOD = 1000000
[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
[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 = 7i96.hal
# list of halcmd commands to execute
# commands are executed in the order in which they appear
#HALCMD = save neta
[HALUI]
#No Content
[TRAJ]
COORDINATES = X Y Z
#HOME = 0 0 0
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
[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
[KINS]
JOINTS = 4
KINEMATICS = trivkins coordinates=XYYZ
[AXIS_X]
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
MAX_VELOCITY = 10
MAX_ACCELERATION = 20
[JOINT_0]
# X
# Step timing is 40 us steplen + 40 us stepspace
# That gives 80 us step period = 12.5 KHz step freq
#
# Bah, even software stepping can handle that, hm2 doesnt buy you much with
# such slow steppers.
#
# Scale is 200 steps/rev * 5 revs/inch = 1000 steps/inch
#
# This gives a maxvel of 12.5/1 = 12.5 ips
#
TYPE = LINEAR
MAX_VELOCITY = 10
MAX_ACCELERATION = 20
# Set Stepgen max 20% higher than the axis
STEPGEN_MAX_VEL = 12
STEPGEN_MAX_ACC = 24
BACKLASH = 0.000
# scale is 200 steps/rev * 5 revs/inch
SCALE = 1000
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
FERROR = 0.050
MIN_FERROR = 0.005
#HOME = 0.000
#HOME_OFFSET = 0.10
#HOME_SEARCH_VEL = 0.10
#HOME_LATCH_VEL = -0.01
#HOME_USE_INDEX = YES
#HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 1
# these are in nanoseconds
DIRSETUP = 200
DIRHOLD = 200
STEPLEN = 40000
STEPSPACE = 40000
[AXIS_Y]
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
MAX_VELOCITY = 10
MAX_ACCELERATION = 20
[JOINT_1]
## Y
TYPE = LINEAR
MAX_VELOCITY = 10
MAX_ACCELERATION = 20
# Set Stepgen max 20% higher than the axis
STEPGEN_MAX_VEL = 12
STEPGEN_MAX_ACC = 24
BACKLASH = 0.000
SCALE = 1000
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
FERROR = 0.050
MIN_FERROR = 0.005
#HOME = 0.000
#HOME_OFFSET = 0.10
#HOME_SEARCH_VEL = 0.10
#HOME_LATCH_VEL = -0.01
#HOME_USE_INDEX = YES
#HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 1
# these are in nanoseconds
DIRSETUP = 200
DIRHOLD = 200
STEPLEN = 40000
STEPSPACE = 40000
[JOINT_2]
## Y
TYPE = LINEAR
MAX_VELOCITY = 10
MAX_ACCELERATION = 20
# Set Stepgen max 20% higher than the axis
STEPGEN_MAX_VEL = 12
STEPGEN_MAX_ACC = 24
BACKLASH = 0.000
SCALE = 1000
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
FERROR = 0.050
MIN_FERROR = 0.005
#HOME = 0.000
#HOME_OFFSET = 0.10
#HOME_SEARCH_VEL = 0.10
#HOME_LATCH_VEL = -0.01
#HOME_USE_INDEX = YES
#HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 1
# these are in nanoseconds
DIRSETUP = 200
DIRHOLD = 200
STEPLEN = 40000
STEPSPACE = 40000
[AXIS_Z]
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
MAX_VELOCITY = 10
MAX_ACCELERATION = 20
[JOINT_3]
## Z
TYPE = LINEAR
MAX_VELOCITY = 10
MAX_ACCELERATION = 20
# Set Stepgen max 20% higher than the axis
STEPGEN_MAX_VEL = 12
STEPGEN_MAX_ACC = 24
BACKLASH = 0.000
SCALE = 1000
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
FERROR = 0.050
MIN_FERROR = 0.005
#HOME = 0.000
#HOME_OFFSET = 0.10
#HOME_SEARCH_VEL = 0.10
#HOME_LATCH_VEL = -0.01
#HOME_USE_INDEX = YES
#HOME_IGNORE_LIMITS = YES
HOME_SEQUENCE = 0
# these are in nanoseconds
DIRSETUP = 200
DIRHOLD = 200
STEPLEN = 40000
STEPSPACE = 40000
[HOSTMOT2]
DRIVER=hm2_eth board_ip="10.10.10.10" debug=0
BOARD=7i96
CONFIG="num_encoders=1 num_stepgens=5"
Please Log in or Create an account to join the conversation.
These numbers might make sense for a small inch machine bit not for mm (scaling of 1000 =1u resolution seems high also)
I would set the step timings to something reasonable also
say
DIRSETUP = 20000
DIRHOLD = 20000
STEPLEN = 5000
STEPSPACE = 5000
Please Log in or Create an account to join the conversation.
Then make sure the HOME_SEQUENCE = -1 for both sides of the gantry in the INI file
Please Log in or Create an account to join the conversation.
You need to manually add another joint to your INI file and configure it in Hal.
Are you sure? He seems to have 3 axes and 4 joints, as expected.
Please Log in or Create an account to join the conversation.
You need to manually add another joint to your INI file and configure it in Hal.
Are you sure? He seems to have 3 axes and 4 joints, as expected.
I was wondering too. Changed a lot an hour ago, but still not working. If I use Hallshow just three motion counter change, the fourth one stays at 0.
Please Log in or Create an account to join the conversation.
joint.1.motor-pos-cmd (y1 command) _after_ homing?
Please Log in or Create an account to join the conversation.
- tommylight
- Online
- Moderator
- Posts: 19208
- Thank you received: 6437
Copy and paste should do it.This is generally just a cut and paste exercise .......
Please Log in or Create an account to join the conversation.
- tommylight
- Online
- Moderator
- Posts: 19208
- Thank you received: 6437
Please Log in or Create an account to join the conversation.
In your ini file you need to have "home" position and home search velocity set ( it is omitted ) and both Y axis must have "-1" set for sequence.
They are there in my latest version of the config files.Does not work though.
Having loads of following errors:
task: main loop took 0.132463 seconds
IDLE
1 2
task: main loop took 0.101422 seconds
IDLE
MANUAL Mode
RUN
IDLE
joint 3 following error
emc/task/taskintf.cc 942: Error on joint 3, command number 169
task: main loop took 0.160427 seconds
IDLE
Joint_3 is home_sequence 0
hal file: git.cnckloon.nl/CNCZone/mesa_2019/src/br...master/mesa_2019.hal
ini file: git.cnckloon.nl/CNCZone/mesa_2019/src/br...master/mesa_2019.ini
Getting frustrated now I had a working machine, all I did was change the parallel BOB's for a Mesa 7i96 card...... Thanks for everybody's help, makes it a little easier to deal with this.
Please Log in or Create an account to join the conversation.
This will fail instantly:
MAX_VELOCITY = 40.0
...
STEPGEN_MAX_VEL = 12
(stepgen max acceleration and velocity limits should be set to about 125% of the joint and axis acceleration and velocity limits)
DIRSETUP = 35000
DIRHOLD = 35000
STEPLEN = 1
STEPSPACE = 0
and a 1 ns step will not drive any real hardware
I suggest (again) 5000,5000 for steplen/stepspace
Please Log in or Create an account to join the conversation.