Dual Z motor - different questions



  • I am about to switch my gantry from two motors driven by one driver to two motors driven by separate drivers. I have a couple questions that I have never seen addressed.

    Currently, when I set up the printer from scratch, I run the gantry up to the top and adjust the two motors to give me a level gantry relative to the top of the printer (CR10). I then drive the gantry down to the printbed and adjust the print bed to be level relative to the gantry with the 4 corner leveling screws.
    My selected method for auto leveling involves doing a z probe near both Z motors and adjust for a level gantry relative to the bed. I will obviously need to do an initial manual leveling with the 4 bed screws. What happens if the bed itself is going out of whack by let's say the leveling screws loosening up? If the bed is only slightly off it's not a big problem but if the bed is off a bit more and the gantry adjusts to the bed, it could theoretically bind on the z motors.
    Is anybody doing anything to mitigate this risk? How do you verify if the bed is actually level level and not just level relative to the gantry ? Is this something that is only worried about at initial setup ? Is it something you verify on a regular basis ?
    The other issue is adjustment range. When my z axis is not powered, it doesn't take much to back-drive the motors from the gantry weight. I understand that the default adjustment range for auto z correction is 1 mm but what happens if the gantry is out by 5 or 10 mm? Do you just run the adjustment routine several times until the reported error is acceptable or does the system just barf at a large discrepancy between the two Z motors ?
    Currently I just leave all steppers powered up continuously but I want to get away from that practice.



  • @jens55 said in Dual Z motor - different questions:

    it could theoretically bind on the z motors.
    Is anybody doing anything to mitigate this risk?

    Ideally you'd have some flex built into the gantry to allow for this. There may be enough play in the lead screw nuts to allow a few mm of adjustment without binding. You'll have to find out the limits.

    @jens55 said in Dual Z motor - different questions:

    How do you verify if the bed is actually level level and not just level relative to the gantry ?

    Well technically we don't care if the bed or gantry is level. We care that the bed and the gantry and parallel to each other. In machining this is called tramming. The tool head is trammed to be parallel to the X and Y axis. In your case with the independent Z axis adjustment you can tram the X axis to be parallel with the bed. In order to tram the Y axis you will need to adjust the front and back bed screws as pairs. The manual bed leveling assistant may be able to help automate this process. Having 4 leveling screws will complicate matters. Mesh compensation (g29) can also compensate for the Y axis.

    @jens55 said in Dual Z motor - different questions:

    Is this something that is only worried about at initial setup ? Is it something you verify on a regular basis ?

    That will depend on how rigid and sturdy your bed is. If the springs are stiff and there is little warp you probably won't need to worry about very often.

    @jens55 said in Dual Z motor - different questions:

    but what happens if the gantry is out by 5 or 10 mm?

    Any automated process will be helped along greatly by starting from as close to the end result as possible. You may want to manually adjust the Z axis by hand to get it eyeball close and then let it go from there. You could also build into your macro routine a procedure where the Z axis is driven up to the top frame at a low current and decent speed in order to stall each motor. Prusa does something similar to true up the X gantry.

    You're going to need to decide what your ground truth will be for a reference point. If the frame is square, the easiest thing may be to use the top frame beam as your starting point. Drive the gantry to the top until stall to get it parallel to the frame. Then adjust your bed screws so that the nozzle is even at all 4 corners. This manual leveling process shouldn't need to be done very often. Now your bed is the reference point.

    Then you can use the independent Z axis routine to tram the X axis gantry to the bed surface to account for any discrepancy in the two motor positions.

    Then you can use a G29 with either a sparse grid or a detailed grid to define the basic plane or detailed surface of the bed as necessary.

    You'll have to experiment to see how flat the bed surface is whether you need rough or fine detail, and how stable the bed geometry is to know whether you need to run G29 often, perhaps before every print, or only seldomly and load the saved heightmap.



  • Thank you, that was kind of the answer I was expecting.

    I have a Duex5 coming in today's mail .... Christmas will come early 🙂



  • I am using 2 z motors for my corexy. Maybe I can help a little. Lets start with the last question about the auto correction. It is possible to change the default value so it can auto correct a large variation. For my setup I use the G32 auto correct to to make sure the motors haven't gone out of sync when the printer is powered off. A corexy has to raise and lower the bed instead of the gantry and with no power it is possible to bump the bed out of sync. The first thing I did is start off getting the bed as level as I could by hand. With the machine off and motors unpluged I tried my best by eye to get the bed as level as I could front to back less worried about left to right. After I was happy with it I ran the G32 command to have the printer self adjust left to right. Then I used the G29 mesh correction to probe the bed to see how far out the corners were. Adjusted and tested again. Once I was happy with the results I added G32 to my start code in the slicer. The idea is to double check the z motors are in sync before each print. Every few prints I will run the G29 to make sure the bed is still level and to save a new mesh map. I think you can get away with not having raise the gantry to check level. It is probably best to just use the bed to check for level. I hope this helps at least a little. If you think a setup like this would work for you, I can share my files and we can modify them to work with your printer.



  • @jens55 Your fears are more than justified. Tried exactly the same thing with my CR-10 when I got my Duet - no chance: caused by the central Y-rail guidance, the bed likes to tilt over Z. And it likes to tilt a lot, you can’t rely on it as a reference at all. I installed a mechanical Z probe and, since then, use the assisted manual bed levelling feature of the Duet. In fact, I have to run it several times before each and every print. Currently, I look to re-construct the whole mess: two linear rails will help a lot. Next I will try to fix the springs, they are way too weak.



  • Thanks for all the suggestions. I have installed the new Duex5 board and moved the two Z motors to it, leaving the original Z connections empty. It blew my mind when I powered it up and had no errors and Z worked (how is something like that even possible).
    Anyway, I ran across something that I had not contemplated at all. I ass-u-me-d that in operation the printer would move close to one Z axis, measure the height, move close to the other Z axis and again measure the height and then adjust the two Z motors to give an equal height.
    For some reason I thought a G32 would do this but instead it does a full bed scan. This is not a workable solution for me. When I do a full bed scan I do it with 441 points and multi-probing for each point and a full bed scan takes somewhere between 2 and 3 hours. Needless to say, it is only done occasionally. Using G32 involves doing a bed scan (in my case at a much lower resolution) and destroys the detailed surface map I have created.
    I must be able to use a command that ONLY measures the difference between the two Z heights and equalizes it. It must be independent of setting Z zero or of doing a bed scan. How can I achieve this result ?
    To put it another way, what I need to do after turning on the printer is to tram the gantry, then set z=0 then load the surface map at which point I am then ready to proceed with printing.



  • @infiniteloop , fortunately I am using a CR-10 S5 and it has two rails to guide the bed but I have run into issues with the bed adjusting nuts coming loose (I have now installed nylock nuts to hopefully fix the issue). I still don't trust it as a reference, the structure is entirely too flimsy.
    With the nylock nuts, I think the bed is likeyl to be more stable then the gantry because literally the slightest pressure (especially downwards) on the gantry, with the motors turned off, and the whole thing moves down (and not necessarily evenly). I have to be careful that I only touch the gantry with the motors locking it (for things like changing filament etc)



  • G32 will run the macro bed.g which contains whatever commands you want. Sounds like it has 29 in it right now? You'll have to modify it to do what you want.



  • Ok, I think I have it. I will run some more tests - Thank You!



  • This is an example of my bed.g setup to probe near each z-lead.

    M561 ; clear any bed transform
    M98 Pdeployprobe.g ; deploy mechanical Z probe
    G28 ; home
    M98 Pdeployprobe.g ; deploy mechanical Z probe
    G30 P0 X30 Y150 Z-99999 ; probe near a leadscrew, half way along Y axis
    M98 Pdeployprobe.g ; deploy mechanical Z probe
    G30 P1 X270 Y150 Z-99999 S2 ; probe near a leadscrew and calibrate 2 motors
    M98 Pdeployprobe.g ; deploy mechanical Z probe
    G28 Z ; re-home Z
    M98 Pretractprobe.g ; retract mechanical Z probe



  • @antlestxp Thank You! That is what I have as well now (minus the probe deploy code).
    It seems to be working except for an oddity in the reporting of the result. On some probing runs it reports the pre and post adjustments and on other runs it does not. I was writing it off as 'if it hasn't got anything to report it will not report anything' but I have since noticed similar intermittent behaviour on other things, for example when doing an auto heater calibration. About 50% of the time it reports properly and the other 50% it prints out only some of the progress reports and only some of the final outcome.
    This seems to be a completely different issue though.
    As an example, I did a heater auto calibrate, it reported the heater turning on but did not say anything about the heater turning off, nothing about maximum temperature reached and nothing about the auto tune completing (this is in the G console).



  • @jens55 You lucky one. With two rails, you could try to fix the height of the bed’s rear side, giving you a chance to use that as a good-enough reference for Z tramming. You will however still have to level the front side by hand.


Log in to reply