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 stack 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. Belts and pulleys are stacked, upper belt (red) is above lower belt (green) everywhere. Belt segments labeled A-H must be kept parallel to their respective guide rails.|
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. Note larger pulley on top. Old Y axis endstop shown, eventually moved to P4.|
|P4 pulley assembly sits at the left rear corner of the printer. Belt segment K rides on a pulley made from F6902zz bearings. Note larger pulley on the bottom.|
Motors and Mounts
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.|
Common Errors in CoreXY builds
There's one very common error in coreXY design and construction. 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 carriage position. In extreme cases, it can cause the belts to slip or even fall off the pulleys, or motors to stall. In less severe cases, 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! Finally, one more extreme example, which illustrates one more point- segments A-H must all be parallel to their guide rails in all 3 planes, XY, XZ, and YZ.
|So many problems! Belt segments A, B, G, and H are not parallel to the Y axis guide rails in the XY plane. Segments C, D, E, and F are not parallel to the X axis guide rails in the XY or XZ planes. Compare the tensions of the belts at the two motors at the rear of the frame in this photo. Ouch! Original photo link.|
There are other less common errors, too. I saw one instance where the builder put a 16 tooth pulley on one motor and a 20 tooth pulley on the other. The motors should be identical, or at least should be built for the same number of steps/rev. In the firmware configuration you must set both X and Y axes for identical steps/mm.
The diagram of the belt layout provides clues to how we can safely adjust belt tension without disturbing the parallel relationship between the belt s and the guide rails. You can move the motors, P3 or P4 in the Y direction, or tension the belts where they attach to the extruder carriage by moving the attachment in the X direction. Don't move the motors or any of the pulleys in the X direction!
In a coreXY mechanism, you can't tighten the belts independently. Any changes to tension in one belt results in a not-necessarily-equal change to tension in the other belt, no matter how you adjust tension (moving motors, moving attachments at the extruder carriage, etc.). So, when you're tensioning belts, you're going to make two adjustments. With the first adjustment (moving the 𝛼 motor, for example), leave the belts a little looser than you want them to be, because they will both tighten up when you make the second adjustment at the 𝛽 motor. If the belt tensions are not close, the X axis may shift so that it isn't perpendicular to the Y axis, so you must check the alignment of the X and Y axes as/after you tension the belts. A framing square can be used to check for squareness, but the ultimate test will be to measure diagonals of a rectangular or square test print. If the diagonals match, the alignment is square.
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.
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:
Note: corners are lifting because I'm printing PLA without a print cooling fan that was added later.
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.
|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.
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.
8/3/18 Update: just in time for a Hack-a-day feature, I was working on a new post that goes into more detail about the layout and belt tensioning.