Core-XY based on Rat Rig V-Core and Duet 2 Ethernet

  • @bluedust
    Thanks for the tip, I am short of "large tools" at home that why I used my print bed as square. I have to bring a tape measure from work to measure the diagonal to be sure its identical both ways. With my "square" is have it done so I have no visible gap which should be OK. My X axis front and back have the same distance from the edge of the frame on both ends which is also an indication for the lot being square. Have not yet printed anything as I am still in the process and the bed is not yet done. I am sure I will take it apart again anyway, 2 of the double t-nuts have lost their thread because I was to generous with the force tightening the bolts. The slot in nuts seem to be a lot stronger and I think I prefer them. I have a bunch of them ordered.


  • My current Duet 2 Mount can be found here:

    The Fusion 360 file is here:

    Its my temporary solution until I have a final setup with proper print bed. Its out of the way on the upper rear 2040 extrusion, easy access and view of limit switch LEDs and so on. I have no active cooling as its exposed and my motor currents are below 1A.


    Picture was taken before wiring was complete, so a bunch of cables are not shown here. Printed on the Prusa MK3 with Prusament PLA Galaxy Black.

    Have FuN!

  • @snoozer said in Core-XY based on Rat Rig V-Core and Duet 2 Ethernet:

    One more thought about the bed and end stops. I have one end stop at the low logical end of the z axis for now which means homed the bed is lifted all the way up. That seems to be what I have seen on most or all printers in fact. its not really very practical from a operational perspective. To overcome this I can see two options.

    A: Modify the homeall.g to have the bed drop all the way after homing to allow easy access and do the same after every print. Not clear yet how that would work when using a Z probe.

    B: Having the end stop at the bottom (logical high end) and home the bed there. Again I have not yet looked into Z probing, no clue if this would be an option.

    Which is the better approach, anyone has practical experience to share related to this ? It only really come into play where the bed moves for Z instead of the tool I guess.


    Homing to Zmin is more common I think because it's far more important to have that set accurately than the Zmax. It's just a lot easier to adjust the distance between the nozzle and the bed. Of course, regardless of how you home the Z axis, where it finally rests is up to you. You could home to Z0 and then move it to the bottom. But that's a lot of long travel moves on a slow axis.

    Using a Z probe lets you automate that Z0 procedure and opens up the door to using other bed leveling and compensation mechanisms, which philosophical opposition aside, do have their place. At the very least, having an accurate way of finding and setting the Z0 position is a requirement for a good first layer. That's just easier to do when homing to Z0.

    It's definitely possible to do both though, and in fact on a CoreXY with a moving bed, having a way to reliably home to Zmax is very useful for resume after power loss functionality. In my case, I use a z probe for homing and have an optical endstop on Zmax. The optical flag is adjustable with a screw, so I find Z0, move the bed down 300mm, and then adjust the flag until it triggers the endstop. Then I have a macro to homeZMax that does a simple homing move to the max end of travel and sets position to 300mm.

    There's going to be some variation over time due to differences between each homing trigger height being slightly different, or thermal expansion and drift loosening things up, but it seems to work already for resuming the print on layer heights I use. You can tell there is a subtle layer line if you look at it, but it's better than a failed print.

    Personally, I wouldn't want to home to Zmax every time because of how long it takes and since it's going to have to just come all the way back up at the start of the print. If I need access I have a macro that places the bed half way down and moves the gantry to the middle. Or I use the homeZmax macro to get it all the way down.

  • @phaedrux

    I understand what you say re proper positioning for the 1st layer. I think for now I probably go with the end stop at Z 0. You mentioned using a macro for homing to z max. That's something I have not looked into yet at all. Using marcros would ofc make things very easy once I have a handle on that. I wont be home now till Thursday so I am not hands on to look into it.

    Regarding speed, my Z moves pretty fast if needed, IDK the value of the top of my head now but that was one of the things that drove me mad on the Prusa how slow Z moves.

    Does your setup have two mechanically independent Z motors ? How do you make sure your bed is level in the geometry of the printer. I have seen some printers especially with ball screws and rails drop the bed once steppers are powered down. Mine does not do that but if it does you intervene by hand to level it somehow ? I was thinking of a mechanical strong end point like adjustable threaded spacer under the nut for the lead screw. that is level to the geometry, or in other words parallel to the gantry above to have a known point to make sure i am definitely level. Is it possible to define stall detection for the z max and end stop by NC switch or Z probe for z 0 ?

    Thanks for your input, much appreciated.

  • @snoozer Just to say that macros are nothing more than a sequence of commands that get run one after the other, and that homex.g, homey.g, homez.g and homeall.g are in fact macros.

  • @deckingman If I remember right (not at the printer now) on the right in DWC was a list of shortcuts or buttons to click to call macros, I just have not yet changed the defaults to what makes sense for me. I am sure I figure it out.

    Regarding homing z to 0 or max, my main concern is that I have not yet figured out how I safely move z to z max without previously homing to z 0. was thinking of a hard mechanical stop at z max but i would have to have stall detection enabled for only z max, not z 0 or x and y 0, looks as if that is not a possibility. I was then thinking of using E0 or E1 as end stop for z max but I am not sure such configuration is even possible. The RFF Config Tool does not seem to allow for that.

    I am just thinking out loud here. Sounds all a bit weird I guess but in practical reality once I have the printer enclosed I would need to be able to move the bed to z max to access a print that may be on the bed after the printer was switched off. I like to have a button for that which does not require home z to 0 1st with a print on the bed and no access from above.


  • administrators

    @snoozer, you can use your Z max endstop switch when you want to home to Z max, and the Z probe when you want to establish a more accurate Z=0 position prior to starting a print.

  • @dc42

    I was reading here M574, am I reading that correct that I can map any actual end stop connector to any axis as described in this example ?

    M574 U1 S1 C2 ; U axis uses endstop input 2 aka Z

    Could I use one of the free E end stops as z max and the normal z end stop as z 0 ?


  • administrators

    @snoozer said in Core-XY based on Rat Rig V-Core and Duet 2 Ethernet:


    I was reading here M574, am I reading that correct that I can map any actual end stop connector to any axis as described in this example ?

    M574 U1 S1 C2 ; U axis uses endstop input 2 aka Z

    Could I use one of the free E end stops as z max and the normal z end stop as z 0 ?


    That facility is only in some 2.03 beta releases and is about to be withdrawn in firmware 2.03RC1. A functionally similar facility is available in the 3.0 firmware series, but that is only available as a very early beta.

  • @snoozer said in Core-XY based on Rat Rig V-Core and Duet 2 Ethernet:

    Does your setup have two mechanically independent Z motors ?

    It uses a single motor belted to 3 lead screws. The bed itself is an aluminum plate attached to the bed frame via 3 point leveling screws. You can see photos and more description in my signature.

    The lead screws are single start a 1mm pitch/lead. So very flat. Zero tendency to drop when power is removed. Travel speed is in the 300-500mm/min range so not super fast but not super slow either.

    You may very well be able to use stall detection to level each motor individually. Though I would still prefer to level to Zmin rather than the Zmax frame, simply because you get feedback from your probe rather than just a hard physical stop at the bottom that would need to be manually calibrated and maintained as level.

    The great thing about RepRapfirmware is that there are many ways to achieve the desired results. Whatever makes the most sense for you and your machine can probably be worked out.

  • @phaedrux your setup would not allow for independent move of one lead screw unless the belt slipped. On my set-up that mechanical link between the two steppers is not there. If the bed is non level to start with the auto bed leveling may well compensate for that but it wont make the bed level in relation to the printer frame or more importantly to the gantry. I leave it with the z 0 end stop for now, everything else seems to be non realistic or to elaborate for now. Once I have a probe set up I will follows up on the tip of dc42 to have a z max end stop and have the z probe provide z 0. There apperats to be no way to have max and 0 end stop for z at the same time and I have not seen a way in the documentation to use stall detection for z max and end stop for z 0. I can realistically not see my printer having the lead screws move independent unless only one stepper would stall. powered off I can not push my bed up or down. Should that become an issue it will probably just be a lot easier to link them with a belt.


  • That's right, I don't have any independent motors to worry about. I square up the bed frame at the bottom of the printer with the lead screw pulleys loose, tension the belt, then secure the pulleys to the lead screws. I haven't had any skipped teeth after that, though occasionally I do have to re-tension the belt plate. The bed itself is then leveled independent of the frame to square it with the gantry.

    In your case, using this procedure to correct the tilt of the bed might be the best way to g provided your bed frame has a little bit of play to allow for the alignment process.

  • I can post some examples of how to use multiple end stop types together. This is all configurable inside your macros. Everything is configurable at time of use. Once you see a few examples I think it will become obvious.

  • @phaedrux oh that sounds interesting now, you mean I could use a different M574 in a macro then the M574 I have used in config.g ? If that's possible I just need to put the z 0 and z max end stops in series and can make use of them on both ends or even try stall detection in my macro that brings the bed to z max. I must read the link regarding "Bed levelling using multiple independent Z motors". To late now for that, bed time.

    Thanks for the valuable input !!!


  • Yes that's right. You can treat the config.g as the default settings that are applied at startup. Pretty much every command can be issued at any time to change a setting. So in your macro files for various things like homing, etc, you can reconfigure things right when you need it.

    So in your homing macro you could have the Z probe configured (M558, G31, and G30 to probe) and use it to find Z0, then you could use M574 to define a Zmax endstop and use G1 S3 Z400 (Note teh S3) to seek the Zmax endstop and when it triggers, set the Z axis maxima (M208) to be equal to the current Z height (which you know, because you established Z0 first). And then save it to config-override.g with M500 P31. You've now automatically established the length of your Z axis.

    In that example, if you weren't using a Z probe yet, you could substitute the probe commands for the M574 Zmin commands and home to Zmin using the endstop first.

    Note that this method won't help after a power loss. In that case, you'd need to use the method I described earlier where you set the Z axis length precisely ahead of time, so that homing to zmax will give you a predefined known value.

    Here are some example macros that may help explain the concept.

    0_1557290636906_0_Measure Zmax trigger.g

    Just examples of what's possible. Things can be as simple and basic, or as specific and involved as you like.

  • @phaedrux That's great to know how I could make it work. I am not worried to have z max that precise since I can now have both z max and z 0 end stop or the combination of z probe and z max end stop. Since I do know the physical dimensions when at z max I can fast move close to z 0, say 10mm off and probe at slower speed from there.

    Thanks very much

  • @phaedrux I was just looking through the g-code you linked. I do get the idea, I see how you use M574 in the homezmax.g. Till you mentioned it I did not realise this can be done outside the config.g and change "on the fly". I also see you used M291 a bit. I assume that works in DWC as well as on the PanelDue ?


  • @snoozer said in Core-XY based on Rat Rig V-Core and Duet 2 Ethernet:

    I assume that works in DWC as well as on the PanelDue ?

    That's right. A popup window will come up in the DWC.

  • Hi,

    I got a bunch more done now. I have moved the z end stop to the z max end and installed an inductive probe for now till I have a piezo probe to go. Had to modify my bed mount as well, I was to worried about losing height on the extruder and it was higher than the bed can reach without losing a few turns on the lead screws. Had to raise the springs a little. The bed for now is the original that came with the printer. Its OK actually. The heater is a adhesive silicone mat with a pretty good wiring harness in a thick silicone tubing. I have made some strain relieve to prevent pulling on the heater when the bed moves. Its a 24V supposedly 300W but in reality more 280 looking at the current it draws. I was surprised how long it take to heat up. I guess I am spoiled with the Prusa. I had it going for a couple hours at 60 degree to start and went to 120 in the end which took for ever. That's all acceptable for the moment but definitely not a solution in the long run. I was super disappointed with the spring steel sheet that I got from Amazon I think it was. Once I had applied the PEI sticker it would no longer lay flat. I guess I should have pre bend it slightly cause it looks as if the PEI is pulling the edges up. Its also very thin, not anything like the Prusa one. Its basically unusable. The last observation I made was the difference is probing distance for my inductive probe between the aluminium, bed and spring steel. Without the steel and only aluminium the probe barely triggers before digging the nozzle in. The probe is then so low that I worry about proximity to a print. With the spring steel that approx 1.5mm better. That surprised me a little, did not expect just big difference.

    I had no go on macros yet or making use of the z max switch, that's on the agenda for next week. Also trying to find better spring steel with PEI and a piezo probe cause I want to be able to print on glass as well.

    Here a few pics of today.





  • Just a quick add on, an impression of the fast non print move speeds I get so far.

Log in to reply