SM2 Bed Leveling

Could you go into a little more detail on this? I’m guessing that the TS is intercepting the G29 code, turning off heating and then doing its custom thing with leveling or something like that. Or is the Marlin code actually customized? Does the TS decide what G & M codes it actually processes? Have you actually tried a 5x5 leveling pattern? So many questions!! :innocent:

I believe it is the the touchscreen controller that is parsing the gcode and bypasses some of the commands in the startup gcode.

FYI all. My Prusa Mini showed up yesterday and even on it’s tiny bed it does a 16 point (4 x 4 grid) auto leveling routine.

I’m telling you it was a very bad idea that they decide to make auto bed leveling with theirs own code and not using Marlin.
At the moment I will not recommand SM2 to anyone for 3D printing

1 Like

They are just interacting with Marlin to make it less complicated for the user.
But, yeah, it’s not all flushed out.

I wrote a little gcode program to verify the leveling and it’s showing that it’s not moving in a level fashion. My program shows that the back row of matrix point are checking out fine but that the first two rows are off. I tried it with both manual and automatic leveling.

One of my questions is whether the leveling is always in effect or does it have to be turned on.
Does it apply for CNC too? I don’t think it’s needed for laser.

@parachvte,
Another question, what happens in manual leveling if you only select a few point and skip the rest, what does it do with the z value for those other points.

Note: I know that there is a “Next” button that you normally click, but you can click on the point circles to select that particular point and you can select as many or as few as you want in any order.

When you do manual leveling, does it reset all the z values at the beginning?

I did try to only select specific point number and click save. But after lunching the same print it doesn’t change anything. Do you think I need to generate a new g-code evry time i change bed leveling ? Maybe my start G-Code is not working correctly ?
I’m very frustrated I can’t level my bed even with glass bed

No. The gcode is most likely just fine, it’s the leveling. One user talked about using a dial indicator to check the bed level with and he would “shim” the different heating bed attachment points and try to level it that way. Then the leveling doesn’t really need to do much other than set the z offset. I’ve just made a dial indicator holder that I’m going to do some experimenting with. I plan to have it on the side of the print head and basically “check” what it is doing in the leveling routine.

When typing M503 you see the 9 point Z level
G29 W I0 J0 Z3.75
G29 W I0 J1 Z4.00
G29 W I0 J2 Z4.35
G29 W I1 J0 Z3.55
G29 W I1 J1 Z3.90
G29 W I1 J2 Z4.05
G29 W I2 J0 Z3.60
G29 W I2 J1 Z3.80
G29 W I2 J2 Z3.95

I tried to manually change this settings with other Z value but it doesn’t work :rage:

What commands did you use to try changing them?

I tried both commands

G29 S3 I0 J2 Zx.xx

G29 W I0 J2 ZX.XX

No effect

I believe you have to use a M421 command.

I checked how level the bed is (when probed with the sensor). For this I used the “Printer Bed Inspector” from Nicholas Piegdon (WARNING! There are some parts in the software you have to adapt to make it work with the Snapmaker, or you will gauge your print bed!)


The red area in the bottom left corner is due to the print surface not sticking down completely to the heat bed.

I turned the print surface to the other side and rerun the test

6 Likes

Current implement do not reset all z offset. (I don’t remember if we can skip some of the points and finish the manual calibration.)

We still use Marlin’s code to probe the bed and calculate the compensations. What I mentioned as customized is that SM2’s communication is quite different that when G29 was proposed: We have a Touchscreen to interact with, and we customized our cable entirely now the probe data is transferred in CAN bus.

We both know that there are lacks in the design of G-code. Not only limited as a plain text, G-code’s reply format is not unified, different implementations diff a lot. Another thing is that when you receive an “ok” or something from Marlin, it doesn’t means that the command is executed, it means the command is accepted to be executed. This will lead the problem of user interaction, say when TS receive an “ok” from Marlin, it doesn’t know if the command is actually executed, thus it doesn’t know if it can move to the next step.

In SM2, we are trying to workaround the problem, that’s why we don’t use G-code to communicate. If we find a way to use G-code to do the calibration or a simpler version of it, we will try to add it back to G-code.

1 Like

Ok but what is the specific command to manually change one of the 9 bed leveling point with G-code commands ?
M421 still doesn’t work for me

@parachvte told me M421 should work. What is the exact command you are sending?

This command I did sent
M421 I0 J2 Z5.00

M420 V
M421 Ix Jx Zx

Hint: Use serial cable to connect SM2.0 via Luban.

2 Likes

@parachvte,
Does the SM2 flavor of Marlin code have a place where G & M codes are enabled or disabled or parsed to determine if they should be run? Or is that something in the TS code? I’m just wondering where in the code that decision is made.

So I’ve manually leveled my bed a number of times.
I’ve recorded the values. They don’t change much at all from time to time.
I’ve got a dial indicator hooked up so I can see what’s going on.
I run my level checking program. It goes to each level point and down to Z.1 (the thickness of the test card) I consistently have it going to a Z position which is off from what it should be ranging in values from .03 to to .46mm. It consistently goes to the same off value at every point. So my only conclusion is that the Marlin leveling routine isn’t working as it should.

I could go and tweak the grid points by the off values but if the Marlin leveling routine isn’t working right it won’t fix the problem. I’m going to try it and see.