Saturday, July 29, 2017

3 Point Print Bed Leveling vs 4 Point Bending

The word "leveling" applied to printer beds is a misnomer.  When you "level" the print bed you're not trying to level it to the earth the way you level a picture that you hang on the wall.  You're really "tramming" the bed, which means adjusting it so that it is parallel to the printer's XY plane, which is defined by the positions of the X and Y axis guide rails.  In case you missed it, let me state specifically: the bed surface is NOT the printer's XY plane.  When the bed is properly leveled, it is parallel to the printer's XY plane.  The guide rails, which in a properly built machine don't move, are the reference, not the bed plate.

CAD software uses right hand rule coordinate space, and each of the three axes are perpendicular to the other two, a condition called orthogonality.  Your printers axes should all be orthogonal, too, or prints will come out skewed.  Autoleveling serves one purpose only: to get the first layer of the print to stick to the print bed.  It assumes the guide rails/axes are orthogonal and does its job as if they were.  It can't compensate for axes that are not orthogonal.

Right hand rule coordinate space used in CAD software, slicing software, and in your printer's construction.

There are two common 3D printer configurations.  The most common, exemplified by the Prusa i3 and it's many clones, has a bed that moves in the Y axis.  The other most common type has the bed moving in the Z axis.  Less common types have fixed beds (most common among those are delta machines).

In printers with the bed moving in the Y axis, the X axis is lifted in Z, most commonly by two stepper motors turning screws.  If the screws don't stay synchronized (and there are many ways they can lose sync, including just powering the printer on), the X axis tilts, which means the XY plane tilts, and is no longer perpendicular to the Z axis.  As long as that condition persists, prints will be skewed, even if your printer has autoleveling.  Skewed prints won't fit together properly, gears won't mesh right, threaded parts may not work, etc.  IMHO, using two motors to lift the X axis is just plain bad design.  Maintaining orthogonality of axes is critical in a 3D printer or you can't print accurately.  In this type of printer, autoleveling contributes to the problem because it masks a tilted X axis until the X axis has tilted so far that either the operator notices the tilt or the Z axis mechanism fails.

That brings up another point.  Autoleveling systems all use some sort of bed sensor on the extruder carriage, which usually rides on the X axis.  The bed itself rides on the Y axis guide rails.  Therefore, autoleveling can compensate for nonideal X and Y axis characteristics, such as sagging guide rails which can be a big problem for large format or cheaply made smaller printers.

In printers with the bed moving in the Z axis, the bed is usually lifted in Z by one or more motors driving screws.  If the screws get out of sync, the bed tilts, but the printer's axes remain orthogonal to each other (assuming they were set up properly in the first place).  The first layer may not stick, but if you manage to print, the prints won't be skewed.  Autoleveling can work well in this type of printer, because it is being used to compensate for an unlevel the bed, not to compensate for tilted axes and an unlevel bed.

Anyone who paid attention in the first week of high school geometry (do they teach geometry in high school any more?) knows that 2 points define a line and 3 points define a plane.  Quick quiz: what do 4 points define?

Most printers come with 4 "leveling" screws, one at each corner.  When you turn one of those screws clockwise, two things happen.  The corner of the bed plate goes down and the corner of the carriage plate goes up.  Nothing (or much less) happens at the other three corners which are held in position by their own leveling screws and springs, so the bed plate bends along a line between the adjacent corners.

4 point "leveling" is more accurately called 4 point bending.  Whose idea was this?


In an i3 type printer, the carriage plate has bearings or bushings that ride on the Y axis guide rails.  Those bearing/bushing locations and orientations are critical to proper operation of the Y axis.  By turning that "leveling" screw, you just bent that carriage plate that holds those bearings/bushings in alignment.  That can't be good!  The guide rails are pretty rigid, so bending the bed carriage plate isn't going to move the rails much, so the carriage plate and the bed plate are going to move in some rather complex way.  So, turning one leveling screw throws off the level at the other three.  Now imagine what happens when you twist all four screws while you're trying to level the bed.

Of course, the bed plate or the carriage plate are going to flex different amounts, depending on which is more rigid.  The bed plate should be flat, so you really don't want it to bend at all or you'll have trouble getting prints to stick to it.  The  carriage plate holds those critical bearings/bushings, so you really don't want it to bend at all, either.  Yet printers that come with 4 leveling screws almost always have thin, flexible carriage plates and thin, flexible bed plates.  Hmmm.

In printers with the bed moving in the Z axis, the bed support is usually solidly built, so it isn't likely to flex when you tweak a leveling screw.  That means the bed is going to do most of the flexing.  How can a bent bed be made level?  Autoleveling that maps the bed surface can compensate for this.

Printers that have four leveling screws usually have "special" sequences of tweaking the screws to try to get the bed leveled.  They invariably end up bending the bed.  Then people clamp glass to it to try to provide a flatter surface that prints might stick to.  But then it isn't evenly heated, so they do stuff (thermal pads, glue, hairspray, etc.) to try to compensate for that.  What a mess!

Three Point Leveling

With 3 point leveling, there are three screws, reference, pitch adjust, and roll adjust.  The screws are normally arranged so that two of them, reference and pitch adjust, are along the printer's X or Y axes. The roll adjust screw is usually located along an edge of the bed, opposite the other two screws.  The reference screw is used to set the overall height of the bed above the carriage plate and not normally used for bed leveling.  After initial set-up, only the pitch and roll adjust screws are used to level the bed.

Look at the image, below.  Notice that when you turn any screw, the bed is free to pivot at the other two screws, so nothing is forced to bend.  The bearings mounted on the carriage plate are not affected.

3 point bed leveling.  Adjusting any screw causes the bed to pivot on the other two screws.  Nothing is forced to bend. Leveling is accomplished by adjusting the pitch first, then the roll.  


To level a bed on 3 points for the first time, you move the nozzle to the reference adjuster and adjust the screw to grab a piece of paper, then move to the pitch adjuster and adjust the screw to just catch a piece of paper.  Finally, move the nozzle to the roll adjuster and adjust the screw to just catch the paper.  The roll adjustment does not affect the pitch setting because when you adjust the roll, the bed pivots on the reference and pitch screws.  After the first time, if ever, you adjust the level by simply tweaking the pitch and roll adjusters.  Always adjust pitch first, then roll.

In the example below, the bed moves in the Y axis.  The reference screw is at the back of the bed (hard to reach, so best not used for leveling) and the pitch adjust screw is at the front of the bed.  The pitch adjust screw adjusts the bed plate's pitch in the Y axis.  The third screw, the roll adjuster, is located at the left side of the bed and adjusts the bed plate's roll around the Y axis.

Son of MegaMax (SoM) bed plate showing level adjustment screws.


The screws can be placed anywhere that is convenient, but the best place to put them is close to the bearings that support the bed, because that's where the most solid structure is located.  In this machine there are two guide rails for the Y axis, one at about the center of the bed and the other to the left, near the edge of the bed.

The printer shown above is Son of MegaMax.  The bed leveling screws have flat heads that sit in countersunk holes so there's nothing for the extruder nozzle to crash into.  Originally, strong springs pushed the bed plate up against the screw heads.  The leveling is so stable in this machine that once set, it doesn't have to be adjusted unless the machine is taken apart for mods or maintenance, so the springs were replaced with nuts (if you allow something to move, it will!).

The bed plate itself is a piece of 1/4" thick MIC6 cast aluminum tooling plate.  That plate comes milled flat on both sides with plastic film to protect it until you use it.  It is flat enough to print on edge to edge and stays that way when heated.  The brown print surface is kapton tape but that has since been replaced with PEI.

85 wheels printed almost edge to edge on the plate.


Example 2:

We have a Taz 3 printer at the makerspace.  It originally came with a glass bed with 4 point leveling that didn't work well for reasons explained above.  Between the uneven heating of the glass and the leveling problems, we could only print near the center of the bed.  After the bed broke I decided to upgrade to a piece of cast aluminum tooling plate on a 3 screw leveling system.

Taz 3 printer modified undercarriage showing leveling screw blocks (white) and location of bushings for the Y axis guide rails.  4 bushings on the guide rails make about as much sense and 4 leveling screws!  The plate is quite flexible and I wasn't able to put the new leveling screws closer to the bearings, so this one is a little less stable than SoM, but still a huge improvement over the original design.

In this printer the reference and pitch screws are aligned parallel to the X axis.  The roll adjuster is at the back of the bed.  While it has been a great improvement, it is not as stable as the system in SoM because the rest of the printer isn't very solidly built.  As long as we don't move the machine, the bed stays level and doesn't require any releveling, but as soon as we move it, it has to be releveled.  The thermal performance improved drastically.

Taz 3 with the cast tooling plate bed installed.  The roll adjuster is behind the extruder.  We originally put PET tape on the top surface but recently replaced it with a layer of PEI because it works better.
Example 3:

My most recent printer design, Ultra MegaMax Dominator, uses a unique 3 point leveling scheme called a kinematic mount.  The idea was taken from an optical table lens mount.  It still uses reference, pitch, and roll adjusters, but since the bed moves in the Z axis, I didn't have to put the leveling screws through the bed plate.  That allows the plate to expand freely when heated without pushing laterally against the leveling screws.  More details can be found here.

UMMD's bed leveling scheme (and the rest of the construction) is so stable I can transport the printer laying on its back in my car and take it out and stand it up and start printing without any adjustments.

Here are flatness scans of UMMD's bed that was made by mounting a digital dial gauge on the extruder carriage and then slowly sweeping it over the surface of the bed.  The first is at room temperature, 19C, and the second is at 100C.  This type of scan measures several things at once- variation in thickness of the PEI print surface, the thickness of the adhesive tape that holds the PEI on the bed, the flatness (and level) of the bed plate, the sag in the X axis linear guide, and the sag in the printer's frame, rigidity of the Z axis mechanism, all of which will contribute to the "stickiness" of a print's first layer.

UMMD bed flatness scan at room temperature (19C) from Mark Rehorst on Vimeo.

UMMD Print Bed Flatness Scan at 100C from Mark Rehorst on Vimeo.

And a print that runs almost from the left edge to the right edge of the bed:

Base of a filament spool holder printed in PLA in 290 um layers using a 0.6mm nozzle.

All three printer examples above have 300 mm x 300mm bed plates.  The first two are 1/4" thick, the third one is 8mm thick.  All are flat enough for edge to edge printing in 200 um layers.  I can't say how big the bed can get and still be rigid enough to stay flat enough to print on with only 3 screws supporting it.  That will depend on the thicknesses of the bed plate and the first print layer.  Larger printers are typically used to print larger objects in thicker layers, and thicker layers are more tolerant of variations in flatness, so I suspect that 3 point leveling can be used to go quite a bit larger than 300 mm square, unless you're trying to print a 50 um first layer.  Guide rail sag is likely to be more of a problem than bed flatness.

In summary, 4 point leveling bends either the bed plate or support plate or both, which can be very hard to print on.  Autoleveling can compensate for that and get the prints to stick.  3 point leveling and solid construction eliminates the need for autoleveling or even releveling.  The only fix for tilted axes is to prevent them from tilting through good design (one motor driving both screws) or check and realign them frequently.  Autoleveling does not and cannot compensate for tilted axes.

Friday, July 28, 2017

3D Printer Hot-end and Extruder Designs

Back when I started 3D printing, I had all the same problems every noob has.  Prints wouldn't stick and the extruder "jammed" more often than it fed filament.  It took about a year, but I eventually sorted out both problems. This post summarizes what I learned about extruders and hot-ends.

There are a few variations out there, but most extruders work by pinching the filament against a sharp toothed drive gear on a motor shaft.

The jamming I experienced early on was actually the extruder drive gear carving divots into the 1.75 mm filament (which was sort of a new thing, at that time).  Once that happens, the drive gear teeth have nothing left to grab and the extruder can't push filament any more.  I started researching extruders and found something interesting.  The people who used 3 mm filament almost never had problems with extruder jams, and the people using 1.75 mm filament almost always had problems.

I compared filaments.  3mm filament is pretty stiff and it takes some muscle to make it behave.  1.75 mm filament is much more flexible.

Next, I started looking at extruder designs. 3mm extruders all had gears to multiply the motor torque. Very few 1.75 mm extruders had such gears.  That got me thinking that at least part of the problem had to do with motor torque.  The other thing I noticed was that 3 mm extruders usually had some pretty strong springs pushing the filament pinch roller bearing against the drive gear.  The 1.75 mm extruders were usually pretty weak in that regard.

I eventually figured out that if you used strong springs on the pinch roller to push the filament hard against the drive gear, its teeth would bite deeply into the filament and the motor would not have enough torque to carve a divot into the filament.  So I modified my extruder with a stronger spring and preloaded it by compressing it with a screw.  That was the end of my filament divot carving problems, but now I still had problems with filament not extruding, which was either a hot-end problem or a motor torque problem, or both.

At some point during my quest I started experimenting with my own extruder drive concept.  I built a prototype and needed a hot-end to test it.  There was a Taz printer at the makerspace that had a Budaschnozzle hot-end and it seemed to work reliably, and on-line feedback indicated it worked pretty reliably, so I ordered one for my testing.  When it arrived I took a close look at it.  What I found was unbelieveable.

There was a laser cut wood part just a few mm away from the heater block.  Guess how long that part lasted after it charred black!  There was a large, threaded aluminum "heat-break" screwed into the aluminum heater block, impossible to disassemble without destroying the tube or the block, and there were what appeared to be heatsink fins on the body of the extruder, but upon disassembly, I found that the fins were really aluminum discs stacked on a teflon tube.  Teflon is plastic, a thermal insulator.  Why on earth would someone put a heatsink on a piece of plastic?  Those were the days when garage tinkering was sufficient "engineering" to produce a commercially viable product.  The design of the Budaschnozzle truly lived up to the ridiculousness of its name!

Since the 3 mm extruders all had gear boxes and seemed to work reliably with almost any hot-end, I figured that what I needed was more torque, so I started looking for an extruder that had a gear box.  I eventually settled on a BullDog XL, which has a 5:1 gear box.  The BullDog XL can push filament through just about anything going on inside a hot-end.  An additional benefit of a gearbox on an extruder is increased resolution in the filament extrusion which makes for very smooth print surfaces.

In a hot-end that has no real heat-break or cooling above the heat-break, PLA filament can get very sticky as heat creeps up the the hot end and softens the filament inside the tube.  This sort of problem usually shows up about 20 minutes or so into a print.  Everything will be going just fine and then the extruder will suddenly chew a divot into the filament for no apparent reason (if the extruder isn't properly adjusted), or the extruder motor will click as it starts skipping steps because it doesn't have enough torque to keep pushing the filament.

A lot of people think it's a problem to be solved by oiling the filament, presumably so it doesn't get sticky in the tube, while ignoring the problems that oil creates in getting prints to stick to the bed and/or print layers to stick together.  Others attribute the problem to dust on the filament jamming up the mechanism, so they put some sort of sponge or cloth in the filament path to wipe the filament clean before it goes into the extruder.  Neither solution addresses the real problem - heat creeping up the hot-end tube.

That experience got me looking at hot-end designs.  After some research, I came to the conclusion that hot ends should be actively cooled, especially for printing PLA which softens at very low temperatures.  I looked for designs that were actively cooled and otherwise made sense (no heatsinks on plastic, no wood parts, they had to have real heat-breaks, etc.) and found the E3D v6.  I've been using them for a few years and they just work.  The design makes sense (though I think they are as long as they are mostly to accommodate the 30 mm cooling fan- the new Aero version addresses that).

To summarize, reliable extrusion is most easily achieved with:

  • a high torque drive design that uses a gearbox to multiply motor torque (which prints smoother surfaces, too).
  • pinch roller pressure adjusted so that if the hot-end really jams, the extruder motor will skip steps without chewing a divot into the filament.
  • a hot-end that has an actively cooled section above a functioning heat-break.  
I've been operating a BullDog XL and E3D v6 combo on Son of MegaMax (SoM) for well over 2 years of almost daily printing and have had exactly one filament jam that occurred because of a foreign object embedded in the filament.  I don't have anything wiping dust off the filament, and no oil.  None of that sort of stuff is necessary.  If you have dust that's big enough to jam a 0.4 mm nozzle, you had better move to a place that will be safer for your lungs!

Foreign object embedded in the filament produced the only true jam in the hot-end in over two years of almost daily operation.

That extruder has never chewed a divot into the filament.  However, it has one design flaw.  There is a small gap between the bottom of the drive gear and the top of the guide tube that steers the filament down into the hot-end.  If you print with flexible filament, and try to extrude too fast, the filament will buckle in that gap and will then refuse to go down into the hot end, resulting in a failed print and filament wrapped around the drive gear.  The same can happen with more rigid filament if you set the pinch roller pressure so high that it squashes the filament.

This was a new (for me) failure mode for an ABS print.

After cutting away most of the bird's nest, I found this.  Filament isn't supposed to come out of the side of the extruder!

Removing the cover revealed this.  The filament had wrapped itself around the drive gear, but how/why?

This is how the filament was able to wrap itself around the drive gear.  That gap allows the filament to buckle in that space.
And this is why.  If you crank up the pinch roller pressure too high- it crushes the filament!

The crushed filament gets wider at the sides and thinner top-to-bottom, making it want to fold inside the gap between the drive gear and the guide tube.  This problem was fixed by backing off the pinch roller pressure.  There's still a gap between the guide tube and the drive gear making it tricky to set this extruder up for printing TPU filament (though I have successfully done so on several occasions), but it's proven extremely reliable for printing rigid filaments.
If the filament spool runs out during a print, once the end of the filament gets below the drive gear the extruder can no longer push or pull it.  If you try to feed in a new piece of filament, the stub in the gap will bend over and refuse to let you load the new filament.  You have to separate the extruder and hot-end to retrieve the stub of filament that stuck in the hot-end before you can feed fresh filament into the extruder.

The second problem is easily solved with proper printing "hygiene" which involves weighing the filament spool before starting a print to make sure it isn't going to run out, mid print.  That has always worked fine for me because I understand the problem, but Son of MegaMax is at the Milwaukee Makerspace and not everyone prints with the same attention to the process.  The result was a lot of down-time and a lot of extruder/hot-end disassembly.  I fixed the problem by adding a filament run-out sensor to the printer so that if the spool runs dry before the print is finished, the sensor will stop the printer before it pulls the end of the filament down into the extruder.

The run-out sensor created a new problem.  If there's no filament in the sensor and you power up the printer, all you get is a blank LCD screen.  I've had several people contact me reporting that the printer is "broken" because of it.  If you want to see if your 3D printer design is foolproof, leave it at a makerspace - you'll quickly find out all the flaws in your design!

I was updating the Taz and a Solidoodle printers at the makerspace and decided to see if there was an extruder that didn't have the same gap between the drive gear and guide tube.  I saw that E3D had recently released the Titan extruder that seemed to address that problem, so I ordered one to try it out.  It was about 1/2 the price of the BullDog XL and had a few obvious design advantages.  It was much lighter weight, more compact, properly fit on E3D hot-ends, and didn't have that gap between the guide tube and drive gear.  

When I got my first Titan extruder, I deliberately ran the filament out.  Then I tried loading fresh filament and it worked perfectly without any disassembly.  The Titan guide tube extends from the top of the hot-end all the way up to the bottom of the drive gear.  There's nowhere for the filament to buckle.  I like that!  Now I'm in the process of redesigning SoM's extruder carriage for a Titan extruder, and I put one on Ultra MegaMax Dominator.  I've also put one on the Taz printer at the makerspace.  The 3:1 drive gearing seems to have adequate torque when used with a "normal" sized motor.

A lot of people like to put low torque "pancake" motors on Titans to minimize weight so they can push their printer to print faster.  I think you have to make a choice.  You can use a pancake motor and operate at the very limits of performance to make relatively low quality prints, and occasionally lose one when the extruder jams up because it doesn't have enough torque.  Or you can put a more "normal" size motor on it and print a little slower, for higher quality prints that finish more reliably because the extruder has enough torque to keep pushing the filament even when things get less than ideal in the hot-end.

Thursday, July 27, 2017

UMMD CoreXY 3D Printer Frame

Some of the basic design goals for this printer included:


  • being able to fit the printer in my car (a Prius)
  • being light enough that I could handle loading and unloading it myself
  • fit through doorways
  • completely enclosed for printing ABS
  • stable, solid construction so I don't have to make bed leveling or other adjustments
UMMD's frame is made from used, 40x40 mm aluminum t-slot extrusion that was purchased from a local scrap yard for $1 per lb.  The frame was designed to fit the XY stage and the Z axis, then the t-slot pieces were cut a few mm longer than needed and milled square to final, matching lengths in the machine shop at the makerspace.  The axial holes were tapped with 5/16-18 threads and the frame members were screwed directly to each other using 5/16-18 button head cap screws and washers, the same way that Son of MegaMax was built.  When the frame members are cut and milled this way, they form square joints when screwed together as verified by measuring the diagonals.


UMMD's frame made from 40x40 mm t-slot aluminum.  The XY stage subframe is an integral part of the main frame.  The Z axis frame attaches to the XY stage at the top and to the main frame at the bottom.  The Z axis shown is rev 1 which was eventually replaced with the rev 3 design.



Bracing the Frame



The frame tended to wobble slightly in the fore-aft direction because of the relatively large moving mass in the Y axis and the height of the machine.  1/4" aluminum plate corner braces were added to the sides of the printer and the problem was solved.

Corner bracess were added to the sides of the printer's frame to boost fore-aft rigidity.  The braces are 1/4" aluminum plate, held in place with 5/16-18 carriage bolts that just fit the 8mm wide slots in the T-slot frame members.  The green wire at the top connects the printer's frame to the power line ground.

The corner braces were added to the sides of the printer only- it was rigid enough in the other direction without the braces.  A shorter machine shouldn't need the braces at all.

Casters and Feet


UMMD is tall and pretty heavy as 3D printers go.  I wanted to be able to move it without help, so two casters were added to the front legs and leveling feet were placed at the back.  Moving the machine is as easy as tilting it forward, rolling it to its new place and standing it back upright.  The leveling feet adjust to compensate for uneven floors.

One of two casters made from skate wheels.  The bracket is 1/4" thick aluminum.  Casters are on the front legs of the printer.

One of two leveling feet at the back of the printer.  The axial hole in the frame member is tapped for 5/16-18 threads.  The feet had black rubber that will mark floors, so I printed TPU "shoes" to cover them.
It works pretty well.  I am able to load the printer into my car by myself and then take it out and move it to where it needs to go.

The wheels came from skates purchased for $3 at a local Thrift store.  Unfortunately, they are a little small for moving the printer up and down stairs, so I may be swapping them for larger wheels in the future.



Enclosure Paneling



A lot of people building coreXY printers say their machine is "enclosed", but what they really mean is that it has side panels.  You'll see a lot of printer designs with pulleys and guide rails mounted directly on the top frame members, making full enclosure impossible without building a big box around the whole printer (like I did for my first printer, MegaMax).

You can't print ABS with just side panels.  ABS printing has to be done in a 45-50°C (or more) enclosure or prints will delaminate.  UMMD was designed from the start to be completely enclosed to allow printing with ABS filament.  Electronics and motors are located outside the enclosure because heat and electronics are a bad combo.

Rigid panels screwed to the sides of the printer can increase the frame's rigidity, but they also tend to increase the printer's weight, which can make transport a problem.  UMMD was going to be heavy enough without adding a bunch of relatively heavy panels to the enclosure.

My last printer, Son of MegaMax, used some PIR foam panels jam-fit into the frame, held in place only by the tightness of their fit.  It worked well, and was light weight, but the panels were easily damaged which didn't look especially nice, and they often came loose during transport.  I wanted something a little more secure and aesthetically pleasing.

I started looking for material that would provide thermal insulation and fit into the 8 mm wide slots in UMMD's frame.  I looked at doubling up coroplast in the slots which would provide thermal insulation, but it was a little too floppy and I wasn't sure how well it would hold up when exposed to 50°C inside the printer.  I discovered dual layer polycarbonate (DLPC) on a walk through a local home improvement store.  Greenhouses are often paneled with DLPC that allows light transmission and provides some thermal insulation.  It turns out the stuff is readily available in 8 mm thick sheets, which matches the width of the slots in the 40x40 mm frame members.  It is very light but very tough, and won't mind 50°C at all.

I spotted someone selling a 4' x 8' panel of 8 mm DLPC for $40 via Craig's List, so I bought it.  After the first piece was mounted in the frame I knew this was exactly what I wanted.  DLPC allows light into and out of the machine, and provides thermal insulation.  One thing I hadn't anticipated was the nice lighting effect produced by the multiple reflections of light off the PC panels.

Dual Layer PC panels mounted in the printer's frame reflect light adding a nice visual effect.  In this picture the UV LED bars are reflected in the back and side panels.  The PC panels also transmit a lot of the light so the room around the printer is bathed in a UV glow.
The printer has DLPC panels in the sides back and bottom.  The top of the printer is a 1/4" sheet of Sintra, a foamed PVC product, to which I have added some aluminum tubing stiffeners.  The front of the printer will have two access panels- an upper one to allow access to the XY mechanism and a lower one to allow access to the print.  The upper panel is 1/4" abrasion resistant polycarbonate and drops into the slots in the frame.

The upper front cover is 1/4" abrasion resistant PC that drops into the slots in the frame.  It has been notched for the belts and bolts.  The upper rear cover is DLPC that has been notched for the bolts in a similar way.

Since the DLPC panels are captive in the printer's frame, the only way I can access the back and sides of the printer's mechanism for service or modification is to lay the printer down, remove one of the aluminum frame members, then slide the DLPC panel out of the frame.  The corner bolsters on the sides of the printer add to the complexity of removing the side panels.  Fortunately, the way the printer is built, maintenance should be infrequent, and I can reach most of it through the easily opened front panels.  The DLPC panels are a loose fit in the slots and rattle if I tap on them with my fingers, but they don't make any noise when the machine is printing.

The bottom of the printer has two DLPC panels, one toward the front (top) and one toward the back of the printer.  There fit into the slots in the frame at the front and back and are also held in place by printed clips that snap (well, OK, pound) into the frame slots.
The top cover has to do several things.  It has to support the electronics and filament spool holder, provide thermal insulation, and hopefully look decent in the process.  It also has to allow access to the extruder carriage from the front and rear of the machine.  The upper-front cover is a piece of clear PC and the upper rear panel is a piece of the DLPC, the tops of which are cut flush with the top of the printer's frame.  Both fit into the vertical slots in the frame members.  I wanted to be able to close the printer for printing ABS, so the top cover had to fit over the top edges of those two panels, but allow for their easy removal.

I printed some long T-strips that fit into the slots in the top frame members and screwed the top cover to them, which can now can slide forward and backward, allowing the upper front and rear covers to be removed for extruder carriage access.  The top cover, and so the front and rear upper panels, and can be locked in place by two 5/16-18 screws at the top front corners.  Normally the screws will only be used when transporting the printer or leaving it set up as a demo at a MakerFaire.

I wanted to make the screws easy to place and remove by hand, so I designed some finials that would make that easy.

Finials were designed to be easy to remove for access to the printer mechanism.  The faces were extracted from a CT scan that was done on me in 2007. 
Here's what one of them looks like installed on the printer.  The green handle near the bottom is one of two that allow the clear PC panel to be lifted out of the frame without smudging it with fingerprints.



Lower Front Access Panel


The lower front access panel is a piece of 1/8" clear polycarbonate sheet, providing an unobstructed view of the print and mechanism.  It has a pair of handles with spacing to match the handles on the upper front cover panel and is attached to the printer's frame using "matched-pole" magnetic tape as was done for the side panels on SoM.  Three printed shelf pieces are screwed to the bottom front cross-bar of the printer's frame to assist in positioning the cover when replacing it.  There are printed hooks on the sides of the machine to hang the front panels when they aren't in use, which prevents them getting scratched up by leaning against whatever is nearby.



Here's the printer at the recent Milwaukee Maker Faire with the covers in place.  You can see the hooks on the sides to hang the front covers when they are not needed, the bottom shelf pieces, the green handles, and the magnetic strip surrounding the lower front access panel.
To remove the lower front panel, just pull the handles toward you and the magnetic tape lets go.  Replacing the cover is done by setting its bottom edge on the shelf pieces, then tilting the panel toward the printer.  Once the magnetic strips get close to each other the cover snaps into position.

I can print relatively small objects in ABS because the heat from the bed tends to accumulate at the top of the machine, but larger prints are going to require heating the enclosure.  I'll do a blog post on that when it's done.

Installing Electronics


For some reason, people tend to think of their printers in terms of the mechanical stuff and forget about the electronics until after the mechanical stuff is already built.  The result is an undersized frame and a struggle to shoehorn the electronics into it anywhere they can be made to fit.

Electronics can go inside or outside the printer's frame.  Putting it outside tends to increase the overall size of the printer, so many people put the electronics for their CoreXY printer (or any other type that has a bed moving in the Z axis) at the bottom of the machine, under the bed.  That helps make use of dead space inside the printer's frame.  If the machine sits on a desktop, this puts the electronics at an easily reachable height for wiring and repairs.

There are two potential problems with putting electronics inside the frame at the bottom of the machine.  If you need to service the electronics, you have to get the bed up and out of the way to do it.  If the drive to the Z motor isn't working and the bed is at the bottom of the Z axis, you've got a problem.  Also, if the enclosure is to be kept warm for printing materials like ABS, the heat will eventually cause problems for electronics mounted inside the enclosure.

Putting electronics inside the bottom of the enclosure in UMMD was out of the question from the start.  I could have used a drawer at the bottom of the printer, as I did for my last printer, Son of MegaMax, but that would have required very long cables to most of the electrical connections that are up near the top of the printer.  UMMD is tall and stands on the floor, just like me.  I hate bending over to work on things, and it hurts my back, so I planned to put the electronics at the top of the printer, outside the enclosure instead of at the bottom.  The worm gear drive in UMMD's Z axis guarantees that I can't manually move the bed up or down.  If the electronics aren't working, the only ways to move the bed are to manually loosen the grub screws on the drive pulleys or completely remove the bed and its support from the printer.  It just made more sense to put the electronics close to the XY stage.

More details about the electronics will be provided in another post, soon...

Here it is.

Tuesday, July 25, 2017

UMMD 3D Printer CoreXY Mechanism

CoreXY printing mechanisms are popular with people who have built 3D printers before but seem to intimidate noobs.  The mechanism is a little strange, most often compared to an etch-a-sketch.  The inventor of coreXY has a website that explains the origin and operation of the mechanism.

CoreXY: Kinematics for Personal Fabrication from Ilan Moyer on Vimeo.

Notice that both motors turn when the extruder moves in X alone or in Y alone.  When the extruder carriage moves at 45° or 135°, only one motor is turning and must supply all the torque required to move the entire X axis.  In coreXY machines, if the acceleration or jerk/junction deviation is set too high, layers start shifting when the printer starts laying down infill at 45° or 135°.

In a coreXY 3D printer, the extruder moves in X and Y and (usually) the bed moves in Z.  This has a few advantages over the much more common bed-moves-in-Y type architecture.  My last printer, Son of MegaMax (SoM) is a great example of the problems you can encounter in that architecture.

The bed is relatively massive, especially if it's well made.  Throwing it back and forth at print speed is difficult to do without creating defects in the prints.  In SoM, I had to resort to using a precision ground ball screw to move the Y axis, driven by a large motor with its own DSP driver and power supply.  Though it produces very high quality prints, it's noisy and slow, with print speed limited to about 40 mm/sec.  In this type of printer, if acceleration and or jerk/junction deviation are set too high, prints start shifting along the Y axis.

In a coreXY mechanism, there are two motors, designated 𝛼 and 𝛽, and two belts driving the X and Y motion.  The greatest moving mass is the Y axis which moves the entire X axis and extruder carriage.  That total moving mass is usually much lower than the mass of a print bed, so it is easier to keep it under control without resorting to special electronics and motors.  The motors are mounted on the printer's frame so they don't add to the moving mass.  With careful design you can minimize the remaining moving mass and produce a high speed printer.  The relatively massive bed (3.2 kg in UMMD) moves in Z which is typically very slow, so it's not too difficult to control it.

The main disadvantage of the coreXY mechanism is long belts and multiple pulleys.  Belts stretch and act like springs. The stretching under dynamic conditions can create print artifacts such as ringing.  More minor issues are connecting the cables and feeding filament to the extruder that moves quickly in two dimensions.

There are two common techniques for laying out the XY mechanism.  The first is to put both belts on the same vertical level - they run alongside each other.  This layout necessitates a twist in the belts where they have to cross each other.  The other technique, which I chose for UMMD, is to put the belts on two levels, one above the other.  That eliminates the need to cross and twist the belts, and allows the pulleys to be stacked, but creates another problem.

Belt layout used in UMMD.  Pulleys P1-P4 are marked in red, belt segments marked in blue and green correspond to  belts driven by motors also marked in blue and green.
If you push on a fence post near the bottom, it won't move much.  If you push on it near the top it usually bends over pretty easily.  That's the situation you have with a stacked-belt coreXY mechanism.  The tension on the belts puts a lot of lateral force on the pulleys' axles.  You have to build the mechanism very solidly to prevent the pulley's axles from tilting under the load produced by the belt tension.  Don't even consider standing up a bolt in a piece of printed plastic for a pulley axle!

In UMMD, that problem was solved by mounting the pulleys inside rectangular aluminum tubes with the axles passing through the tops and bottoms of the tubes.  The tubes have large surface areas that can be screwed down at multiple points, making for very rigid pulley mounts that don't visibly flex when subjected to belt tension force.

UMMD has 9 mm wide belts instead of the more common 6 mm wide belts because they will stretch less when subjected to the same forces.  That means the pulleys have to be wide enough for 9 mm belts.  Since I didn't intend to twist the belts, their teeth will be contacting the smooth pulley surfaces. Using too small diameter pulleys can create defects in the print surface.

The recommended minimum diameter for smooth pulleys contacting GT2 belt teeth is a diameter that is equivalent to a 40 tooth pulley.  The diameter of a 40 tooth pulley for GT2 belt is about 25 mm.  Pulleys for long belt runs also need flanges to help ensure that the belt stays on the pulley.

UMMD needed flanged pulleys at least 9 mm wide and about 25 mm in diameter.  After some searching I found that common F608zz bearings could be stacked to make a pulley that would meet almost all those criteria (actually the space for the belt is 11 mm wide).  They are 22 mm in diameter, so a little smaller than the recommended size.  I took a chance on them and they seem to be working just fine without producing any visible print defects.

P1 pulley assembly made from 2" square aluminum tubing.  This whole assembly rides on the right side Y axis bearing block.
P3 pulley assembly made from 2" square aluminum tubing.  This assembly is stood off the base plate by a printed red spacer.

P4 pulley assembly sits at the left rear corner of the printer.  Belt segment K rides on a pulley made from F6902zz bearings.


Motors and Mounts


I wanted to try 400 step/rev motors so I got the highest torque NEMA-17 size I could find, 64 oz-in. holding torque (about $15 each, IRIC).  I was pleasantly surprised to find that I can run the mechanism at over 150 mm/sec with acceleration at 1000 mm/sec² and it doesn't miss steps even when only one motor is moving the mechanism.  I haven't tried pushing it to its limits.  I routinely print at 100 mm/sec and get print quality almost as good at Son of MegaMax's at 40 mm/sec.

Both motors have 20 tooth drive pulleys and operate with 16:1 𝜇stepping.  That yields 160 𝜇steps per mm.

The motors, like the pulleys, are subjected to side loading due to belt tension.  That means the motor mounts have to be very solid or the motors will tilt.  Since the belts are stacked one above the other, the motors have to be offset vertically by the same distance as the belts.  Some provision has to be made for adjusting belt tension.

UMMD uses tubular aluminum motor mounts for the same reason tubing was used for the pulleys mounts.  Aluminum tubing is commonly available in 1/2" incremental sizes.  When you stack two pulleys made from F608zz bearings with a washer between them, the center of the pulleys are about 1/2" apart.  I found that I could use a 2" square piece of tubing for one motor mount and a 1 1/2" x 2" piece of tubing for the other, lining up perfectly with the other pulleys.  I allowed for adjusting belt tension by mounting the motor mounts on flat plates with slots.  Tensioning the belts is as easy as pulling on the motor mount then tightening the screws that hold it to the plate.  I extended the flat plates to mount the motors outside the printer's enclosure so they wouldn't get too hot.  The aluminum motor mounts help transfer heat out of the motors, too.  A win-win situation!

UMMD XY stage motor mounts.  The one on the left is 2" x 2" x 1/8" tubing.  The one on the right is 1.5" x 2" x 1/8" tubing.  Holes in the bottom are tapped for 10-32 screws and serve as tool access holes for mounting the motors.
"𝛼" motor mount made from aluminum tubing.  Slots in the base plate allow the mount to be shifted to tension the belt.  The "𝛽" motor mount is made from 2" x 2" tubing.
Underside of 𝛼 motor mount.  

Printed cover added to prevent pinched, curious fingers.  There is a complementary piece on the back of the mount that is slotted to allow the belt to pass through.  The two pieces are held in place with two screws.  A similar cover was added to the B motor mount.


Common Errors in CoreXY builds


There's one very common error in coreXY design and construction usually perpetrated by first-time coreXY builders.  If you look at the belt layout, you can divide the belts into segments at the motors and pulleys (see the first image, above).  Segments J, K, and M don't change length when the X or Y axes move.  Segments A-H all change length depending on the extruder carriage location and have to be made parallel to the guide rails or linear guides by careful positioning of the pulleys.  If segments A-H are not parallel to their respective guide rails, the belt tension will vary depending on the extruder's position.  In extreme cases, it can cause the belts to slip or even fall off the pulleys.  In less severe cases the prints will be distorted.  Here's an example of a coreXY design in which none of the belts are parallel to any of the guide rails.  Don't do that!  Here's another.  Can you spot the error?  Beware- Thingiverse is chock full of bad designs created by well-intentioned designers!

I wanted UMMD's coreXY stage to have very solid construction, independent of the rest of the printer's frame, so it was built on its own subframe of 40x40 mm aluminum t-slot extrusions with two 1/4" cast tooling plates on either side to mount the Y axis linear guides.  The plates were extended beyond the 40x40 frame for the motor mounts.  The 40x40 frame is bolted directly together with 5/16-18 button head cap screws, and the two side plates are bolted to that frame with 5/16" carriage bolts.

The Y axis uses two NSK LE-12, 24 mm wide x 8 mm high linear guides with one bearing block on each (purchased used, via ebay for $75 for the pair).  They are bolted to the flat plates using #6-32 screws with star lock washers and nuts.  The carriage bolts that secure the flat plates to the 40x40 frame serve as mechanical stops for the Y axis bearing blocks.  The Y axis blocks serve as bases for tubular pulley mounts which also provide a convenient mount for the X axis guide rail.

The X axis uses an IKO LWLF-24 linear guide with two bearing blocks (purchased as NOS via ebay for $30).  One bearing block is used for the extruder carriage and the other is used to attach the guide rail to the Y axis bearing block, allowing for thermal expansion of the printer's frame.

Early photo of the coreXY mechanism used in UMMD.  Only minor changes have been made since it was built.  There is a square 40x40 mm t-slot subframe with two 1/4" cast tooling plates.  The Y axis rails are NSK LE-12 and the X axis rail is an IKO LWLF-24, all of which are 24 mm wide and 8 mm thick.  Note the extra bearing block on the X axis (at the top of the picture) which allows for thermal expansion of the machine's frame.

When the printer is enclosed and heated for printing ABS, the aluminum frame will expand, but the steel linear guides will expand much less.  As the frame expands, the Y axis linear guides will move apart.  If the steel X axis guide rail is solidly bolted to the Y axis bearing blocks, when the Y axis guides start moving apart, the X axis will put huge side loads on those bearing blocks, possibly causing the mechanism to bind.  I addressed that potential problem by bolting the X axis rail to only one of the Y axis blocks via the pulley mount.  At the other end of the X axis I used a second X axis bearing block (at the top of the X axis in the photo above) to connect to the Y axis bearing block via the tubular pulley mount.  This allows the Y axis rails to move apart but fully constrains the X axis otherwise.  It seems to be working well.

I tested it as a plotter before I built the rest of the machine: 



Here's the mechanism mounted on the printer and running at 150 mm/sec:



First print:


Note: corners are lifting because I'm printing PLA without a print cooling fan that was added later.

Extruder Carriage


The extruder carriage design is under frequent revision.  It is made from- you guessed it- a piece if 2" square aluminum tubing.  I carved away a lot of material to make room for an E3D Titan extruder and v6 hot end.  It has been drilled full of holes to accommodate whatever I need to bolt on in the future.  Extending it downward isn't ideal in terms of mechanical performance- it would be better if the extruder nozzle were closer to the bearing block, but that was impossible with my XY stage and Z axis designs.  I have a CubeX Duo printer with a large extruder carriage and it's almost impossible to see what's happening at the nozzle, which I find very annoying.  This design allows for pretty good visibility, and I haven't been able to identify any print defects related to flex in the extruder carriage or play in the bearings.

The back of the extruder carriage showing the soon to be replaced print cooling fan and the X=0 switch.  Wires are held together with short pieces of velcro tape that can be reused over and over without leaving any sticky residue.


Front view of the extruder carriage.

The belt clamps are printed ABS, and self-locking.  The belts fold over on themselves, teeth to teeth which prevents the belt from pulling free of the block.  Details of the design can be seen here.  The width of the clamps matches the diameter of the pulleys at the ends of the X axis and spaced away from the X axis linear guide by the same amount as the pulleys, keeping belt segments C, D, E, and F parallel to the linear guide.  The belt clamps can fit inside the P1 and P2 pulley assemblies when the extruder carriage is at the extreme ends of the X axis.

Left side extruder carriage belt clamp- the right side is identical.  Belt segments D and F (and C and E on the right side) must be kept parallel to the X axis guide rail, so the clamp is 22 mm wide to match the diameter of the pulleys in the P1 (and P2) blocks.  The clamp is self-locking by folding the belt back on itself.

The extruder carriage belt clamps fit inside the pulley assemblies at both ends of the X axis without interfering with either the pulleys or the belts.


The extruder carriage wiring goes through a drag chain to the controller board.  One end of the drag chain anchors to a post on the extruder carriage and the other end to the left side of the printer's frame.

Limit switches


CAD software and slicers all use the standard right-hand rule coordinate space.  That means the printer must do the same or the prints will come out mirrored.  That means the printer's origin has to be at either the front left or right rear corner of the machine.

UMMD's XY origin is at the front left corner of the machine.  The Y limit switch is located on top of the P4 pulley assembly at the back of the machine (I know, the photo shows it on top of the P3 pulley assembly, but the picture is old), so it gets activated when the Y axis is away from the origin, therefore, the Y limit switch is at Ymax and the controller's firmware is configured to "home to max" in the Y axis.

I originally wanted to put the X axis limit switch on the machine's fame so I wouldn't have to run the wires to the extruder carriage, but couldn't come up with an acceptable way to do it that would work at all Y positions.  I ended up mounting the X limit switch on the back of the extruder carriage.  It bumps the Y axis linear guide mounting plate on the right side of the machine, again, away from the origin, so the firmware is configured to home to maximum in X also.

I could just call the right rear corner of the printer the origin, and call the switches X=0 and Y=0, and tell the firmware to home to minimum, but I use Slic3r a lot and it's default view assumes the origin is at the left front corner of the machine.  The way the switches and firmware are set up now, the print goes on the bed in exactly the same orientation you see when you slice it in Slic3r.  I like that.


Sunday, July 23, 2017

Saturday, July 22, 2017

UMMD Belt Lifted Z Axis Design, part 3

I decided that two equal length belts would be better than the single long belt.  The two belts will stretch equally, keeping the bed level under load.

Complete Z axis rev 3 design.

I put a longer shaft on the worm drive, added pillow block bearings and two 36 tooth drive pulleys to both ends of the drive shaft, finalized designs for the belt clamps and the Z=0 and Z max limit switches, and ran more tests.

Close-up CAD rendering of the bottom of the Z axis.  The switch on the left is the Z max limit switch that gets bumped by the belt clamp on the left side of the bed support.  Orange parts are printed in ABS.  This is not the final belt clamp design on the left side- a ramp was added to bump the roller on the Z max switch.

Belt Clamps


I experimented with different belt clamp designs as I developed the three different versions of the Z axis.  In the end it came down to a choice between two designs.

The first design used printed teeth to engage the belt's teeth.

The second design used a short segment of belt to engage the belt's teeth.
I tried pulling on the belts when they were inserted into the clamps and found that the first design tried to flex open much more than the second design, so I went with the second design, printed in ABS to withstand warm temperatures inside the printer.  Both clamps have metal plates preventing the belts from migrating out of their slots.

Z max Switch


I used an industrial surplus snap action switch that I found in a box at the makerspace and printed a mount using ABS.  It attaches to the frame using a single t-nut and can be moved up or down by sliding it into position in the slot in the frame.  It is positioned to stop the Z motor when the bed gets within about 1 mm of the bottom of the Z axis.

UMMD Zmax limit switch operation from Mark Rehorst on Vimeo.

Z=0 switch


The Z=0 switch determines how high the nozzle will be above the bed for that critical first layer.  There are two common methods for adjusting the Z=0 position.  First, oldest, and most common is a simple screw that bumps a switch telling the controller that the bed is at the Z=0 position.  More recently, the proliferation of poorly designed and built printers has been enabled by autoleveling that attempts to compensate for unflat, unlevel beds and automatically sets the Z=0 position.  Yuck!

The problem with the screw adjustment is that when you need to adjust the Z=0 position, the threads of the screws commonly used are much too coarse.  You might need to adjust the bed position by 50 um but the bed will move by 700-800 um per revolution of the screw.  That means small adjustments have to be made using tiny, fractional rotations that are hard to judge, usually resulting in overshoot.

That problem was fixed with a screw mount using a lever and cam that travels with the bed and bumps the switch mounted on the printer's frame.  The lever and cam provide about an 8:1 reduction in the motion of the screw, making a 50 um adjustment requires a 1/2 turn of the screw.  It is easy to make fine adjustments without overshooting your target.  The lever/cam turn on a bearing removed from a hard disk drive resulting in very high precision.

Z=0 switch action.  The screw pushes the lever, the cam bumps the switch, providing about 8:1 reduction in screw pitch.  The small square block is a magnet that keeps the lever in contact with the end of the screw.    The metal bracket screws to the right side Z axis belt clamp.
Here's what it looks like, all blue parts are printed ABS.





Fine Adjusting Z=0 Switch for 3D Printer from Mark Rehorst on Vimeo.


Top End of the Z Axis

The pulley plates at to top of the Z axis were reused from the rev 2 design.  Two 5/6-18 carriage bolts hold the 1/4" aluminum plate just above the ends of the linear guides.  The pulley, a pair of stacked F608zz bearings are screwed to the plate using a shoulder screw and a couple nylon washers as spacers.  The bed support shelves are cut from 1/4" thick aluminum L stock and are screwed directly to the bearing blocks on the linear guides.  I originally tried 1/8" thick L stock but found it too flexible- when I had to apply some force to remove prints the bed moved more than I liked (it would probably be OK when printing, the movement just bothered me).  The left side belt clamp is sandwiched between an aluminum plate (barely visible in the photo) and the bed support shelf.  The aluminum plate covers the belt slot in the clamp and prevents the belt from exiting the clamp.

Top of the Z axis on the left side.  The bed support shelf is cut from 1/4" thick aluminum angle stock.  The belt clamp is printed ABS.  The pulley is two stacked F608zz bearings mounted on a 1/4" thick aluminum plate using a shoulder screw.  the belt clamp has a ramp that bumps the roller on the Z max switch at the bottom of the Z axis.

The right side is almost the mirror image of the left side, except that the belt clamp is sandwiched between the Z=0 switch bracket and the bed support shelf.  You can see that assembly better in the video, above than in the photo, below.

Top of the Z axis on the right side.  The Z=0 adjuster screw mounts on a piece of angle stock that holds the belt clamp on the bed support shelf.

Belt Stretch


A lot of people won't use belts to lift the Z axis because they worry about the effect of belt stretch on the print quality and accuracy.  I was a little concerned, too, until I did some tests and calculations.

Z axis rev 3, bed loaded with 4 kg to measure belt stretch.
When I tested the Z axis rev 2 under load, the belt stretched 128 um/kg of load.  Rev 3, with shorter, equal length belts stretches about 42 um/kg, a 3X improvement.

But what about that 42 um stretch?  If you're printing in 250 um layers, that's 16% of a layer thickness.  That's got to have some effect on the print quality, doesn't it?

Nope.  None at all.  That stretch doesn't get applied per layer, it is applied per kg of print mass.


So the absolute worst case stretch in any one print layer will be 1.18 um (how often do you cover the entire bed surface with plastic?).  That error is so small it will be masked by other, much greater errors such as the variation in filament diameter, frame and guide rail flex, and other imperfections in the printer mechanism.  Assuming everything else is perfect, that single layer will start out 250 um thick and will end 251.18 um thick.  As the print mass grows the errors will accumulate and a 1 kg print will theoretically be 42 um taller than the design size.  If you need to worry about an extra 42 um of height in a 1 kg print, you shouldn't be using a 3D printer to make whatever it is you're making!

TLDR: belt stretch in this belt lifted Z axis doesn't matter, and it's hard to imagine a design where it would.

Final note:  the drive pulleys and pulleys at the top of the Z axis are carefully positioned so that the belts run parallel to the Z axis guide rails.

Cost


I never priced out a double or triple lead screw version of the Z axis, but here are the prices I paid for the parts to make this one.

ebay (prices include shipping):

F608zz bearings - 10 for $7 (2 used)
8 mm shoulder screws - 10 for $15.02 (2 used)
30" THK linear guides with bearing blocks- 2 for $110
Rino worm drive with motor - $ 116.15 (1 used)
600 mm long keyed shaft for Rino - $31.60
pillow block bearings for Rino shaft- 2 for $12 (2 used)
36 tooth HTD-3M drive pulleys, 2 @ $15.77 each (2 used)
HTD-3M steel core belt $23 (for 5m, ~3.5 m used)

locally obtained stuff:

Misc. bits of 1/4" tooling plate @ $2/lb, maybe 2-3 lbs used.
5/16-18 carriage bolts/nuts $1 per lb
3"x3"x 1/4" aluminum L stock x 7" long - makerspace.
40x40 mm t-slot @ $1 per lb, probably 8-10 lbs used for Z, total
locktite $4
8mm nylon washers - 4 used, my junk box
misc screws, washers, etc.