Search Results (Searched for: 7i77 spindle)
- pommen

03 Aug 2025 20:11
Encoder started misbehaving was created by pommen
Encoder started misbehaving
Category: Driver Boards
Today something strange happened to my setup. I was tidying some cables up in the control cabinet and must have fried something.
I have been running my machine for about a year now without any problems.
Now my Y encoder readout follows my X axis. Even when I disconnect the encoder from the 7i77 it happens.
Changing from hm2_[MESA](BOARD).0.encoder.01.position
to hm2_[MESA](BOARD).0.encoder.04.position (and updating the other encoder lines from 01 to 04) and plugging it in encoder 04 position did not work.
X Z still works though. Spindle encoder reads nothing, although the actual encoder is functioning.
Have i fried my 7i77?
/Peter
I have been running my machine for about a year now without any problems.
Now my Y encoder readout follows my X axis. Even when I disconnect the encoder from the 7i77 it happens.
Changing from hm2_[MESA](BOARD).0.encoder.01.position
to hm2_[MESA](BOARD).0.encoder.04.position (and updating the other encoder lines from 01 to 04) and plugging it in encoder 04 position did not work.
X Z still works though. Spindle encoder reads nothing, although the actual encoder is functioning.
Have i fried my 7i77?
/Peter
- PCW

01 Aug 2025 18:39
Replied by PCW on topic Spindle speed?
Spindle speed?
Category: Basic Configuration
You probably mean a 7I83 or 7I77 (the 7I87 is an analog _input_ card)
My guess is that there is a missing abs function in the hal file.
The 7I83 and 7I77 have bipolar +-10V analog outputs, but most VFDs
only take a unipolar ( typically 0 to +10V) input range, so you either need to
use the absolute spindle speed pin from motion or add an abs function
if you have an old enough LinuxCNC version that does not have the absolute
spindle speed pin.
My guess is that there is a missing abs function in the hal file.
The 7I83 and 7I77 have bipolar +-10V analog outputs, but most VFDs
only take a unipolar ( typically 0 to +10V) input range, so you either need to
use the absolute spindle speed pin from motion or add an abs function
if you have an old enough LinuxCNC version that does not have the absolute
spindle speed pin.
- Esaber
- Esaber
20 Jul 2025 10:05 - 20 Jul 2025 10:13
Replied by Esaber on topic Plasmac to Qtplasmac conversion not working
Plasmac to Qtplasmac conversion not working
Category: Plasmac
hal file content:
# Generated by PNCconf at Thu Feb 14 05:38:27 2019
# Using LinuxCNC version: 2.8
# If you make changes to this file, they will be
# overwritten when you run PNCconf again
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS num_spindles=[TRAJ]SPINDLES
loadrt hostmot2
loadrt hm2_pci config="num_encoders=6 num_pwmgens=0 num_stepgens=5 sserial_port_0=00000x"
setp hm2_5i25.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.s
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.y.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.s.do-pid-calcs servo-thread
addf hm2_5i25.0.write servo-thread
# external output signals
# --- MACHINE-IS-ENABLED ---
net machine-is-enabled => hm2_5i25.0.7i77.0.0.output-02
# --- ESTOP-OUT ---
net estop-out => hm2_5i25.0.7i77.0.0.output-03
# external input signals
# --- BOTH-HOME-X ---
net both-home-x <= hm2_5i25.0.7i77.0.0.input-01
# --- BOTH-HOME-Y ---
net both-home-y <= hm2_5i25.0.7i77.0.0.input-02
# --- BOTH-HOME-Z ---
net max-home-z <= hm2_5i25.0.7i77.0.0.input-03-not
#*******************
# AXIS X JOINT 0
#*******************
setp pid.x.Pgain [JOINT_0]P
setp pid.x.Igain [JOINT_0]I
setp pid.x.Dgain [JOINT_0]D
setp pid.x.bias [JOINT_0]BIAS
setp pid.x.FF0 [JOINT_0]FF0
setp pid.x.FF1 [JOINT_0]FF1
setp pid.x.FF2 [JOINT_0]FF2
setp pid.x.deadband [JOINT_0]DEADBAND
setp pid.x.maxoutput [JOINT_0]MAX_OUTPUT
setp pid.x.error-previous-target true
net x-index-enable => pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-pos-fb => pid.x.feedback
net x-output <= pid.x.output
# ---PWM Generator signals/setup---
setp hm2_5i25.0.7i77.0.1.analogout0-scalemax [JOINT_0]OUTPUT_SCALE
setp hm2_5i25.0.7i77.0.1.analogout0-minlim [JOINT_0]OUTPUT_MIN_LIMIT
setp hm2_5i25.0.7i77.0.1.analogout0-maxlim [JOINT_0]OUTPUT_MAX_LIMIT
net x-output => hm2_5i25.0.7i77.0.1.analogout0
net x-pos-cmd <= joint.0.motor-pos-cmd
net x-enable <= joint.0.amp-enable-out
# enable _all_ sserial pwmgens
net x-enable => hm2_5i25.0.7i77.0.1.analogena
# ---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 [JOINT_0]ENCODER_SCALE
net x-pos-fb <= hm2_5i25.0.encoder.00.position
net x-vel-fb <= hm2_5i25.0.encoder.00.velocity
net x-pos-fb => joint.0.motor-pos-fb
net x-index-enable joint.0.index-enable <=> hm2_5i25.0.encoder.00.index-enable
net x-pos-rawcounts <= hm2_5i25.0.encoder.00.rawcounts
# ---setup home / limit switch signals---
net both-home-x => joint.0.home-sw-in
net both-home-x => joint.0.neg-lim-sw-in
net both-home-x => joint.0.pos-lim-sw-in
#*******************
# AXIS Y JOINT 1
#*******************
setp pid.y.Pgain [JOINT_1]P
setp pid.y.Igain [JOINT_1]I
setp pid.y.Dgain [JOINT_1]D
setp pid.y.bias [JOINT_1]BIAS
setp pid.y.FF0 [JOINT_1]FF0
setp pid.y.FF1 [JOINT_1]FF1
setp pid.y.FF2 [JOINT_1]FF2
setp pid.y.deadband [JOINT_1]DEADBAND
setp pid.y.maxoutput [JOINT_1]MAX_OUTPUT
setp pid.y.error-previous-target true
net y-index-enable => pid.y.index-enable
net y-enable => pid.y.enable
net y-pos-cmd => pid.y.command
net y-pos-fb => pid.y.feedback
net y-output <= pid.y.output
# ---PWM Generator signals/setup---
setp hm2_5i25.0.7i77.0.1.analogout1-scalemax [JOINT_1]OUTPUT_SCALE
setp hm2_5i25.0.7i77.0.1.analogout1-minlim [JOINT_1]OUTPUT_MIN_LIMIT
setp hm2_5i25.0.7i77.0.1.analogout1-maxlim [JOINT_1]OUTPUT_MAX_LIMIT
net y-output => hm2_5i25.0.7i77.0.1.analogout1
net y-pos-cmd <= joint.1.motor-pos-cmd
net y-enable <= joint.1.amp-enable-out
# ---Encoder feedback signals/setup---
setp hm2_5i25.0.encoder.01.counter-mode 0
setp hm2_5i25.0.encoder.01.filter 1
setp hm2_5i25.0.encoder.01.index-invert 0
setp hm2_5i25.0.encoder.01.index-mask 0
setp hm2_5i25.0.encoder.01.index-mask-invert 0
setp hm2_5i25.0.encoder.01.scale [JOINT_1]ENCODER_SCALE
net y-pos-fb <= hm2_5i25.0.encoder.01.position
net y-vel-fb <= hm2_5i25.0.encoder.01.velocity
net y-pos-fb => joint.1.motor-pos-fb
net y-index-enable joint.1.index-enable <=> hm2_5i25.0.encoder.01.index-enable
net y-pos-rawcounts <= hm2_5i25.0.encoder.01.rawcounts
# ---setup home / limit switch signals---
net both-home-y => joint.1.home-sw-in
net both-home-y => joint.1.neg-lim-sw-in
net both-home-y => joint.1.pos-lim-sw-in
#*******************
# AXIS Z JOINT 2
#*******************
setp pid.z.Pgain [JOINT_2]P
setp pid.z.Igain [JOINT_2]I
setp pid.z.Dgain [JOINT_2]D
setp pid.z.bias [JOINT_2]BIAS
setp pid.z.FF0 [JOINT_2]FF0
setp pid.z.FF1 [JOINT_2]FF1
setp pid.z.FF2 [JOINT_2]FF2
setp pid.z.deadband [JOINT_2]DEADBAND
setp pid.z.maxoutput [JOINT_2]MAX_OUTPUT
setp pid.z.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.z.maxerror 0.012700
net z-index-enable => pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-pos-fb => pid.z.feedback
net z-output <= pid.z.output
# Step Gen signals/setup
setp hm2_5i25.0.stepgen.00.dirsetup [JOINT_2]DIRSETUP
setp hm2_5i25.0.stepgen.00.dirhold [JOINT_2]DIRHOLD
setp hm2_5i25.0.stepgen.00.steplen [JOINT_2]STEPLEN
setp hm2_5i25.0.stepgen.00.stepspace [JOINT_2]STEPSPACE
setp hm2_5i25.0.stepgen.00.position-scale [JOINT_2]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 [JOINT_2]STEPGEN_MAXACCEL
setp hm2_5i25.0.stepgen.00.maxvel [JOINT_2]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net z-pos-cmd <= joint.2.motor-pos-cmd
net z-vel-cmd <= joint.2.vel-cmd
net z-output => hm2_5i25.0.stepgen.00.velocity-cmd
net z-pos-fb <= hm2_5i25.0.stepgen.00.position-fb
net z-pos-fb => joint.2.motor-pos-fb
net z-enable <= joint.2.amp-enable-out
net z-enable => hm2_5i25.0.stepgen.00.enable
# ---closedloop stepper signals---
net z-pos-cmd <= joint.2.motor-pos-cmd
net z-vel-cmd <= joint.2.vel-cmd
net z-output => hm2_5i25.0.stepgen.00.velocity-cmd
net z-pos-fb <= hm2_5i25.0.stepgen.00.position-fb
net z-pos-fb => joint.2.motor-pos-fb
net z-enable <= joint.2.amp-enable-out
net z-enable => hm2_5i25.0.stepgen.00.enable
# ---setup home / limit switch signals---
net max-home-z => joint.2.home-sw-in
net z-neg-limit => joint.2.neg-lim-sw-in
net max-home-z => joint.2.pos-lim-sw-in
#*******************
# # SPINDLE
#*******************
# setp pid.s.Pgain [SPINDLE_0]P
# setp pid.s.Igain [SPINDLE_0]I
# setp pid.s.Dgain [SPINDLE_0]D
# setp pid.s.bias [SPINDLE_0]BIAS
# setp pid.s.FF0 [SPINDLE_0]FF0
# setp pid.s.FF1 [SPINDLE_0]FF1
# setp pid.s.FF2 [SPINDLE_0]FF2
# setp pid.s.deadband [SPINDLE_0]DEADBAND
# setp pid.s.maxoutput [SPINDLE_0]MAX_OUTPUT
setp pid.s.error-previous-target true
# net spindle-index-enable => pid.s.index-enable
# net spindle-enable => pid.s.enable
# net spindle-vel-cmd-rpm => pid.s.command
# net spindle-vel-fb-rpm => pid.s.feedback
# net spindle-output <= pid.s.output
# # ---setup spindle control signals---
# net spindle-vel-cmd-rps <= spindle.0.speed-out-rps
# net spindle-vel-cmd-rps-abs <= spindle.0.speed-out-rps-abs
# net spindle-vel-cmd-rpm <= spindle.0.speed-out
# net spindle-vel-cmd-rpm-abs <= spindle.0.speed-out-abs
# net spindle-enable <= spindle.0.on
# net spindle-cw <= spindle.0.forward
# net spindle-ccw <= spindle.0.reverse
# net spindle-brake <= spindle.0.brake
# net spindle-revs => spindle.0.revs
# net spindle-at-speed => spindle.0.at-speed
# net spindle-vel-fb-rps => spindle.0.speed-in
# net spindle-index-enable <=> spindle.0.index-enable
# # ---Setup spindle at speed signals---
# sets spindle-at-speed true
#******************************
# connect miscellaneous signals
#******************************
# ---HALUI signals---
net axis-select-x halui.axis.x.select
net jog-x-pos halui.axis.x.plus
net jog-x-neg halui.axis.x.minus
net jog-x-analog halui.axis.x.analog
net x-is-homed halui.joint.0.is-homed
net axis-select-y halui.axis.y.select
net jog-y-pos halui.axis.y.plus
net jog-y-neg halui.axis.y.minus
net jog-y-analog halui.axis.y.analog
net y-is-homed halui.joint.1.is-homed
net axis-select-z halui.axis.z.select
net jog-z-pos halui.axis.z.plus
net jog-z-neg halui.axis.z.minus
net jog-z-analog halui.axis.z.analog
net z-is-homed halui.joint.2.is-homed
net jog-selected-pos halui.axis.selected.plus
net jog-selected-neg halui.axis.selected.minus
# net spindle-manual-cw halui.spindle.0.forward
# net spindle-manual-ccw halui.spindle.0.reverse
# net spindle-manual-stop halui.spindle.0.stop
# net machine-is-on halui.machine.is-on
net jog-speed halui.axis.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
# toolchange passthrough
net tool:change iocontrol.0.tool-change => iocontrol.0.tool-changed
net tool:prep iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
# Added By me 08.12.2024
# Mesa Codes
setp hm2_5i25.0.encoder.02.scale -1
setp hm2_5i25.0.encoder.02.filter 1
setp hm2_5i25.0.encoder.02.counter-mode 1
# Generated by PNCconf at Thu Feb 14 05:38:27 2019
# Using LinuxCNC version: 2.8
# If you make changes to this file, they will be
# overwritten when you run PNCconf again
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS num_spindles=[TRAJ]SPINDLES
loadrt hostmot2
loadrt hm2_pci config="num_encoders=6 num_pwmgens=0 num_stepgens=5 sserial_port_0=00000x"
setp hm2_5i25.0.watchdog.timeout_ns 5000000
loadrt pid names=pid.x,pid.y,pid.z,pid.s
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.y.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.s.do-pid-calcs servo-thread
addf hm2_5i25.0.write servo-thread
# external output signals
# --- MACHINE-IS-ENABLED ---
net machine-is-enabled => hm2_5i25.0.7i77.0.0.output-02
# --- ESTOP-OUT ---
net estop-out => hm2_5i25.0.7i77.0.0.output-03
# external input signals
# --- BOTH-HOME-X ---
net both-home-x <= hm2_5i25.0.7i77.0.0.input-01
# --- BOTH-HOME-Y ---
net both-home-y <= hm2_5i25.0.7i77.0.0.input-02
# --- BOTH-HOME-Z ---
net max-home-z <= hm2_5i25.0.7i77.0.0.input-03-not
#*******************
# AXIS X JOINT 0
#*******************
setp pid.x.Pgain [JOINT_0]P
setp pid.x.Igain [JOINT_0]I
setp pid.x.Dgain [JOINT_0]D
setp pid.x.bias [JOINT_0]BIAS
setp pid.x.FF0 [JOINT_0]FF0
setp pid.x.FF1 [JOINT_0]FF1
setp pid.x.FF2 [JOINT_0]FF2
setp pid.x.deadband [JOINT_0]DEADBAND
setp pid.x.maxoutput [JOINT_0]MAX_OUTPUT
setp pid.x.error-previous-target true
net x-index-enable => pid.x.index-enable
net x-enable => pid.x.enable
net x-pos-cmd => pid.x.command
net x-pos-fb => pid.x.feedback
net x-output <= pid.x.output
# ---PWM Generator signals/setup---
setp hm2_5i25.0.7i77.0.1.analogout0-scalemax [JOINT_0]OUTPUT_SCALE
setp hm2_5i25.0.7i77.0.1.analogout0-minlim [JOINT_0]OUTPUT_MIN_LIMIT
setp hm2_5i25.0.7i77.0.1.analogout0-maxlim [JOINT_0]OUTPUT_MAX_LIMIT
net x-output => hm2_5i25.0.7i77.0.1.analogout0
net x-pos-cmd <= joint.0.motor-pos-cmd
net x-enable <= joint.0.amp-enable-out
# enable _all_ sserial pwmgens
net x-enable => hm2_5i25.0.7i77.0.1.analogena
# ---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 [JOINT_0]ENCODER_SCALE
net x-pos-fb <= hm2_5i25.0.encoder.00.position
net x-vel-fb <= hm2_5i25.0.encoder.00.velocity
net x-pos-fb => joint.0.motor-pos-fb
net x-index-enable joint.0.index-enable <=> hm2_5i25.0.encoder.00.index-enable
net x-pos-rawcounts <= hm2_5i25.0.encoder.00.rawcounts
# ---setup home / limit switch signals---
net both-home-x => joint.0.home-sw-in
net both-home-x => joint.0.neg-lim-sw-in
net both-home-x => joint.0.pos-lim-sw-in
#*******************
# AXIS Y JOINT 1
#*******************
setp pid.y.Pgain [JOINT_1]P
setp pid.y.Igain [JOINT_1]I
setp pid.y.Dgain [JOINT_1]D
setp pid.y.bias [JOINT_1]BIAS
setp pid.y.FF0 [JOINT_1]FF0
setp pid.y.FF1 [JOINT_1]FF1
setp pid.y.FF2 [JOINT_1]FF2
setp pid.y.deadband [JOINT_1]DEADBAND
setp pid.y.maxoutput [JOINT_1]MAX_OUTPUT
setp pid.y.error-previous-target true
net y-index-enable => pid.y.index-enable
net y-enable => pid.y.enable
net y-pos-cmd => pid.y.command
net y-pos-fb => pid.y.feedback
net y-output <= pid.y.output
# ---PWM Generator signals/setup---
setp hm2_5i25.0.7i77.0.1.analogout1-scalemax [JOINT_1]OUTPUT_SCALE
setp hm2_5i25.0.7i77.0.1.analogout1-minlim [JOINT_1]OUTPUT_MIN_LIMIT
setp hm2_5i25.0.7i77.0.1.analogout1-maxlim [JOINT_1]OUTPUT_MAX_LIMIT
net y-output => hm2_5i25.0.7i77.0.1.analogout1
net y-pos-cmd <= joint.1.motor-pos-cmd
net y-enable <= joint.1.amp-enable-out
# ---Encoder feedback signals/setup---
setp hm2_5i25.0.encoder.01.counter-mode 0
setp hm2_5i25.0.encoder.01.filter 1
setp hm2_5i25.0.encoder.01.index-invert 0
setp hm2_5i25.0.encoder.01.index-mask 0
setp hm2_5i25.0.encoder.01.index-mask-invert 0
setp hm2_5i25.0.encoder.01.scale [JOINT_1]ENCODER_SCALE
net y-pos-fb <= hm2_5i25.0.encoder.01.position
net y-vel-fb <= hm2_5i25.0.encoder.01.velocity
net y-pos-fb => joint.1.motor-pos-fb
net y-index-enable joint.1.index-enable <=> hm2_5i25.0.encoder.01.index-enable
net y-pos-rawcounts <= hm2_5i25.0.encoder.01.rawcounts
# ---setup home / limit switch signals---
net both-home-y => joint.1.home-sw-in
net both-home-y => joint.1.neg-lim-sw-in
net both-home-y => joint.1.pos-lim-sw-in
#*******************
# AXIS Z JOINT 2
#*******************
setp pid.z.Pgain [JOINT_2]P
setp pid.z.Igain [JOINT_2]I
setp pid.z.Dgain [JOINT_2]D
setp pid.z.bias [JOINT_2]BIAS
setp pid.z.FF0 [JOINT_2]FF0
setp pid.z.FF1 [JOINT_2]FF1
setp pid.z.FF2 [JOINT_2]FF2
setp pid.z.deadband [JOINT_2]DEADBAND
setp pid.z.maxoutput [JOINT_2]MAX_OUTPUT
setp pid.z.error-previous-target true
# This setting is to limit bogus stepgen
# velocity corrections caused by position
# feedback sample time jitter.
setp pid.z.maxerror 0.012700
net z-index-enable => pid.z.index-enable
net z-enable => pid.z.enable
net z-pos-cmd => pid.z.command
net z-pos-fb => pid.z.feedback
net z-output <= pid.z.output
# Step Gen signals/setup
setp hm2_5i25.0.stepgen.00.dirsetup [JOINT_2]DIRSETUP
setp hm2_5i25.0.stepgen.00.dirhold [JOINT_2]DIRHOLD
setp hm2_5i25.0.stepgen.00.steplen [JOINT_2]STEPLEN
setp hm2_5i25.0.stepgen.00.stepspace [JOINT_2]STEPSPACE
setp hm2_5i25.0.stepgen.00.position-scale [JOINT_2]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 [JOINT_2]STEPGEN_MAXACCEL
setp hm2_5i25.0.stepgen.00.maxvel [JOINT_2]STEPGEN_MAXVEL
# ---closedloop stepper signals---
net z-pos-cmd <= joint.2.motor-pos-cmd
net z-vel-cmd <= joint.2.vel-cmd
net z-output => hm2_5i25.0.stepgen.00.velocity-cmd
net z-pos-fb <= hm2_5i25.0.stepgen.00.position-fb
net z-pos-fb => joint.2.motor-pos-fb
net z-enable <= joint.2.amp-enable-out
net z-enable => hm2_5i25.0.stepgen.00.enable
# ---closedloop stepper signals---
net z-pos-cmd <= joint.2.motor-pos-cmd
net z-vel-cmd <= joint.2.vel-cmd
net z-output => hm2_5i25.0.stepgen.00.velocity-cmd
net z-pos-fb <= hm2_5i25.0.stepgen.00.position-fb
net z-pos-fb => joint.2.motor-pos-fb
net z-enable <= joint.2.amp-enable-out
net z-enable => hm2_5i25.0.stepgen.00.enable
# ---setup home / limit switch signals---
net max-home-z => joint.2.home-sw-in
net z-neg-limit => joint.2.neg-lim-sw-in
net max-home-z => joint.2.pos-lim-sw-in
#*******************
# # SPINDLE
#*******************
# setp pid.s.Pgain [SPINDLE_0]P
# setp pid.s.Igain [SPINDLE_0]I
# setp pid.s.Dgain [SPINDLE_0]D
# setp pid.s.bias [SPINDLE_0]BIAS
# setp pid.s.FF0 [SPINDLE_0]FF0
# setp pid.s.FF1 [SPINDLE_0]FF1
# setp pid.s.FF2 [SPINDLE_0]FF2
# setp pid.s.deadband [SPINDLE_0]DEADBAND
# setp pid.s.maxoutput [SPINDLE_0]MAX_OUTPUT
setp pid.s.error-previous-target true
# net spindle-index-enable => pid.s.index-enable
# net spindle-enable => pid.s.enable
# net spindle-vel-cmd-rpm => pid.s.command
# net spindle-vel-fb-rpm => pid.s.feedback
# net spindle-output <= pid.s.output
# # ---setup spindle control signals---
# net spindle-vel-cmd-rps <= spindle.0.speed-out-rps
# net spindle-vel-cmd-rps-abs <= spindle.0.speed-out-rps-abs
# net spindle-vel-cmd-rpm <= spindle.0.speed-out
# net spindle-vel-cmd-rpm-abs <= spindle.0.speed-out-abs
# net spindle-enable <= spindle.0.on
# net spindle-cw <= spindle.0.forward
# net spindle-ccw <= spindle.0.reverse
# net spindle-brake <= spindle.0.brake
# net spindle-revs => spindle.0.revs
# net spindle-at-speed => spindle.0.at-speed
# net spindle-vel-fb-rps => spindle.0.speed-in
# net spindle-index-enable <=> spindle.0.index-enable
# # ---Setup spindle at speed signals---
# sets spindle-at-speed true
#******************************
# connect miscellaneous signals
#******************************
# ---HALUI signals---
net axis-select-x halui.axis.x.select
net jog-x-pos halui.axis.x.plus
net jog-x-neg halui.axis.x.minus
net jog-x-analog halui.axis.x.analog
net x-is-homed halui.joint.0.is-homed
net axis-select-y halui.axis.y.select
net jog-y-pos halui.axis.y.plus
net jog-y-neg halui.axis.y.minus
net jog-y-analog halui.axis.y.analog
net y-is-homed halui.joint.1.is-homed
net axis-select-z halui.axis.z.select
net jog-z-pos halui.axis.z.plus
net jog-z-neg halui.axis.z.minus
net jog-z-analog halui.axis.z.analog
net z-is-homed halui.joint.2.is-homed
net jog-selected-pos halui.axis.selected.plus
net jog-selected-neg halui.axis.selected.minus
# net spindle-manual-cw halui.spindle.0.forward
# net spindle-manual-ccw halui.spindle.0.reverse
# net spindle-manual-stop halui.spindle.0.stop
# net machine-is-on halui.machine.is-on
net jog-speed halui.axis.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
# toolchange passthrough
net tool:change iocontrol.0.tool-change => iocontrol.0.tool-changed
net tool:prep iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
# Added By me 08.12.2024
# Mesa Codes
setp hm2_5i25.0.encoder.02.scale -1
setp hm2_5i25.0.encoder.02.filter 1
setp hm2_5i25.0.encoder.02.counter-mode 1
- NT4Boy
- NT4Boy
02 Jun 2025 10:06 - 02 Jun 2025 10:17
Replied by NT4Boy on topic HURCO KMB-1 Control Update
HURCO KMB-1 Control Update
Category: Milling Machines
What I hope will be the last part of my adventure, is to add a spindle encoder for rigid tapping etc.Mission now achieved. 48 teeth on the lower side of the drive pully as well as an index tooth on the upper side, (complete with counterbalance weight).Have used ATS616LSG hall effects, with 10k biasing resistors which produce at the 7i77 encoder 05 inputs, good clean 5volt signals.I have yet to get properly to grips with the hal side of things, but at first sight, the hal scope doesn’t look right.
- akim14
- akim14
01 Jun 2025 20:14
Replied by akim14 on topic LinuxCNC Dual-Head Gantry Setup Assistance Request
LinuxCNC Dual-Head Gantry Setup Assistance Request
Category: General LinuxCNC Questions
Thank you so much I am still having problems setting up the limit and home switches in the main hal , I used mesa CT here are my files, I noticed you used the code down below but i cant seem to replicat it without error
# --- MIN-HOME-X ---
net min-home-x <= hm2_5i25.0.7i77.0.0.input-00-not
# --- MAX-X ---
net max-x <= hm2_5i25.0.7i77.0.0.input-01-not
# --- MIN-HOME-Y ---
net min-home-y <= hm2_5i25.0.7i77.0.0.input-02-not
# --- MAX-Y ---
net max-y <= hm2_5i25.0.7i77.0.0.input-03-not
# --- MIN-Z ---
net min-z <= hm2_5i25.0.7i77.0.0.input-07-not
# --- MAX-HOME-Z ---
net max-home-z <= hm2_5i25.0.7i77.0.0.input-06-not
# --- MIN-W ---
net min-w <= hm2_5i25.0.7i77.0.0.input-05-not
# --- MAX-HOME-W ---
net max-home-w <= hm2_5i25.0.7i77.0.0.input-04-not
# --- X_READY ---
#net X_Ready <= hm2_5i25.0.7i77.0.0.input-08
# --- Y_READY ---
#net Y_Ready <= hm2_5i25.0.7i77.0.0.input-09
# --- Z_READY ---
#net Z_Ready <= hm2_5i25.0.7i77.0.0.input-10
# --- W_READY ---
#net W_Ready <= hm2_5i25.0.7i77.0.0.input-11
# --- Z_SPINDLE_RUNNING ---
net Z_Spindle_running <= hm2_5i25.0.7i77.0.0.input-12 => and2.0.in0
# ---setup home / limit switch signals---
net min-home-x => axis.0.home-sw-in
net min-home-x => axis.0.neg-lim-sw-in
net max-x => axis.0.pos-lim-sw-in
# --- MIN-HOME-X ---
net min-home-x <= hm2_5i25.0.7i77.0.0.input-00-not
# --- MAX-X ---
net max-x <= hm2_5i25.0.7i77.0.0.input-01-not
# --- MIN-HOME-Y ---
net min-home-y <= hm2_5i25.0.7i77.0.0.input-02-not
# --- MAX-Y ---
net max-y <= hm2_5i25.0.7i77.0.0.input-03-not
# --- MIN-Z ---
net min-z <= hm2_5i25.0.7i77.0.0.input-07-not
# --- MAX-HOME-Z ---
net max-home-z <= hm2_5i25.0.7i77.0.0.input-06-not
# --- MIN-W ---
net min-w <= hm2_5i25.0.7i77.0.0.input-05-not
# --- MAX-HOME-W ---
net max-home-w <= hm2_5i25.0.7i77.0.0.input-04-not
# --- X_READY ---
#net X_Ready <= hm2_5i25.0.7i77.0.0.input-08
# --- Y_READY ---
#net Y_Ready <= hm2_5i25.0.7i77.0.0.input-09
# --- Z_READY ---
#net Z_Ready <= hm2_5i25.0.7i77.0.0.input-10
# --- W_READY ---
#net W_Ready <= hm2_5i25.0.7i77.0.0.input-11
# --- Z_SPINDLE_RUNNING ---
net Z_Spindle_running <= hm2_5i25.0.7i77.0.0.input-12 => and2.0.in0
# ---setup home / limit switch signals---
net min-home-x => axis.0.home-sw-in
net min-home-x => axis.0.neg-lim-sw-in
net max-x => axis.0.pos-lim-sw-in
- NT4Boy
- NT4Boy
02 May 2025 19:03
Replied by NT4Boy on topic HURCO KMB-1 Control Update
HURCO KMB-1 Control Update
Category: Milling Machines
I think I have the system in control now, and have reached the point where I want to add an encoder to the spindle for rigid tapping and better speed control.
My plan had been to add a toothed wheel with a pair of hall effect sensors, one a few teeth away, but half a cycle out of phase for quadrature, and a third for an index. Then connect these directly into the 7i77 channel 5 encoder inputs. (some biasing resistors maybe required also)
The maximum spindle rpm is 3500. I was proposing 40 teeth, but on say an M6 thread with 1mm pitch, I think that's a possible pitch error of .00625mm, which is pretty small, but I guess 100 would be better. I'd appreciate others opinions on this choice please.
Secondly, because of the belt run and lack of clearance around the belt pulley, putting the index tooth on is a much bigger mission than I was expecting.
Can I simply delete it and use a missing tooth, or pair of missing teeth as the index?
What looks to me like it might not so simply work is the encoder quadrature when it reaches the missing tooth, or am I over thinking this?
Thanks
My plan had been to add a toothed wheel with a pair of hall effect sensors, one a few teeth away, but half a cycle out of phase for quadrature, and a third for an index. Then connect these directly into the 7i77 channel 5 encoder inputs. (some biasing resistors maybe required also)
The maximum spindle rpm is 3500. I was proposing 40 teeth, but on say an M6 thread with 1mm pitch, I think that's a possible pitch error of .00625mm, which is pretty small, but I guess 100 would be better. I'd appreciate others opinions on this choice please.
Secondly, because of the belt run and lack of clearance around the belt pulley, putting the index tooth on is a much bigger mission than I was expecting.
Can I simply delete it and use a missing tooth, or pair of missing teeth as the index?
What looks to me like it might not so simply work is the encoder quadrature when it reaches the missing tooth, or am I over thinking this?
Thanks
- FPM
- FPM
18 Apr 2025 12:01 - 18 Apr 2025 12:03
Replied by FPM on topic converting a tos/intos fngj 40
converting a tos/intos fngj 40
Category: Milling Machines
I connected the 7i77 to p1 and the 7i78 to p2, i assume this is the correct order.
I've tried to modify the hal so that the z-Axis is the stepper connected to the first interface of the 7i78. The encoder for the z-axis is connected to the 7i77. Is this more or less done correctly? (hal is attached).
Since the 7i78 has no enable signals for the steppers, is it possible to use the enable pin from the spindle, since i am not using this? and how do i need to mod the hal?
Thanks!
I've tried to modify the hal so that the z-Axis is the stepper connected to the first interface of the 7i78. The encoder for the z-axis is connected to the 7i77. Is this more or less done correctly? (hal is attached).
Since the 7i78 has no enable signals for the steppers, is it possible to use the enable pin from the spindle, since i am not using this? and how do i need to mod the hal?
Thanks!
- workshop54
- workshop54
23 Mar 2025 20:11 - 23 Mar 2025 20:29
Replied by workshop54 on topic Retrofit: Maho MH400E to LinuxCNC
Retrofit: Maho MH400E to LinuxCNC
Category: Show Your Stuff
Got the Mesa 7i94T and 7i77 boards powered up today, and it’s great to finally see the pins show up in LinuxCNC.
Also managed to remove the tool holder that had been stuck in the spindle since I got the machine — definitely satisfying to get that out of the way.I’ll shorten the IDC25 ribbon once the board layout is finalized. For now, I’ve ordered breakout boards to avoid cutting cables too early: three for the Heidenhain DB15s, two for the Indramat DB9s, and two for the IDC40 ribbons.
The original Philips 432 hardware is completely gone. I briefly considered replacing the whole cabinet to avoid upgrading the mains fuse, but in the end I’m likely going for a proper electrical upgrade: increasing the main connection from 25A to 40A and switching from a B16 to a C25 breaker (still waiting on the electrician to confirm this setup).Once the wiring takes shape, I plan to capture everything neatly in EPLAN to avoid spaghetti later on. Slowly but surely, things are coming together.
Also managed to remove the tool holder that had been stuck in the spindle since I got the machine — definitely satisfying to get that out of the way.I’ll shorten the IDC25 ribbon once the board layout is finalized. For now, I’ve ordered breakout boards to avoid cutting cables too early: three for the Heidenhain DB15s, two for the Indramat DB9s, and two for the IDC40 ribbons.
The original Philips 432 hardware is completely gone. I briefly considered replacing the whole cabinet to avoid upgrading the mains fuse, but in the end I’m likely going for a proper electrical upgrade: increasing the main connection from 25A to 40A and switching from a B16 to a C25 breaker (still waiting on the electrician to confirm this setup).Once the wiring takes shape, I plan to capture everything neatly in EPLAN to avoid spaghetti later on. Slowly but surely, things are coming together.
- tommylight

20 Mar 2025 21:15
Replied by tommylight on topic 7I97T joint following error
7I97T joint following error
Category: General LinuxCNC Questions
Use PncConf to create a basic minimal config for 7i92 with 7i77, then we can modify it to fit the 7i97T and give it a try.
Simple 3 axis config, no spindle, no I/O, no MPG, nothing else.
Also upload one of the existing configs that run so we can get the card addresses.
Simple 3 axis config, no spindle, no I/O, no MPG, nothing else.
Also upload one of the existing configs that run so we can get the card addresses.
- UrKibin
- UrKibin
13 Mar 2025 09:52
Replied by UrKibin on topic CINCINATTI MILACRON ARROW 500 (BDS4 + VFS5) WITH MESA 7i77 + 6i25 WITH LINUXCNC
CINCINATTI MILACRON ARROW 500 (BDS4 + VFS5) WITH MESA 7i77 + 6i25 WITH LINUXCNC
Category: Milling Machines
I tried using MesaCT to generae the ini and hal files but upon loading in linuxcnc, it produces an error.
Debug file information:
Note: Using POSIX realtime
./main.hal:31: Pin 'hm2_5i25.0.7i77.0.4.analogena' does not exist
2243
Stopping realtime threads
Unloading hal components
RTAPI_PCI: Unmapped 65536 bytes at 0x7f0b2d806000
Note: Using POSIX realtime
I do not know how to proceed. Kindly advise.
For information purposes,
Drive 0 - x axis
Drive 1 - y axis
Drive 2 - z axis
Drive 5 - Spindle
Regards,
Kelvin
Debug file information:
Note: Using POSIX realtime
./main.hal:31: Pin 'hm2_5i25.0.7i77.0.4.analogena' does not exist
2243
Stopping realtime threads
Unloading hal components
RTAPI_PCI: Unmapped 65536 bytes at 0x7f0b2d806000
Note: Using POSIX realtime
I do not know how to proceed. Kindly advise.
For information purposes,
Drive 0 - x axis
Drive 1 - y axis
Drive 2 - z axis
Drive 5 - Spindle
Regards,
Kelvin
Time to create page: 0.740 seconds