CoreXYUVWA



  • I have a crazy plan to add a third XY gantry (AW) to my existing CoreXYUV. I have the Duet plus Duex 5 with 10 motors already but @wilriker has pointed out that I can add 2 more external drivers using the ConnLcd connector. In case you are wondering why I want to do such a crazy thing, it's for dynamic load balancing.

    At the moment XY and UV are treated separately for homing but then the motors are re-mapped for printing and treated like a single CoreXY. This additional WA axis will need to do the opposite of XY and UV. That is to say, if XY goes plus X and minus Y, then WA will go minus X and plus Y.

    I was kind of thinking that if I map the WA motors to XY but reverse the motor direction, then that should give me the motion I want. But what about homing? They'll need to be mapped to another WA gantry. They'll need to home at max rather than min (probably) but I can fit switches easily enough.

    Can the firmware handle it? Or if not, could the firmware handle it? I appreciate that it's likely a one off so you may be reluctant to add another kinematics class just for me. I guess I could live without the ability to home these additional axes if I had to (set low motor currents and pray - and or build in some mechanical slippage).

    To expand on the reason for it. I throw about 3Kgs around in the Y direction (a bit less in X) with my heavy mixing hot end and 5 moving extruders. This mass is over a metre above the floor so when I do non-print moves at 350mm/sec, the machine tends to rock about a bit and I have to run lower acceleration that I would like. So If I had another mass, and moved it at the same speed and acceleration but in the opposite direction, it should in theory cancel out the forces. I've looked at passive systems like TMDs (tuned mass dampers as used in sky scrapers) but without going into all the maths, they won't work in this case.



  • @deckingman I think it will not need new kinematics but I might be wrong on that. AFAIK you can add additional axes to every kinematic just by defining them. And to why that might be sufficient:

    I also think it would be easier to have all the inversions only logically i.e. you tell the firmware that the motor runs forward when in reality it runs backward. You tell the firmware to home to W/A min when in reality you have the endstop at max (relative to XYUV min/max). This way you could still home them separately and combine them just as you do with X+U and Y+V. It would then just be X+U+W and Y+V+A after homing. Then XYUV would run forward and WA backward without the firmware having to care.

    @dc42 In case it does need some new kinematics and you basically approve it I am volunteering to work with Ian on this and take over the RRF part.



  • @wilriker said in CoreXYUVWA:

    @deckingman I think it will not need new kinematics but I might be wrong on that. AFAIK you can add additional axes to every kinematic just by defining them. And to why that might be sufficient:

    I also think it would be easier to have all the inversions only logically i.e. you tell the firmware that the motor runs forward when in reality it runs backward. You tell the firmware to home to W/A min when in reality you have the endstop at max (relative to XYUV min/max). This way you could still home them separately and combine them just as you do with X+U and Y+V. It would then just be X+U+W and Y+V+A after homing. Then XYUV would run forward and WA backward without the firmware having to care.

    @dc42 In case it does need some new kinematics and you basically approve it I am volunteering to work with Ian on this and take over the RRF part.

    Yes, that's the way I intended to do the inversions. When I had just CoreXY then added UV, David had to create a new Kinematics for me to be able to home UV independently of XY (M669 K8 is CoreXYUV). If you look at M669, the K parameter is a single digit. 0 to 8 are already taken and 9 is reserved so it may not be possible.

    It would be nice to have but it's not a huge problem if it's not possible. I can simply map the additional drives to the existing XY and build in a mechanical clutch on the motors, or some such thing, to prevent damage in case of crashing into the bed frame. Or just be careful to manually align this additional gantry with the lower ones.



  • @deckingman said in CoreXYUVWA:

    When I had just CoreXY then added UV, David had to create a new Kinematics for me to be able to home UV independently of XY

    Ok, did not know that dependency.

    If you look at M669, the K parameter is a single digit. 0 to 8 are already taken and 9 is reserved so it may not be possible.

    Don't worry this is not limited to single digits. 🙂 I just checked the source code that handles M669.



  • @wilriker OK. We'll wait and see what DC has to say. I expect he's really busy with the upcoming TCT show. No hurry - I haven't even begun to design the hardware modifications yet. The trouble is, the filament spools sit at the very top of the printer so this additional gantry will have to be above them. That means it'll be over 1.8 metres above the floor. I'm only about 1.75 metres tall so it'll be above head height and I'll need to stand on a step to work on it ☺



  • @deckingman Hehe, also taller than me then because I am about your height. 😁



  • @wilriker

    The filament spools now sit a little higher than shown below so I'll need to be careful that the printer will fit through the door when I add the extra gantry. No wait - if I want to take it anywhere, I have to take the top section off in any case because to UV axis is wider than the door. Not that I move it often......

    0_1535833825665_TallCoreXY.jpg



  • You could go pure mechanical and strap a passive counterweight onto each part of the gantry using simple Cartesian X and Y belts. Make a simple belt loop, tie one side to the CoreXY carriage, then attach a mass to the other side of the carriage on a secondary rod. (8mm rod is fine to just carry a counterweight.)

    I’ve been seriously considering this for future high-speed builds but it’s a better fit for an XY Cartesian or Ultimaker gantry than CoreXY.



  • @rcarlyle Yes thought of that too. In fact, that's how I started out driving the extruder gantry. It wasn't ideal for a number of reasons. Given that the total mass that is moved in Y is around 3 Kg, I'd likely need to add another 2Kg to the upper gantry. Although it's moving in the opposite directions, it's still mass that has to be moved and more importantly accelerated. So it's extra load on the motors, which are close to their limits. Also because there is no active breaking of the passive gantry,you need a very rigid connection between the driven gantry and the passive one which has a tendency to lag behind at the start of a move, then overshoot at the end. Having tried both, I favour the driven approach.
    I looked at using a Tuned Mass Damper (essentially a lump of mass on a damped pendulum) but they have to be tuned to a specific frequency or frequencies so won't work over the speed range that we use with printers. Difficult to do in both X and Y direction too. Might be possible, but it's a lot more complicated than would seem at first glance.



  • @deckingman I am not sure the counterweight is the best approach. I built a similar construction with extrusions 1.5 m high. My construction was were stiff at the top, but at the bottom lightweight like in your picture. The construction oscillated very much. IMHO the reason for swinging lies in the bottom. Making it more stiff in the bottom will be more advantagous for getting stability than adding weight at the top. You can even think of adding a modular, removable component at the bottom which can be removed easily for transport.

    (Even easier: fixing the middle part at the wall...)

    An inexpensive solution would be a cage made from concreate around the printer, opened at one side only. The concrete dampens vibrations.



  • @joergs5 For sure adding mass to the bottom helps with overall stability. Better still would be a large block of concrete or some such, connected to the fame via friction dampers (shock absorbers), a bit like front load washing machines. That's not an option in my case. The issue is that the floor itself has some flex in it because it's laminate on top of fibre board insulation, one top of chipboard, on top of timber joists. Spreading the foot load would work better than adding mas but that isn't an option either. Adding mass to the bottom doesn't help with any flexing of the frame either. And no matter how stiff the frame, there will be some flexing when accelerating and decelerating a large mass. Applying a dynamic opposing force will work better IMO.

    Also for sure, screwing it to a wall would be the simplest solution but where is the fun in that? ☺



  • @deckingman I wanted to give you some options only. I am sure building a third level is more fun than simply using conrete 😉 I thought about anti-vibration methods also. One possibility would be to compensate e. g. stepper vibrations by anti-vibrations etc. I wish you success.

    The laminate argument is interesting. I am building a CNC machine and think about whether a concrete socket makes sense or not. I have laminate also, so a socket instead of the laminate may be better.



  • @deckingman I had one more idea: in robotics or helicopters one wants to balance out by counter movements. This is similar to your problem, where you want to even out a movement (the vibration). So a different approach is installing sensors (gyro) which analyze the vibrations and use your counterweights to diminish them. This would solve the problem that you can react to time delays which may occur, also.



  • @joergs5 If you can, then definitely install the machine on a sound base - concrete would be ideal. I can't do that with mine because it sits in an upstairs bedroom.

    I don't see the point of adding a gyro to analyse the vibrations. It's an added layer of complexity to what is essentially a simple problem. Its just a matter of applying an equal and opposite force so that one cancels out the other. So a gantry moving a mass at the same speed and acceleration but in the opposite direction is all that's required.

    As the cancelling mass will be higher than the print head and extruder mass then there will be a leverage effect, so the only tuning will be to find the correct mass needed. This is easily done. I can measure the deflection at the top of the printer with a dial gauge, then gradually add mass while running the print head and extruders back and forth at high speed/high accelerations until the deflection is zero. I plan to use lead shot for the mass.

    Most of the mechanical design is now done and I'll start printing parts and ordering motors and aluminium extrusion. It's a simplified CoreXY gantry with a single X rail. The X carriage is a hollow cuboid into which I can add the lead shot. I'm not too worried about the gantry sagging or really precise positional accuracy - it's just a lump of mass being moved around so as long as it's free to move and travel the correct distance, that's all that is required.

    I did consider using axis that were half the length, doubling the mass and halving the steps per mm for those motors. It would be more compact, but it's hard to fit without a fairly major re-design of the printer.

    I'll need some help getting the two additional external stepper drivers interfaced but @wilriker has said he can help me with that.

    I'll do a write up on my blog when it's all done and report the findings (good or bad).



  • @deckingman

    The concrete socket is at the optimal timing, as I installed an underfloor heating in the workshop and not finished the laminate yet. I will do it this way, adding a socket for the 3d printer also.

    I am curious how your project is going!

    P.S. vibrations can cause a fall (unexpected ones!), so please attach a security rope at the ceiling.



  • @dc42 I looked into the CoreXYUVKinematics.(h|cpp) and it will be easy to extend/copy-paste this to CoreXYUVWA (I will also add CoreXYUVW if you think it makes sense).

    I found something in your BugList.txt that is very relevant to this

    M569 command to allow selection of smart/dumb driver [...] also allow all 12 drivers to be smart

    Can you tell me more about that especially the second half? What do you plan there? And what needs to be done? Did you think about TMC2660-BOB when writing this? If that is not to be more public you can of course email me. I can keep secrets. 😉



  • @deckingman can you fill me in on why you need separate controlled axes and not just run multiple drivers off the same step/dir signals? I know stall-homing isn’t great for CoreXY, so why not just manually position the axes where they are supposed to go at startup, home CoreXY with switches like normal, and rely on dead reckoning for the secondary and tertiary gantries?



  • @rcarlyle said in CoreXYUVWA:

    @deckingman can you fill me in on why you need separate controlled axes and not just run multiple drivers off the same step/dir signals? I know stall-homing isn’t great for CoreXY, so why not just manually position the axes where they are supposed to go at startup, home CoreXY with switches like normal, and rely on dead reckoning for the secondary and tertiary gantries?

    That's what I'll likely end up doing with this third gantry. It's how I started out with the second one too. But when I was working on the machine or just changing filament, I had a habit of inadvertently nudging the extruder gantry and forgetting to line it up again by eye before I did the homing. So I had quite few crashes which became a bit tiresome. I always drop the motor current when homing so it didn't do any damage but it was annoying. I posted the issue on these forums and David kindly implemented CoreXYUV kinematics for the purpose of homing. Now I don't have to worry about knocking one gantry out of alignment with the other.

    What happens is that the motors are mapped to XY and UV for homing. Then once homing is completed fr all 4 axes, both pairs of motors are re-mapped to X and Y, and U and V are hidden. So, for printing it's just like a CoreXY which happens to have 2 alpha motors and 2 beta motors.

    There is no problem mapping the third gantry motors to X and Y but in this case, I'd just reverse the motor directions in config.g so that the axes do the opposite thing. If I could also home this third gantry independently, it would be nice but it's not a huge issue. It'll work but I'll just have to remember to "eye ball" it before I start the homing sequence. Or as I've said previously, I can build some "slippage" into the system.

    I summary, it doesn't need to be CoreXYUVWA to work, but it would be nice if it was possible.



  • Ian, you could show a popup when homing, and wait for user (you) to put the gantry in the correct position, then click OK...



  • @fma Yes I know. there are all sorts of work arounds and things that I can do.

    @all

    Sorry if his seems blunt or harsh but getting back to my original post, and the reason I started this thread, all I want to know is would it possible to home an additional WA gantry, given that I currently use CoreXYUV? Or if it isn't currently possible, then could it be possible?

    If the answer to that is no, then that's fine. If the answer is yes, then what do I need to do?


 

Looks like your connection to Duet3D was lost, please wait while we try to reconnect.