New printer time?

Might be time to give reprap firmware another shot…been at least 7 years for me.

2 Likes

If you are switching firmware families I’d strongly recommend giving Klipper a go if you have a spare rPi sitting around.

It has support for multiple z-motors and routines to adjust them independently to tram the bed to the gantry using a blTouch or other bed sensor.

1 Like

I have power loss recovery on my printer with duet. On power loss it saves the current gcode line with the residual power supply power. It assumes the z doesn’t drop, and just rehomes x and y. The couple times I’ve needed it, it worked.

1 Like

I’ve heard some good stuff about Klipper, just never been motivated to go there. RRF I know well enough to get everything that I want to do with it done.

1 Like

It may be that auto Z levelling expects to use the probe that can be moved to multiple locations on the plane rather than needing multiple Z endstops whose locations are fixed. On my Prusa clone I only use the 2 Z motors, not 3, but it uses my IR probe, which is fixed to the print head, and moves it from one end of X travel to the other in order to measure and correct any Z levelling offset. I recall seeing settings for 3 in the levelling setup. Once the levelling is taken care of, then a single Z endstop could account for Z offset for first layer fine tuning.

1 Like

Use the BLTouch to home Z in one of the corners instead of the center. I’d expect it to still work with a print on the bed (assuming the print isn’t taking up the entire bed.

Pick a corner that the rest of the print head over-hangs the edge of the print bed to help reduce obstructions.

1 Like

OOOOOHHHHHHHH. I have been growing to love the RepRap firmware for one huge reason. I love how so much of the firmware can be configured with gcode files. Literally everything I would normally want to configure inside the firmware can be done (So far) with just a few edits to some config files. No need to recompile. I LOVE IT! You want to reprogram what happens when a single axis is homed. Edit the config file. You want to adjust the motor steps per mm or accelerations. Edit the config. You want to program a macro that will use some sort of sensor or something. Edit a gcode file. Crazy powerful stuff without having to recompile anything. I love it.

2 Likes

Input shaping with klipper is one of the most exciting things I’ve seen in a long time.

1 Like

Sorry folks it was a busy Monday…but I did get some help today. I messed with it again for a bit.

I know I should just give in and use the BL but what if someone doesn’t want to and they just want to use regular endstops…AND I hate to think I found a bug and just leave it for someone else to deal with if I can confirm and report or possibly fix it would be awesome.

I think I got it all set correctly this time and I have tried a few checks, no coreXY, min vs max homing, 2 vs 3 Z’s. I have the same issues.

If I home to Z min I get Z max errors… and reversed, home to MIN and get MAX errors. Something has to be reversed here. Anyone see anything obvious in this breakdown, I think it shows all the relevant lines?

So this is set to home to Z MIN…why Z max errors (I did try turning on/off the Z max pins/endstop (on during min creates more errors))

I do love the idea of Klipper, but I would really like to get the basics working before I try the fancy stuff. Same with other firmware, swapping is a last resort. Relearning software takes a lot of time if what we have is supposed to work.

1 Like

I installed klipper on my gridbot. It is 99% the same, and I don’t think about it much. But it took many hours to convert my working config to the klipper one. Klipper also doesn’t work as well with octoprint, which is my main interface to the printer, and very important to me.

I would not be surprised if you did hit a bug though. That error message is a mess. It is a bunch of macro expansions leading to an undefined variable name. Nothing obvious is sticking out to me.

Can tou just try the simplest change to make this fail? A vanilla 2.0.9.2 (or whichever) with just the trippe Z set up? If that compiles, then maybe it is some complication with something else you have changed. If it fails, then that should be reported to Marlin, and probably added as a test case.

1 Like

Knowing nothing about how the code functions, take this with a grain of salt.

Marlin\src\module\stepper.cpp:395:57: error: ‘Z_MAX’ was not declared in this scope

In the source file “stepper.cpp” on line 395, the program is trying to use a variable called ‘Z_MAX’ (and Z2_MAX) but its not properly defined in the code as a whole. Its saying the scope isn’t correct, meaning that if it is declared somewhere in the program, its not done correctly.
Or so it seems at least.
You are trying to find Z_MIN while getting Z_MAX errors, so its possible there is a syntax error.
What files are you modifying before you compile? The error is in the stepper.cpp file. Any way you can send me that file, or direct me to where I can download the source you are using?

The errors seem odd, and the code is unclear to me “(v, Q)” looses me. I am going to look at it again. It is bugging me. I feel like when you turn on 3 endstops (or even 2) it checks for both min and max, instead of just one. I think I can do a few quick and dirty test by commenting out some lines. I think it might be in stepper.cpp, I bet there is an “&” sign when it should be an “or” further down there are some conditionals that do not seem right to me as well something like “min | !=z probe”. I am going to have a bit of extra coffee and try this early in the day instead of late.

I am too close I can feel it.

1 Like

P.S. Thanks for confirming it wasn’t something obvious on that error screen. Kinda felt like it might have been staring me right in the face.

Pretty sure I found it. Stepper.cpp lines 286-296

Was
if (!(TEST(endstops.state(), A##_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##_motor) A##_STEP_WRITE(V); \

Needed
if (TERN0(HAS_##A##_MIN, !(TEST(endstops.state(), A##_MIN) && count_direction[_AXIS(A)] < 0) && !locked_##A##_motor)) A##_STEP_WRITE(V); \

Looks like the whole triple endstop set was missing " TERN0(HAS_##A##_MIN,"
I realized the dual endstop set above it had to work…cuz Jeff made sure of it a few years back. Got dual working, triple still wouldn’t. Stared at the screen for a very long time playing where’s Waldo or spot the difference.

Need to check it on real hardware then submit to Marlin.

3 Likes

Works…get a homing error when it is all done homing, but it works perfectly otherwise.

Changing a couple basic settings and trying again.

2 Likes

:crossed_fingers: I did this correctly and I did not misspell anything, like usual.

2 Likes

Very much looking forward to this. If this ends up as streamlined as it appears (I understand it’s not a pre-packaged kit, it’s still a project), I wouldn’t mind upgrading my 150mm^3 to something of a useful size…

Hmmm… 20x20x500mm CF square tubing isn’t too bad from Amazon… Plus 5@ 400mm MGN12 linear rails… 8x my current build volume! :drooling_face:

1 Like

Ohhhhhh yeah, the bed plate works so much better than I expected. It also looks like the Marlin PR was approved and is just about to get merged to the bugfix branch!

2 Likes

What did you expect? It’s a hunk of wood with three holes in it…At least, that’s what appears to be the critical design elements. You could probably crank out something that fit those requirements with a jigsaw using a meth-head blade and a marginally useful icepick. :clown_face: