X_AXIS_TWIST_COMPENSATION for SV04

Hi, I have a problem with the bed leveling on my SV04 and I have narrowed the problem down to a twisted x-axis. In my firmware I have changed between ENABLE_LEVELING_AFTER_G28 and RESTORE_LEVELING_AFTER_G28 with various combinations of G28, G34 and G29 (bilinear). When I place a finger on the z-axis I can feel that both z-axis move independently from each other on the first layer. However, the first layer is higher on one the left side and lower on the right. The only thing that I have found is that some people seems to have a problem with a twisted x-axis and this conclution have I also landed on. From my knowledge it seems that M423 X_AXIS_TWIST_COMPENSATION is not supported on the SV04, I am running johncarlson21 firmware with some tweaks. Is there someone that can guide me to any solution or if it is possible to edit Marlin to add this feature?

Links:

Hi,
presuming that you already have checked & adjusted all mechanical components of your SV04 (e.g. bearing rollers, removed dirt on gantry, fixed screws etc.) & tested levelling with disabled mesh compensation (M420 S0) it is quite a project to add X_AXIS_TWIST_COMPENSATION to the SV04 firmware. It could be done by merging all source code blocks that contain the string #if ENABLED(X_AXIS_TWIST_COMPENSATION & into the very position of the corresponding source code files of your current firmware or copying the complete file, if it is new. Additionally, X_AXIS_TWIST_COMPENSATION has to be enabled in the Configuration_adv.h file.
Things above are the easy part that makes G-Code M423 available for a host session. Transferring the guided X-Twist compensation procedure which exist for LCD display only to the SV04 touchdisplay will be more challenging…

Good luck
Björn

Hi again,
my current firmware update v1.14.4 has just been released. It is available in my GitHub repository.
I merged M423 “X Twist Compensation” basically as described above. The compensation process is currently not supported via the display screen. M423 can be called via host console e.g. by using Printrun/Pronterface & USB-cable.
The compensation process consists of nine individual steps which are described here in the Marlin LCD user interface source code. Touch display integration will be implemented in a later release.

Good luck
Björn

Hi,
Thanks for the integration of M423. However, after connecting the SV04 to my laptop via Pronterface and typing M423 in the terminal it echoes Unknown command. Other commands works as expected. I did not change anything before compiling the firmware v1.14.4 display v1.14.3.

MVH,
Emil

Hi again,
thanks for letting me know. I have to apologize for not running the first test before announcing the feature in my release…
Well, this is what went wrong: In file “Configuration_adv.h” the X_AXIS_TWIST_COMPENSATION definitions were omitted due to missing preconditions. Therefore building the firmware went smooth without any warning - I should have know better…
After moving the X_AXIS_TWIST_COMPENSATION definition block in file “Configuration_adv.h” & some minor adjustments I had a successful build, that responded to the M423 command in my console test.
The update will be as v1.14.5 in my GitHub repository this evening.

Sorry for the inconvenience
Björn

Hi again,
I just removed an other bug in my firmware v1.14.5 that caused bed leveling problems. This has been fixed in my new release v1.14.6 that is now available for download in my GitHub repository.
/R
Björn

Thank you so much Björn! It solved my problem. Now I finally have a perfect first layer :slight_smile:

1 Like

Did you ever think of implementing UBL where you could adjust each point? I used a cheap ender 3 v3 se recently that has that ability and it is very nice.

I’ve already thought about that & came to the conclusion that it would be too much effort compared to the benefits.
/R
Björn

Oh!
I understand.
Is there any decent documentation on how to use the x axis twist compensation??

The inline source code documentation has been the best information that I could find in Juli. It seems to have been sufficient for KoKarlsson’s needs.

I used Pronterface and manually added some points, M423 X0 Z0, M423 X1 Z0.05, M423 X2 Z0.10 for instance. You need to first start by defining the spaces in the X-axis using M423 X0 I50. Where the I value is X-axis length divided by the amount of points you want. Hope this works.

1 Like

thank you,
I will give it a try

I typed in M423 X0 I50 and it said “?(Z) required”
It seems with that figure for I that there would be 5 or 6 points. is the “X0” really supposed to be A0? As the X starting point?
So then do I go to these points on the bed and put z at 0 ond see how much I need to go up and down to get proper bed clearance and then put that compensation figure in for M423 X0 Z(whatever I measure)?