X carve based machine having endstop issues

Built a larger machine based on the Xcarve tech. Most of the electronics are from Inventables, so is some of the hardware. I had the machine running fine with endstops turned off (not cutting yet), and got around to getting them installed tonight. After working through several problems, we got the machine to home properly.
However, as soon as it completes the H cycle, it faults right back out with an “Alarm: Hard Limit” notice in UGCS. The only thing we can think of after checking over the entire machine multiple times in possibly electrical interference from the unshielded endstop wires being run with everything else (servo power, spindle power).
The machine is running on on of the recent grbl’s, and UGCS is 1.0.9

Any ideas? I’ll post the current settings below if anyone notices anything there. $25 is set to 350 because anything faster is too fast for the Z axis, and I don’t know of a way to set separate values for the axis’. $26 has had several values tonight, 50 just happens to be current. Some of the original homing problems cleared up when we turned it down from 250.

$0=10 (step pulse, usec)
$1=255 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=3 (dir port invert mask:00000011)
$4=0 (step enable invert, bool)
$5=0 (limit pins invert, bool)
$6=0 (probe pin invert, bool)
$10=3 (status report mask:00000011)
$11=0.020 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=1 (soft limits, bool)
$21=1 (hard limits, bool)
$22=1 (homing cycle, bool)
$23=1 (homing dir invert mask:00000001)
$24=25.000 (homing feed, mm/min)
$25=350.000 (homing seek, mm/min)
$26=50 (homing debounce, msec)
$27=1.000 (homing pull-off, mm)
$100=40.000 (x, step/mm)
$101=40.000 (y, step/mm)
$102=320.000 (z, step/mm)
$110=8000.000 (x max rate, mm/min)
$111=8000.000 (y max rate, mm/min)
$112=500.000 (z max rate, mm/min)
$120=500.000 (x accel, mm/sec^2)
$121=500.000 (y accel, mm/sec^2)
$122=50.000 (z accel, mm/sec^2)
$130=1000.000 (x max travel, mm)
$131=750.000 (y max travel, mm)
$132=120.000 (z max travel, mm)

It looks like you have both soft limits and hard limits turned on. Do you intend to use both. If so, you need to make sure the limits are compatible with each other. If i am reading this right, the soft limits are triggering at 500mm and the hard (or for this case the homing) at 1000mm. Thus since you are beyond the 500mm soft limit the alarm will not clear. Try turning off the $20 code and see if it work correctly if you have homing switches on. You probably dont need both but hard to tell what you have in the way of limit switches to know for sure for your post.


How are your homing/limit switches implemented? Are you using the three switches like the Inventables kit has, or are you using five/six switches for both ends of each axis?

I’m going to assume that you have three switches. That they are installed so that the home position is X left, Y front, Z top. This is the standard Inventables configuration.

Also, assume that when jogging the machine that negative X is left, positive X is right, negative Y is the front of the machine and positive Y is the back of the machine, negative Z is down and positive Z is up. This is also the standard Inventables model.

If these assumptions are correct and when you jog your machine then the axes behave as mentioned above, the following comments apply.

First problem: $3 and $23 should be the same value. In your case they should be 3 ($3=3, $23=3).

To enable homing you should have $22=1, which you do. I would leave soft limits enabled $20=1 and turn off hard limits $21=0 (at least until you get homing working right).

Change $26 back to 250. Lower values will affect the repeatability of the homing sequence.

Your $102 setting would indicate that you have the M8 threaded rod for your Z axis. If you have the ACME thread then $102 should be close to 188.947.

$102 may be affecting the $25 setting you are using. If 750 is too fast for your Z then $112 is not going to work for you either.

Once you get these issues resolved, then you can address the homing issue to determine what, if anything, is preventing it from working correctly.

Oh, wow a wealth of info here! Thanks to everyone for the replies! Ill try to go through in order…

-I meant hard stops, I am using three limit switches to control Home.
-I intended to use both, but as you point out, I should have gotten one working before the other. I will turn off soft stops and work on the hard stops first. Should the soft stops=maximum travel values?
-I’m unsure as to your meaning by “the hard stops are triggering at 1000”, since they should be physically triggering at 0… what I am missing?
-In the case of the the homing mask, I need to set $3=1 to match. Setting them to =3 sends multiple axis’ in the wrong direction. Ill get that changed.
-If you mean set $25 (typing error?) to 250, I can do that as well- have not found a good compromise yet on the rather lengthy time it takes for the machine to get Home (large machine), though at this point it is there anyway.
-$102 is correct.
-If I set $112 to 300, and homing speed is 400, for example, which one has precedence in the homing sequence?

Thanks again!

Can work either way. For Normally Open you would wire the switches on each axis in parallel, for Normally Closed you would wire the switches on each axis in series.

Just a little less wire for the Normally Closed option.

1 Like

Then you have wired your machine differently from what the instructions called out. Not wrong, just different.
Normal settings for $3 and $23 are either both 0 or both 3.

No. I meant $26=250

The homing sequence uses the $24 and $25 settings. The $112 value is used for normal operation.

Maybe I have a terminology problem. What exactly do you mean with the term “hard stops”.

Are you just referring to the actuators for the homing switches, or some other meaning.

Also, do yourself a favor, for debugging the homing sequence turn on soft limits and turn off hard limits.
So, just for testing, at this point set $20=1, $21=0, and $22=1

I didn’t realize that hardstops meant both ends of an axis… How does it home the machine if I have to have hard stops turned off and it can’t use the switches installed?
This leads to my confusion in turning off hardstops instead of soft stops… If the machine is not homed, then any soft stops I have enabled may be off and it will crash while being within the allowed value set.

I can accept that the wiring is wrong, since motors are going in the “wrong” direction. Not sure where it happened though, since I followed the build site for the xcarve. I’ll check through the wiring, even if I’m not going to fix it at this point.

I’ll set $26=250. I didn’t remember changing it, and I’ve gone through a half dozen values for $25.

Pm’ing with someone. Cleared up a few more issues with my knowledge of UGCS and CNC’s. I’ll let you guys know how it goes when I get back into town and can work on the project again.


Hi Im a novice with CNC and Im trying to set up my newly aquired X Carve with X Controller from Inventables. I have the new X Controller that came with my order Not the Aduino board and I have followed all the steps in setting up. I am going crazy getting my end stops working. I really need some help here… I am running GRBL 1.1 and trying to run the homing sequence but the Z limit doesnt work so I have to E stop so it doesnt frizz the motor.
The limit switches are wired NC and I have rechecked all wiring a dozen times.

This message appears on the Easel setup page after configuring the machine.
”If you have homing switches, be careful jogging your machine. The switches are currently disabled and can easily be crushed.”
I have three limit switches installed as end stops. A Dewalt 611 spindle with Acme thread
My CNC is the 1000mm X 1000mm

Here is the status from GRBL

Grbl 1.1f [’$’ for help]
[MSG:’$H’|’$X’ to unlock]

Any tips and help i can get would be greatly appreciatted.


1.1f has changed the way that status reporting is handled. Previously, you would turn on the status reporting bit for each item you wanted grbl to return.

In 1.1f, almost all of the status information is automatically returned, but not for each status call. If a status item changes it will be reported when the status command is issued. Non changed items may or may not be returned when a status command is issued. There is an internal mechanism that periodically returns non-changing items from time to time.

I don’t remember what the formula is right now, but it is deterministic for those applications that depend on status information.

With 1.1f the $10 parameter determines which position information is reported. If I remember correctly $10=1 returns Work Position and $10=2 returns Machine Position. Part of the status report includes information that allows sender type programs to derive the non-reported position from the one that is reported.

I would recommend that you use a different program to get your homing switches working.

Easel is designed to hide things from the user, with good intentions to try and remove some of the difficulties that new people have when learning to use CNC equipment.

This does get in the way of problem determination since one doesn’t really know what Easel is doing “behind the scenes”.

If you know how to use the Arduino IDE serial monitor (or any terminal type program like PUTTY), you can interact directly wirh grbl to help find your problem.

Your grbl settings look fine with the exception of $10. Set $10=1 for using grbl 1.1f

$5=1 is correct for using NC switches.