Dynamic force cancellation\load balancing.

Sub title – My crazy printer is now completely insane!

 

As followers of this blog will know, for various reasons, the moving mass of my printer is in the order of 4.2Kgs in the Y direction. That in itself isn’t an issue because I have demonstrated that I can print at up to 300mm/sec using multiple melt chambers. I regularly print at 80 to 100mm/sec with non print moves at 350mm/sec. What is an issue is that this moving mass is over a metre above the floor, and the floor flexes (maybe the frame does too but we’ll come to that later). The floor consists of a layer of laminate, on top of fibre board insulation, on top of chipboard sheets which are screwed to wooden joists.

The net result of all this, is that the entire printer tends to rock back and forth which is a bit alarming to watch, and so I run at accelerations of 1000 mm/sec^2 which slower than I would like.

Although it looks bad, the print quality doesn’t suffer noticeably because the build plate is constrained from any side to side and front to back movement by linear guides, which are fixed to the frame. So the print bed rocks along with the frame and the print head, all in perfect harmony (at least as is apparent by eye).

This movement of the same magnitude is true when the object being printed is reasonably close to the nozzle. However, I suspect that I would have problems with really tall objects (and I can go to 760mm in Z) because then the build plate would be near the bottom and so any XY movement there, would be a lot less than at the print head. Although I have printed one or two tall objects, they have been decorative things like tables and vases, and so dimensional accuracy hasn’t been important.

Having said all that and although the frame is quite rigid, a 4Kg plus mass being thrown around will impart fairly significant forces. The higher the acceleration , the greater these forces will be (force=mass x acceleration). This will cause the frame to flex. Whether that flexing is measurable is difficult to say (for reasons which will become apparent later) but even if there are no visible artefacts on the print surface, dimensional accuracy could suffer.

I have plans to print faster and certainly want to use higher accelerations, so something had to be done.

The obvious solution was to constrain the printer by fixing it to the wall. I discounted this for two reasons. Firstly it would make working on, or moving the printer more difficult. Secondly, the room that it stands in is next to the room that my wife and I sleep in, and the walls are only timber stud and plasterboard. I was concerned that if I rigidly fixed the printer to the wall, any vibrations would be transmitted into the wall which would act like a drum and thus be noisy.

Moving the printer to somewhere with a more solid floor isn’t an option. Nor is putting down a concrete base for various practical as (well as domestic) reasons. Also, I once took my printer to the TCT show and it had to stand on a somewhat flexible base. I may at some point in the future take it back to the TCT show or some other venue where the floor could be less than solid, so a more portable solution was desirable.

Which is how I arrived at this solution. On the basis that equal and opposite forces cancel each other out, I decided to make (yet) another CoreXY gantry. This gantry simply carries a lump of mass (a printed container with lead shot in it) and has the motors reversed so that the motion in opposite to the CoreXYUV gantries. The motors are mapped to the XY axes, so whatever that gantry does, this gantry does the opposite in terms of direction but at the same speeds and accelerations. So no special class of kinematics had to be created in firmware (but it’s now a 7 axis machine!).

I wanted to make a video to show the “rocking” motion. I have had problems in the past when uploading videos to YouTube in that it does what it thinks is a good job of stabilising shaky footage. There is a very nice clip on one of my videos showing a stationary nozzle with the printed part oscillating back and forth – nothing like how it was in real life. So I hit on the idea of using a dial gauge to show the movement of the frame and floor. When I set it up, what surprised me was that instead of acting like a sponge, the floor actually acts like a spring. So rather than a back a forth motion, it is more akin to a vibration. Or maybe the flex in the floor induces a vibration in the frame which then gets transmitted back to the floor. Who know? – I can’t isolate one from the other to be able to say for sure.

The printer upgrade was fairly complex. Ideally, I wanted this gantry to be as close to the the CoreXY and UV axes as possible but it needed to be clear of the filaments being fed into the extruders. So it had to go above the extruders and with some clearance. The simplest way would have been to mount it above the filament reels which sat on top of the printer but this would have made the printer ridiculously tall. (OK, more ridiculously tall). So I decided to move the filament reels down from the top and mount them lower down but at the sides. Then fit slightly longer uprights (600mm instead of 500mm) and mount this third gantry at the top. I reused may of the parts for the ant-tangle filament reels but of course I had to print new motor mounts, X carriage (bucket on wheels), Y carriages, idler blocks etc. I needed two more motors which didn’t cost much but I spent more than I anticipated on Open Builds V slot extrusion, Delrin wheels, idlers, bearings, belts, and all the other “minerals” that go into making a CoreXY gantry.

Assembly and configuration were straightforward enough. Although I have yet to figure out how I can home this gantry to prevent bad things happening if I start a print with it in the wrong position relative to the other gantries. I had hoped to use sensor less homing (stall detection) but it’s looking like this might not be possible with the particular motors that I use. So, I’ll have to think of a “plan B”.

Finding the right mass to use was a bit more challenging. That is because at the end of a move, the dial gauge doesn’t do a simple deflection, but oscillates rapidly. I had thought that I could simply keep adding mass doing a move and repeating. But adding 100gms at a time, I got to the point where the oscillations started getting bigger because I had gone past the mass required. It is very sensitive but so is the dial gauge. One small division is 0.01mm. I know that 1100 gms is not enough and 1500 gms is too much so I settled on 1350 gms. Maybe the optimum is 1270 or 1395 gms or some such but after a couple of hours, I gave up and decided to simply see what happens when I tried it with 1350 gms.

The reason why it only needs in the order of 1350 gms to counteract 4200 gms is that this counter mass is about 500mm higher, so there is a leverage effect. It could also be that there is some flex in those extension legs as they are only 2020 extrusion. So maybe, it’s as good as it will get with this design.

Is it good enough? Now is the time to watch the video.

Dynamic force cancelling

There is no way that I could have stood a pound coin on end, on the printer, with it doing short sharp print moves at 80mm/sec and long rapid non-print move at 350mm/sec all at 1,000mm/sec acceleration ……………………..but I can now.

Hope some of you found it interesting and or informative.

More later……

 

Oh, the sharp eyed among you might have spotted that I have anti-tangle holders to enable 6 reels of filament to be loaded at once. There is reason for that……. Watch this space…………

 

 

 

 

 

Advertisements

3 thoughts on “Dynamic force cancellation\load balancing.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s