Showing posts with label 3D printer. Show all posts
Showing posts with label 3D printer. Show all posts

Monday, January 26, 2026

A New 3D Printer- Bambu Lab H2C

UMMD is still a great printer 9 years after I built it, but its 1mm nozzle makes it unsuitable for printing small, detailed objects, which I need to do more often than printing large objects. I could swap the nozzle for a smaller one, but then I'd have to go through the whole recalibration process, and the next time I want to print something big, I'd have to swap it again and recalibrate again. Ugh!

After surveying recent 3D printer offerings, and making a couple prints for the Arrakis 3.0 sand table on Bambu Lab machines at the Milwaukee Makerspace, I bought the Bambu Lab H2C that came with the AMS 2 Pro four filament dryer/feeder, and added the AMS HT filament dryer, several spools of filament, the engineering build plate, and the vision encoder plate.



Bambu Lab H2C with AMS HT and AMS 2 Pro filament feeders/dryers. There's a nice touch screen color display for local control, or you can control the printer from the wifi connected slicer, Bambu Studio. One especially nice feature is that the display shows a render of the file to be printed or that is printing.


The H2C/AMS 2/AMS HT has some interesting features. 

The vision encoder plate works with the toolhead camera to check and adjust squareness of XY motion.

3 cameras- one to monitor the print process and make timelapse videos, and two mounted on the toolhead to spot errors like layer shifts, spaghetti, etc., and to align the nozzles of the extruders, and XY motion.

Vibration compensation- at the start of each print, the machine vibrates the toolhead and print bed and automatically compensates for resonances, maintaining high print quality. The vibration is a little noisy.

Vortek hotend swapping system- a motorized rack that holds 6 induction heated nozzles. To be honest, I'm not so sure about the reliability of this system. Time will tell. Reviews I have seen that include prints having thousands of nozzle swaps indicate that it is reliable. The idea behind it is that you assign specific filaments in the AMS 2 Pro to specific nozzles, so during a multicolor print, there's no purge waste. Swapping the hotends reduces filament waste compared to swapping filament using a single or dual extruder alone, but it wastes a little bit more filament than a printer with multiple toolheads, such as the Prusa XL or the Snap Maker U1.




Induction heater for the right side extruder- the extruder that swaps hotends uses induction heating to bring the hotend up to print temperature in about 8 seconds. You'd think that would make swapping nozzles really fast, but cutting, retracting, and loading filament with the AMS take a lot longer. Using induction heating allows wireless operation of the hotends, which simplifies wiring going to the toolhead, and that bodes well for reliability.

Automatic venting/filtering of enclosure air- There's a HEPA filter, fan, and automatic vents that work to reduce VOCs and particles from some filaments. I have noticed that I still smell ABS when it is printing.

Automatic bed leveling (I know, they all do that these days). This is a particularly interesting topic to me as I spent a lot of time developing kinematic mounts for my printer's beds so that they wouldn't have to be leveled (trammed) before every print. In fact, I haven't trammed UMMD's bed in at least 2 years. In the H2C the bed is lifted using 3 screws all driven by one motor and a belt, however, the bed is leveled (trammed) using 4 corner screws (whaaaat? That's so 2012!) and is then secured by tightening some screws in slots on the side of the bed assembly. When a print starts the toolhead probes the bed in several places and makes a map of the variations in bed height. It can't physically adjust the bed tram- that would take three Z axis motors- so it just tweaks the Z axis position/extrusion during printing, based on the height map, probably just for the first few layers. It seems to work OK, as it was able to map the factory trammed bed right out of the box, without retramming.

The AMS HT and AMS 2 Pro are both capable of drying filaments and storing them in (almost) air tight enclosures and feeding the filament to the printer. The AMS HT can get up to 85C, while the AMS 2 Pro is limited to 65C, so the HT is good for drying filaments like ABS, nylon, and PC. Both units report temperature and humidity to Bambu Studio, and the HT displays them on the front of the unit. You have to periodically replace desiccant packs in the AMS units to keep them drying filament properly.

Bambu Lab filament spools come with an attached RFID tag. The AMS 2 Pro and HT both have RFID chip readers that will automatically configure the printer for the filaments in the AMS units, if they are Bambu Lab filaments. The RFID tag also allows the printer to monitor the quantity of filament left on each spool and communicates it to the slicer (Bambu Studio) so you won't run out mid print. The spools are perforated to expose more of the filament to the warm air when drying. You don't have to use Bambu Lab filament with the RFID tags, but then you'll have manually assign filaments to hotends, and watch the quantity of filament on the spools yourself.

When a print is started, the printer goes through a list of about 10 calibrations and adjustments before it actually starts printing. If you print a material that requires chamber heating, it can take 20 minutes before the printing actually starts after you hit the print button.

The filament swapping process, and several of the preparation steps before a print starts, move the toolhead back and forth which flips out the filament cutter levers located on the right and left sides of the printer, making a clunking sound each time it does. The vibration compensation, which causes the toolhead and the bed to vibrate for a few seconds at the start of each print, is also a little noisy. 

Swapping hotends/filaments can take 30 to 45 seconds, depending on the length of the PTFE tube between the AMS and the printer, which can add significantly to the print time if there are a lot of color swaps in the print. If you're printing 4 colors on each print layer, that's 4 filament swaps, adding a few minutes to each layer, even if the actual printing takes only 30 seconds or so for that layer. Multiply that by the total number of layers and you'll see that multicolor printing can be a time consuming process on this printer. It's best to keep the PTFE tube between the AMS and the printer as short as possible.

I have only made a few prints so far, using both PETG and ABS filament spools that I had in stock (not using the Bambu Lab spools yet), after drying the spools in the AMS units. The prints have been as close to perfect as any I have ever seen. There are no VFAs, nearly zero stringing in PETG prints, no warping, delamination, or lifting from the bed with ABS prints. The only defect I had was two different colors of PETG not bonding to each other completely in one print. 

The only real print defect I had among the prints I have done so far. This was easily repaired with a couple drops of ethyl acetate to solvent weld the unbonded joint. this was my second multicolor print, so go easy on me. There is a calibration to run that should prevent this sort of thing, but I didn't have the recommended filament colors for it, so I have not run it yet.

The printer has a USB A port on the top front left corner of the box that you can use to load/store print files, and store timelapse videos, which the printer will make either as a fixed time interval per image or a series of images made each time the print layer changes, with the extruder moved away from the print. The latter wastes some filament as the extruder has to be "repressurized" after each layer change. Time lapse video is turned on/off in Bambu Studio or at the local control screen on the printer. FAT-32 is the preferred thumb drive format. For drives >2 TB, it wants exFAT. Bambu Lab sells an inexpensive add-on kit to trigger an external camera to make timelapse videos.

There is a setting in BS that allows a spool of filament in the AMS 2 Pro to serve as a back-up, so if you have a little filament left on a spool and a fresh spool of the same filament, you can start the print with the almost-empty spool and the new spool will take over when the first one runs out. You can merge 2, 3, or 4 filaments in one AMS 2, so theoretically, could make a 4 kg print using a single AMS 2 Pro.


Filaments can be merged manually in BS using these selections. If two filaments are the same material and color there is another setting that allows the printer to merge them automatically. This looks like a good way to use up the remnants of multiple spools of filament.


I haven't tried TPU on this printer yet, but I did on a P1S at the makerspace and it came out horribly under extruded. I have read that the PTFE extruder feed tubes create too much friction with the filament and the result can be uneven filament feed resulting in poor print quality. However, you can bypass the PTFE tube and feed the filament straight into the extruder (as UMMD does) by making a bracket to support the filament spool over the open top of the printer. I have also read it's a good idea to reduce the maximum volumetric extrusion rate and print speed. I will be making such a bracket because I like to print TPU parts. TPU's toughness and flexibility are very useful properties. 


One of the first PETG prints I made on the H2C. All surfaces are as close to perfect as I have ever seen, and there were only a few hairs. 


The top of the tubes. Excellent print quality.


My first multicolor print, all PETG. This is a comb to smooth out the sand in the Arrakis 3.0 sand table. This print came out perfect. I later printed a similar comb for Arrakis 2.0 and had a problem with two of the colors not bonding.


I printed this 100 mm threaded (M100 x 6 mm from F360) cylindrical box and cover to check the roundness of circular prints. I had to print the cover twice in order to get it to fit right. I reduced the top and bottom surfaces of the threads in the cover by 0.1 mm each to make it fit. It seems as circular as can be. The printer had no trouble with printing the overhanging threads without any support material.


This is what the threads looked like in F360. The tips of the threads have plenty of clearance, but the upper and lower faces are too close together. I moved the upper and lower faces on the cover threads by 0.1 mm to loosen things up enough to screw the two pieces together.





A large, transparent ABS print in the H2C. No warping, no delamination, and the whole thing stayed stuck to the bed throughout the 8 hour printing process. The walls are 3 lines thick (1.26 mm) everywhere. This is a spool of filament I opened about 2 years ago, and dried in the AMS HT for 8 hours prior to printing. The surface shows some irregularities, but they are primarily optical effects from using transparent filament. The surface feels very smooth.


Ms. Kitty has no complaints about the print quality, either.




Monday, December 5, 2022

Some minor updates to UMMD

Several months ago I noticed that the white overhead lights in UMMD were flickering. It wasn't a high priority so I let it go for a while. I recently got the urge to fix it, hopefully permanently, so I ordered some 12V LED bars to replace the old 24V LED strips that were in there.

The old LED strips, looking up at the "ceiling" in the printer; some dead LEDs, and some flickering. The front of the printer is at the bottom. The aluminum bracket with green clips is the top-down UV lighting.


I found some 12V, 6000K LED bars at amazon and ordered them, pulled the old white LED strips off the ceiling, and installed the new LED bars. I used some Wago lever nuts to connect the bars together and to 12V.

The new 12V LED bars came with mounting hardware. They are good for about 3W each.


The new LED bars installed in the printer. 

One thing I didn't like too much about the printer was the way I had to cut notches in the upper front cover to accommodate the XY stage belts because the motors are mounted outside the printer enclosure. I always thought it looked sort of ugly. I thought about it a little and realized I could just print some pieces to fit on the frame, then cut nice square notches in the front cover and it would probably look nicer, and might even seal a little better to keep the heat inside the enclosure.

Here's the B motor with notches cut in the front cover for the belt and the bolts that hold the XY stage together.

I got to work in Fusion360 and came up with two parts to print that look a little neater. I thought about printing a single piece to fit across the width of the front panel, but realized that unless I printed it vertically, the bed wasn't big enough to make it as a single piece. So I split it into two pieces.

The new print (yellow) at the A motor. There's a rectangular hole through the print for the belt, and a 5mm deep groove on the top and side to accommodate the front cover. There are also holes in the print to cover the two bolts that stick up. The front cover now has clean, rectangular cutouts on the two sides. The printed parts are held in place by tangs that fit into the t-slot on the left and right side and t-nuts and screws on the bottom.


That's it. No big deal.





Thursday, April 23, 2020

Fancy, No-Hack, Layer-Synchronized Time Lapse Videos of 3D Prints

A while back I wrote up the method I use to monitor 3D prints and even make time lapse videos. I use an old cell phone with a cracked screen and an Android app called Open Camera to snap pictures at specified intervals. Google Photos backs up the images as they are snapped so they can be viewed on any web browser. When the print is done I batch scale and crop the pictures in Irfanview, and finally turn them into a timelapse movie using ImageJ.

Since the Open Camera app is snapping pictures based on time interval, the extruder carriage appears to bounce around all over the place while the movie plays. I use lift-on-retract, so the bed bounces up and down in the video, too, like this:




If you want to snap a picture without the extruder somewhere over the print, you need to do two things- move the extruder carriage away from the print and then trigger the camera. Moving the extruder away from the print is easy- use some custom layer-change gcode in the slicer. If you trigger the camera immediately before or immediately after a layer change, the bed will not bounce in the video. The trick is in triggering the camera once the extruder gets to wherever you send it.


If you're using a phone (or some SLR cameras) to take the pictures, the semi obvious answer to triggering the camera is bluetooth. A couple years ago I got a free selfie-stick (remember those?) with a little Mooni handheld bluetooth button to trigger a cell phone camera. I didn't think much of it at the time and it ended up sitting in a drawer for the last couple years. But now I have a use for it! If you do a search for "bluetooth camera shutter button" you'll find dozens of similar things available from $5-20.


I continue to use Open Camera, even though layer synchronized time lapse doesn't need its intervalometer function, because it has both exposure and focus lock capability, not found in the native Android camera app in my Droid Turbo. In the video above, I did not set the focus lock and you can see the focus changing throughout the video, mostly depending on where the extruder carriage was in the frame when each picture was captured.



Three Steps to Success


Step 1:  Make sure your bluetooth button works with Open Camera on your phone/camera. I paired the button with the phone, started Open Camera, and pushed the button.  It worked!  That was easy.


Step 2: Figure out how to drive the bluetooth button device from the printer's controller. 


I recently posted about the very high precision of optical endstops and wondered about applications for rehoming the extruder at every layer change.  Maybe you could wipe the nozzle clean, detect layer shifting, etc.  Now there's one more use- trigger a camera so you can make fancy time lapse videos in which the print appears to grow out of the print bed with the extruder nowhere near the print.


I thought about chopping into the bluetooth button's PCB to add some wires but then I had to figure out how to get a signal out of the controller on every layer change, after the extruder was moved away from the print.


Then it occurred to me that there's a much easier way to go - just mount the bluetooth button in a location where the printer mechanism can push it.  No weird configuration in the controller and no wiring hacks needed, just send the mechanism to the button using custom gcode on layer change in the slicer. It can, but doesn't have to be, the home position.

Step 3: Figure out the best place to mount the bluetooth button on the printer and how it will get pushed. I designed and printed a bracket to hold the bluetooth button on the right side Y axis corner pulley block, and a corresponding "bumper" on the right side X axis pulley block. The bumper has a screw adjustment to set the Y position where the button gets pushed over a few mm range. In operation, at every layer change, I'll move the extruder to a specific X coordinate, then home the Y axis. When Y hit's home, it will also push the button and snap a picture.


It took a couple quick test prints to get the shape and size of the bracket to fit the bluetooth button, but once it fit, I finished the bracket design and printed it.  Simple!  Here's the Fusion360 model of the Mooni button and the slot that holds it. You'll have to add whatever it's going to take to mount it on your printer.


Mooni bluetooth button mount and pusher mounted in UMMD.  The Mooni button just drops in the slot.



Custom GCODE


I can send the extruder to any X ordinate (left-right) because it has nothing to do with pushing the button to make the photo sequence, but the extruder has to go to the back of the printer (Y=150), which means sending the entire X axis back there, in order to push the button. I could just move the extruder to the back of the printer without sending it to a specific X ordinate, but then it would be bouncing back and forth at the rear of the printer in the timelapse videos. I decided it would be best to send the extruder to the center of the X axis (X=0 in UMMD) to minimize the time it spends traveling, and so minimize print quality issues because of the relatively long time the extruder spends away from the print.  It also makes for nice symmetry in the photos and finished time lapse video, and my brain likes symmetry.

I created a custom printer profile (called "UMMD TL") in PrusaSlicer for making these movies that includes this custom gcode in the "after layer change" box:

G01 X00.00 Y145.00 F9000        ; go to (0,145) at 150 mm/sec
G01 Y150.00 F1200       ; go to (0,150) at 20 mm/sec and push the button
G04 P200                       ;  hold button for 200 ms
G01 Y145.00 F1200       ; back off the button
G04 S1.2                           ; wait 1.2 seconds for the picture to be taken
G01 F9000                     ; go back to the print at 150 mm/sec

If your printer's origin is located elsewhere, just set up the appropriate coordinates.  The 2 second delay is there because there seems to be a lot of variability in the time between pushing the button and actually snapping the picture. 

Note: I didn't use a G28 Y command to home the Y axis because that calls the Y homing macro in RepRap Firmware which moves quickly to the home position, then backs up and then slowly moves to home again. I didn't want that type of behavior for this.

As you will see in the layer synchronized time lapse video, below, moving the nozzle away from the print for a few seconds leads to some blobbing at the start of the new layer. The retract and unretract settings in the custom printer profile have to be tweaked to eliminate that problem.


Other Considerations


Making pictures this way adds a total of 3 seconds per layer. If the print is 100 mm tall and made of 500 layers, it will add 1500 seconds, or about 25 minutes to the print time. The time taken to snap a picture will depend on how large the print is, where it's located on the bed, and how fast you can move the extruder carriage out of the way to take the pictures.

The Mooni bluetooth button shuts itself off after 10 minutes of no activity, so if any of your print layers take 10 minutes or more (this is most common when doing solid fill layers at the bottom and top of a print) you may have to babysit it to push the button manually on each of those layers to keep the bluetooth button awake. Unfortunately that type of information isn't usually provided in the instruction sheet for these devices.

The Mooni button is powered by a CR2032 coin cell. I don't yet know how long it will last- so far I've got about 40 hours on one battery and it is still going. If you're making a super long print, you might want to put a fresh battery in the bluetooth button to ensure that it will last for the duration of the print. 

When you move the extruder away from the print, you want it to do so after the filament retracts (that's why the custom gcode goes in the "after layer change" box).

Open Camera allows you to select the resolution of the pictures right up to the maximum that the phone is capable of. That means you can see details in the print, which can be very useful. It also allows you to crop to a specific area of the still images to make your time lapse video. But, you have to be careful about selecting the resolution. If Open Camera runs out of memory to store the pictures, it stops making them. So do a little math- if your phone has 8GB of memory available, and your pictures are 15 MB each, you'll only be able to make about 500 images before the memory fills up. The same is true of Google Photos- the space to store images is limited by your account with Google. Choose a resolution to ensure that the phone/Google Photos won't run out of space before the print finishes.






Operation


When it's time to make a time lapse movie of a print, I slice using the custom time lapse printer profile, connect the bluetooth button to the phone, slide the button down into the bracket, mount the phone on the printer, start Open Camera, lock the focus and exposure, and start the print. At every layer change, the extruder goes to (0,150) which is the rear of the printer at the center of the X axis. When the Y axis reaches 150, it pushes the button and snaps a picture. Printing then resumes.


When I'm not making a layer synchronized time lapse movie, I just slice with a "normal" printer profile and leave the Mooni button out of the bracket. The screw that bumps the button has nothing to bump so everything behaves normally.

The Mooni button doesn't seem to mind the 50C enclosure temperature when I'm printing ABS.



Making a Movie From an Image Sequence


Once I have a sequence of images in the phone/camera, I copy them to a folder in my PC and use Irfanview (free) to batch process the images- crop, resize, color correct, rotate, etc., in one operation. Finally, Import the image sequence to imageJ (free) and Save As an avi file. That's it!


The Result


Here's an example of a layer synchronized time lapse video made using this setup:
As you can see, there's some interesting looking blobbing taking place at the back of the print.  I need to tweak the extruder retract and unretact settings to eliminate that.

You can expect to see more of these videos in future blog posts.

The user manual for the Mooni button is here.

Sunday, March 29, 2020

Testing UMMD's New Z Axis Optical Endstop and Differential Screw Adjuster

I recently posted about the optical endstops in put into the X and Y axes and a couple prints that I ran to test them. I also installed an optical endstop in the Z axis, and now it's time to test it.


Two Tests


The new Z axis optical endstop is a unique design that uses a differential screw to enable fine adjustment of the bed position. I devised and ran two tests to see how well it performs.


The first test is simply to check the precision, meaning the repeatability, of the optical endstop. I wanted to know if the bed goes to the same position every time it is homed and if it doesn't, how much the position varies.


The second test is of the differential screw mechanism. It is designed to move the bed 100 um for each full turn of the thumbwheel adjuster over a 2 mm range. The thumbwheel has 10 bumps on it, so if the screw behaves perfectly, each bump represents a 10 um movement of the home position of the bed.  I wanted to find out how accurate it is.



Test 1: Precision of the Endstop


I tested the X and Y endstop precision by running two identical prints, one homed only at the start of the print, and the other rehomed at each layer change. If the precision were poor, the layers of the rehomed print would not stack on each other very well and the print quality would be bad. The result of that test was nearly identical prints indicating that the precision of the X and Y endstops is very high. I expected no less from the Z axis endstop.


For the Z axis homing precision test I mounted a gauge on the printer's frame and moved the endstop down the frame so the print bed wouldn't smash the gauge, then homed the bed, zeroed the gauge, and then moved the bed down different distances and rehomed the bed, checking the home position each time.


Here's video of the test:




As you can see, 8 out of 10 times, the gauge went right back to 0.00 mm, and the other 2 out of 10 times it went to 0.01 mm. That is the excellent performance I expected.


My gauge has a basic accuracy spec of 0.03 mm and a precision spec of 0.01 mm.  Assuming those specs are to be believed, the readings made are at the limit of the gauge's ability to differentiate the position of the bed. 


Test 2 : Accuracy of the Differential Screw Adjuster


For this test, I positioned the endstop and backed out the adjuster screw, homed the bed, zeroed the gauge, then turned the adjuster one full turn and rehomed the bed multiple times.  Each full turn of the adjuster should move the bed 100 um. The thumbwheel on the adjuster screw has 10 bumps, one of them proud of the surface so it is easy to tell when the screw has made a full turn.



This is the differential screw adjuster and optical endstop.  Notice the one tall bump on the thumbwheel that makes it easy to index the amount of rotation applied.


Here is video of that test:



03290007 from Mark Rehorst on Vimeo.



As you can see, when I turn the screw one full turn the home position of the bed moves by about 100 um. I used an ordinary M5 screw that I modified using a lathe and a standard M4 die to cut new threads. The thread pitch probably varies slightly in both the M5x0.8 and M4x0.7 portions of the screw, and the printed plastic parts flex a bit whenever I adjust the screw, which explains the not exactly 100 um behavior, so I am pleased with the result. This makes small adjustments to the bed position very easy compared to trying to do the same with an ordinary M4 or M5 screw that would move the bed 700 or 800 um per turn.


A couple people have suggested that a differential screw would be a great way to move the levelers of a kinematic printbed mount.  You usually have to make very fine adjustments there to tram the bed to the printer's X and Y axes.

Sunday, March 22, 2020

Testing UMMD's XY Optical Endstops

Something Strange


We had a MarkForged printer demo at the Milwaukee Makerspace last year.  The print they demoed had the extruder rehoming in X and Y at every layer. I noticed that the machine had optical endstops and that the print quality was very good, even with re-homing, something I would not have expected.

I'm not sure why they would re-home at every layer change. Unless the printer skips steps during printing, which should never happen in a well adjusted and configured printer, there should be no need to re-home between layers. Maybe it has something to do with the cost of their filament. Re-homing might save having to print sacrificial objects when they are small and you want to maintain print quality. Re-homing between layers would slow down the process and allow the print to cool between layers.

I never tried re-homing when UMMD had snap-switch endstops- it seemed likely to result in poor print quality because I would not expect the snap-switches to be especially precise.  Errors as small as a few 10s of microns should be pretty obvious in print surfaces.


New Endstops, New Tests


I recently converted UMMD from snap-switches to optical endstops, mostly because they light up when the endstop has been triggered and I like not having to look at the controller when I'm setting up the machine. I also expected that they would be higher precision than the snap switches- they certainly have much lower hysteresis.  

Today I tested that idea by copying the MarkForged technique. I set up two identical prints, one that homes the machine only at the start of the print and the other homing at every layer change (in PrusaSlicer, go to Printer Settings > Custom G-Code > After Layer Change G-Code and enter G28 X Y which re-homes the X and Y axes after the bed drops for a layer change).


UMMD test print- rehoming X and Y with each layer change from Mark Rehorst on Vimeo.

I ran the prints and to my great surprise, they came out essentially identical.  There's just a tiny bit of stringing in the print that re-homes at every layer, otherwise, they look identical.  See for yourself:

First, the standard prints:






Now the prints that were re-homed at every layer change:






This makes me wish I had tested re-homing when UMMD still had snap-switch endstops.

The standard print took about an hour and the re-homed print took 1:42, a drastic increase in the print time.  Needless to say, I won't be using this technique all the time, but I might try it the next time I need to print some very small parts that would ordinarily require printing multiple copies and/or a sacrificial object.

This type of precision would allow restarting an interrupted print, assuming you could somehow store the XY coordinates of the fail point.


UPDATE 3/26/20


I did some digging at the MarkForged website and found this: https://support.markforged.com/hc/en-us/articles/208342623-Dislocation
"The Mark Two is capable of detecting dislocations and will stop itself from wasting material or potentially damaging itself by aborting a dislocated print."

This leads me to believe that the re-homing on each layer may be done for the purpose of detecting a shifted print. The controller always knows the coordinates of the extruder carriage, assuming everything is working normally. So if it re-homes, it knows exactly how far the X and Y axes have to go to bump the endstops. If it moves the extruder carriage toward the endstops and one of them triggers early or late, the extruder carriage did not end the last layer where it was supposed to, meaning that the print has shifted and it's time to stop printing.  

The cost for the hardware to implement this is miniscule- my endstops cost about $3 each. The real cost is the increased print time required to do all that re-homing. If you assume re-homing adds about 20 seconds per layer, and there are 5 layers per mm, that's about 100 seconds per mm height of the print.  If your print is 150 mm tall, that's 15,000 seconds added, or about 4 hours and 10 minutes!  Ouch!

If you were printing expensive materials, like MarkForged's carbon fiber stuff, or PEEK, etc., it might be worth the extra time to ensure that material doesn't get wasted on shifted prints.

I hope that the feature can be turned off...

... or maybe I'm wrong and that isn't the purpose of rehoming at every layer...


Coming soon: test Z-axis precision with the new optical endstop.

Note: the photos were taken with my Samsung NX500 camera and a Canon New FD 50mm macro lens and adapter.

Sunday, March 8, 2020

A Differential Screw Based Z Axis Optical Endstop Design for UMMD

The Old Z Axis Endstop


I'm kind of old-school in my printer designs. I like things to be as close mechanically perfect as I can figure out how to make them, instead of putting sensors everywhere and hoping the controller's firmware can compensate for poor materials or construction.  If you've followed any of my blog posts on UMMD you'll know I prefer to use a flat print bed, accurately trammed instead of putting a bed sensor on the extruder carriage.  I also prefer to use endstop switches in all axes.


When I built UMMD one of the things I put some extra effort into was a finely adjustable Z=0 endstop.  I used a lever and cam to effectively reduce the adjusting screw movement to approximately 100 um per rev of the screw. It has worked well and reliably for a few years but during recent work on the machine I noticed some things I didn't like, leading me to redesign the whole thing.





The main problem is that the switch is mounted solidly on the frame of the printer and the adjuster/lever/cam are mounted solidly on the moving part of the Z axis.  Over the last few years as I've swapped out hot-ends and extruders, changed a few things in the Z axis, and rezeroed the bed a number of times, the adjuster has crashed into the switch a few times.  The result is that the switch has put some dents in the cam so adjustment isn't as smooth and reliable as it was when the whole thing was new.



This is the lever/cam assembly that used to bump the microswitch.  It has become a problem to set the Z=0 position because the dents in the cam no longer trigger the switch the way the smooth surface used to.


I could print a new lever and cam but that wouldn't prevent the problem from happening again, and making it out of metal seems like a lot of trouble.  The way the switch is mounted is a big part of the problem.  It should not be set in opposition to the motion of the Z axis.  After changing to optical endstops in the X and Y axes, I decided to do the same in Z with the intention of mounting the endstop so that if the bed moves up beyond the endstop it won't damage anything.


I could just mount the switch on a spring that would allow it to move a bit if the cam bangs into it too hard, but there are other considerations as well. The original lever and cam design worked pretty well, but it wasn't really linear so I could never be sure of the exact amount of movement I was getting when I turned the adjuster screw.  I wanted to get 100 um per rev of the adjuster screw so that I could accurately move the bed in small amounts like 20-50 um.  I decided to look for an alternative and discovered something called a "differential screw".



How It Works


There are different ways to implement a differential screw.  The one I chose has two different thread pitches along its length.  One end of the screw turns in a fixed nut, the other is in a sliding nut.  If you turn the screw clockwise, it moves into/through the fixed nut and into/through the sliding nut.  The net movement of the sliding nut is the difference between the two pitches.  The sliding nut movement is in the direction of the screw movement if the larger pitch screw is the one threaded through the fixed nut.


This video illustrates the concept:




A more compact approach is to have a screw inside a threaded tube that has one pitch on the inside and a different pitch on the outside.  Like this:





If you have deep pockets you can buy off-the-shelf differential screws from specialty mechanical parts companies. Beware the ~$20 "differential screw micrometers" being sold on ebay.  They appear to be simple 0.5 mm pitch screws with a nice knob.  I don't have the deep pockets for a real differential screw, and since I wanted 0.1 mm per turn of the screw, I looked for standard screws that had 0.1 mm difference in their pitches.  A look at a metric thread pitch table reveals multiple possibilities.

Size - Nominal Diameter
(mm)
Pitch1)
(mm)
Clearance Drill
(mm)
Tap Drill
(mm)
Tensile Stress Area
(mm)
M 1.60.351.81.25
M 20.402.41.60
M 2.50.452.902.00
M 30.503.402.50
M 3.50.603.902.90
M 40.704.503.308.78
M 50.805.504.2014.2
M 61.006.605.0020.1
M 81.259.006.8036.6
M 101.5012.008.5058.0
M 121.7514.0010.2084.3
M 142.0016.0012.00
M 162.0018.0014.00157
M 202.5022.0017.50245
M 222.5025.0019.50
M 243.0027.0021.00353
M 273.0030.0024.00
M 303.5033.0026.50561
M 364.0040.0032.00817
M 424.5046.0037.501120
M 485.0053.0043.001470
M 565.5062.0050.502030
M 646.0070.0058.002680
M 686.0074.0062.00


1) For metric threads pitch is the distance between threads.

There are multiple pairs of screws that could be used to get 100 um per turn sensitivity (M3/M3.5, M3.5/M4, M4/M5), and even some that could give 50 um per turn (M1.6/M2, M2/M2.5, M2.5/M3), but those screw sizes are relatively uncommon, especially in the long lengths (70 mm or so for my application) needed.


I selected the M5/M4 combo.  Every turn of the M5 screw moves the screw forward 0.8 mm and moves the sliding M4 nut back 0.7 mm leaving a net forward motion of 0.1 mm at the sliding nut.  If I use the sliding nut to activate my endstop switch, I'll have a very finely adjustable endstop, and unlike my previous lever/cam arrangement, every turn of the screw should give exactly 100 um with accuracy limited by the screw thread quality.  This technique can be used to bump a mechanical switch or to trigger an opto interruptor.


One problem with this arrangement is limited range of motion at the output.  If I turn the M5 screw 10 times, the screw will move 8 mm.  The sliding nut will move 1 mm in the same direction as the screw.  So if I want 10mm adjustable output range, the 5mm screw would have to be at least 80mm long and the 4mm screw at least 70mm long. Not even UMMD has room for a 150mm long Z=0 screw.  Nope, I won't be adjusting the screw over a 10 mm range.


UMMD's opto endstop mounts on the Z axis vertical T-slot frame so the endstop can easily be repositioned within the adjustment range of the differential screw, so I settled on a reasonable differential screw adjustment range of 2 mm.  The 5mm screw has to move 16mm and the 4mm screw 14mm.  That means the exposed thread length of the screw has to be 30 mm plus the thicknesses of the fixed nut, the thumbwheel, the sliding nut and the mount.



Making a Differential Screw


I tried printing a jig to hold two screws, one M5 and one M4 butted end to end, with a spherical space inside the jig at the joint.  I screwed one screw into the jig, then inserted a drop of epoxy, then screwed in the other screw until it stopped against the first screw.  After the epoxy set, I cut off the jig.  The force required to cut off the jig resulted in breaking the epoxy joint between the screws.  Hmmm.

Someone at the makerspace suggested that I could drill holes in the ends of the screws and use a pin to hold them together, but I couldn't figure out a good way to accurately drill a ~1 mm hole in the axial center of a screw.


Another suggestion was to make a coupling nut that was threaded for M5 on one side and M4 on the other and then just screw it together with locktite or epoxy to ensure it can't easily come apart.  This is probably the easiest way to go, but adds the length of the coupling nut to the screw.


Finally, someone else at the makerspace suggested that I drill and tap a block of metal, then split it with a saw and use it as a clamp to hold the screws for welding.


In the end, I mounted a 50mm long M5 screw in a collet on a lathe and turned the end 20 mm down to 4 mm diameter, then threaded it with an M4 die.  It was actually pretty quick and easy, mostly because I had help from an expert lathe operator at the makerspace.


Turning the M5 screw on the lathe.  M5x0.8mm threads have a minor diameter that is about 4 mm, so essentially, all you have to do is turn it down until the threads disappear.  I made four or five passes making very shallow cuts so that the cutter wouldn't deflect the screw too much as it was cutting it.  After the screw was turned down to about 4 mm diameter, I rotated the cutter and beveled the end of the screw.


Once the M5 threads were removed and the end of the screw was beveled, I used a die to manually cut the M4x0.7 mm threads into the end of the screw.  The end of the tailstock on the lathe (not visible in the picture) was used to ensure that the die was started square to the screw.
Testing the M4 threads after cutting them.  Yup, it works!
The almost finished differential screw.  I still have to grind flats on the head so I can turn the screw with a printed thumbwheel.


The Rest of the Parts


Once I had the screw, the rest was easy.  I designed and printed a thumbwheel with 10 evenly spaced bumps to make it easy to set the position - just turn the screw by 1 bump for every 10 um of movement.


The base of the part (the red block under the bracket in the image below) is the fixed nut that the M5 screw threads into.  I used a block of PTFE, 5mm thick, because it works well for that type of operation in the kinematic mount for the bed.  I drilled an undersized hole and let the M5 screw roll its threads in the plastic.  It is gripped firmly but still easily adjustable.



CAD rendering of the differential screw and opto endstop mounted on t-slot.

The flag is a printed part (blue) with a hole to fit an M4 nut.  I found a spring in my junk box that pushes the flag up against the nut and minimizes backlash. The flag spring and screw fit into a printed square tube (yellow) that prevents the flag and nut from rotating as the adjuster screw is turned.  When the adjuster is turned 20 times, the screw moves 16 mm and the flag moves 2 mm in the same direction as the screw.


You can't tell from the picture, above, but if the opto endstop should fail and the bed keeps moving up, the square tube tube will have room to pass by the opto interruptor, so nothing will get damaged.  The bearing blocks on the Z axis will eventually hit the physical stops.

The Fusion360 CAD file is here and the STL files of the printable parts are here.

Here are the pieces of the new Z=0 adjuster.  The PTFE fixed nut (white) mounts on the belt clamp bracket as does the square tube (blue).  The differential screw goes through the fixed nut and the bracket.  The spring goes inside the square tube to keep the flag and M4 nut pushed against the screw threads.




The opto endstop is screwed to a printed bracket that is held on the printer's Z axis vertical frame with a bolt and t-nut.



Assembly


This is what it looks like when it's assembled.


And this is what it looks like when it is installed.


Other Uses for Differential Screws

A few people on the 3D printing forums have suggested that a differential screw would be a good thing to use in a kinematic printbed mount since the adjustments in those are usually very small.

People make focus-stacking rigs for macro photography using linear guides and stepper motors to move the camera or object being photographed in small steps as they capture a series of images that are later processed using stacking software to greatly increase the depth of focus in the final image. The typical way to do it relies on the relatively inaccurate microstepping to reposition the camera or object 10-50 um between images.  It would be pretty easy to couple a differential screw to a sliding carriage.  With a differential screw made using M5x0.8 mm and M4x0.7 mm threads, a full turn of the motor (200 steps, typically) will move the camera or object 100 um, so each full step of the motor will move the camera or object 0.5 um.  That means you can use the relatively accurate full steps of the motor for fine positioning instead of relying on "iffy" microstepping.

If you wanted to make a laser engraver to make very small markings, or even a 3D printer to make very small parts, differential screws could be used to position the laser/extruder.

How about a motor driven microscope stage?


UPDATE  3/30/20


I have run some tests on the precision of the opto endstop and tested the differential screw adjuster.  New post here.