Bed leveling motors seperate from z Axis

Basic Information:

Printer Model: Cubicon single Plus
MCU / Printerboard: stock
Host / SBC N/a
klippy.log N/A

Fill out above information and in all cases attach your klippy.log file (use zip to compress it, if too big). Pasting your printer.cfg is not needed
Be sure to check our “Knowledge Base” Category first. Most relevant items, e.g. error messages, are covered there

Describe your issue:

…hi all, I have a Cubicon Single Plus that I want to convert to Klipper. Im just in the thinking process so far but want to see if it’s possible.

In it’s stock configuration the printer has a z Axis stepper and then 3 seperate motors for fine tuning the bed leveling. The bed raises touches the nozzle to contact points on the bed and each contact point has a little motor to do the fine adjustment.

I would like to retain this functionality. Is it possible with klipper Firmware? Im assuming hardware wise, I would need to change the main board out for something klipper compatible (probably btt octopus or similar), raspberry Pi, and lots of time with a multimeter untangling a mess of proprietary wiring and connectors.

There isn’t alot of info out there on this printer which is why I’m leaning towards converting to something I know a bit better.

Am I crazy. Probably ..

Welcome SweaterNinja,
nice expensive printer.

It will be hard to get Klipper running on that printer even without this feature.

Cubicon lists just one mainboard on its webpage. MKS Robin Nano V3.0, a well known mainboard, but you have to make sure, if it is used in your machine.

The operational manual 오류안내 페이지 | CUBICON shows a basic drawing of the auto leveling bed on page 50.

A lot of unknowns!

Good luck, hcet14

I assumed I would need to replace the board. That and the wiring I have no issue or concern about. I’m more curious if it can be done from a firmware standpoint. Currently the z Axis rises. Hits an optical end stop (at this point the nozzle is still pretty high off the bed.) then it seems to ignore that endstop and the nozzle probes 3 locations with the main z screw. Each location has a small independent motor that handles fine adjustment. I’ve read through everything I can find on klipper bed leveling and it all seems to be based on the voron style with 3 or 4 z steppers probed to level the bed but they then are used for z movement. I would need them to do the fine adjustment and then hold and not move.

Why, just check which board you got. You might post some pictures of the board.


The way I understand it, they use 3 tiny motors with spindle instead of bed screws. I’m not aware of Klipper covering such a scenario, but of course I might be wrong.

If it helps, it looks like you can revert to original firmware after Klipperizing.

Yes. True. At this point I’m just seeing if it’s possible to retain the leveling function. If klipper can’t control the leveling motors seperate from the z axis steppers then I don’t even see a point in trying.

1 Like

You can probably set up each bed stepper as a manual_stepper, then using screws_tilt_calculate, you can manually move each manual stepper to the proper Z. Not sure how feasible it is to automate this, though, at least not with a custom Klippy extra.

This seems at least like a step in the right direction. I didn’t know I could manually control additional steppers. I read through Manual_Stepper and it seems like I would at least be able to get the bed aligned with console commands.

Would it be possible to have those steppers labeled in Config as A, B, and C and have a macro set up to get Z above the A pad move A motor until nozzle makes contact ( there is some time of sensor already built in for this) repeat for accuracy. Then do the same for B and C?

You can setup screws_tilt_adjust to probe over the three different stepper positions on the bed.

# Change coords/speeds/thread as necessary
[screws_tilt_adjust]
screw1: -5, 30
screw1_name: Screw A
screw2: 155, 30
screw2_name: Screw B
screw3: 155, 190
screw3_name: Screw C
horizontal_move_z: 10.
speed: 50.
screw_thread: CW-M3

You could use a macro like this:

[gcode_macro MOVE_B]
gcode:
    MANUAL_STEPPER STEPPER=bed_b ENABLE=1 SET_POSITION=0 MOVE={(params.MOVE|float)*2}

[gcode_macro MOVE_C]
gcode:
    MANUAL_STEPPER STEPPER=bed_c ENABLE=1 SET_POSITION=0 MOVE={(params.MOVE|float)*2}

# On Klipper start, init all motors
[delayed_gcode]
initial_duration: 1
gcode:
    MANUAL_STEPPER STEPPER=bed_a ENABLE=1
    MANUAL_STEPPER STEPPER=bed_b ENABLE=1
    MANUAL_STEPPER STEPPER=bed_c ENABLE=1

then use the results from SCREWS_TILS_CAULCULATE

Example:

> SCREWS_TILT_CALCULATE
Screw A (base) : x=-5.0, y=30.0, z=2.48750
Screw B : x=155.0, y=30.0, z=2.36000 : adjust CW 01:15
Screw C : y=155.0, y=190.0, z=2.71500 : adjust CCW 00:50
> MOVE_B MOVE=1.25
> MOVE_C MOVE=0.83

Moving A is not necessary as it is used as the reference point.

As for probing multiple times, this is setup in your [probe] config.

[probe]
...
samples: 3
1 Like

You also need to know about the electrical connection to the three little motors/steppers.
This video is pretty informing https://www.youtube.com/watch?v=S9U8wnglGBg.
I guess they mounted the printer board under the right side panel above the filter and the filament spool.

Yes, I foresee much time with a multimeter untangling the proprietary spaghetti monster

Excellent, thanks so much for the start.

1 Like

So why don’t you post some pictures of your printer board?

1 Like

It’s currently printing. Haven’t had time too. Also I figured I would be changing out the control board to something more modern so it wouldn’t matter.