Master branch gantry Mesa 7i96

More
07 Apr 2019 19:28 #130450 by ikkuh
(moved from wrong category)

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
construct in the hal file, I have to use
_not
for the 7i96.
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.

More
07 Apr 2019 21:08 #130452 by PCW
Replied by PCW on topic Master branch gantry Mesa 7i96
I dont see anything obvious that would stop one of the Y axis from working but the velocities and limits are crazy for a mm machine. (10 mm/sec max velocity and +-10mm position limits)

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.

More
08 Apr 2019 00:36 #130465 by rodw
Replied by rodw on topic Master branch gantry Mesa 7i96
You need to manually add another joint to your INI file and configure it in Hal. This is generally just a cut and paste exercise but be careful the joint numbering agrees with your physical machine and the 7i96 inputs.

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.

More
08 Apr 2019 13:28 #130508 by andypugh

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.

More
08 Apr 2019 13:33 #130509 by ikkuh

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.

More
08 Apr 2019 14:12 #130513 by PCW
Replied by PCW on topic Master branch gantry Mesa 7i96
Are you saying that joint.2.motor-pos-cmd (y2 command) does not follow
joint.1.motor-pos-cmd (y1 command) _after_ homing?

Please Log in or Create an account to join the conversation.

More
09 Apr 2019 01:29 #130536 by tommylight

This is generally just a cut and paste exercise .......

Copy and paste should do it.

Please Log in or Create an account to join the conversation.

More
09 Apr 2019 01:39 #130537 by tommylight
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.
The following user(s) said Thank You: ikkuh

Please Log in or Create an account to join the conversation.

More
09 Apr 2019 14:30 - 15 Apr 2019 13:18 #130554 by ikkuh

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.
Last edit: 15 Apr 2019 13:18 by ikkuh. Reason: started over, using JT's tool now

Please Log in or Create an account to join the conversation.

More
09 Apr 2019 16:32 - 09 Apr 2019 16:40 #130561 by PCW
Replied by PCW on topic Master branch gantry Mesa 7i96
[JOINT_3]
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
Last edit: 09 Apr 2019 16:40 by PCW.
The following user(s) said Thank You: ikkuh

Please Log in or Create an account to join the conversation.

Time to create page: 0.087 seconds
Powered by Kunena Forum