Search This Blog

Thursday, April 9, 2020

Introducing CubeXY

Wow, went off the deep end with this one. It's absorbed almost all of my free time the past few weeks. Given the current corona virus mess, stay at home order, etc, I guess it's good I've had a project.

I finally finished the design. The more I examined the original design, the more problems I found. I could probably write another post of just problems with the original design, but that's kind of pointless, so I won't. This post (sorry for the length) will detail the (re)design of this printer. Because I can't think of a better order, I'll start with a general overview, then go from the bottom up. Fabrication has begun, but that'll be in a separate post.

CubeXY

Without acrylic shell

Major changes include moving the bed frame around 180 deg, switching to a single extruder, making the bed significantly larger, and changing the X and Y axes to CoreXY. The name "CubeXY" comes from merging the original printer name, "CubeX", with "CoreXY".

Major features and specs:

  • CubeX Trio Shell + major frame components
  • E3D Hemera Extruder
  • 350x350mm build area
  • ~280mm usable Z height
  • CoreXY
  • Hiwin MGN9 linear guide for X-axis
  • Kinematic bed mount
  • Ground aluminum bed plate
  • Three independent steppers for Z, automatic bed leveling/tramming
  • Raspberry Pi 4B + 2x SKR v1.3 with TMC2209 drivers + 5inch HDMI touch screen
  • Internal horizontal spool holder

So, without further ado, let's start with the base.

Base

The screw on AL feet, multi-layer 3/16" acrylic base plate(s), 12mm stainless steel shafts, and AL base shaft holders are all used from the original CubeX. The main acrylic base plate has a few modifications. A bunch of holes will be drilled in it for M3 melt-in inserts, and a plug was 3D printed out of clear PETG to plug the largest hole, which was a clearance hole for one of their poorly designed, oft-jammed, proprietary filament holders.  

Original base plate. I have not added all the melt-in insert holes to CAD.

PETG plug. Screws in from the bottom with 7 M3 flat head screws.
Two holes for M4 melt-in inserts for the SSR.

Side note: McMaster "Tapered Heat-set inserts for plastics" are my absolute favorite way to add threads to plastic parts. After using about 500 of them on some (very large) acrylic research slosh tanks, I can say with authority that they are the easiest way to add threads to plastic. They are also incredibly strong...I ran some tests on them, and the short 4-40 ones can easily hold 50 lbs continuous when set in acrylic. I literally could not pull them out. Another easy way to add threads to plastic parts, particularly 3D printed ones, and if you don't have enough depth and have a free edge, are drop in square or hex nuts (more on that later). Be wary of the cruddy knock-off brass melt-in inserts on amazon and eBay; they don't work nearly as well. McMaster has the CAD of the ones they offer, so you can see what a well designed insert looks like. They get melted in with a soldering iron (Weller SP40N, you can get it for 1/2 the price mcmaster sells it for), and special tips, but again, you can get these elsewhere for less than mcmaster, or turn your own out of brass stock (what I'm doing...about 1/10th the price). Pro-tip: For small inserts, plug and unplug the weller to regulate temperature...it gets too hot for small inserts. Also, if you can't afford the brass tips, you can use a normal soldering iron tip on the smaller inserts, but you'll have to get a pair of needle nose pliers to hold the insert in the part while you pull the iron out because the insert will stick to the iron's conical tip. 

I'll be covering electronics in their own section, but I designed some 3D printed trays for the SKRs, Pi, relay board (for remote 24V power on/off for the SKRs), and 30mm SKR cooling fans. The SKRs have 3mm mounting holes, so I just designed the trays with through holes through the standoffs. M3 cap screws go through the SKR board, the tray, and into M3 melt-in inserts in the base plate. The relay board's tray is designed the same way. The PI has 2.5mm holes, which is kind of inconvenient. While M2.5 inserts exist, they and their tips would be another ~$20-30. Instead, I designed the Pi tray with two countersunk M3 holes in the bottom, the screw for which will screw into two more M3 melt-in inserts in the base plate. The Pi is held down to the tray with 4x M2.5 (actually english #2) self-tapping screws. The 30mm fan mount also uses M3 screws + M3 melt-in inserts, as do the filament guides. Disclaimer: I did not create CAD models of the SKRs, Pi, power switch, relay board, or screen: just downloaded them from GrabCAD or other sites. Thank you nice people who uploaded them. 


Gray trays just visible under SKRs and Pi. Also visible: 30mm fan + mount and two filament guides. 

Bottom left: 24V PSU; top: SKR v1.3 + fan; right: SSR for bed heater; bottom right: relay board
The last major component attached to the base plate is the spool holder. I looked on thingiverse (btw, how in the heck did they manage to make the thingiverse interface EVEN WORSE??) for some horizontal spool holders, but I didn't like any of the designs I saw, so I made my own. Here's a side view and cross section of a 1kg spool and the holder:



There's a base, which screws down to the acrylic base plate with 3 M3 countersunk screws, a standard skateboard ball bearing between the base and the bottom cone, a M3 threaded rod secured to the bottom cone that goes up to the top cone, which compresses the spool via a nut in a knob on the threaded rod. It had to be compact enough to fit under the bed when the bed is fully lowered, yet large enough to hold a full size 1kg filament spool. I also wanted it to be able to hold various smaller spool sizes, and the cones+threaded rod design allow this. I've already printed and assembled it, and initial tests seem to show it will work. Filament guides (shown earlier) guide the filament to a PTFE tube via a push-to-connect fitting. The tube goes up the back of the printer, secured using the original tube-securing acrylic pieces, and into a push-to-connect fitting in the Hemera.

Z-axis and Bed

Now is a good time to review the previous Z axis design and everything that was wrong with it. Due to the length of the discussion required to address that topic, I created a separate post for it, which also includes some more details of CubeXY's Z-axis and bed design.

The Z-axis stepper motors (formerly the NEMA17 extruder motors) are attached to the 12mm frame shaft/rods with custom 3D printed clamp mounts. One is located where the previous NEMA23 was at the center back of the printer, and two are located at the front, one on each corner (see second figure of this post). These steppers drive, via plumb couplers, 8mm lead screws (T8x2), which move brass lead nuts that are secured to three points on the bed frame, which has been rotated 180 deg from original orientation in order to allow this. If the bed hadn't been rotated, there'd be a lead screw right in the middle front of the printer, which would be ugly and make getting parts out difficult. Zyletch sells the couplers and lead screws/nuts. Their precut lead screws are about half the cost of custom length ones, so I purchased 400mm long ones. I plan on leaving the Z-axis lead screws long. They don't interfere with anything, and this will allow for possible future Z expansion by replacing the four vertical frame rods with longer ones (along with wiring and acrylic shell modifications). Since three points determine a plane, using three lead screws/nuts prevents over-constraining the bed frame in rotation about X and Y and controls linear motion in Z. To counter linear motion in X and Y, and rotation about Z, two new THK 12mm linear bearings are used in place of the old Z-axis linear bearings. The new front linear bearing block-nut block combinations are 3D printed out clear PETG, and are 20mm shorter than the old bearing blocks (thus adding 20mm to the usable Z height). Thanks to the three Z nuts countering bed rotation about X and Y, the linear bearings shouldn't be torqued anymore, allowing for shorter ones. The bed mounts and rear nut block are also 3D printed out of PETG. The flimsy polycarbonate bed frame back plate (now front plate) was recut out of 3/16" acrylic with a cube logo etched in it. The bed mounts are actually a Maxwell type kinematic coupling, and the bed interfaces with the bed frame coupling via stainless steel balls. The bed plate is CNC milled out of 1/4" thick ground aluminum plate. It's asymmetric due to the asymmetry of the Hemera extruder: only the possible print area + 5mm on each edge is left to save weight and minimize excess aluminum (heat sink). I purchased the 800W, 350x350mm bed heater from Keenovo, which I didn't realize is a Chinese company...long shipping times. It comes with preapplied adhesive for attaching it to the bottom of the bed. I'll be insulating the bottom of the bed with a sheet of 3mm carbon welding blanket held on with high temperature aluminum tape. I got it off eBay; it's cheaper than cork and most other high temperature insulators. I'm planning to print directly on the aluminum bed, but if adhesion becomes a problem, thin PEI sheet can be purchased and adhered to the top. A thermal fuse will be adhered to the bed to prevent thermal run-away. Please refer to this post for more details on the Z-axis and bed mechanical designs.

X-Y Axes

Review

The original CubeX Trio had two steppers for Y, both mounted at the back of the printer, one on +X and one on -X. Each side had a 6mm GT2 belt that looped around a pulley on the NEMA17 motor shaft and a smooth idler in the front frame corner cylinder things, and clamped to the Y carriage between laser cut plates. One of the Y carriages had another stepper motor on it with a pulley, and the other had a smooth idler pulley. A belt looped around these and was attached to the X axis extruder carriage. The extruder carriage was a water jetted and bent piece of steel, with three extruders + hot ends mounted to it. Just the extruder-carriage assembly probably weighed around 1.5kg, which I'm sure contributed to this printers' slow speed. There are more pics of these in previous posts, but here's one showing the whole X axis mechanism and part of the Y.



Apart from the high moving mass, the unbalanced mass probably didn't help speed and accuracy either. The X-axis stepper motor weighs 350g (in fact, all of the NEMA17 stepper motors were identical, even the extruder motors). That side's linear bearing block was also heavier. As a result of this mass imbalance, accelerations in Y would cause a torque on the X-axis. This is exacerbated by the very heavy X-axis, especially if when a Y move is done while the X axis is far off center.  Since linear bearings are not designed to handle torques (only radial loads, see this post for more info), this would cause high bearing wear and slop over time. In fact, when I took the X-Y axis apart, the Y-axis bearings were very worn, likely because of this. The proper way to use linear bearings where torques will be present is to space two far apart so that the torque becomes two radial loads, but 3D printers rarely have room for this. Another option is to reduce the X-axis carriage/extruder assembly mass and balance the y-carriage masses, which is precisely what I did.

CoreXY

It took a few iterations, with intermittent reciprocating application of my head to a wall (ow, ow, ow, ow), but I realized I could convert the X-Y axis to a CoreXY arrangement. CoreXY is the current de facto standard for X-Y axes in cube-like 3D printers. Here are some great links about it: 1, 2, 3. There are many other good discussions/videos about the CoreXY mechanism available online, but I'll cover the basics here. A CoreXY geometry allows for X and Y motion of the extruder carriage with only two, fixed motors. It It uses two long-ish timing belts and pulleys to redirect forces/motion to achieve this. It also has a low moving mass, allowing for higher accelerations and speeds, compared to more standard X-Y mechanisms, like stock CubeX's.  Here is a basic CoreXY layout:

Taken from link #1 above

The blue belt is slightly higher than the red belt. If you think about rotating each motor in different direction combinations (CW, CCW, etc), then follow the belts around, you'll see that different rotation combinations can achieve X and Y motion of the central carriage. One of the biggest advantages of this is that, if the carriage is translating in +X, both belts on the right of the carriage are under tension, which applies force on the extruder carriage, as well as the Y carriage on that side, symmetrically, eliminating torque imbalances that are seen in other XY designs, e.g. H-bot  There are a few variations of CoreXY. Here's one that stacks the pulleys, which reduces the number of pulley shafts required and minimizes layout area.

Taken from link #3 above
The reason the motor pulleys are larger and offset outboard is to make sure segments G and A are straight. In fact, all of the segments except K, M, M (probably should have been labeled N), and J in the above figure must be straight and aligned with their axes. If they are not, then the belt tension will change as carriage position changes, which is obviously bad. Link 2 spends about 2000 words + figures trying to explain that last sentence in about every possible way. But logically, if you think about how the belt angles would change (and therefore their hypotenuse = length) as the Y and X axes move around, you can see how that the only configuration in which their length would not change is when they are parallel to their axes, as in the above picture. Taking belt thickness into account is actually important for proper corexy design. If you don't, then the belts won't be perfectly parallel, and you have the problem mentioned above. That link also showcases some spectacularly bad examples of corexy implementations where this rule was not followed, along with a lot of other helpful information I won't repeat here.

Another key consideration are the pulleys themselves. You want to use toothed pulleys if the teeth are in contact with the pulley, like A motor, B motor, upper and lower P3, upper and lower P4, lower P1, and upper P2 in the above figure. You want to use smooth pulleys if the back of the belt is in contact with the pulley (like upper P1 and lower P2). While you can have belt teeth in contact with a smooth pulley, the recommended smooth pulley size is large (equivalent diameter of a ~40T pulley, which is about 25mm for GT2). Another option is to twist the belts such that the belt backs contact the smooth pulleys. This is done in the BLV MGN corexy printer.

The main disadvantages of corexy are the long belts, which act like springs, and lots of pulleys, which can seize if they're poor quality and require careful support/structure design. Fiberglass or steel reinforced belts are strongly recommended, and upgrading from 6mm to 9mm wide can help too. I'm using 6mm fiberglass reinforced GT2 belt I got off eBay for $7/5m; It's very difficult to stretch, and should be sufficient when properly tensioned. Good quality pulleys are also important. I'll be using the stock Y axis motors and their pulleys for driving the belts. I bought 4 Gates GT2 aluminum idler smooth pulleys (5mm ID, 12mm OD, 15mm flange diameter) from Mcmaster ($9 each, ouch). They're slightly cheaper from printed solid. These are high quality: smooth bearings, well machined, etc. I also bought 4 Zyltech brand ones (5mm ID, 12mm OD, 18mm flange diameter) for $2 each. These were significantly worse quality. 3/4 had crunchy bearings that weren't pressed in very straight. Only 1/4 was immediately usable. And zyltech is actually a decent chinese reseller...I can't imagine how bad the no-name ones off of amazon or ebay are. The only nice thing about the Zyltech ones is that they're about 1mm thinner overall, which fits the vertical belt spacing slightly better. I did manage to get 2/3 bad ones working well by pressing the ball bearings in straighter, as well as oiling all of them. But one is still crunchy. Another option is to make your own pulleys from radial ball bearings + flanges, or from two flanged radial ball bearings, but I found that those could actually be more expensive depending on the bearings purchased. Anyways, if I can't get the Zyltech ones to work better (or replacements), I'll buy more of the Gates ones.

UPDATE (4-18-2020): Zyltech sent me a replacement pulley. I had to straighten the bearings in this one, too, and it also has a crunchy bearing. I'll just try using it anyways...if it fails, I'll put a Gates pulley in its place. Note to people buying cheap pulleys: buy about 2x the number you need, you might get a good full working set that way. I looked into replacing the bearings in them...if you manage to get the bearings out, new bearings cost more than the pulleys with the bearings, so I'm not sure that makes sense.

HMCoreXY

I've talked a lot about corexy in general, and some of the small details, but I haven't talked about how I implemented it for CubeXY. I think I came up with a new CoreXY layout, at least it's one I haven't seen before. I'm going to call it horizontal motor CoreXY, or HMCoreXY.

The original CubeX's Y axis motors are mounted horizontally.

The original belt came out of the two holes (center of picture), traveled in Y to the pulley at the front of the printer, looped around this, and was secured to the Y axis carriage on this side. My CoreXY implementation involves twisting both of ends of the belts coming out of those holes 90 degrees so that their backs face in towards the inside of the printer. Same deal with the other side, twist the belt 90 degrees so that the backs of the belt face in towards the inside of the printer. The result of doing this is that the belts always contact pulleys with their backsides, without the need to impart 180 deg belt twists anywhere in the system. The following is a top down view of the new HMCoreXY belt setup. What were "upper" and "lower" belts in the above corexy diagrams are now "A" and "B" belts corresponding to the motors that drive them. Both A and B belts have portions that are on the upper and lower "paths".

HMCoreXY Belt Layout. Click to enlarge.

Here is a picture of one of the front left (-X) top frame pulley block, which is the stock front left top left block re-machined to hold two pulleys vertically (rather than one horizontally). You can see the 5x30mm precision shoulder screw (from McMaster) head, both pulleys, and spacers.


The following picture is of the right (+X) Y-axis carriage linear bearing block + pulley block. This one has two lower pulleys in it. The "B belt, upper path" belt travels through the pulley block above the two lower pulleys. The pulleys use 5x30mm shoulder screws and spacers. The pulley block is machined from 1.5x1.5, 1/4" wall (1x1" inside) square aluminum tubing. The MGN9 linear guide rail, which is used for X axis travel, is screwed to the back of the X-axis plate, which is CNC cut from the same 1/4" ground aluminum plate stock that the bed is cut from. The X-axis plate is screwed to 3D printed bearing blocks, and both have a light press fit with the 12mm linear bearing (THK LM12LUU, same as Z axis).

The left side (-X) one looks almost identical except the pulleys are both upper, the "A belt, lower path" belt travels through the pulley block below the two upper pulleys, and the X axis limit switch is screwed to the 3D printed bearing block.

The MGN9 linear guide rail is a genuine Hiwin linear guide, with an MGN9H carriage. I wrote more about linear guides in this post. Unlike linear bearings, linear rails/guides are designed to handle torques about all axes. Turns out they can handle quite a lot of dynamic force and torque, especially given their size...MGN9 rails are oversized for all normal-size 3D printers, MGN12 doubly so. Their torque rating is almost equal about all axes, so it didn't matter if the rail was mounted on its side like this, facing up with the extruder sitting on top of the carriage, etc. However, the nozzles in compact extruder-hot ends like the Titan Aero and Hemera don't reach far enough in -Z to clear the 1/4" aluminum plate backing the MGN9 rail when the extruders are mounted on top...I would have been stuck with a volcano extruder if I had wanted to do that. So I just turned the rail on it's side, which happens to make mounting a Hemera easier due to the nice mounting features on the sides of its extruder motor. Experienced readers will probably note now that some printers, e.g. Railcore, use an unsupported MGN12 rail for the X-axis. If I had done that, I could have mounted the rail facing up and still used a compact extruder-hot end. However, this goes directly against the recommended (Hiwin) installation guidelines of MGN series linear rail guides. Linear guide rails are not supposed to be subjected to bending moments. Their job is to constrain the carriage, not take large bending loads, which affect their accuracy. That being said, (good brand) MGN rails are made of high strength carbon steel. The loads that a 3D printer extruder assembly could apply to a MGN12 rail will not be able to cause a deflection significant enough to cause noticeable defects in parts. That's why railcore and other printers are able to get away with an unsupported X-axis rail.

Here is a picture of the extruder assembly. I designed everything to be as compact as possible. The Hemera extruder takes up one whole side. It's bolted to a 1/8" aluminum carriage plate, which is also bolted to the MGN9H carriage, which is buried under the fan (black) and 3D printed belt holder/tensioner assembly (white). I actually managed to obtain a 24V, 1.75mm Hemera (box says "Hermes", lol) before they all sold out due to the covid19 mess. I made sure to orient it such that the hot end's cooling flow is towards -Y, so that the carriage plate wouldn't block this flow (the passages in the hot end heat sink redirect the air flow all in one direction). The inductive Z probe is shown bottom center. Underneath this assembly is a custom designed cooling duct for the fan, printed out of clear PETG, and a thin 12V LED light that screws to the bottom of the extruder motor. The right (+X) side of the belt holder is static. The left (-X) side is the actual tensioner. Since both belts have one end secured to this tensioner, and since both belts should be the same length, both belts can be tensioned with one tensioner. The belts press into the tooth-ed slots and mesh together further in, effectively preventing them from being pulled out (tested to about 50lbf, no failures).



The tensioner consists of a belt mount that runs on a printed track, kind of like a T-slot, but angled so it's actually printable (after a lot of trial and error searching for proper tolerances). Here's a back view of it without any other components:

The tensioning is done by tightening a long M4 cap head screw into an M4 heat-set insert in the other part of the assembly. I should be able to get approximately 30 mm of tightening with it, which should be more than enough. You can see the slot that the MGN9H sits in. Note how it is forked: it's designed to slide on from the +X side, which allows it to be taken on/off without unbolting the extruder. This assembly screws to the carriage plate with three M3 screws, and one M4 screw from the radial cooling fan.

The X and Y extents of the whole X axis extruder carriage assembly was carefully controlled to maximize X-Y build area, which is right around 354x354mm, which I rounded down to 350 x 350mm. Due to the asymmetry of the Hemera extruder, specifically the nozzle being closer to one end than the other, the build area is not symmetric about the central YZ plane of the printer; it's shifted in +X by about 20mm. This drove the bed to be asymmetric. All of these design decisions result in a nice, compact, strong, stiff, space efficient extruder/x-axis assembly.

I mentioned earlier that the belts coming from the motor pulleys are twisted 90 degrees so that their backs are facing the inside of the printer, and the teeth are facing out. If the 90 deg twist is located right at the motor pulleys, i.e. if the belt length between a Y carriage pulley and the motor pulley is very short (happens at the +Y travel limit), then the twist will make the belt want to come off the pulley. Luckily, the motor pulleys have large flanges that will prevent the belts from slipping off, but the twist could cause uneven belt wear. To minimize this problem, the Y axis pulleys were located as far in -Y (towards front of printer) as possible. In fact, the two furthest in -Y partially slip inside pockets in the left and right front top frame rod/pulley blocks.

This requirement and drove the Hemera to be mounted on the +Y side of the carriage plate, with the X-axis plate and rail as far towards -Y as possible. That, along with build area maximizing decisions, drove the Y-axis linear bearings to entirely on the +Y side of the X-axis plate.

The X-axis plate was designed such that the +Z side is just below the required lower pulley Z location, and the MGN9 rail was designed to flush with this top surface. This, along with careful X-axis extruder carriage plate design, maximized the usable Z build height, which can utilize all of the vertical frame rod height except for 62 mm (60 mm tall vertical linear bearing blocks + 1 mm on each side for buffer).

Potential Problems and Disadvantages

I've talked a lot about the advantages of the HMCoreXY setup. It will have all of the standard corexy disadvantages (mentioned above), but also one more. Note how both belt ends on one side of the X carriage are high and both belt ends on the other side are low. Because there isn't a mix of upper and lower like in normal CoreXY, there will be a net torque about Y due to belt tension, which will be exacerbated by -X accelerations. Luckily the moment arm is small, and I estimated that the maximum torque from this imbalance is around 1Nm. The MGN9H carriage can handle ~19 Nm about this axis, so this should not be a problem. There is no possible way to have one upper and one lower belt end on each side (and thus be able to stack the Y carriage pulleys) without heavily modifying the way the motors are mounted, or adding some sort of belt collision avoidance hardware when the belts are crossed vertically (usually a bad idea anyways). I tried for a few hours sketching out every possible permutation of belt positioning, and the one presented above is the only viable one with horizontally mounted motors.

A potential problem I haven't touched on yet is related to the linear shafts/rods. The 12mm linear shafts/rods they used for both the frame and motion shafts are about 0.08mm undersized on the diameter. This causes noticeable slop, even with the new THK linear bearings (though not nearly as bad as the old worn out linear bearings). My mitigation plan for this is to move the vertical rods closer together in X by about 0.2mm, by grinding down the rods oriented along Y slightly if necessary. This will preload the linear bearings radially, which should prevent them from rocking on the slightly undersized shafts.

The trio of proprietary extruders+hot ends were sacrificed to achieve 3x the build area of the original printer. I think this was worth the trade-off, especially since tool changers seem to be the future of multi-filament FDM printing.

Shell

The acrylic shell is the next major sub-assembly. I plan on keeping the CubeX Trio shell and modifying it a little. There are a few pictures of it in some of my earlier posts and online. The shell isn't just a cosmetic part. It screws into the 8 corner frame cylindrical blocks, providing torsional stiffness to the frame.

The lid was lost sometime before I obtained the printer, so I had to laser cut a new one from 3/16" acrylic. I included matching 10mm holes in the top. I designed small 3D printed cups to go in these holes, and the cups hold 6mm neodymium disk magnets, which honestly don't seem to do much to hold the lid on...appears to mostly be held on by its weight. I might try gluing in 10mm disk magnets if I find that the lid needs to be held on.

The big openings on the front and sides do not have doors. I will probably laser cut some 3/16" acrylic door panels and use some small hinges to create doors for them at some point. If I do that, then the printer will be sealed, which means I need an exhaust fan. I'd probably put these in the side doors.

The acrylic shell held the original touch screen. This was also lost before the printer came to me, but it looks a little small in the pictures I've seen of CubeX Duos/Trios. I decided to use a 5 inch HD capacitive touch screen. I also decided to recess it in the front in the same place the old touch screen was. This required cutting the hole bigger and some fairly complicated bevel design. The bevel is made of three 3D printed parts (not including letters). One front plate (bezel) and two back plates. Four M3x10 countersunk screws go through the back plates, through the holes in the screen PCB, and into M3 square nuts that are held in the front plate behind the bezel. The back plates and front plate sandwich the acrylic, holding the screen and bezel in place. The bevel and screen stick out only 0.8mm.

Bevel back

Bevel cross section

I 3D printed the bezel parts out of white PLA. I designed the "CubeXY" letters with the same font and size as the decal on the front of the printer, and I printed them out of shiny silver PLA flipped so that the smooth side would be be seen. They were glued on with CA. The hole was enlarged with a fine toothed coping saw and file.

I'm not sure how the original CubeX Duo/Trio got power into it. For CubeXY, I bought a combination fuse, switch, and C14 power socket (bottom right of first picture in this section). The socket has countersunk holes for M3 screw, which will screw into melt-in inserts in the acrylic. The hole will be cut in the same was as the screen. 

Electronics

 List of controller requirements:

  • At least 6 stepper drivers capable of 1.7A
  • 32 bit controller
  • 24V power
  • Good community development for troubleshooting help
  • Lots of peripheral inputs
  • Ability to use a touch screen
  • WiFi

Most 3D printer stepper driver boards have 5 stepper drivers: X,Y,Z, and two extruders (or two Z's). The need to drive 6 stepper motors made finding the control electronics a little tricky. That, along  with the other requirements, really narrowed down my options to the following:
  1. Duet2 Wifi + Duex2 or Duex5 + PanelDue 5i (~$360)
  2. Duet3 6HC + Raspberry Pi 4 + touch screen (~$320)
  3. Raspberry Pi 4B + two SKR v1.3s + touch screen (about $200) running klipper
  4. Like 3, but with two ramps boards (about $150) instead of the SKRs
The RAMPS boards would have had to been modified for 24V operation, and are generally less feature rich, so I disregarded that one. Options 1 and 2, even knock-offs, would be expensive. Thus, I chose Option 3. The Raspberry Pi 4B will run Klipper firmware and Octoprint. My current work flow is: STL-Cura on my laptop-slice gcode-save to SD card -move SD card to my printer-use screen on printer to select the file -print. Octoprint will allow me to STL-Cura-slice-print...much easier.

The SKR v1.3's will also run Klipper. Klipper splits the processing up among the Pi and the control boards, and has an active development community. Since I'm planning to use Klipper, I wouldn't see much of a performance increase from the faster chip on the SKR v1.4 Turbo. I bought the SKR v1.3's with 10x TMC2209 drivers from Amazon (BigTreeTech brand). I could have saved a little bit if I had bought them directly from BigTreeTech, but I figured I'd get them faster from Amazon and with a better return policy. I don't need 10 drivers, but it was the same price as getting 5+1, so why not. I haven't researched the various TMC2209 options, but I'll at least do 16 or 32 microstepping. I bought the Pi 4B from PiShop, along with a 5 inch waveshare HDMI touchscreen, 3A USB C power supply, Pi heat sinks, etc.

The mounting features for the Pi and SKRs are described in the base section above, and the screen mounting is described in the shell section above. The screen requires a HDMI (full) connection and a micro USB connection to the Pi, which has a miniHDMI and USB-A. Cables come with the screen, including a mini-full HDMI adapter, but the HDMI cable is too short, so I bought a 3ft HDMI-miniHDMI cable from pishop along with the screen. I'll probably need to get a longer USB cable, too. The screen bezel/mount was designed with clearance for the connectors and buttons on the sides of the screen.

I bought some makerbot-style PCB limit switches, which have an analog filter implemented. This link has a good discussion on switch filtering and a picture of the type of switch I bought near the bottom. I plan on using one for the min X limit and one for max Y limit. The X axis limit switch will be screwed to one of the Y axis linear bearing blocks and trigger off the back of the extruder motor. It will have to modified slightly because the PCB is too long as-is. My plan is to bend the cable connector vertical and cut off some of the PCB. The Y axis limit switch will screw to a small 3D printed part that uses one of the left motor's mounting screws to hold it in place. The Y axis linear bearing block has a feature for pressing the Y limit switch.


Mechanical switches have excellent accuracy and repeatability. Even better are inductive probes, but they require an electrically conductive surface to sense off of. Since the bed will be aluminum, an inductive probe will work well for the Z limit switch (max Z), as well as for bed probing. I purchased a "LJ12A3 4 Z/BX" NPN NO inductive probe from pishop along with the Pi. The inductive probe triggering distance is related to the driving voltage...24V is the recommended minimum for this probe. The SKR's (and most controller board's) probe/switch inputs are 5V. If the probe's power is 24V, then when the switch closes, it will try to drive the signal line to 24V, which will fry the control board. I think the Duet2's have built in circuitry for inductive probes, but the SKR's do not. There's a neat trick to get around this problem, though. A BAT85 diode is put in the signal line and oriented such that when the probe signal wire is high (triggered, 24V), no current will flow to the SKR input pin, so the SKR pin will read high (5V) due to its internal pull-up resistor, which can be activated in the firmware. When the probe signal wire is low (open 0V, not triggered), current will flow from the SKR through the diode and probe to ground, which will pull the SKR pin low. The Voron uses a Pi with two SKR v1.3's. Here are a couple links from its documentation explaining the inductive probe wiring: 1, 2 pg. 6. While I'm not 100% sure, I think this will only work with NPN NO inductive probes. You could always use a voltage divider,  voltage regulator, or opto-isolator on the signal line to drop the 24V down to 5V if you're uncertain.

As mentioned in the shell section, I'm not sure how the original CubeX Duo/Trio got AC power into it. For CubeXY, I bought a combination fuse, switch, and C14 power socket off eBay and will mount it into the side of the acrylic shell.
It's rated for 10A, and I'll be using a 10A fuse in it. The bed heater is 800W, the 24V PSU is 200W, and Pi is ~15W, which is bit more than 9A at 110VAC. I doubt I'll ever see that power draw level, though...worse case load on the 24V PSU is about 100W. The switch will be wired in the hot and neutral lines. The hot line will split and go to: 1. the relay board, 2. the solid state relay (SSR), 3. the Pi wall wart power supply. I bought the relay board off of eBay for $7.


The two channel one was cheaper than the one channel ones, go figure. This takes 3.3 or 5V logic and controls, via opto-isolators, AC relays. The hot line coming from one of these relays goes to the 24V PSU hot input screw terminal. The control pin, 5V, and ground come from some of the Pi's GPIO pins. This allows the 24V PSU power to be controlled by the Pi. Since the Pi is powered by an independent power source, remote turning on and off of the SKRs will be possible. As implied by the last sentence, the 24V PSU DC power screw terminals are wired to the SKR input power terminals. The second hot AC split goes to a AC pin on the SSR. The other AC pin on the SSR connects to the bed heater hot line. The control side of the SSR is connected to a SKR's bed heater output terminals. The 5.1V, 3A usb wall wart power supply for the Pi was actually cheaper than an unpackaged 5V PSU. I'll either sacrifice an extension cord for the socket, or connect AC power to its prongs with female blade terminal connectors and heat shrink over them. The neutral AC line splits after the switch and goes to: 1. the 24V PSU neutral input screw terminal, 2. the neutral line of the bed heater, and 3. the Pi wall wart power supply. The incoming AC ground line will split and go to: 1. the 24V PSU ground input screw terminal, 2. the 3D printer's frame, and 3. the heated bed. This link had a wiring diagram that's pretty close to what I'll be doing. The mounting features for the relay board, SSR, and 24V PSU are described in the base section above.

The bed heater is a Keenovo 110VAC, 800W, 350x350mm silicon heating pad. It comes with an adhesive back for adhering to the bottom of the bed. I opted for an AC heater due to the large thermal mass of the bed. While a lower power DC heater would work, it would take a lot longer to heat up. More about the bed itself is in the base section above and in this post. The heater connects to the neutral power line and the hot line coming from the SSR. I purchased the SSR from Zyltech. It's rated for 25A (probably more like half that...), but I won't be putting anymore than about 9A through it. Inline with the hot line, and adhered to the bottom of the bed under the insulation, will be a thermal cutoff (TCO) fuse. This is important for high power heaters in case of a temperature sensor failure. If the bed temperature sensor fails, it can cause the bed heater controller (embedded in the SKR firmware in this case) to think the bed is cold, thus applying full heating power continuously to the bed, which would probably start a fire. The thermal fuse will blow around 150C, preventing thermal runaway. I'll probably be using a normal thermistor for the bed temperature sensing, and it will be connected to the SKR bed temperature sense terminals.

The inductive Z probe is mounted to the X-carriage next to the radial part cooling fan. This fan is a  Sunon MF50151VX-B00U-A99, the most powerful (highest flow and static pressure rating) 5015 cooling fan you can buy (I've spent hours looking), and I've been using it on my Wanhao I3 for years now with great success. Unfortunately, it's 12V, and they don't make a 24V version, so I'll probably have to use a buck converter (cheap on eBay) to drop the voltage from 24V to 12V. If I connect the inputs to the buck converter to the 24VDC + and -, which are also connected to the SKRs, I should be able to just connect the +12V output of the buck converter to the fan, and the - line coming from the SKR fan terminal to the fan because the SKRs use the - pin for PWM/switching. Oddly, there aren't any 24V 5015's that are as powerful. Mounted under the extruder motor is a 12V LED light, which came from CubeX's X-carriage. The SKRs have 5V and input voltage (24V) outputs, so I'll probably have to use another buck converter (or possibly the same one) for that. Also might be able to run that off of the Pi's GPIO with a transistor or relay so that the Pi can be used to turn the light on and off. The 24V version of the Hemera has a 24V cooling fan, NEMA17 stepper motor, 24V heater core, and a hot end thermistor, all of which will be connected to a SKR.

The SKRs have their own 24V, 30x30x10mm cooling fans, which I bought from Zyltech. These will be connected to their controller cooling fan terminals. I aimed them so they'd mostly blow across the motor driver heat sinks.

Since the shell has three big openings in it, I don't have any exhaust fans at the moment. If I add doors to the openings, I'll also add exhaust fans, which I'll connect to a SKR's exhaust fan terminal.

The three Z motors will be connected to one SKR. The X,Y, and extruder stepper will be connected to the other.

I purchased good quality stranded 22 AWG, 3 and 4 conductor shielded wire off eBay. 22 AWG was chosen because it's large enough gauge for the motors and heater core, while still being small enough for standard JST crimp connections. It's important to use stranded wire if the wire will be moving, e.g. the X-axis limit switch. I could have used smaller conductor cable for the switches, but 22 AWG wasn't much more expensive, so I bought that for future possible projects. Shielding the motor cables (4 conductors) is important for reducing noise. The 3-conductor cable is for the limit switches and Z probe. One 4-conductor cable will be used for the 12V LED light and the radial cooling fan. The shielding drain wires will all be connected to chassis ground on one end. I also bought a JST crimp connector kit, which included a bunch of connectors, pins, and the crimping tool off Amazon for $28 (though it still isn't here yet due to covid19 delays). The wiring harnesses for CubeX were all custom jobs, with white sleeving. I don't plan on putting that much effort into the cables. They'll be properly routed and restrained with adhesive cable clips, and run through drag chains/cable trays where necessary. I'll probably 3D print the drag chains if the ones that came with CubeX don't work. The AC power wiring will be with ~14 AWG stranded silicon wire, which I had left over from some other (abandoned) projects. I'll be using crimp/solder fork terminals for the 24V PSU connections, and other terminals where necessary. Cable management is important!

On the software side of things, I haven't delved into Klipper yet. I plan on starting with Voron's configuration files and modifying them for my needs. I'm a decent hobbyist programmer, so I'm pretty sure I'll be able to handle it, and there's great documentation. The basic way it works is: First, you SSH into the Pi with your PC. Then you install Octoprint and Klipper on the Pi. You use Klipper on the Pi to generate Klipper firmware files for the SKRs, which you copy back to the PC with SCP. Then you copy that firmware file onto each of the SKR's SD cards one at a time, then put them back in the SKRs and power them up. Then you configure octoprint and create the printer configuration file, which will contain info about your printer's configuration, how to talk to both SKRs, etc. After that, and assuming the hardware is all set up, it's time to run calibration and checkout tests, such as testing movement directions and limit switches. Automatic bed tramming, where the independent Z axis motors are used to level the bed, is done with the "z tilt" klipper script. After that is run, "bed mesh calibrate" can be run to perform a mesh calibration. Given the ground aluminum bed plate and automatic bed tramming, the mesh calibration should show an almost dead flat bed. All of these calibrations and checkout tests will probably take the better part of a day assuming no major problems. There's also configuring octoprint and installing add-ins, such as the one for PSU control and bed mesh height map visualization. I'll probably have a whole post dedicated to software/firmware setup.

Aesthetics 

I endeavored to keep CubeX's aesthetic intact. Everything is color coordinated: silvers, clear, translucent, with a little bit of black and white. As an example, the new screen's bevel is white, just like the original, and I matched the "CubeX" (decal on front of the printer) font and color for the 3D printed "CubeXY" letters under the screen.

Conclusions

By fixing the major design problems with the original CubeX Trio, I've created a design for what will hopefully be an excellent 3D printer.

To-do

Fabrication is probably about half done and will be discussed in a separate post. Parts acquisition is about 80% done. Covid19, while possibly providing a little more time for me to work on this, also threw a wrench in the economy, which I'm feeling as massive shipping delays for some components, e.g. anything from Amazon. Thus, I've been trying to buy things off of eBay or locally, even if they're a little more expensive. Probably a good thing to do anyways, since Amazon is scary big now.
  • First fabrication post
  • Finish fabrication
  • Finish acquisition 
  • Assemble printer
  • Install electronics, wire them
  • Software setup
  • Checkout and calibration tests

3 comments:

  1. Hey, I was wondering if you knew the teeth count of the original MXL pulleys, since I'm also converting a CubeX, but I can't break it down since it is printing parts for itself since it is my only printer. :D

    Have fun with your build! I'll be checking in once in a while.

    ReplyDelete
    Replies
    1. I'm about 90% sure they're 18T. That's what I put in my CAD anyways.

      I'm just now unpacking the 3D printer stuff after moving, so hopefully I can get this thing running soon

      Delete
  2. Hi wondered if you wouldn't mind sharing your STL files...TIA...Bill

    ReplyDelete