PnCConf Setup issue with the Spindle
13 Apr 2016 21:35 #73258
by twender
PnCConf Setup issue with the Spindle was created by twender
I recently upgraded to Mesa (6i25 & 7i76) boards from Parallel control on my lathe. Having some trouble understanding my error when starting linuxcnc. Trying to use Analog out to control my spindle (0-10 VDC).
My error is: ./lathe.hal:178: parameter or pin 'hm2_5i25.0.7i76.0.0.spinout-minlim' not found
Error loghal file:
ini file
A solution is good, but understanding is what I am after.
Any guiding help is greatly appreciated!
My error is: ./lathe.hal:178: parameter or pin 'hm2_5i25.0.7i76.0.0.spinout-minlim' not found
Error log
Print file information:
RUN_IN_PLACE=no
LINUXCNC_DIR=
LINUXCNC_BIN_DIR=/usr/bin
LINUXCNC_TCL_DIR=/usr/lib/tcltk/linuxcnc
LINUXCNC_SCRIPT_DIR=
LINUXCNC_RTLIB_DIR=/usr/realtime-3.4-9-rtai-686-pae/modules/linuxcnc
LINUXCNC_CONFIG_DIR=
LINUXCNC_LANG_DIR=/usr/share/linuxcnc/tcl/msgs
INIVAR=inivar
HALCMD=halcmd
LINUXCNC_EMCSH=/usr/bin/wish8.5
LINUXCNC - 2.7.0
Machine configuration directory is '/home/tim/linuxcnc/configs/lathe'
Machine configuration file is 'lathe.ini'
INIFILE=/home/tim/linuxcnc/configs/lathe/lathe.ini
PARAMETER_FILE=linuxcnc.var
TASK=milltask
HALUI=halui
DISPLAY=axis
Starting LinuxCNC...
Starting LinuxCNC server program: linuxcncsvr
Loading Real Time OS, RTAPI, and HAL_LIB modules
Starting LinuxCNC IO program: io
Starting HAL User Interface program: halui
Found file(REL): ./lathe.hal
Shutting down and cleaning up LinuxCNC...
Running HAL shutdown script
Killing task linuxcncsvr, PID=5111
Removing HAL_LIB, RTAPI, and Real Time OS modules
Removing NML shared memory segments
Debug file information:
./lathe.hal:178: parameter or pin 'hm2_5i25.0.7i76.0.0.spinout-minlim' not found
5111
PID TTY STAT TIME COMMAND
Stopping realtime threads
Unloading hal components
# Generated by PNCconf at Tue Apr 12 16:29:59 2016
# If you make changes to this file, they will be
# overwritten when you run PNCconf again
loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hostmot2
loadrt hm2_pci config=" num_encoders=1 num_pwmgens=0 num_stepgens=3 sserial_port_0=00xxxx"
setp hm2_5i25.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.z,pid.s
loadrt abs names=abs.spindle
loadrt lowpass names=lowpass.spindle
loadrt scale names=scale.spindle
addf hm2_5i25.0.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.s.do-pid-calcs servo-thread
addf scale.spindle servo-thread
addf abs.spindle servo-thread
addf lowpass.spindle servo-thread
addf hm2_5i25.0.write servo-thread
# external output signals
# --- SPINDLE-CW ---
setp hm2_5i25.0.gpio.006.is_output true
net spindle-cw hm2_5i25.0.gpio.006.out
# --- SPINDLE-CCW ---
setp hm2_5i25.0.gpio.007.is_output true
net spindle-ccw hm2_5i25.0.gpio.007.out
# external input signals
# --- HOME-X ---
net home-x <= hm2_5i25.0.gpio.017.in
# --- HOME-Z ---
net home-z <= hm2_5i25.0.gpio.018.in
# --- HOME-A ---
net home-a <= hm2_5i25.0.gpio.019.in
# --- SPINDLE-AT-SPEED ---
net spindle-at-speed <= hm2_5i25.0.gpio.020.in
#*******************
# AXIS X
#*******************
setp pid.x.Pgain [AXIS_0]P
setp pid.x.Igain [AXIS_0]I
setp pid.x.Dgain [AXIS_0]D
setp pid.x.bias [AXIS_0]BIAS
setp pid.x.FF0 [AXIS_0]FF0
setp pid.x.FF1 [AXIS_0]FF1
setp pid.x.FF2 [AXIS_0]FF2
setp pid.x.deadband [AXIS_0]DEADBAND
setp pid.x.maxoutput [AXIS_0]MAX_OUTPUT
setp pid.x.error-previous-target true
setp pid.x.maxerror .0005
net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-vel-cmd => pid.x.command-deriv
net x-pos-fb => pid.x.feedback
net x-output => pid.x.output
# Step Gen signals/setup
setp hm2_5i25.0.stepgen.00.dirsetup [AXIS_0]DIRSETUP
setp hm2_5i25.0.stepgen.00.dirhold [AXIS_0]DIRHOLD
setp hm2_5i25.0.stepgen.00.steplen [AXIS_0]STEPLEN
setp hm2_5i25.0.stepgen.00.stepspace [AXIS_0]STEPSPACE
setp hm2_5i25.0.stepgen.00.position-scale [AXIS_0]STEP_SCALE
setp hm2_5i25.0.stepgen.00.step_type 0
setp hm2_5i25.0.stepgen.00.control-type 1
setp hm2_5i25.0.stepgen.00.maxaccel [AXIS_0]STEPGEN_MAXACCEL
setp hm2_5i25.0.stepgen.00.maxvel [AXIS_0]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net x-pos-cmd <= axis.0.motor-pos-cmd
net x-vel-cmd <= axis.0.joint-vel-cmd
net x-output <= hm2_5i25.0.stepgen.00.velocity-cmd
net x-pos-fb <= hm2_5i25.0.stepgen.00.position-fb
net x-pos-fb => axis.0.motor-pos-fb
net x-enable <= axis.0.amp-enable-out
net x-enable => hm2_5i25.0.stepgen.00.enable
# ---setup home / limit switch signals---
net home-x => axis.0.home-sw-in
net x-neg-limit => axis.0.neg-lim-sw-in
net x-pos-limit => axis.0.pos-lim-sw-in
#*******************
# AXIS Z
#*******************
setp pid.z.Pgain [AXIS_2]P
setp pid.z.Igain [AXIS_2]I
setp pid.z.Dgain [AXIS_2]D
setp pid.z.bias [AXIS_2]BIAS
setp pid.z.FF0 [AXIS_2]FF0
setp pid.z.FF1 [AXIS_2]FF1
setp pid.z.FF2 [AXIS_2]FF2
setp pid.z.deadband [AXIS_2]DEADBAND
setp pid.z.maxoutput [AXIS_2]MAX_OUTPUT
setp pid.z.error-previous-target true
setp pid.z.maxerror .0005
net z-index-enable <=> pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-vel-cmd => pid.z.command-deriv
net z-pos-fb => pid.z.feedback
net z-output => pid.z.output
# Step Gen signals/setup
setp hm2_5i25.0.stepgen.01.dirsetup [AXIS_2]DIRSETUP
setp hm2_5i25.0.stepgen.01.dirhold [AXIS_2]DIRHOLD
setp hm2_5i25.0.stepgen.01.steplen [AXIS_2]STEPLEN
setp hm2_5i25.0.stepgen.01.stepspace [AXIS_2]STEPSPACE
setp hm2_5i25.0.stepgen.01.position-scale [AXIS_2]STEP_SCALE
setp hm2_5i25.0.stepgen.01.step_type 0
setp hm2_5i25.0.stepgen.01.control-type 1
setp hm2_5i25.0.stepgen.01.maxaccel [AXIS_2]STEPGEN_MAXACCEL
setp hm2_5i25.0.stepgen.01.maxvel [AXIS_2]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net z-pos-cmd <= axis.2.motor-pos-cmd
net z-vel-cmd <= axis.2.joint-vel-cmd
net z-output <= hm2_5i25.0.stepgen.01.velocity-cmd
net z-pos-fb <= hm2_5i25.0.stepgen.01.position-fb
net z-pos-fb => axis.2.motor-pos-fb
net z-enable <= axis.2.amp-enable-out
net z-enable => hm2_5i25.0.stepgen.01.enable
# ---setup home / limit switch signals---
net home-z => axis.2.home-sw-in
net z-neg-limit => axis.2.neg-lim-sw-in
net z-pos-limit => axis.2.pos-lim-sw-in
#*******************
# SPINDLE S
#*******************
setp pid.s.Pgain [SPINDLE_9]P
setp pid.s.Igain [SPINDLE_9]I
setp pid.s.Dgain [SPINDLE_9]D
setp pid.s.bias [SPINDLE_9]BIAS
setp pid.s.FF0 [SPINDLE_9]FF0
setp pid.s.FF1 [SPINDLE_9]FF1
setp pid.s.FF2 [SPINDLE_9]FF2
setp pid.s.deadband [SPINDLE_9]DEADBAND
setp pid.s.maxoutput [SPINDLE_9]MAX_OUTPUT
setp pid.s.error-previous-target true
setp pid.s.maxerror .0005
net spindle-index-enable <=> pid.s.index-enable
net spindle-enable => pid.s.enable
net spindle-vel-cmd-rpm-abs => pid.s.command
net spindle-vel-fb-rpm-abs => pid.s.feedback
net spindle-output <= pid.s.output
# ---digital potentionmeter output signals/setup---
setp hm2_5i25.0.7i76.0.0.spinout-minlim [SPINDLE_9]OUTPUT_MIN_LIMIT
setp hm2_5i25.0.7i76.0.0.spinout-maxlim [SPINDLE_9]OUTPUT_MAX_LIMIT
setp hm2_5i25.0.7i76.0.0.spinout-scalemax [SPINDLE_9]OUTPUT_SCALE
net spindle-vel-cmd-abs => hm2_5i25.0.7i76.0.0.spinout
net machine-is-enabled => hm2_5i25.0.7i76.0.0.spinena
net spindle-ccw => hm2_5i25.0.7i76.0.0.spindir
# ---Encoder feedback signals/setup---
setp hm2_5i25.0.encoder.00.counter-mode 0
setp hm2_5i25.0.encoder.00.filter 1
setp hm2_5i25.0.encoder.00.index-invert 0
setp hm2_5i25.0.encoder.00.index-mask 0
setp hm2_5i25.0.encoder.00.index-mask-invert 0
setp hm2_5i25.0.encoder.00.scale [SPINDLE_9]ENCODER_SCALE
net spindle-revs <= hm2_5i25.0.encoder.00.position
net spindle-vel-fb-rps <= hm2_5i25.0.encoder.00.velocity
net spindle-index-enable <=> hm2_5i25.0.encoder.00.index-enable
# ---setup spindle control signals---
net spindle-vel-cmd-rps <= motion.spindle-speed-out-rps
net spindle-vel-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
net spindle-vel-cmd-rpm <= motion.spindle-speed-out
net spindle-vel-cmd-rpm-abs <= motion.spindle-speed-out-abs
net spindle-enable <= motion.spindle-on
net spindle-cw <= motion.spindle-forward
net spindle-ccw <= motion.spindle-reverse
net spindle-brake <= motion.spindle-brake
net spindle-revs => motion.spindle-revs
net spindle-at-speed => motion.spindle-at-speed
net spindle-vel-fb-rps => motion.spindle-speed-in
net spindle-index-enable <=> motion.spindle-index-enable
# Use ACTUAL spindle velocity from spindle encoder
# spindle-velocity bounces around so we filter it with lowpass
# spindle-velocity is signed so we use absolute component to remove sign
# ACTUAL velocity is in RPS not RPM so we scale it.
setp scale.spindle.gain 60
setp lowpass.spindle.gain 1.000000
net spindle-vel-fb-rps => scale.spindle.in
net spindle-fb-rpm scale.spindle.out => abs.spindle.in
net spindle-fb-rpm-abs abs.spindle.out => lowpass.spindle.in
net spindle-fb-rpm-abs-filtered lowpass.spindle.out
#******************************
# connect miscellaneous signals
#******************************
# ---HALUI signals---
net joint-select-a halui.joint.0.select
net x-is-homed halui.joint.0.is-homed
net jog-x-pos halui.jog.0.plus
net jog-x-neg halui.jog.0.minus
net jog-x-analog halui.jog.0.analog
net joint-select-c halui.joint.2.select
net z-is-homed halui.joint.2.is-homed
net jog-z-pos halui.jog.2.plus
net jog-z-neg halui.jog.2.minus
net jog-z-analog halui.jog.2.analog
net jog-selected-pos halui.jog.selected.plus
net jog-selected-neg halui.jog.selected.minus
net spindle-manual-cw halui.spindle.forward
net spindle-manual-ccw halui.spindle.reverse
net spindle-manual-stop halui.spindle.stop
net machine-is-on halui.machine.is-on
net jog-speed halui.jog-speed
net MDI-mode halui.mode.is-mdi
# ---coolant signals---
net coolant-mist <= iocontrol.0.coolant-mist
net coolant-flood <= iocontrol.0.coolant-flood
# ---probe signal---
net probe-in => motion.probe-input
# ---motion control signals---
net in-position <= motion.in-position
net machine-is-enabled <= motion.motion-enabled
# ---digital in / out signals---
# ---estop signals---
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
# ---manual tool change signals---
loadusr -W hal_manualtoolchange
net tool-change-request iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-change-confirmed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
ini file
# Generated by PNCconf at Tue Apr 12 16:29:59 2016
# If you make changes to this file, they will be
# overwritten when you run PNCconf again
[EMC]
MACHINE = lathe
DEBUG = 0
[DISPLAY]
DISPLAY = axis
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 2.000000
MAX_SPINDLE_OVERRIDE = 1.000000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/tim/linuxcnc/nc_files
PYVCP = pyvcp-panel.xml
INCREMENTS = .1in .05in .01in .005in .001in .0005in .0001in
LATHE = 1
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 0.250000
MAX_LINEAR_VELOCITY = 1.000000
MIN_LINEAR_VELOCITY = 0.010000
DEFAULT_ANGULAR_VELOCITY = 0.250000
MAX_ANGULAR_VELOCITY = 1.000000
MIN_ANGULAR_VELOCITY = 0.010000
EDITOR = gedit
GEOMETRY = xyz
[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python
[TASK]
TASK = milltask
CYCLE_TIME = 0.010
[RS274NGC]
PARAMETER_FILE = linuxcnc.var
[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
COMM_WAIT = 0.010
SERVO_PERIOD = 1000000
[HOSTMOT2]
# **** This is for info only ****
# DRIVER0=hm2_pci
# BOARD0=5i25
[HAL]
HALUI = halui
HALFILE = lathe.hal
HALFILE = custom.hal
POSTGUI_HALFILE = postgui_call_list.hal
SHUTDOWN = shutdown.hal
[HALUI]
[TRAJ]
AXES = 3
COORDINATES = X Z
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 0.10
MAX_LINEAR_VELOCITY = 0.83
[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl
#********************
# Axis X
#********************
[AXIS_0]
TYPE = LINEAR
HOME = 0.0
FERROR = 0.5
MIN_FERROR = 0.05
MAX_VELOCITY = 0.766666666667
MAX_ACCELERATION = 50.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 0.96
STEPGEN_MAXACCEL = 62.50
P = 50.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 0.958333333334
# these are in nanoseconds
DIRSETUP = 1000
DIRHOLD = 1000
STEPLEN = 1000
STEPSPACE = 1000
STEP_SCALE = 20370.0
MIN_LIMIT = -0.001
MAX_LIMIT = 8.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = -0.050000
HOME_LATCH_VEL = -0.016667
HOME_FINAL_VEL = 0.000000
HOME_USE_INDEX = NO
HOME_SEQUENCE = 1
#********************
# Axis Z
#********************
[AXIS_2]
TYPE = LINEAR
HOME = 0.0
FERROR = 0.5
MIN_FERROR = 0.05
MAX_VELOCITY = 0.833333333333
MAX_ACCELERATION = 30.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 1.04
STEPGEN_MAXACCEL = 37.50
P = 50.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 1.04166666667
# these are in nanoseconds
DIRSETUP = 1000
DIRHOLD = 1000
STEPLEN = 1000
STEPSPACE = 1000
STEP_SCALE = 20370.0
MIN_LIMIT = -4.0
MAX_LIMIT = 0.001
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = -0.050000
HOME_LATCH_VEL = -0.016667
HOME_FINAL_VEL = 0.000000
HOME_USE_INDEX = NO
HOME_SEQUENCE = 0
#********************
# Spindle
#********************
[SPINDLE_9]
P = 0.0
I = 0.0
D = 0.0
FF0 = 1.0
FF1 = 0.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 4800.0
ENCODER_SCALE = 1000.0
OUTPUT_SCALE = 4800.0
OUTPUT_MIN_LIMIT = 0.0
OUTPUT_MAX_LIMIT = 4800.0
A solution is good, but understanding is what I am after.
Any guiding help is greatly appreciated!
Please Log in or Create an account to join the conversation.
13 Apr 2016 22:19 #73262
by PCW
Replied by PCW on topic PnCConf Setup issue with the Spindle
A couple of possibilities:
1. No field power to the 7I76 (or no 5V)
both yellow LEDS on the top edge of the 7I76 should be illuminated
2. 6I25 has wrong firmware (if it was ordered as a set with the 7I76 it should be correct )
verify/reprogram with mesaflash
1. No field power to the 7I76 (or no 5V)
both yellow LEDS on the top edge of the 7I76 should be illuminated
2. 6I25 has wrong firmware (if it was ordered as a set with the 7I76 it should be correct )
verify/reprogram with mesaflash
The following user(s) said Thank You: twender
Please Log in or Create an account to join the conversation.
13 Apr 2016 22:22 #73263
by twender
Replied by twender on topic PnCConf Setup issue with the Spindle
Thanks. Will check tonight
Please Log in or Create an account to join the conversation.
15 Apr 2016 17:02 #73352
by twender
Replied by twender on topic PnCConf Setup issue with the Spindle
It was my ignorance. No power connected to TB1 (Field Power). I didn't realize you had to have voltage applied to start linuxcnc.
So, Thanks again!
I am still having issue with my spindle in that it won't show signs of life, but I need to take a closer look to ensure I have not done something wrong again... ...Likely.
On TB4 of the 7i76, I have:
PIN1: 0VDC
PIN2: OUT TO MY SPEED CONTROLLER (Previously working with PWM to a cheap 0-10 VDC board with no feedback)
PIN3: +15VDC
PIN4: NC
PIN5: SPINDLE ENA-
PIN6: SPINDLE ENA+
PIN7: SPINDLE DIR-
PIN8: SPINDLE DIR+
I plan on using the ENA and DIR outputs to control ON/OFF and DIRECTION of my spindle. Is this correct? I think I could also, pick another GPIO on the 7i76 to accomplish the same task. Correct? I am trying to understand behind the curtain, and I hope not to ask too many ignorant questions. But, at this point I am that.
Before Mesa I previously used PWM and a cheap board with no feedback. I have the encoder working within pncconf, but no spindle movement. My axes configuration appears to work fine.
Does a cursory look at my .hal and .ini reveal any obvious issues with regards to spindle control? There may be none, but I have been unable to run the spindle (After power to the field I/O and TB4) and I thought an expert could say "Looks good" or "This may be your problem".
Thanks
So, Thanks again!
I am still having issue with my spindle in that it won't show signs of life, but I need to take a closer look to ensure I have not done something wrong again... ...Likely.
On TB4 of the 7i76, I have:
PIN1: 0VDC
PIN2: OUT TO MY SPEED CONTROLLER (Previously working with PWM to a cheap 0-10 VDC board with no feedback)
PIN3: +15VDC
PIN4: NC
PIN5: SPINDLE ENA-
PIN6: SPINDLE ENA+
PIN7: SPINDLE DIR-
PIN8: SPINDLE DIR+
I plan on using the ENA and DIR outputs to control ON/OFF and DIRECTION of my spindle. Is this correct? I think I could also, pick another GPIO on the 7i76 to accomplish the same task. Correct? I am trying to understand behind the curtain, and I hope not to ask too many ignorant questions. But, at this point I am that.
Before Mesa I previously used PWM and a cheap board with no feedback. I have the encoder working within pncconf, but no spindle movement. My axes configuration appears to work fine.
Does a cursory look at my .hal and .ini reveal any obvious issues with regards to spindle control? There may be none, but I have been unable to run the spindle (After power to the field I/O and TB4) and I thought an expert could say "Looks good" or "This may be your problem".
Thanks
Please Log in or Create an account to join the conversation.
15 Apr 2016 18:26 #73354
by PCW
Replied by PCW on topic PnCConf Setup issue with the Spindle
Some versions of PnCConf have a hal file error with the spindle signal names.
I would look carefully at how the spindle signal is connected in hal
The ENA and DIR signals have an advantage over other 7I76 outputs in that they are uncommitted switches
so can either pull-up or pull down to any required voltage. The 7I76 output can only pull-up to the common field voltage
I would look carefully at how the spindle signal is connected in hal
The ENA and DIR signals have an advantage over other 7I76 outputs in that they are uncommitted switches
so can either pull-up or pull down to any required voltage. The 7I76 output can only pull-up to the common field voltage
The following user(s) said Thank You: twender
Please Log in or Create an account to join the conversation.
16 Apr 2016 19:35 #73422
by twender
Replied by twender on topic PnCConf Setup issue with the Spindle
Running 2.7.4
Finally got the spindle spinning in Pncconf Spindle Open Loop test. But, I still can't run in linuxcnc.
I currently have the spindle configured to Turn ON, CW rotation, and CCW rotation via Outputs on TB5.These worked in PnCConf, but not in linuxcnc. I did not use the connections on the spindle connector because I was not sure how to use them. Any help on understanding the 2 signals from a hookup pov is appreciated (SPINDLE ENA-, SPINDLE ENA+, SPINDLE DIR-, SPINDLE DIR+).
I am hoping my issue at this point relates to the fact that I did not use the spindle connector for Spindle ENA and Spindle DIR.
Here are my latest hal file and ini file:
hal:
ini:
Again, Thank you for your help!
Finally got the spindle spinning in Pncconf Spindle Open Loop test. But, I still can't run in linuxcnc.
I currently have the spindle configured to Turn ON, CW rotation, and CCW rotation via Outputs on TB5.These worked in PnCConf, but not in linuxcnc. I did not use the connections on the spindle connector because I was not sure how to use them. Any help on understanding the 2 signals from a hookup pov is appreciated (SPINDLE ENA-, SPINDLE ENA+, SPINDLE DIR-, SPINDLE DIR+).
I am hoping my issue at this point relates to the fact that I did not use the spindle connector for Spindle ENA and Spindle DIR.
Here are my latest hal file and ini file:
hal:
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hostmot2
loadrt hm2_pci config=" num_encoders=1 num_pwmgens=0 num_stepgens=3 sserial_port_0=0xxxxx"
setp hm2_5i25.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.z,pid.s
loadrt abs names=abs.spindle
loadrt lowpass names=lowpass.spindle
loadrt scale names=scale.spindle
loadrt near
addf hm2_5i25.0.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.s.do-pid-calcs servo-thread
addf scale.spindle servo-thread
addf abs.spindle servo-thread
addf lowpass.spindle servo-thread
addf near.0 servo-thread
addf hm2_5i25.0.write servo-thread
# external output signals
# --- SPINDLE-ON ---
net spindle-on hm2_5i25.0.7i76.0.0.output-13
# --- SPINDLE-CW ---
net spindle-cw hm2_5i25.0.7i76.0.0.output-14
# --- SPINDLE-CCW ---
net spindle-ccw hm2_5i25.0.7i76.0.0.output-15
# external input signals
#*******************
# AXIS X
#*******************
setp pid.x.Pgain [AXIS_0]P
setp pid.x.Igain [AXIS_0]I
setp pid.x.Dgain [AXIS_0]D
setp pid.x.bias [AXIS_0]BIAS
setp pid.x.FF0 [AXIS_0]FF0
setp pid.x.FF1 [AXIS_0]FF1
setp pid.x.FF2 [AXIS_0]FF2
setp pid.x.deadband [AXIS_0]DEADBAND
setp pid.x.maxoutput [AXIS_0]MAX_OUTPUT
setp pid.x.error-previous-target true
setp pid.x.maxerror .0005
net x-index-enable <=> pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-vel-cmd => pid.x.command-deriv
net x-pos-fb => pid.x.feedback
net x-output => pid.x.output
# Step Gen signals/setup
setp hm2_5i25.0.stepgen.00.dirsetup [AXIS_0]DIRSETUP
setp hm2_5i25.0.stepgen.00.dirhold [AXIS_0]DIRHOLD
setp hm2_5i25.0.stepgen.00.steplen [AXIS_0]STEPLEN
setp hm2_5i25.0.stepgen.00.stepspace [AXIS_0]STEPSPACE
setp hm2_5i25.0.stepgen.00.position-scale [AXIS_0]STEP_SCALE
setp hm2_5i25.0.stepgen.00.step_type 0
setp hm2_5i25.0.stepgen.00.control-type 1
setp hm2_5i25.0.stepgen.00.maxaccel [AXIS_0]STEPGEN_MAXACCEL
setp hm2_5i25.0.stepgen.00.maxvel [AXIS_0]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net x-pos-cmd <= axis.0.motor-pos-cmd
net x-vel-cmd <= axis.0.joint-vel-cmd
net x-output <= hm2_5i25.0.stepgen.00.velocity-cmd
net x-pos-fb <= hm2_5i25.0.stepgen.00.position-fb
net x-pos-fb => axis.0.motor-pos-fb
net x-enable <= axis.0.amp-enable-out
net x-enable => hm2_5i25.0.stepgen.00.enable
# ---setup home / limit switch signals---
net x-home-sw => axis.0.home-sw-in
net x-neg-limit => axis.0.neg-lim-sw-in
net x-pos-limit => axis.0.pos-lim-sw-in
#*******************
# AXIS Z
#*******************
setp pid.z.Pgain [AXIS_2]P
setp pid.z.Igain [AXIS_2]I
setp pid.z.Dgain [AXIS_2]D
setp pid.z.bias [AXIS_2]BIAS
setp pid.z.FF0 [AXIS_2]FF0
setp pid.z.FF1 [AXIS_2]FF1
setp pid.z.FF2 [AXIS_2]FF2
setp pid.z.deadband [AXIS_2]DEADBAND
setp pid.z.maxoutput [AXIS_2]MAX_OUTPUT
setp pid.z.error-previous-target true
setp pid.z.maxerror .0005
net z-index-enable <=> pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-vel-cmd => pid.z.command-deriv
net z-pos-fb => pid.z.feedback
net z-output => pid.z.output
# Step Gen signals/setup
setp hm2_5i25.0.stepgen.01.dirsetup [AXIS_2]DIRSETUP
setp hm2_5i25.0.stepgen.01.dirhold [AXIS_2]DIRHOLD
setp hm2_5i25.0.stepgen.01.steplen [AXIS_2]STEPLEN
setp hm2_5i25.0.stepgen.01.stepspace [AXIS_2]STEPSPACE
setp hm2_5i25.0.stepgen.01.position-scale [AXIS_2]STEP_SCALE
setp hm2_5i25.0.stepgen.01.step_type 0
setp hm2_5i25.0.stepgen.01.control-type 1
setp hm2_5i25.0.stepgen.01.maxaccel [AXIS_2]STEPGEN_MAXACCEL
setp hm2_5i25.0.stepgen.01.maxvel [AXIS_2]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net z-pos-cmd <= axis.2.motor-pos-cmd
net z-vel-cmd <= axis.2.joint-vel-cmd
net z-output <= hm2_5i25.0.stepgen.01.velocity-cmd
net z-pos-fb <= hm2_5i25.0.stepgen.01.position-fb
net z-pos-fb => axis.2.motor-pos-fb
net z-enable <= axis.2.amp-enable-out
net z-enable => hm2_5i25.0.stepgen.01.enable
# ---setup home / limit switch signals---
net z-home-sw => axis.2.home-sw-in
net z-neg-limit => axis.2.neg-lim-sw-in
net z-pos-limit => axis.2.pos-lim-sw-in
#*******************
# SPINDLE S
#*******************
setp pid.s.Pgain [SPINDLE_9]P
setp pid.s.Igain [SPINDLE_9]I
setp pid.s.Dgain [SPINDLE_9]D
setp pid.s.bias [SPINDLE_9]BIAS
setp pid.s.FF0 [SPINDLE_9]FF0
setp pid.s.FF1 [SPINDLE_9]FF1
setp pid.s.FF2 [SPINDLE_9]FF2
setp pid.s.deadband [SPINDLE_9]DEADBAND
setp pid.s.maxoutput [SPINDLE_9]MAX_OUTPUT
setp pid.s.error-previous-target true
setp pid.s.maxerror .0005
net spindle-index-enable <=> pid.s.index-enable
net spindle-enable => pid.s.enable
net spindle-vel-cmd-rpm-abs => pid.s.command
net spindle-vel-fb-rpm-abs => pid.s.feedback
net spindle-output <= pid.s.output
# ---digital potentionmeter output signals/setup---
setp hm2_5i25.0.7i76.0.0.spinout-minlim [SPINDLE_9]OUTPUT_MIN_LIMIT
setp hm2_5i25.0.7i76.0.0.spinout-maxlim [SPINDLE_9]OUTPUT_MAX_LIMIT
setp hm2_5i25.0.7i76.0.0.spinout-scalemax [SPINDLE_9]OUTPUT_SCALE
net spindle-vel-cmd-abs => hm2_5i25.0.7i76.0.0.spinout
net machine-is-enabled => hm2_5i25.0.7i76.0.0.spinena
net spindle-ccw => hm2_5i25.0.7i76.0.0.spindir
# ---Encoder feedback signals/setup---
setp hm2_5i25.0.encoder.00.counter-mode 0
setp hm2_5i25.0.encoder.00.filter 1
setp hm2_5i25.0.encoder.00.index-invert 0
setp hm2_5i25.0.encoder.00.index-mask 0
setp hm2_5i25.0.encoder.00.index-mask-invert 0
setp hm2_5i25.0.encoder.00.scale [SPINDLE_9]ENCODER_SCALE
net spindle-revs <= hm2_5i25.0.encoder.00.position
net spindle-vel-fb-rps <= hm2_5i25.0.encoder.00.velocity
net spindle-index-enable <=> hm2_5i25.0.encoder.00.index-enable
# ---setup spindle control signals---
net spindle-vel-cmd-rps <= motion.spindle-speed-out-rps
net spindle-vel-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
net spindle-vel-cmd-rpm <= motion.spindle-speed-out
net spindle-vel-cmd-rpm-abs <= motion.spindle-speed-out-abs
net spindle-enable <= motion.spindle-on
net spindle-cw <= motion.spindle-forward
net spindle-ccw <= motion.spindle-reverse
net spindle-brake <= motion.spindle-brake
net spindle-revs => motion.spindle-revs
net spindle-at-speed => motion.spindle-at-speed
net spindle-vel-fb-rps => motion.spindle-speed-in
net spindle-index-enable <=> motion.spindle-index-enable
# ---Setup spindle at speed signals---
net spindle-vel-cmd-rps => near.0.in1
net spindle-vel-fb-rps => near.0.in2
net spindle-at-speed <= near.0.out
setp near.0.scale 1.000000
setp near.0.difference 3.333333
# Use ACTUAL spindle velocity from spindle encoder
# spindle-velocity bounces around so we filter it with lowpass
# spindle-velocity is signed so we use absolute component to remove sign
# ACTUAL velocity is in RPS not RPM so we scale it.
setp scale.spindle.gain 60
setp lowpass.spindle.gain 1.100000
net spindle-vel-fb-rps => scale.spindle.in
net spindle-fb-rpm scale.spindle.out => abs.spindle.in
net spindle-fb-rpm-abs abs.spindle.out => lowpass.spindle.in
net spindle-fb-rpm-abs-filtered lowpass.spindle.out
#******************************
# connect miscellaneous signals
#******************************
# ---HALUI signals---
net joint-select-a halui.joint.0.select
net x-is-homed halui.joint.0.is-homed
net jog-x-pos halui.jog.0.plus
net jog-x-neg halui.jog.0.minus
net jog-x-analog halui.jog.0.analog
net joint-select-c halui.joint.2.select
net z-is-homed halui.joint.2.is-homed
net jog-z-pos halui.jog.2.plus
net jog-z-neg halui.jog.2.minus
net jog-z-analog halui.jog.2.analog
net jog-selected-pos halui.jog.selected.plus
net jog-selected-neg halui.jog.selected.minus
net spindle-manual-cw halui.spindle.forward
net spindle-manual-ccw halui.spindle.reverse
net spindle-manual-stop halui.spindle.stop
net machine-is-on halui.machine.is-on
net jog-speed halui.jog-speed
net MDI-mode halui.mode.is-mdi
# ---coolant signals---
net coolant-mist <= iocontrol.0.coolant-mist
net coolant-flood <= iocontrol.0.coolant-flood
# ---probe signal---
net probe-in => motion.probe-input
# ---motion control signals---
net in-position <= motion.in-position
net machine-is-enabled <= motion.motion-enabled
# ---digital in / out signals---
# ---estop signals---
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
# ---manual tool change signals---
loadusr -W hal_manualtoolchange
net tool-change-request iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-change-confirmed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
ini:
# Generated by PNCconf at Sat Apr 16 09:55:01 2016
# If you make changes to this file, they will be
# overwritten when you run PNCconf again
[EMC]
MACHINE = lathe
DEBUG = 0
[DISPLAY]
DISPLAY = axis
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 2.000000
MAX_SPINDLE_OVERRIDE = 1.000000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/tim/linuxcnc/nc_files
PYVCP = pyvcp-panel.xml
INCREMENTS = .1in .05in .01in .005in .001in .0005in .0001in
LATHE = 1
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 0.250000
MAX_LINEAR_VELOCITY = 1.000000
MIN_LINEAR_VELOCITY = 0.010000
DEFAULT_ANGULAR_VELOCITY = 0.250000
MAX_ANGULAR_VELOCITY = 1.000000
MIN_ANGULAR_VELOCITY = 0.010000
EDITOR = gedit
GEOMETRY = xyz
[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python
[TASK]
TASK = milltask
CYCLE_TIME = 0.010
[RS274NGC]
PARAMETER_FILE = linuxcnc.var
[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
COMM_WAIT = 0.010
SERVO_PERIOD = 500000
[HOSTMOT2]
# **** This is for info only ****
# DRIVER0=hm2_pci
# BOARD0=5i25
[HAL]
HALUI = halui
HALFILE = lathe.hal
HALFILE = custom.hal
POSTGUI_HALFILE = postgui_call_list.hal
SHUTDOWN = shutdown.hal
[HALUI]
[TRAJ]
AXES = 3
COORDINATES = X Z
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 0.10
MAX_LINEAR_VELOCITY = 1.00
[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl
#********************
# Axis X
#********************
[AXIS_0]
TYPE = LINEAR
HOME = 0.0
FERROR = 0.5
MIN_FERROR = 0.05
MAX_VELOCITY = 1.0
MAX_ACCELERATION = 30.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 1.25
STEPGEN_MAXACCEL = 37.50
P = 50.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 1.25
# these are in nanoseconds
DIRSETUP = 1000
DIRHOLD = 1000
STEPLEN = 1000
STEPSPACE = 1000
STEP_SCALE = 20370.0
MIN_LIMIT = -0.001
MAX_LIMIT = 8.0
HOME_OFFSET = 0.0
#********************
# Axis Z
#********************
[AXIS_2]
TYPE = LINEAR
HOME = 0.0
FERROR = 0.5
MIN_FERROR = 0.05
MAX_VELOCITY = 1.0
MAX_ACCELERATION = 30.0
# The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION
# If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger.
STEPGEN_MAXVEL = 1.25
STEPGEN_MAXACCEL = 37.50
P = 50.0
I = 0.0
D = 0.0
FF0 = 0.0
FF1 = 1.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 1.25
# these are in nanoseconds
DIRSETUP = 1000
DIRHOLD = 1000
STEPLEN = 1000
STEPSPACE = 1000
STEP_SCALE = 20370.0
MIN_LIMIT = -4.0
MAX_LIMIT = 0.001
HOME_OFFSET = 0.0
#********************
# Spindle
#********************
[SPINDLE_9]
P = 0.0
I = 0.0
D = 0.0
FF0 = 1.0
FF1 = 0.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 4000.0
ENCODER_SCALE = -100.0
OUTPUT_SCALE = 4000.0
OUTPUT_MIN_LIMIT = 0.0
OUTPUT_MAX_LIMIT = 4000.0
Again, Thank you for your help!
Please Log in or Create an account to join the conversation.
16 Apr 2016 20:03 - 16 Apr 2016 20:03 #73426
by PCW
Replied by PCW on topic PnCConf Setup issue with the Spindle
The error in PnCConf (this has been fixed in later versions) is this:
net spindle-vel-cmd-abs => hm2_5i25.0.7i76.0.0.spinout
net spindle-vel-cmd-rpm-abs <= motion.spindle-speed-out-abs
Note the the actual physical HAL pin is unconnected do to a net name error (the missing rpm in the top line)
The ENA and DIR outputs are simple switches.
so for example if your VFD needs a +24V signal to enable, you would wire the ENA signal like this:
+24V --> ENA+ -->ENA- -->VFD Enable input
if your VFD needed a signal to be grounded to enable you would wire the ENA pins like this:
VFD Enable input --> ENA+ --> ENA- --> GND
net spindle-vel-cmd-abs => hm2_5i25.0.7i76.0.0.spinout
net spindle-vel-cmd-rpm-abs <= motion.spindle-speed-out-abs
Note the the actual physical HAL pin is unconnected do to a net name error (the missing rpm in the top line)
The ENA and DIR outputs are simple switches.
so for example if your VFD needs a +24V signal to enable, you would wire the ENA signal like this:
+24V --> ENA+ -->ENA- -->VFD Enable input
if your VFD needed a signal to be grounded to enable you would wire the ENA pins like this:
VFD Enable input --> ENA+ --> ENA- --> GND
Last edit: 16 Apr 2016 20:03 by PCW. Reason: sp
The following user(s) said Thank You: twender
Please Log in or Create an account to join the conversation.
16 Apr 2016 21:28 #73435
by twender
Replied by twender on topic PnCConf Setup issue with the Spindle
Your explanation of the switch makes sense now. You indicated a simple switch earlier, but it now makes sense to me. I guess switch means switch. Thank you for your patience.
I am still a bit confused about the spindle error...Not surprising given my history of questions.
I have read the explanation of net in the Basic HAL tutorial, but I don't think I understand well enough to explain what is going on with the net command. Does the net command do the following with the line in question: spindle-vel-cmd-rpm-abs (linuxcnc code signal) is "sent to" the Mesa card analog out.
Are you indicating PnCConf has a error in creating a connection to the intended signal name "spindle-vel-cmd-rpm-abs" since PnCConf creates "spindle-vel-cmd-abs"?
I am still a bit confused about the spindle error...Not surprising given my history of questions.
I have read the explanation of net in the Basic HAL tutorial, but I don't think I understand well enough to explain what is going on with the net command. Does the net command do the following with the line in question: spindle-vel-cmd-rpm-abs (linuxcnc code signal) is "sent to" the Mesa card analog out.
Are you indicating PnCConf has a error in creating a connection to the intended signal name "spindle-vel-cmd-rpm-abs" since PnCConf creates "spindle-vel-cmd-abs"?
- If this is the case, I assume I should edit my hal file with the correction...net spindle-vel-cmd-rpm-abs => hm2_5i25.0.7i76.0.0.spinout?
- If the above is the case, can I add this command to my custom.hal file? Will it assign it correctly since it is the last connection made to the 7i76...spinout?
Please Log in or Create an account to join the conversation.
16 Apr 2016 22:30 - 16 Apr 2016 22:32 #73441
by PCW
Replied by PCW on topic PnCConf Setup issue with the Spindle
Yes (your version of) PnCConf has mis-matched net names so the desired connection
from motion.spindle-speed-out-abs to hm2_5i25.0.7i76.0.0.spinout is not made
(Note that net names are completely arbitrary, they are really just a wire or signal names )
so
net blue_wire => hm2_5i25.0.7i76.0.0.spinout
net blue_wire <= motion.spindle-speed-out-abs
will work
but
net blue_wire => hm2_5i25.0.7i76.0.0.spinout
net red_wire <= motion.spindle-speed-out-abs
is legal but does not connect the desired pins
from motion.spindle-speed-out-abs to hm2_5i25.0.7i76.0.0.spinout is not made
(Note that net names are completely arbitrary, they are really just a wire or signal names )
so
net blue_wire => hm2_5i25.0.7i76.0.0.spinout
net blue_wire <= motion.spindle-speed-out-abs
will work
but
net blue_wire => hm2_5i25.0.7i76.0.0.spinout
net red_wire <= motion.spindle-speed-out-abs
is legal but does not connect the desired pins
Last edit: 16 Apr 2016 22:32 by PCW.
Please Log in or Create an account to join the conversation.
16 Apr 2016 22:34 #73442
by twender
Replied by twender on topic PnCConf Setup issue with the Spindle
I changed the .hal file to reflect "net spindle-vel-cmd-rpm-abs => hm2_5i25.0.7i76.0.0.spinout"
I now have the spindle turning in linuxcnc with manual and MDI controls. I also changed my wiring to utilize the switches on the the spindle connector. Works perfectly! Thanks
I also have an encoder (1000ppr, A,B, with index). It shows positional changes and speed inside of PnCConf (Though it is wrong at this point... I will setup the scale later). But, when I use linuxcnc I show no speed when the spindle runs. I assume there is another wrong signal connection. Is this the case when looking at my above hal file?
Thank you.
I now have the spindle turning in linuxcnc with manual and MDI controls. I also changed my wiring to utilize the switches on the the spindle connector. Works perfectly! Thanks
I also have an encoder (1000ppr, A,B, with index). It shows positional changes and speed inside of PnCConf (Though it is wrong at this point... I will setup the scale later). But, when I use linuxcnc I show no speed when the spindle runs. I assume there is another wrong signal connection. Is this the case when looking at my above hal file?
Thank you.
Please Log in or Create an account to join the conversation.
Moderators: cmorley
Time to create page: 0.170 seconds