Search Results (Searched for: 7i77 spindle)
- Cooped-Up
- Cooped-Up
06 Oct 2025 10:30
Replied by Cooped-Up on topic 5i25t firmware screwup
5i25t firmware screwup
Category: Driver Boards
I think I have gotten the firmware situation figured out, but now I am trying to add some things to the machines hal file for the retrofit based off a guide for a maho 400e. I added the following and now the cnc panel gives me an error. it seems to be saying it cant find pins on the 7i77
added to the machines.hal file=
loadrt matrix_kb config=5x5s names=maho_panel
addf maho_panel servo-thread
setp maho_panel.negative-logic 0
#scan out
net maho_panel.row_00_sig-out maho_panel.row-00-out => hm2_5i25.0.7i77.0.0.output-01
net maho_panel.row_01_sig-out maho_panel.row-01-out => hm2_5i25.0.7i77.0.0.output-02
net maho_panel.row_02_sig-out maho_panel.row-02-out => hm2_5i25.0.7i77.0.0.output-03
net maho_panel.row_03_sig-out maho_panel.row-03-out => hm2_5i25.0.7i77.0.0.output-04
net maho_panel.row_04_sig-out maho_panel.row-04-out => hm2_5i25.0.7i77.0.0.output-05
#scan in
net maho_panel.col_00_sig-in maho_panel.col-00-in <= hm2_5i25.0.7i77.0.0.input-05
net maho_panel.col_01_sig-in maho_panel.col-01-in <= hm2_5i25.0.7i77.0.0.input-06
net maho_panel.col_02_sig-in maho_panel.col-02-in <= hm2_5i25.0.7i77.0.0.input-07
net maho_panel.col_03_sig-in maho_panel.col-03-in <= hm2_5i25.0.7i77.0.0.input-08
net maho_panel.col_04_sig-in maho_panel.col-04-in <= hm2_5i25.0.7i77.0.0.input-09
loadrt mh400e_gearbox
addf mh400e-gearbox servo-thread
# --- GEARBOX CONTROL ---
net sig_return_actual_speed mh400e-gearbox.spindle-speed-out => motion.spindle-
speed-in
net sig_return_spindle-at-speed mh400e-gearbox.spindle-at-speed => motion.spindle-at-
speed
net sig_stop_spindle mh400e-gearbox.stop-spindle => halui.spindle.stop
net set-gear-shift-start mh400e-gearbox.start-gear-shift =>
hm2_5i25.0.7i84.0.2.output-05
net set-reverse-shaft-motor mh400e-gearbox.reverse-direction =>
hm2_5i25.0.7i84.0.2.output-04
net activate-reducer-motor mh400e-gearbox.reducer-motor =>
hm2_5i25.0.7i84.0.2.output-01
net activate-midrange-motor mh400e-gearbox.midrange-motor =>
hm2_5i25.0.7i84.0.2.output-02
net set-shaft-motor-lowspeed mh400e-gearbox.motor-lowspeed =>
hm2_5i25.0.7i84.0.2.output-00 # MAHO calls this Anwahl Mittelstellung
net activate-input-stage-motor mh400e-gearbox.input-stage-motor =>
hm2_5i25.0.7i84.0.2.output-03
net activate-spindle-twitch-cw mh400e-gearbox.twitch-cw =>
hm2_5i25.0.7i84.0.2.output-06
net activate-spindle-twitch-ccw mh400e-gearbox.twitch-ccw =>
hm2_5i25.0.7i84.0.2.output-07
Error I now get
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/lib/linuxcnc/modules
LINUXCNC_CONFIG_DIR=
LINUXCNC_LANG_DIR=/usr/lib/tcltk/linuxcnc/msgs
INIVAR=inivar
HALCMD=halcmd
LINUXCNC_EMCSH=/usr/bin/wish8.6
LINUXCNC - 2.9.4
Machine configuration directory is '/home/coopedup/linuxcnc/configs/my_LinuxCNC_machine'
Machine configuration file is 'my_LinuxCNC_machine.ini'
INIFILE=/home/coopedup/linuxcnc/configs/my_LinuxCNC_machine/my_LinuxCNC_machine.ini
VERSION=1.1
PARAMETER_FILE=linuxcnc.var
TPMOD=
HOMEMOD=
TASK=milltask
HALUI=halui
DISPLAY=gmoccapy
COORDINATES=XYZ
KINEMATICS=trivkins coordinates=XYZ
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
linuxcnc TPMOD=tpmod HOMEMOD=homemod EMCMOT=motmod
Found file(REL): ./my_LinuxCNC_machine.hal
Shutting down and cleaning up LinuxCNC...
Running HAL shutdown script
hm2: loading Mesa HostMot2 driver version 0.15
hm2_pci: loading Mesa AnyIO HostMot2 driver version 0.7
hm2_pci: discovered 5i25t at 0000:04:06.0
hm2/hm2_5i25.0: Low Level init 0.15
hm2/hm2_5i25.0: Smart Serial Firmware Version 43
Board hm2_5i25.0.7i77.0.1 Hardware Mode 0 = standard
Board hm2_5i25.0.7i77.0.1 Software Mode 0 = analogout_enables
hm2/hm2_5i25.0: Smart Serial Firmware Version 43
hm2/hm2_5i25.0: 34 I/O Pins used:
hm2/hm2_5i25.0: IO Pin 000 (P3-01): IOPort
hm2/hm2_5i25.0: IO Pin 001 (P3-14): IOPort
hm2/hm2_5i25.0: IO Pin 002 (P3-02): IOPort
hm2/hm2_5i25.0: IO Pin 003 (P3-15): Smart Serial Interface #0, pin tx1 (Output)
hm2/hm2_5i25.0: IO Pin 004 (P3-03): Smart Serial Interface #0, pin rx1 (Input)
hm2/hm2_5i25.0: IO Pin 005 (P3-16): IOPort
hm2/hm2_5i25.0: IO Pin 006 (P3-04): IOPort
hm2/hm2_5i25.0: IO Pin 007 (P3-17): Muxed Encoder Select #0, pin Mux Select 0 (Output)
hm2/hm2_5i25.0: IO Pin 008 (P3-05): Muxed Encoder #0, pin Muxed A (Input)
hm2/hm2_5i25.0: IO Pin 009 (P3-06): Muxed Encoder #0, pin Muxed B (Input)
hm2/hm2_5i25.0: IO Pin 010 (P3-07): Muxed Encoder #0, pin Muxed Index (Input)
hm2/hm2_5i25.0: IO Pin 011 (P3-08): Muxed Encoder #1, pin Muxed A (Input)
hm2/hm2_5i25.0: IO Pin 012 (P3-09): Muxed Encoder #1, pin Muxed B (Input)
hm2/hm2_5i25.0: IO Pin 013 (P3-10): Muxed Encoder #1, pin Muxed Index (Input)
hm2/hm2_5i25.0: IO Pin 014 (P3-11): Muxed Encoder #2, pin Muxed A (Input)
hm2/hm2_5i25.0: IO Pin 015 (P3-12): Muxed Encoder #2, pin Muxed B (Input)
hm2/hm2_5i25.0: IO Pin 016 (P3-13): Muxed Encoder #2, pin Muxed Index (Input)
hm2/hm2_5i25.0: IO Pin 017 (P2-01): IOPort
hm2/hm2_5i25.0: IO Pin 018 (P2-14): IOPort
hm2/hm2_5i25.0: IO Pin 019 (P2-02): IOPort
hm2/hm2_5i25.0: IO Pin 020 (P2-15): IOPort
hm2/hm2_5i25.0: IO Pin 021 (P2-03): IOPort
hm2/hm2_5i25.0: IO Pin 022 (P2-16): IOPort
hm2/hm2_5i25.0: IO Pin 023 (P2-04): IOPort
hm2/hm2_5i25.0: IO Pin 024 (P2-17): IOPort
hm2/hm2_5i25.0: IO Pin 025 (P2-05): IOPort
hm2/hm2_5i25.0: IO Pin 026 (P2-06): IOPort
hm2/hm2_5i25.0: IO Pin 027 (P2-07): IOPort
hm2/hm2_5i25.0: IO Pin 028 (P2-08): IOPort
hm2/hm2_5i25.0: IO Pin 029 (P2-09): IOPort
hm2/hm2_5i25.0: IO Pin 030 (P2-10): IOPort
hm2/hm2_5i25.0: IO Pin 031 (P2-11): IOPort
hm2/hm2_5i25.0: IO Pin 032 (P2-12): IOPort
hm2/hm2_5i25.0: IO Pin 033 (P2-13): IOPort
hm2/hm2_5i25.0: registered
hm2_5i25.0: initialized AnyIO board at 0000:04:06.0
hm2_5i25.0: dropping AnyIO board at 0000:04:06.0
hm2/hm2_5i25.0: unregistered
hm2_pci: driver unloaded
hm2: unloading
Removing HAL_LIB, RTAPI, and Real Time OS modules
Removing NML shared memory segments
Debug file information:
Note: Using POSIX realtime
./my_LinuxCNC_machine.hal:298: Pin 'hm2_5i25.0.7i77.0.0.output-01' does not exist
1999
Stopping realtime threads
Unloading hal components
RTAPI_PCI: Unmapped 65536 bytes at 0x7f5cd11d7000
Note: Using POSIX realtime
added to the machines.hal file=
loadrt matrix_kb config=5x5s names=maho_panel
addf maho_panel servo-thread
setp maho_panel.negative-logic 0
#scan out
net maho_panel.row_00_sig-out maho_panel.row-00-out => hm2_5i25.0.7i77.0.0.output-01
net maho_panel.row_01_sig-out maho_panel.row-01-out => hm2_5i25.0.7i77.0.0.output-02
net maho_panel.row_02_sig-out maho_panel.row-02-out => hm2_5i25.0.7i77.0.0.output-03
net maho_panel.row_03_sig-out maho_panel.row-03-out => hm2_5i25.0.7i77.0.0.output-04
net maho_panel.row_04_sig-out maho_panel.row-04-out => hm2_5i25.0.7i77.0.0.output-05
#scan in
net maho_panel.col_00_sig-in maho_panel.col-00-in <= hm2_5i25.0.7i77.0.0.input-05
net maho_panel.col_01_sig-in maho_panel.col-01-in <= hm2_5i25.0.7i77.0.0.input-06
net maho_panel.col_02_sig-in maho_panel.col-02-in <= hm2_5i25.0.7i77.0.0.input-07
net maho_panel.col_03_sig-in maho_panel.col-03-in <= hm2_5i25.0.7i77.0.0.input-08
net maho_panel.col_04_sig-in maho_panel.col-04-in <= hm2_5i25.0.7i77.0.0.input-09
loadrt mh400e_gearbox
addf mh400e-gearbox servo-thread
# --- GEARBOX CONTROL ---
net sig_return_actual_speed mh400e-gearbox.spindle-speed-out => motion.spindle-
speed-in
net sig_return_spindle-at-speed mh400e-gearbox.spindle-at-speed => motion.spindle-at-
speed
net sig_stop_spindle mh400e-gearbox.stop-spindle => halui.spindle.stop
net set-gear-shift-start mh400e-gearbox.start-gear-shift =>
hm2_5i25.0.7i84.0.2.output-05
net set-reverse-shaft-motor mh400e-gearbox.reverse-direction =>
hm2_5i25.0.7i84.0.2.output-04
net activate-reducer-motor mh400e-gearbox.reducer-motor =>
hm2_5i25.0.7i84.0.2.output-01
net activate-midrange-motor mh400e-gearbox.midrange-motor =>
hm2_5i25.0.7i84.0.2.output-02
net set-shaft-motor-lowspeed mh400e-gearbox.motor-lowspeed =>
hm2_5i25.0.7i84.0.2.output-00 # MAHO calls this Anwahl Mittelstellung
net activate-input-stage-motor mh400e-gearbox.input-stage-motor =>
hm2_5i25.0.7i84.0.2.output-03
net activate-spindle-twitch-cw mh400e-gearbox.twitch-cw =>
hm2_5i25.0.7i84.0.2.output-06
net activate-spindle-twitch-ccw mh400e-gearbox.twitch-ccw =>
hm2_5i25.0.7i84.0.2.output-07
Error I now get
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/lib/linuxcnc/modules
LINUXCNC_CONFIG_DIR=
LINUXCNC_LANG_DIR=/usr/lib/tcltk/linuxcnc/msgs
INIVAR=inivar
HALCMD=halcmd
LINUXCNC_EMCSH=/usr/bin/wish8.6
LINUXCNC - 2.9.4
Machine configuration directory is '/home/coopedup/linuxcnc/configs/my_LinuxCNC_machine'
Machine configuration file is 'my_LinuxCNC_machine.ini'
INIFILE=/home/coopedup/linuxcnc/configs/my_LinuxCNC_machine/my_LinuxCNC_machine.ini
VERSION=1.1
PARAMETER_FILE=linuxcnc.var
TPMOD=
HOMEMOD=
TASK=milltask
HALUI=halui
DISPLAY=gmoccapy
COORDINATES=XYZ
KINEMATICS=trivkins coordinates=XYZ
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
linuxcnc TPMOD=tpmod HOMEMOD=homemod EMCMOT=motmod
Found file(REL): ./my_LinuxCNC_machine.hal
Shutting down and cleaning up LinuxCNC...
Running HAL shutdown script
hm2: loading Mesa HostMot2 driver version 0.15
hm2_pci: loading Mesa AnyIO HostMot2 driver version 0.7
hm2_pci: discovered 5i25t at 0000:04:06.0
hm2/hm2_5i25.0: Low Level init 0.15
hm2/hm2_5i25.0: Smart Serial Firmware Version 43
Board hm2_5i25.0.7i77.0.1 Hardware Mode 0 = standard
Board hm2_5i25.0.7i77.0.1 Software Mode 0 = analogout_enables
hm2/hm2_5i25.0: Smart Serial Firmware Version 43
hm2/hm2_5i25.0: 34 I/O Pins used:
hm2/hm2_5i25.0: IO Pin 000 (P3-01): IOPort
hm2/hm2_5i25.0: IO Pin 001 (P3-14): IOPort
hm2/hm2_5i25.0: IO Pin 002 (P3-02): IOPort
hm2/hm2_5i25.0: IO Pin 003 (P3-15): Smart Serial Interface #0, pin tx1 (Output)
hm2/hm2_5i25.0: IO Pin 004 (P3-03): Smart Serial Interface #0, pin rx1 (Input)
hm2/hm2_5i25.0: IO Pin 005 (P3-16): IOPort
hm2/hm2_5i25.0: IO Pin 006 (P3-04): IOPort
hm2/hm2_5i25.0: IO Pin 007 (P3-17): Muxed Encoder Select #0, pin Mux Select 0 (Output)
hm2/hm2_5i25.0: IO Pin 008 (P3-05): Muxed Encoder #0, pin Muxed A (Input)
hm2/hm2_5i25.0: IO Pin 009 (P3-06): Muxed Encoder #0, pin Muxed B (Input)
hm2/hm2_5i25.0: IO Pin 010 (P3-07): Muxed Encoder #0, pin Muxed Index (Input)
hm2/hm2_5i25.0: IO Pin 011 (P3-08): Muxed Encoder #1, pin Muxed A (Input)
hm2/hm2_5i25.0: IO Pin 012 (P3-09): Muxed Encoder #1, pin Muxed B (Input)
hm2/hm2_5i25.0: IO Pin 013 (P3-10): Muxed Encoder #1, pin Muxed Index (Input)
hm2/hm2_5i25.0: IO Pin 014 (P3-11): Muxed Encoder #2, pin Muxed A (Input)
hm2/hm2_5i25.0: IO Pin 015 (P3-12): Muxed Encoder #2, pin Muxed B (Input)
hm2/hm2_5i25.0: IO Pin 016 (P3-13): Muxed Encoder #2, pin Muxed Index (Input)
hm2/hm2_5i25.0: IO Pin 017 (P2-01): IOPort
hm2/hm2_5i25.0: IO Pin 018 (P2-14): IOPort
hm2/hm2_5i25.0: IO Pin 019 (P2-02): IOPort
hm2/hm2_5i25.0: IO Pin 020 (P2-15): IOPort
hm2/hm2_5i25.0: IO Pin 021 (P2-03): IOPort
hm2/hm2_5i25.0: IO Pin 022 (P2-16): IOPort
hm2/hm2_5i25.0: IO Pin 023 (P2-04): IOPort
hm2/hm2_5i25.0: IO Pin 024 (P2-17): IOPort
hm2/hm2_5i25.0: IO Pin 025 (P2-05): IOPort
hm2/hm2_5i25.0: IO Pin 026 (P2-06): IOPort
hm2/hm2_5i25.0: IO Pin 027 (P2-07): IOPort
hm2/hm2_5i25.0: IO Pin 028 (P2-08): IOPort
hm2/hm2_5i25.0: IO Pin 029 (P2-09): IOPort
hm2/hm2_5i25.0: IO Pin 030 (P2-10): IOPort
hm2/hm2_5i25.0: IO Pin 031 (P2-11): IOPort
hm2/hm2_5i25.0: IO Pin 032 (P2-12): IOPort
hm2/hm2_5i25.0: IO Pin 033 (P2-13): IOPort
hm2/hm2_5i25.0: registered
hm2_5i25.0: initialized AnyIO board at 0000:04:06.0
hm2_5i25.0: dropping AnyIO board at 0000:04:06.0
hm2/hm2_5i25.0: unregistered
hm2_pci: driver unloaded
hm2: unloading
Removing HAL_LIB, RTAPI, and Real Time OS modules
Removing NML shared memory segments
Debug file information:
Note: Using POSIX realtime
./my_LinuxCNC_machine.hal:298: Pin 'hm2_5i25.0.7i77.0.0.output-01' does not exist
1999
Stopping realtime threads
Unloading hal components
RTAPI_PCI: Unmapped 65536 bytes at 0x7f5cd11d7000
Note: Using POSIX realtime
- PCW
12 Sep 2025 01:03
Replied by PCW on topic PnCconf Mesa 7i96s PWM speed control OUTPUT_SCALE
PnCconf Mesa 7i96s PWM speed control OUTPUT_SCALE
Category: Driver Boards
Yes, but the pncconf spindle setup also works with other devices with fixed 10V or +-10V full scale
(7I77,7I76,7I83 etc)
It really should have an additional field for potentiometer type outputs based on the card type
Maybe "Full Scale Analog Output" and "Voltage For Maximum RPM" or some such
(7I77,7I76,7I83 etc)
It really should have an additional field for potentiometer type outputs based on the card type
Maybe "Full Scale Analog Output" and "Voltage For Maximum RPM" or some such
- andypugh
04 Sep 2025 12:04
Replied by andypugh on topic 7i77 and VFD spindle control
7i77 and VFD spindle control
Category: Basic Configuration
Which version of LinuxCNC are you running? I would expect the spindle pins to look more like "spindle.0.speed-out" on any recent LinuxCNC version.
To get a list of HAL pins that you can copy and paste from, in the HAL file insert the linejust after the block of "loadrt" commands
Then start LinuxCNC from the command lineLinuxCNC probably won't start, but you will see a list of all the pins, and also a message about the first problem it has found in the HAL file.
Copy the pin list from the terminal window and squirrel it away in a text file for reference.
(Copy and paste in the terminal window is generally ctrl-shift-C and ctrl-shift-V as "normal" Ctrl-C is "Cancel")
To get a list of HAL pins that you can copy and paste from, in the HAL file insert the line
show pin
Then start LinuxCNC from the command line
linuxcnc &
Copy the pin list from the terminal window and squirrel it away in a text file for reference.
(Copy and paste in the terminal window is generally ctrl-shift-C and ctrl-shift-V as "normal" Ctrl-C is "Cancel")
- SPH
04 Sep 2025 07:46
7i77 and VFD spindle control was created by SPH
7i77 and VFD spindle control
Category: Basic Configuration
I've been having a hard time trying to figure out how to get my router's Yaskawa 616g5 vfd connected up and running with my 5i25 - 7i77 setup.
I can't seem to find a good example of the HAL code and I'm not across HAL enough to figure it out for myself.
Just trying to get the absolute basics working. Spindle on is already connected and working. I just need to figure out the 0-10v output from analogue5.
The VFD can be configured for 0-10v or +-10v. I'll be setting it to 0-10v, no need for it to reverse direction.
I've seen versions with scaling and versions without, versions that set the scaling directly in HAL and others that set the scaling parameters in INI.
As I understand it I shouldn't need any scaling, just SCALE, MAX and MIN values of 24000 and 0 (or maybe 6000, the slowest the spindle is rated for)
I think I had it close to working at one point but the scaling must have been off. I've not gone as far as connecting the vfd to the 7i77 yet, just probing the output pins on the 7i77 with a multimeter. I was reading 0.4v when the spindle was on and 0 when off but in trying to figure out why the scaling was off on that particular iteration of the HAL file I deleted something and couldn't get LCNC to run. That was about the 15th attempt so I gave up for the day.
Most of the code I've tried to work from has looked like this or some version of it.
If someone has a similar setup and could share their HAL file or give me some direction on the bare bones that are required to get 0-10v working I'd really appreciate it.
I can't seem to find a good example of the HAL code and I'm not across HAL enough to figure it out for myself.
Just trying to get the absolute basics working. Spindle on is already connected and working. I just need to figure out the 0-10v output from analogue5.
The VFD can be configured for 0-10v or +-10v. I'll be setting it to 0-10v, no need for it to reverse direction.
I've seen versions with scaling and versions without, versions that set the scaling directly in HAL and others that set the scaling parameters in INI.
As I understand it I shouldn't need any scaling, just SCALE, MAX and MIN values of 24000 and 0 (or maybe 6000, the slowest the spindle is rated for)
I think I had it close to working at one point but the scaling must have been off. I've not gone as far as connecting the vfd to the 7i77 yet, just probing the output pins on the 7i77 with a multimeter. I was reading 0.4v when the spindle was on and 0 when off but in trying to figure out why the scaling was off on that particular iteration of the HAL file I deleted something and couldn't get LCNC to run. That was about the 15th attempt so I gave up for the day.
Most of the code I've tried to work from has looked like this or some version of it.
If someone has a similar setup and could share their HAL file or give me some direction on the bare bones that are required to get 0-10v working I'd really appreciate it.
#******************************
# SPINDLE S
#******************************
# ---PWM Generator signals/setup---
setp hm2_5i25.0.7i77.0.1.analogout5-scalemax [SPINDLE_9]OUTPUT_SCALE
setp hm2_5i25.0.7i77.0.1.analogout5-minlim [SPINDLE_9]OUTPUT_MIN_LIMIT
setp hm2_5i25.0.7i77.0.1.analogout5-maxlim [SPINDLE_9]OUTPUT_MAX_LIMIT
net spindle-vel-cmd => hm2_5i25.0.7i77.0.1.analogout5
net machine-is-enabled => hm2_5i25.0.7i77.0.1.spinena
# ---setup spindle control signals---
net spindle-vel-cmd-rps <= motion.spindle-speed-out-rps
net spindle-vel-cmd <= motion.spindle-speed-out
net spindle-on <= 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 => motion.spindle-speed-in
net spindle-index-enable <=> motion.spindle-index-enable
# ---Setup spindle at speed signals---
sets spindle-at-speed true
#SPINDLE-CW
net spindle-cw motion.spindle-forward => hm2_5i25.0.7i77.0.0.output-08
#SPINDLE-CCW
net spindle-ccw motion.spindle-reverse => hm2_5i25.0.7i77.0.0.output-09
#SPINDLE-STOP
#net spindle-on motion.spindle-on => hm2_5i25.0.7i84.0.2.output-13
- Japoo_Ness
- Japoo_Ness
01 Sep 2025 11:07
Replied by Japoo_Ness on topic Retrofitting a 3-axis VMC with DC servos - guidance needed
Retrofitting a 3-axis VMC with DC servos - guidance needed
Category: Driver Boards
Excellent, thanks again for the help. Now, looking at what @Andy mentioned, what would be the advantage of the 6i24-16 (I understand this is the one being referred to) over the 6i25? I see that it has more expansion possibilities for the future, but in terms of processing capability and other aspects, is there any difference?
From what I’ve checked, I think that with the 6i25, 7i77 and 7i74 I already have a very large working possibility. Also, I couldn’t find a way to use a 4th axis in the future with the 50-pin options, since they come with control for 4 analog servos, and I understand that one of them would have to be used for the spindle. That means I’d have to use one of the 6i24 configurations that allows 8 servos (which in my case seems unnecessary). So I’d like to know what would be the advantages of using a configuration with the 6i24.
@Tommy, thank you very much as well for your reply to Andy. I was checking which workstation models I could use with these configurations, and I noticed that the ones you mentioned are actually available here in my country (Argentina, which has a lot of issues with getting certain hardware). So thanks to both of you, I’ll keep researching the advantages and options.
From what I’ve checked, I think that with the 6i25, 7i77 and 7i74 I already have a very large working possibility. Also, I couldn’t find a way to use a 4th axis in the future with the 50-pin options, since they come with control for 4 analog servos, and I understand that one of them would have to be used for the spindle. That means I’d have to use one of the 6i24 configurations that allows 8 servos (which in my case seems unnecessary). So I’d like to know what would be the advantages of using a configuration with the 6i24.
@Tommy, thank you very much as well for your reply to Andy. I was checking which workstation models I could use with these configurations, and I noticed that the ones you mentioned are actually available here in my country (Argentina, which has a lot of issues with getting certain hardware). So thanks to both of you, I’ll keep researching the advantages and options.
- 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.
Time to create page: 0.653 seconds