Tuesday, August 15, 2017

Thermal Performance of UMMD's Print Bed

UMMD, my recently built coreXY 3D printer, has been at the Milwaukee MakerSpace for the last week while I put the finishing touches on it before it's public debut at the Milwaukee Maker Faire at the end of September.  One of the members, John Olson, brought his FLIR camera to the makerspace meeting tonight and we were able to make a couple images of the bed with it.

In case you haven't seen UMMD's bed design, you can read all about it here.  The bed is a piece of 300 x 300 x 8mm, MIC6 cast aluminum tooling plate with a 0.7 mm layer of PEI on top and a 750W line powered heater on the bottom.

In the images below, I set the bed temperature in the controller and left it for a few minutes to stabilize.  The controller uses PID temperature regulation and drives an SSR that switches power through the bed heater.

In the first image, the controller was set to 70C, typical for printing PLA.  You can see there is some offset between the controller reading and the FLIR temperature reading.  But more important than absolute temperature, you can see that there is only about 3C variation in temperature across the bed surface, with some droop at the corners and edges, as expected.  There appears to be a hot spot at the front edge of the bed- that's actually just a reflection of the hot-end.


In the next image, the controller was set to 105C, a temperature typical for printing ABS.  Again, the bed temperature is a few degrees lower than the controller thinks.  This time there's about 5C  variation in temperature across the bed surface, expected because the higher temperature will cause more convection that cools the edges and corners of the bed.  


It's hard to beat cast aluminum plate for even heat distribution.  Between the flatness,  even heating, and PEI print surface, I have very few problems with prints releasing from the bed before they are finished.

Saturday, August 5, 2017

Setting Up a CoreXY Printer's Origin and EndStops

In this explanation, I'm going to use SmoothieWare as an example for the config file entries, but there are similar entries for whatever firmware you are using.  Look them up!

I will refer to the motor that connects to the alpha output on the controller as the alpha motor, and the motor connecting to the beta output as the beta motor.  The Z axis motor connects to the gamma output.  I will largely ignore the Z axis because it's pretty straightforward- you're going to have an endstop at the Z=0 position at the top of the Z axis.

CoreXY motion can be a little confusing when trying to set up endstops and motor direction in firmware.  The printer's firmware needs to know:
  1. That a corexy mechanism is being used
  2. The locations of the printer's endstop switches and origin
  3. The length of each axis
  4. The direction to spin each motor


Step by step CoreXY firmware setup

  1. Build your printer, and mount the motors and limit switches.
  2. Choose origin location, either left-front or right-rear
  3. Set home_to direction for each axis, plug in the endstops
  4. Assign ordinate values for each axis
  5. Set motor rotation direction for both motors

Mounting Motors and Switches

You can mount the motors either pulley-up or pulley-down or one up and one down - it doesn't matter.  You can put limit switches at either end of either axis, but you have to make appropriate assignments in the firmware and plug the switches into the appropriate inputs on the controller board.  We'll get to that in a minute.

Example corexy layout , viewed from the top of the printer, that will be used to illustrate firmware configuration.  Motors are at the front of the machine, origin is at the left-front (L-F) corner, X axis endstop is at the right (bright green box), Y axis endstop is at the rear (red box).


First things first: you have to tell the controller that your printer uses a corexy mechanism.  You do that in SmoothieWare by using this line in the config file:

arm_solution corexy

Origin Location


The printer's origin (0,0,0) has to be located at the left-front (L-F) corner or the right-rear (R-R) corner in order to match the right-hand-rule coordinate space used in CAD and slicing software, otherwise your prints will come out mirrored.  Slicers commonly default to showing the origin at the left-front, and the jog controls in Pronterface assume a left-front origin, so you can save yourself some mental gymnastics by doing the same.  There is no explicit statement in the config file that tells the controller where the origin is.  Its location is implied by the homing directions and endstops used.

Setting "home_to" Direction for Each Axis


If the switch is at the origin end of its axis, you'll set that axis for home_to_min.  If it's at the far end, set that axis for home_to_max.  

Printer
Origin
X axis
Y axis
endstop location
alpha home-to
endstop location
beta home-to
L-F
left
min
front
min
L-F
right
max
front
min
L-F
left
min
rear
max
L-F
right
max
rear
max
R-R
left
max
front
max
R-R
right
min
front
max
R-R
left
max
rear
min
R-R
right
min
rear
min

Let's say that the origin is at the L-F and the switches are located at the right and rear.  In SmoothieWare, you'll have entries like this:

corexy_homing true
alpha_homing_direction home_to_max
beta_homing_direction home_to_max
gamma_homing_direction home_to_min
The alpha and beta endstop switches are both located at the maximum ends of the X and Y axes, so you have to plug the endstop switches into the Xmax and Ymax endstop inputs on the controller board.  The Z endstop should plug into the Zmin endstop input.

Set Ordinate Values for Each Axis


Measure the length of the X axis by manually moving the extruder carriage from the far left to the far right.  Do the same for the Y axis by measuring the distance the extruder nozzle moves from the front to the back of the machine.  And, of course, measure the usable Z range of motion.

Let's say the X axis range of motion is 380 mm, the Y axis is 340 mm, and the Z axis is 400 mm.  In SmoothieWare you'll have entries like this:

alpha_min 0
alpha_max 380
beta_min 0
beta_max 340
gamma_min 0
gamma_max 400

Setting Direction of Rotation


Setting direction of rotation is done either by reversing the connectors at the motors or controller board (only with power off or you may destroy the motor driver chip!), or by inverting the direction logic via the firmware.  

Here is how the mechanism works, ignoring any of the electrical stuff (rotation of the drive pulleys, viewed from above, motors at the front of the mechanism):

Left Motor
(alpha)
Right Motor
(beta)
Extruder Motion
Toward:
CW
CW
left
CW
CCW
front
CCW
CW
rear
CCW
CCW
right
CW
off
left-front
CCW
off
right-rear
off
CW
left-rear
off
CCW
right-front

Remember, when homing the mechanism, the location of the switches are important, not the location of the origin.  Homing should always send the extruder carriage toward the switches.  Using the table above, just the top four entries, notice that if the switches are at the
  • left and front, the alpha motor must turn CW.  
  • left and rear, the beta motor must turn CW.
  • right and front, the beta motor turns CCW
  • right and rear, the alpha motor turns CCW
In Smoothieware, the motor rotation direction is set by these lines in the config file:

alpha_dir_pin 0.5 
beta_dir_pin 0.11
gamma_dir_pin 0.20
We can use the table to easily set the motor rotation directions.  For example, if the switches are located at the right and rear, manually push the extruder carriage to the center of the build area, tell the controller to home all axes, and watch the rotation of the alpha motor.  It should turn CCW.  If it doesn't, reverse its direction either by shutting off power and reversing the cable connection to the motor, or by appending a "!" in the config file, like this:

alpha_dir_pin 0.5!

Once the alpha motor is turning the right way, push the extruder carriage to the center of the XY space, send another home-all-axes command, and watch the mechanism.  If it moves toward both switches, both motors are turning in the right directions.  If not, reverse the beta motor direction like this:
beta_dir_pin 0.11!

Endstop wiring


If you are using simple, reliable, snap-action switches for the endstops, they can be wired either normally open (NO) or normally closed (NC).  For safety, it is best to wire them NC.  That way, if a wire breaks or becomes disconnected the controller will interpret that as a switch closure and it will quickly become apparent that something is wrong.

The smoothieboard config file defaults to NC.  If you wire any of the switch(es) NO, you have to invert their inputs in the config file.  Refer to the SmoothieWare endstop configuration documentation here.

If you don't have a smoothieboard, look up the endstop wiring in your controller's documentation.

Tuesday, August 1, 2017

Setting Up a 3D Printer's Origins in Firmware and Slicers

If you build your own 3D printer design, one of the confusing things about configuring its firmware is the limit switches on each axis, homing the printer, and setting up the printer description in slicing software.

One of the first things you need to do when you finish building your printer is measure it limits of motion.  Move each axis as far as it can go and physically measure how far it went.  Write down the numbers.

Three main considerations for homing and slicing:
  1. The printer's origin and limits
  2. The bed's dimensions
  3. The bed's origin

The Printer's Origin:


Simplifying assumptions:

  • CAD software and slicing software use right-hand-rule coordinate space.  Your printer should, too, or your prints will come out mirrored. For FDM printers, that means that the printer's origin, the (0,0,0) point, must be located at the left-front or right-rear corner of the printer with the extruder nozzle at bed level.
  • The Z axis limit switch is almost always placed at the Z=0 position at the bottom of the Z axis if the extruder moves up, like in a Prusa i3, or at the top of the Z axis if the bed moves down.  For the discussion below I'll assume that the Z axis switch is located at Z=0 and we'll simply ignore the Z axis.
Right hand rule says origin must be at left-front or right-rear corner of printer.  Note- they are equivalent- one is just a rotation of the other.
Slicer's and host software have default views of the print bed that they present to the user.  Slic3r, Cura, and Pronterface all default to show the printer's origin at the left-front corner of the bed.  If you set your printer up that way, the view presented in the slicer and host will match what you see when you look at your printer.  If the printer's origin is at the right-rear of the printer, the slicer view will show the view of the bed from the back of the printer.

Setting up the printer's origin involves multiple settings in the controller's firmware.  You can control the motor rotation direction for each axis, whether the motor is to move toward maximum or minimum when executing a home instruction, and finally, the ordinate value to set for each axis after a home instruction has been executed.

3D printers typically have one limit switch on each of the 3 axes, though you can have two on each, one for minimum and one for maximum.  The Z axis limit switch is almost always set at Z=0, so we'll ignore it for now.  Everything that applies to the X and Y axes also applies to the Z axis.  For simplicity, we'll assume there's one limit switch for each axis.

Basic rules and sequence for establishing printer origin in the controller's firmware:
  1. Mount your limit switches at whichever end of each axis is most convenient
  2. Set the motor rotation direction to drive the mechanism toward the limit switches when a home command is executed.
  3. Set home to min or max depending on where you put the switches and where you want the printer's origin to be (see the table)
  4. Assign the ordinate values for X and Y after a homing instruction depending on where you want the printer's origin to be.
  5. Make sure you plug the limit switches into the appropriate inputs on the controller board. 

When the printer is ordered to home the extruder via the gcode or via a command from a host computer, the motors should drive the mechanism toward the limit switches in each axis.  If the mechanism moves away from the switches in any axis, you have to reverse that motor's direction of rotation either by changing a firmware definition or by powering down the printer and physically reversing the connector on the motor or the controller board.

Once the motors are all turning in the right directions, you can address the assignment of ordinate values.  Assuming the most common configuration in which there is one limit switch per axis, you may put the switches at either end of each axis, depending on where it is most convenient.  You might want to keep cables short, or have other specific reasons for placing switches at one end or the other.  It doesn't matter.  The Z axis limit switch is normally put at the Z=0 position and we'll assume that for the examples, below.

Here are a few examples of different set-ups to illustrate how to configure the firmware.  In all examples, we'll assume that the printer's limits of motion are 310 mm x 248 mm x 215 mm measured by jogging or manually pushing the extruder carriage, Y, and Z axis as far as they will go and measuring the distances traveled.

Consult your firmware documentation for the exact syntax required to set motor rotation direction, home to min/max, and ordinate values.

Example:  bed moves in Y, origin is at left-front of printer

If you put a limit switch at the left end of the X axis, you must plug the limit switch into the Xmin limit switch input, set the motor to move the extruder carriage toward the switch, and specify that the X axis homes to minimum in the firmware configuration, and assign an ordinate value of 0 to X after homing.

If you put a limit switch at the right end of the X axis, you must plug the switch into the Xmax limit switch input, tell the firmware to rotate the motor in the right direction- i.e. the extruder carriage should move toward the switch, and tell it to "home to max" in X, then once it has done so, assign an ordinate value of 310 mm to X.



If you put the Y axis limit switch at the back of the printer, you plug the limit switch into the Ymin input, tell the firmware to spin the motor to move the bed toward the switch, and set the Y axis as "home to min" in the configuration file, (because the switch will be activated when the extruder is near the front edge of the bed), and set Y=0 when the bed bumps the limit switch.



Example 2: bed moves in Z (extruder moves in X and Y), origin is at left-front of printer

Using the same limits of motion for the printer, and the left-front of the printer as the origin, placing the switches at the left end of the X axis and at the back of the machine for Y, will require setting firmware to "home to min" in X and "home to max" in Y, then assign ordinate values of 0 for X and 248 for Y.  The limit switches will plug into the Xmin and Ymax inputs on the controller board.

Example 3: bed moves in Z, origin is at right-rear of printer

Placing the X axis limit switch on the left side of the X axis and the Y limit switch at the front of the printer will require that both axes "home to max" and you'll assign ordinate values of 310 to X and 248 to Y.  You will plug the switches into the Xmax and Y max inputs on the controller board.

This table summarizes all the possibilities for FDM printers (using the 310 x 248 mm limits from the examples, above):

Bed
Homing Switch

Controller
Motion Printer’s Switch Location Home Ordinate Limit Switch
Axis Origin Axis on Axis to: Value Input







Y Left-Front X Left min 0 Xmin
Y Left-Front X Right max 310 Xmax
Y Left-Front Y Front max 248 Ymax
Y Left-Front Y Rear min 0 Ymin







Y Right-Rear X Left max 310 Xmax
Y Right-Rear X Right min 0 Xmin
Y Right-Rear Y Front min 0 Ymin
Y Right-Rear Y Rear max 248 Ymax







Z Left-Front X Left min 0 Xmin
Z Left-Front X Right max 310 Xmax
Z Left-Front Y Front min 0 Ymin
Z Left-Front Y Rear max 248 Ymax







Z Right-Rear X Left max 310 Xmax
Z Right-Rear X Right min 0 Xmin
Z Right-Rear Y Front max 248 Ymax
Z Right-Rear Y Rear min 0 Ymin

Slicer setup - the print bed's dimensions


Your printer's bed is all that matters to the slicer.  It doesn't know or care about the limits of the printer's motion, except as they may limit the printable area of the bed.  The slicer needs to know two things: the printable size of the bed and the bed's offset from the printer's origin.

When you enter the print bed size in the slicer, you want to enter the printable dimensions which are not necessarily the same as the physical dimensions of the bed.  If the nozzle can't go there, it can't print there, so you don't want to tell the slicer it can.  By entering the printable dimensions and the offset from the printer's origin, the slicer will be able to set prints at the center of the printable area.

In the examples below, we'll use the X and Y travel limits above (310 x 248 mm) with a bed plate that is 200 x 200 mm and is shown with the printer in the home position.


Just 4 of infinite possible variations, example A being the most common.
Example A is the most common situation where the entire bed surface is within the printer's limits of motion.  In this example, you would tell the slicer that the bed size is 200 x 200 mm.

Example B would only be printable over 180 x 175 mm, so those are the dimensions you set in the slicer.

Example C is printable over 165 x 170 mm, so those are the dimensions you set in the slicer.

Example D is printable over 200 x 180 mm, so those are the dimensions you set in the slicer.

If the bed is larger than the printer's limits of motion, you simply tell the slicer the bed dimensions are the same as the printer's limits.

Slicer setup - the print bed's origin


Slicers default to dropping the your print at the center of the print bed.  This is a good thing for several reasons.  Even if you have an unflat, unlevel, unevenly heated bed, the center is where prints are most likely to stick.  If you're printing multiple parts that are going to use a large portion of the printer's bed, having them centered makes it less likely that any of them are going to end up outside the printable area.

The slicer uses XY coordinates on the bed, and the bed's origin is normally the closest point on the bed to the printer's origin.  The bed occupies the first quadrant of the coordinate space, so the printer's origin is in the 3rd quadrant of the bed's coordinate space and the offsets are 0 or negative.  So when you enter the offset in the slicer, the values entered are normally zero or negative.

The slicer's view of the bed's origin.  The origin is left-front, but it could just as well be right-rear.

In example A, above, the printer's origin is at bed coordinates (-50, -30), so that's the offset you enter in the slicer.

Example B shows a situation with no offset, so you enter (0,0).

Example C shows an offset of (-145,-78).

Example D shows an offset in only the X axis, so the offset is (-50,0).

Summary



  • Limit switches can be placed at either end of the X and Y axes.
  • The firmware needs to turn the motors to move the mechanism toward the limit switch in each axis.
  • The firmware needs to know where the origin of the printer is (left-front or right-rear corner).
  • The firmware needs to know the machine's limits of motion in each axis.
  • The slicer needs to know the printable dimensions of the bed, which are not necessarily the physical dimensions of the bed plate.
  • The slicer needs to know the offset of the printer's origin from the bed plate's origin.
  • With proper setup, the slicer will arrange prints around the center of the printable area of the bed plate.

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.

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 support support 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 bed support 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 support plate that holds those bearings/bushings in alignment.  That can't be good!  The guide rails are pretty rigid, so bending the bed support plate isn't going to move the rails much, so the bed support 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 support 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 bed support 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 support 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 support structure 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 bed support 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.

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.

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.

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.  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.