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

27 Aug 2025 07:33 - 16 Sep 2025 17:18
Solved: Help with Busellato JET 2 spindle retrofit – VFD overload was created by GDTH
Solved: Help with Busellato JET 2 spindle retrofit – VFD overload
Category: Driver Boards
Hi all,I’m in the process of retrofitting a Busellato JET 2 CNC machine. The machine has one main spindle, a side spindle, and drills, but I only need to control the main spindle.The spindle is still running on the original VFD, which has not been altered or replaced.Originally, the VFD was controlled via serial communication, but since I’m using a Mesa 7i77 card, I converted it to 0–10 V analog control (the serial setup seemed unnecessarily complex and hard to understand).Here’s what I’ve tried so far:
- Using the original VFD (unchanged).
- Converted VFD control from serial → 0–10 V (Mesa 7i77).
- Adjusted VFD parameters to allow external analog speed control.
- Able to start the spindle successfully.
- Spindle ramps up but only reaches ~50 Hz.
- After about 10 seconds at 50 Hz, the VFD trips into overload.
My observations:- It sounds like the spindle wants to accelerate further but is somehow being held back.
- I’ve spent several hours tweaking and checking parameters, but I can’t figure out where it’s going wrong.
Any tips, suggestions, or guidance on how to properly configure the VFD (or what to check mechanically/electrically) would be hugely appreciated.Thanks in advance!
Omron F7 guide
Omron F7 full manual
- I’ve spent several hours tweaking and checking parameters, but I can’t figure out where it’s going wrong.
- It sounds like the spindle wants to accelerate further but is somehow being held back.
- After about 10 seconds at 50 Hz, the VFD trips into overload.
- Spindle ramps up but only reaches ~50 Hz.
- Able to start the spindle successfully.
- Adjusted VFD parameters to allow external analog speed control.
- Converted VFD control from serial → 0–10 V (Mesa 7i77).
- Japoo_Ness
- Japoo_Ness
07 Aug 2025 11:07
Retrofitting a 3-axis VMC with DC servos - guidance needed was created by Japoo_Ness
Retrofitting a 3-axis VMC with DC servos - guidance needed
Category: Driver Boards
Hi everyone,
I'm currently working on the retrofit of a 3-axis vertical machining center (from 1995) and have decided to use LinuxCNC with Mesa boards. The machine is in excellent mechanical condition, but the original controller (Fagor 8025M) is beginning to fail. I’m still evaluating whether it’s worth repairing, but I’m leaning toward fully modernizing it instead.
Here are the key technical details of the system:
The machine will be used for both production and toolmaking, so reliability and precision are key. The current system performs interpolation and achieves 0.01 mm precision, and I’d like to match or improve upon that.
I’d like to ask:
- Has anyone here done a similar retrofit with SEM DC motors and Axor drives?
- Is it reasonable to expect similar or better precision from LinuxCNC using KA300 scales and Mesa hardware?
- Are there any specific concerns when using analog ±10 V control with older servo amplifiers?
- Any advice or experience you could share with full closed-loop systems based on linear feedback?
- I’m also interested in your thoughts on encoder scaling, latency tuning, and best practices for safety inputs and interlocks.
Info:
digital-readout.com/wp-content/uploads/2...stallation-guide.pdf
www.axorindustries.com/wp-content/upload...ce-Manual-MS-Eng.pdf
www.mroelectric.com/static/app/product/p...a06b-6044-manual.pdf
forum.linuxcnc.org/media/kunena/attachme...17/MT30R4Extract.pdf
Thanks in advance for any help or tips you can share! I’ve already started digging into the documentation but would really value input from those who’ve done similar projects.
Best regards,
Santiago
I'm currently working on the retrofit of a 3-axis vertical machining center (from 1995) and have decided to use LinuxCNC with Mesa boards. The machine is in excellent mechanical condition, but the original controller (Fagor 8025M) is beginning to fail. I’m still evaluating whether it’s worth repairing, but I’m leaning toward fully modernizing it instead.
Here are the key technical details of the system:
- **Machine type**: 3-axis vertical milling machine
- **Original controller**: Fagor 8025M
- **Motors**: SEM MT30R4-46 brushed DC servos, each with internal tachometers
- **Drives**: Axor analog drives (Miniclamp 140, Minispeed, Minispeed 140, Minispeed 200) with ±10 V control input
- **Spindle drive**: Fanuc A06B-6060-H003#H503 (also analog control)
- **Feedback**:
- **Main feedback**: KA300 linear scales (Extent 570D), 5 µm resolution, differential outputs (A/B/Z, A-/B-/Z-)
- **Velocity loop** is handled inside the servo drives via tachometers
- **Planned control strategy**: Full closed-loop position control via linear scales in LinuxCNC
- **I/O needs**: At least 18 digital inputs for limits, emergency stop, lubrication pump, coolant, etc.
- **Desired precision**: Hundredths of a millimeter (0.01 mm) or better
- **Budget**: About $1500 or less
- **Planned Mesa boards**: Leaning toward a 5i25 (PCIe) + 7i77 for analog servo control and I/O
The machine will be used for both production and toolmaking, so reliability and precision are key. The current system performs interpolation and achieves 0.01 mm precision, and I’d like to match or improve upon that.
I’d like to ask:
- Has anyone here done a similar retrofit with SEM DC motors and Axor drives?
- Is it reasonable to expect similar or better precision from LinuxCNC using KA300 scales and Mesa hardware?
- Are there any specific concerns when using analog ±10 V control with older servo amplifiers?
- Any advice or experience you could share with full closed-loop systems based on linear feedback?
- I’m also interested in your thoughts on encoder scaling, latency tuning, and best practices for safety inputs and interlocks.
Info:
digital-readout.com/wp-content/uploads/2...stallation-guide.pdf
www.axorindustries.com/wp-content/upload...ce-Manual-MS-Eng.pdf
www.mroelectric.com/static/app/product/p...a06b-6044-manual.pdf
forum.linuxcnc.org/media/kunena/attachme...17/MT30R4Extract.pdf
Thanks in advance for any help or tips you can share! I’ve already started digging into the documentation but would really value input from those who’ve done similar projects.
Best regards,
Santiago
- 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: 1.355 seconds