Search Results (Searched for: stepper spindle)
- Gautham
- Gautham
29 Aug 2025 02:43
Replied by Gautham on topic Connecting my 7i96s to the VFD
Connecting my 7i96s to the VFD
Category: Driver Boards
Omg it worked!!! Thank you so much PCW not only did you spoon feed me on how to get my 7i96s to run my spindle but you also helped me get all my steppers working with the BoB. Thank you so much
- russkinch

28 Aug 2025 09:07
Stepperonline A6-1000EC driver was created by russkinch
Stepperonline A6-1000EC driver
Category: EtherCAT
Hi, I am creating a custom machine for work and really really need help. I am using the above driver with a 1000w servo motor for the spindle. I have installed ethercat and configured. I have downloaded the xml file for the drive from stepperonline. I have created a hal file that loads lcec and the xml file. But when I start linuxcnc is stops with an error saying lcec exited. How can I use this to drive the spindle. I don't need limits or probes or anything, Just speed.
I am really out of my depth here as I normally use a 3ph and vfd but space and weight does not permit this on the machine I am making.
Thanks
Russell
I am really out of my depth here as I normally use a 3ph and vfd but space and weight does not permit this on the machine I am making.
Thanks
Russell
- lj
- lj
26 Aug 2025 06:05
Replied by lj on topic ESP32 HAL2UDP setup for linux CNC noob.
ESP32 HAL2UDP setup for linux CNC noob.
Category: Computers and Hardware
Hello, I just started working on the linuxcnc esp32 W5500 setup and I ran into some issues.
1. Hardware: Rpi4 8gb with linuxcnc 2.8.4, W5500, Esp32 Wroom
2. Esp firmware: hal2udp pwm
3. Motion: open loop stepper with TB6600 Driver
Issues
1. activation of spindle or flood no voltage change on esp32 pins 4 or 25.
2. joint follow error all axis3. My stepper is enable without the enable pin connection (I'm not even sure what pin to use for enable/disable on the esp32-the pin out from the read file doesn't show what pin to use.
3. udp.stepgen.1.enable (error doesn't exsist) (My assumption is that because the udp.comp file doesnt show the param or pin) maybe I'm missing something
4. is the Pid function only used for closed loop steppers to accurately determine movement
I attached my hal and ini files
thanks for the help
1. Hardware: Rpi4 8gb with linuxcnc 2.8.4, W5500, Esp32 Wroom
2. Esp firmware: hal2udp pwm
3. Motion: open loop stepper with TB6600 Driver
Issues
1. activation of spindle or flood no voltage change on esp32 pins 4 or 25.
2. joint follow error all axis3. My stepper is enable without the enable pin connection (I'm not even sure what pin to use for enable/disable on the esp32-the pin out from the read file doesn't show what pin to use.
3. udp.stepgen.1.enable (error doesn't exsist) (My assumption is that because the udp.comp file doesnt show the param or pin) maybe I'm missing something
4. is the Pid function only used for closed loop steppers to accurately determine movement
I attached my hal and ini files
thanks for the help
- rhscdn
- rhscdn
14 Aug 2025 03:07 - 14 Aug 2025 03:13
Axyz retrofit - spindle wiring 7i96 was created by rhscdn
Axyz retrofit - spindle wiring 7i96
Category: CNC Machines
I think I have wrapped my head around my stepper motor and limit switch wiring. Regarding the spindle, I have a few questions:
The inverter is a woods eTrac x2c and the manual offers a nearly overwhelming number of options. I was never able to see the spindle working with the stock
AMC controller. I have attached the relevant table from the inverter manual and it seems like I should be able to use the analog spindle interface to provide 0-5vdc signal for speed control (vin). Do I simply use inputs on the 7i96 to conteol fwd/rev and a ground connected to the inverter common? Is that all there is to it?
The original wiring from the AMC controller to the inverter is somewhat different and it isn’t obvious that the AMC was actually able to control the spindle speed. It is connected to use 4 preset spindle speeds and the AMC has wires indicating an acceleration/deceleration signal, as well as some connections to NO and RCM.
The inverter is a woods eTrac x2c and the manual offers a nearly overwhelming number of options. I was never able to see the spindle working with the stock
AMC controller. I have attached the relevant table from the inverter manual and it seems like I should be able to use the analog spindle interface to provide 0-5vdc signal for speed control (vin). Do I simply use inputs on the 7i96 to conteol fwd/rev and a ground connected to the inverter common? Is that all there is to it?
The original wiring from the AMC controller to the inverter is somewhat different and it isn’t obvious that the AMC was actually able to control the spindle speed. It is connected to use 4 preset spindle speeds and the AMC has wires indicating an acceleration/deceleration signal, as well as some connections to NO and RCM.
- hitchhiker
- hitchhiker
13 Aug 2025 15:35
Replied by hitchhiker on topic ECMO VMC100 Retrofit with Carousel/Toolchanger
ECMO VMC100 Retrofit with Carousel/Toolchanger
Category: Milling Machines
sry for delay.
i have now the whole machine running with the original controller.
all works.. steppers,maindrive, all sensors and the spindleencoder.
in the next days i link up my raspberry pi 4 with a 7i92.
why the rasp? its easier for me instead a notebook.. i have the machine in my garage not in my basement...
if all works and linked to the mesa and is in my linuxcnc i came back.
parallel i would build a small model for the toolchanger to play in the apartment with the toolchanger carousel stuff.
thanks
i have now the whole machine running with the original controller.
all works.. steppers,maindrive, all sensors and the spindleencoder.
in the next days i link up my raspberry pi 4 with a 7i92.
why the rasp? its easier for me instead a notebook.. i have the machine in my garage not in my basement...
if all works and linked to the mesa and is in my linuxcnc i came back.
parallel i would build a small model for the toolchanger to play in the apartment with the toolchanger carousel stuff.
thanks
- juergen-home
- juergen-home
13 Aug 2025 09:37 - 13 Aug 2025 09:40
Replied by juergen-home on topic "pwm/dir" (Out1) switches for spindle CCW
"pwm/dir" (Out1) switches for spindle CCW
Category: Basic Configuration
At the end it was easier for me to compile a new bit file without the pwm/dir (I/O 07 PIN 17) and use it as a GPIO. It is working now.
Many thanks to you Peter!
Another question is about my "26 HDR" internal port of the 6i25 , I wanted to do my own encoder pcb but now I found a used 7I52S.
How to modify my vhd-file to do so and how should the cable from 26 HDR 6i25 to the 50 HDR 7I52S look like?
I don't now if I can use all functionality of the 7I52S but at least the 6 encoders and the rest filled with (stepper)outputs?
Should I open a new thread for this?
Many thanks to you Peter!
Another question is about my "26 HDR" internal port of the 6i25 , I wanted to do my own encoder pcb but now I found a used 7I52S.
How to modify my vhd-file to do so and how should the cable from 26 HDR 6i25 to the 50 HDR 7I52S look like?
I don't now if I can use all functionality of the 7I52S but at least the 6 encoders and the rest filled with (stepper)outputs?
Should I open a new thread for this?
- konrad
- konrad
05 Aug 2025 15:24
Replied by konrad on topic prevent jog limit error
prevent jog limit error
Category: General LinuxCNC Questions
I made the config with PnCconf and only slightly changed to to account for probe basic interface.
the inductive endstops are mounted on the traveling part of the axis and there are metal stops at each end of the travel.
the machine has the following specs:
Machine Specs:
X460, Y750mm, Z160
20mm linear rails
10mm pitch ballscrews, 20mm diameter
Construction: aluminum profiles bolted to 12mm steel plates, welded gantry sides
Motors: Y-axis 6.8Nm stepper, Z + X-axis 3Nm stepper
Drives: DM556 V1 48v
Spindle: 24K RPM 2.2kW ER20
inductive endstops
good latency values mostly sub 3000ns servo
the inductive endstops are mounted on the traveling part of the axis and there are metal stops at each end of the travel.
the machine has the following specs:
Machine Specs:
X460, Y750mm, Z160
20mm linear rails
10mm pitch ballscrews, 20mm diameter
Construction: aluminum profiles bolted to 12mm steel plates, welded gantry sides
Motors: Y-axis 6.8Nm stepper, Z + X-axis 3Nm stepper
Drives: DM556 V1 48v
Spindle: 24K RPM 2.2kW ER20
inductive endstops
good latency values mostly sub 3000ns servo
- Cysign
- Cysign
01 Aug 2025 11:19
Interfaces & linear scale for LinuxCNC was created by Cysign
Interfaces & linear scale for LinuxCNC
Category: General LinuxCNC Questions
Hi,
I originally wanted to run a cheap DIY cnc machine using an old Intel Atom dualcore computer which has an LPT connector. But meanwhile I start thinking about higher quality components.
Same specs:
-stepper motors (already exist)
-linear rails for a work area of 1000/600/200mm (already exist)
-spindle Kress FME800 (already exists)
-stepper driver board with 5x Toshiba TB6560 (already exists)
-USB connected hand controller/job wheel LHB04 (already exists)
Now I wonder if I'd better go for an network/USB controlled Mesa card to get rid of that old Intel Atom computer and be able to use any machine (probably a modern notebook).
Also I would like to bux linear scales for my build, but couldn't figure out how they would be connected to LinuxCNC.
Is there a lis with reliable (but not too expensive) supportet linear scales?
And would you rather ust the Toshiba stepper driver board listet above or get some modern alternative?
Since I didn't really start building it, I'm free to change components for the good
I'm going to weld the frame for my machine. So I wonder what's the best way to start? At the moment I think I'm going to build z-axis first and depending on it's dimensions I can design the x-axis, then Y-axis.
But for designing the z-axis I need to know which linear scale system I need to mount and what size it is.
Since this CNC machine is intended to build electrical guitars, I don't require the highest precision, but I'd like to have as small tollerances as possilbe for a reliable pricetag.
I originally wanted to run a cheap DIY cnc machine using an old Intel Atom dualcore computer which has an LPT connector. But meanwhile I start thinking about higher quality components.
Same specs:
-stepper motors (already exist)
-linear rails for a work area of 1000/600/200mm (already exist)
-spindle Kress FME800 (already exists)
-stepper driver board with 5x Toshiba TB6560 (already exists)
-USB connected hand controller/job wheel LHB04 (already exists)
Now I wonder if I'd better go for an network/USB controlled Mesa card to get rid of that old Intel Atom computer and be able to use any machine (probably a modern notebook).
Also I would like to bux linear scales for my build, but couldn't figure out how they would be connected to LinuxCNC.
Is there a lis with reliable (but not too expensive) supportet linear scales?
And would you rather ust the Toshiba stepper driver board listet above or get some modern alternative?
Since I didn't really start building it, I'm free to change components for the good
I'm going to weld the frame for my machine. So I wonder what's the best way to start? At the moment I think I'm going to build z-axis first and depending on it's dimensions I can design the x-axis, then Y-axis.
But for designing the z-axis I need to know which linear scale system I need to mount and what size it is.
Since this CNC machine is intended to build electrical guitars, I don't require the highest precision, but I'd like to have as small tollerances as possilbe for a reliable pricetag.
- rhscdn
- rhscdn
31 Jul 2025 14:16 - 31 Jul 2025 14:20
AXYZ Millennium Conversion was created by rhscdn
AXYZ Millennium Conversion
Category: CNC Machines
Just getting started on planning my AXYZ cnc router retrofit. Regarding the “AXYZ AXI” stepper drivers, the wiring diagram I have indicates driver control is standard 3 cable (12vdc, step, dir). Dip switches have the micro steps set to 1200 micro steps/rev (default). Is there anything else I need to know?
The stock spindle inverter was replaced with an eTrac X2C and is currently wired with 6 wires (gnd, decelerate, accelerate, 5vdc, feedback, on/off). Is there anything else I should consider?
My current plan is to purchase a Mesa 7i96s. For a pc, I have a Dell Optiplex 7050 and an ELO touchscreen ready to go.
Backstory, the AMC controller board on the small AXYZ cnc router that I bought is bad. It shows ‘Error 92’ or no controller OS and the AXYZ tool path software is unable to communicate with the board to restore it. My plan had been to convert the machine to Linuxcnc anyways but it would have been nice to test it and take some measurements prior to starting the conversion.
The stock spindle inverter was replaced with an eTrac X2C and is currently wired with 6 wires (gnd, decelerate, accelerate, 5vdc, feedback, on/off). Is there anything else I should consider?
My current plan is to purchase a Mesa 7i96s. For a pc, I have a Dell Optiplex 7050 and an ELO touchscreen ready to go.
Backstory, the AMC controller board on the small AXYZ cnc router that I bought is bad. It shows ‘Error 92’ or no controller OS and the AXYZ tool path software is unable to communicate with the board to restore it. My plan had been to convert the machine to Linuxcnc anyways but it would have been nice to test it and take some measurements prior to starting the conversion.
- hitchhiker
- hitchhiker
26 Jul 2025 12:06 - 26 Jul 2025 12:07
ECMO VMC100 Retrofit with Carousel/Toolchanger was created by hitchhiker
ECMO VMC100 Retrofit with Carousel/Toolchanger
Category: Milling Machines
Hi guys!
I get a VMC-100 as gift from a school.
I owm a F1P which i retrofit to LINUXCNC years ago. works perfect.
Same Machine as the VMC-100 but with manual Toolchange.
Now the VMC-100 has a carousel as Toolchanger.
This carousel have 4 proximity switch to operate the Toolchanger.
Sensor1 is a sensor to reference tool 1.
Sensor2 counts a hole in a parallel gear. is it counts 2 times the next toolslot is reached.
Sensor3 tells that the tool is engaged.
Sensor4 tells that the tool is disengaged and the mainspindle can rotate the carousel.
Main issue for me is that the carousel works above the Z reference sensor.
At Z reference positon the Carousel begins to disengage the tool and when sensor 4 is reached the carousel can rotate.
Does someone ever retrofit this in Linuxcnc and can share his experience?
I searched a bit arround but found only some videos with MACH3 and some dead threads.
I will use the orignial maindrive which has a encoder on it at the beginning.
the maindrive works with step/dir signals.
On my f1p was the same maindrive which i use to tap threads.. spindle orient is used for this but iswitch to a 1kw servo.
this time i will use everything orignial because i have 3 orignial stepperdrivers for the 5 phase steppers. later i would change to nema23 2 phase.
Main focus is to bring everything back to live without changing to different steppermotors or maindrive.
The maindrive is working and the encoder counts.
Steppers working.
all proximity sensors are working.
thanks for any help
the pictures are taken from youtube
I get a VMC-100 as gift from a school.
I owm a F1P which i retrofit to LINUXCNC years ago. works perfect.
Same Machine as the VMC-100 but with manual Toolchange.
Now the VMC-100 has a carousel as Toolchanger.
This carousel have 4 proximity switch to operate the Toolchanger.
Sensor1 is a sensor to reference tool 1.
Sensor2 counts a hole in a parallel gear. is it counts 2 times the next toolslot is reached.
Sensor3 tells that the tool is engaged.
Sensor4 tells that the tool is disengaged and the mainspindle can rotate the carousel.
Main issue for me is that the carousel works above the Z reference sensor.
At Z reference positon the Carousel begins to disengage the tool and when sensor 4 is reached the carousel can rotate.
Does someone ever retrofit this in Linuxcnc and can share his experience?
I searched a bit arround but found only some videos with MACH3 and some dead threads.
I will use the orignial maindrive which has a encoder on it at the beginning.
the maindrive works with step/dir signals.
On my f1p was the same maindrive which i use to tap threads.. spindle orient is used for this but iswitch to a 1kw servo.
this time i will use everything orignial because i have 3 orignial stepperdrivers for the 5 phase steppers. later i would change to nema23 2 phase.
Main focus is to bring everything back to live without changing to different steppermotors or maindrive.
The maindrive is working and the encoder counts.
Steppers working.
all proximity sensors are working.
thanks for any help
the pictures are taken from youtube
- Billiiles
- Billiiles
23 Jul 2025 09:13 - 25 Jul 2025 09:19
Replied by Billiiles on topic Axis and tool length sensor troubles
Axis and tool length sensor troubles
Category: General LinuxCNC Questions
Hi all
After a couple of years, I am finally back and ready to making chips. I have a router, use steppers on parport. Linuxcnc is 2.9.4, debian doodle jump :
Linux cnc0 6.1.0-35-rt-amd64 #1 SMP PREEMPT_RT Debian 6.1.137-1 (2025-05-07) x86_64 GNU/Linux
The router works, I can cut stuff etc. not the problem. The job that I want to do soon requires quite a few tool changes. So far I did it using the dowel method, but that is very time consuming. Sure an automatic tool changer would be perfect, but that's up for in a later stage. For now I have a tool length sensor, that I would like to use with my collet spindle to get tool length set after a manual tool change.
When I run tcdemo.ngc:
- goes to change position
- when I hit "Tool change complete", goes to zmax, tool sensor x and y, starts going towards the sensor.
- As soon as the sensor is touched, I get "Probe tripped during non-probe move" and program is stopped
How can I get over this?
I attach the relevant files in zipped folder "toollength_problem.zip"
Greez
chris
You might want to double-check that theG38.x command is active before motion toward the sensor begins. Also, review your HAL and INI files to confirm the probe input isn't being tripped by noise or an early signal. Did you try adding a small delay before the probe move to stabilize the signal?
- 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
- seuchato
- seuchato
14 Jul 2025 14:23
Axis and tool length sensor troubles was created by seuchato
Axis and tool length sensor troubles
Category: General LinuxCNC Questions
Hi all
After a couple of years, I am finally back and ready to making chips. I have a router, use steppers on parport. Linuxcnc is 2.9.4, debian:
Linux cnc0 6.1.0-35-rt-amd64 #1 SMP PREEMPT_RT Debian 6.1.137-1 (2025-05-07) x86_64 GNU/Linux
The router works, I can cut stuff etc. not the problem. The job that I want to do soon requires quite a few tool changes. So far I did it using the dowel method, but that is very time consuming. Sure an automatic tool changer would be perfect, but that's up for in a later stage. For now I have a tool length sensor, that I would like to use with my collet spindle to get tool length set after a manual tool change.
When I run tcdemo.ngc:
- goes to change position
- when I hit "Tool change complete", goes to zmax, tool sensor x and y, starts going towards the sensor.
- As soon as the sensor is touched, I get "Probe tripped during non-probe move" and program is stopped
How can I get over this?
I attach the relevant files in zipped folder "toollength_problem.zip"
Greez
chris
After a couple of years, I am finally back and ready to making chips. I have a router, use steppers on parport. Linuxcnc is 2.9.4, debian:
Linux cnc0 6.1.0-35-rt-amd64 #1 SMP PREEMPT_RT Debian 6.1.137-1 (2025-05-07) x86_64 GNU/Linux
The router works, I can cut stuff etc. not the problem. The job that I want to do soon requires quite a few tool changes. So far I did it using the dowel method, but that is very time consuming. Sure an automatic tool changer would be perfect, but that's up for in a later stage. For now I have a tool length sensor, that I would like to use with my collet spindle to get tool length set after a manual tool change.
When I run tcdemo.ngc:
- goes to change position
- when I hit "Tool change complete", goes to zmax, tool sensor x and y, starts going towards the sensor.
- As soon as the sensor is touched, I get "Probe tripped during non-probe move" and program is stopped
How can I get over this?
I attach the relevant files in zipped folder "toollength_problem.zip"
Greez
chris
Time to create page: 1.516 seconds