CNC mill upgrades: Couplers and gibs

The previous post ended with test running the upgraded spindle bearings. This testing dragged on a bit because I found the bearings loosened up. I would run up the spindle to temperature, take a few cuts, and it would start making a horrible racket. Upon inspection, it turned out there was free play in the bearings. Since I marked the nut, I knew it had not backed off, so the only possibility was that one of the bearings were not fully seated.

This happened several times, so eventually I decided to tighten the nut not just until there was no free play but until the turning torque went up. It turned significantly, so hopefully that took out whatever play there was. I then backed out the nut and just snugged it up. This should give the bearings a chance to back off the preload a bit.

I also realized that a much more convenient way of estimating the running friction of the spindle is to measure the power at the plug. I put my trusty old Kill-A-Watt on it and it works really well. When turning the spindle on, you can see the power go up and then slowly drop back towards an equilibrium as it turns up. The power needed to run the spindle scales pretty closely to rpm^2, which is what you’d expect from a friction that scales with speed, like a viscous drag. At 5000 rpm, the spindle motor uses 100W (with little preload) to 140W (with high preload) just to turn itself. Taking a heavy roughing cut, I saw about 350W.

This way it was also readily apparent when the bearings had backed off preload, and retightening the nut had an immediate effect on the running power. Pretty neat.

After a while I found I could also tell how tight the bearings were from the sound of the spindle. With high preload, they make a “tight”, high-pitched whine. When the preload is low, it sounds much more loud and “rattly”, with wider frequency content.

Once things seemed stable, I attempted to machine the second of the spool holders for the filament storage box. As I was running the program, the Y-axis Clearpath motor faulted. This has never happened during a run unless it’s crashed, so was pretty weird. I attempted to restart, but it refused to move. Eventually I realized that the coupler that attaches the motor to the ball screw had snapped.

The couplers are aluminum beam couplings, made by sawing an aluminum cylinder into a spiral. This means they have no backlash and can take up a lot of misalignment, but they are quite “springy” and, being made of aluminum, they also fatigue and break. I had already noted that the Z-axis coupler was broken back when I upgraded the steppers with servos, so I knew this was an issue. Having had this happen again, I decided to replace them it with a Ruland “jaw” coupling where a plastic hub sits between two spiders. These are less prone to fatigue and have better damping, but can have backlash if the hub has free play. The Ruland couplings are specified to have zero backlash up to a certain torque, so by selecting models whose torque limit is above the peak torque of the motors, backlash should not be an issue.

As I disassembled the Y-axis, I also noted that the bearings had quite a lot of friction in them. These are some cheap deep groove ball bearings, not really designed for a lot of preload, so while I was redoing this I also decided to replace these with proper angular contact bearings.

The bearings on top are the old Y-axis deep groove ball bearings, on the bottom are the new FAG angular-contact bearings. They aren’t sealed, but the Y-axis bearing is very well protected.

To better be able to apply a reasonable preload to these ballscrew bearings, I also added a pair of Belleville disc springs. These are conical washers that flatten out as you tighten them. By adding a pair with the OD facing toward each other, you can put them on the shaft and by measuring how much you’ve flattened them as you tighten the nuts, you can also estimate how much axial preload there is in the bearing. This worked quite well.

The drawback of using these springs is that, well, now you have an axial spring. This means that if the motors apply enough axial force on the ballscrew, these springs can compress which translates to uncommanded motion of the table. The X- and Y-axis motors have a peak torque of “290 oz-in”, which in reasonable units is 2.0Nm. The pitch of the ballscrew is 5mm per turn, so assuming perfect efficiency, this corresponds to a peak axial force of 2.0*2*pi/0.005 = 2.5kN. Based on the specification of the belleville washers, I estimate the preload to be about 1 kN, so it seems it is possible for the motor to compress the washers. (On the other hand, the table weighs about 14kg, so to apply that force would mean an acceleration of about 7G. We never get even near that, so the question is whether the cutting forces ever come close to a kN. I could test this by hooking up the USB cable to the servo and reading out the peak torque while running a heavy cut. I haven’t tried that, it would be an interesting exercise to perform. Anyway, I’m digressing.

After assembling the mill with the new bearings and coupler, I was playing with the servo settings, crashed the X-axis into the hardstop, and promptly broke the X-axis coupler, too. Sigh. I only ordered one since I didn’t know how well they would work, but since they seem fine I ordered similar ones for the X- and Z-axes, too. I assume it’s just a matter of time until the Z-axis coupler breaks, as well…

Another thing I noticed after taking the mill apart was that the Y-axis gib seemed to only contact the way along the edge. I suspect this is because of the way the set screws contact it. A while ago, I modified the X-axis gib by milling bona fide flats in it where the gib screws could contact. This not only provides a flat surface for the screw to bear on, but also positively locates the gib so it can’t move around. Since I still had the fixtures I fabricated for that modification, I decided to go ahead and do the same for the Y-axis.

The Y-axis gib fiixtured in the vise using the custom-milled holders that make sure the gib is rotated the correct angle. Note that the holders do not contact the movable vise jaw on the right, it only pushes the gib itself.

This was pretty quick work since I just had to update the X-axis design in Fusion360. I also had to modify the CAM because I used a 3/32″ endmill originally but I no longer have any of that size. I had to use a 1/16″ instead.

The flats have been milled. They look pretty ratty in the picture but they’re fine.

The completed Y-axis gib.

The holes in the new gib matched the position of the screws perfectly. The height of the flats could be changed a little bit to better center the gib on the dovetail, but it should still contact the flat instead of along the edge. We’ll see if this makes it easier to adjust the gib to be tighter without having it bind. There was a very noticeable play in the Y-axis before.


CNC mill upgrade: Spindle part 2

In the previous spindle post, I talked about replacing the bearings, how I was not very happy with how that had worked out, and how I had ordered angular contact bearings to replace the deep groove ball bearings. Now it was time to do it.

While searching the web for writings about these spindle bearings, I came across the “Benchtop Machine Shop” blog, which has several posts about replacing the spindle bearings in his mini mill with angular contact bearings. Their mill is not exactly the same model as mine, as it has an MT3 spindle, so his bearings are different (his mill has two 7206 bearings while the HiTorque has a 7007 for the lower bearing, because the spindle is 35mm dia at the bottom instead of 30mm) but the procedure and concerns are the same.

They also noted that the standard bearing replacement instructions have you pressing the bearings through the balls, and also damaged a set of bearings that way. They also thought a lot about how to preload the bearings. The procedure they used was to take down the diameter of the seat for the upper bearing enough that it would only be a light press-fit such that the preload could then be set with the nut. This made sense to me, so what I’ll describe below largely follows the same procedure.

The first thing I did was to order a completely new spindle from LittleMachineShop. The old one was worn in the taper and the hole for the spindle lock was rounded, so I figured if I’m going to do this I’ll replace the spindle while I’m at it, since it’s not very expensive.

Sealed angular-contact bearings are much more expensive than open ones, so I decided to try using open ones. (Sealed bearings also have lower RPM limits since the friction in the seal heats them up.) If the replacement works but they end up getting contaminated or flinging grease everywhere I can upgrade again.

For the upper bearing, SKF has an angular contact bearing 7206BECBP that has the correct inner and outer diameters but is 16mm wide rather than 14. This is not a problem because the seat for the upper bearing is actually a bit wider than needed for the normal bearings, and I could get it on Amazon for $26.

The lower bearing is a bit more uncommon. SKF only has 7007B size bearings in the “super precision” category at many hundreds of $$$, and that seemed to be the norm for other brands as well.  (The “B” means it has a 40-degree contact angle, which is what we want in this application since we will have a large preload. I think “A” is 25 degrees and no letter at all is 15 degrees, which would not be optimal in this application. I did find a “VXB” brand 7007B bearing for $25. I’m not clear on exactly what the quality of these bearings are, but they at least have an American website. They don’t state what the ABEC grade of the bearing is or anything, but I figured it was worth a try.

Step one was to carefully sand the upper bearing seat down until its diameter was appropriate for a “transition fit”, which as far as I could decipher the SKF tables was a diameter of 1.1811″-1.1807″. (I dunno why they give diameters in inches for metric bearings, I must have found the table they give to Americans…) The spindle as delivered was 1.1812″ (this gave me an occasion to add a 25-50mm digital micrometer to my metrology stable) but after sanding with strips of 400-grit wet or dry while rotating the spindle, I got it down to 1.1806″-1.1808″ (it appeared to be slightly conical but that’s probably what you get when you try to accomplish tolerances of 10um by hand.) For reference, this is 29.987 – 29.992mm. I don’t have an inside micrometer, so I couldn’t measure the actual diameter of the bearing, but I figured this would be good. 

Step two was to get the lower bearing onto the spindle. Rather than pressing it on, I followed the example I linked to above and accomplished this by temperature differential. After keeping the spindle in the freezer for a few hours, and the bearing in the filament drying box while it was heating to 80C (it’s quite convenient to have a little “workshop oven”…) the bearing dropped right into place.

The lower bearing was mounted by putting the spindle in the freezer and heating the bearing to 80C, at which point it just dropped in place.

Step three was pressing the upper bearing into its seat in the mill head. While I had the mill together I had made sure to fabricate two collars that would fit over the bearings so they wouldn’t be side loaded in the process.

Here the upper bearing has been placed in position, ready for pressing in.


The upper bearing being pressed into place. Note the round aluminum collar fitting over the bearing, and then a random square part used as a space.

Pressing the bearing in worked pretty well. It did initially get cocked so I had to gently tap it on the side to get it to realign itself. After that, it slid right into place.

Upper bearing pressed into place. Note that even though this is 2mm wider than the original bearing, it does not protrude above the seat.

Angular contact bearings must be mounted in the right direction. Obviously, since they can only take loads in one direction, the two bearings must be opposite. But that still leaves you with two choices. In this case, since we want to use the spindle nut to preload the bearings, the inner races will be preloaded towards each other. This means the wide part of the inner race must face outwards on both sides.

After getting the upper bearing into place, it was time for the the final step four: pressing the spindle and the lower bearing into place. By using the collars on both sides, there was no side loading on the bearings.

The bottom part of the setup for the final operation. The lower bearing is positioned on its seat, with the collar, a plastic pipe spacer, and the angle against which the nut is tightened.


On top, we have the collar that ensures the bearing is not side loaded, a spacer for the top of the spindle, and then another random part so the nut can bear on the spacer.

The threaded rod used is 3/8″ and I think it would be better to have a larger one, because it’s springy enough that when you tighten the nuts the bearing doesn’t move until you’ve preloaded the rod so much that the bearing then “jumps” once it’s started moving. This isn’t such a big deal if you’re pressing it tight against a stop, but in this case the upper bearing will be “free” on the shaft and we don’t want it to jump such that it preloads itself. The collar should prevent this from happening, but it felt a bit iffy. With a stiffer setup (1/2″ or maybe even a 5/8″ rod), it would probably move a bit more predictably as you tighten it.

Spindle is in place, the bearing has been greased, and the pulley for the belt is ready to mount.

Once the bearings were in place, there was about 0.2mm radial and 0.15mm axial play at the bottom of the spindle, so at least I had successfully avoided preloading the bearings while pressing them in. Now I just needed to figure out how to set the preload.

I took an idea from the benchtop machine shop, who cut down a 32mm socket to make a tool with four tangs that could be used to tighten the spindle nut. This took some Dremel work but worked great. I could now tighten the nut with a torque wrench rather than the “C-spanner” that came with the mill.

The remaining problem, though, was how to hold the spindle while tightening the nut. The spindle is obviously round, with only a little hole for the pin used with the spindle lock. This is not very secure and it’s hard to hand-hold the spindle while tightening the nut, too. I wanted a more stable way to hold it.

My first idea was to use the drill chuck to hold a hexagonal Allen socket. I could then put a ratchet handle on the socket and hold the spindle that way. This worked initially, and I managed to take most of the free play out of the bearings this way. Once I needed a bit more torque, however, the drill check spun on its taper.

The setup for tightening the spindle nut. The drill chuck is holding a hex socket with a ratchet handle. On top, the custom-made nut holder socket is used with a torque wrench.

Despite trying a few times, I could not get the drill check tight enough on the taper to hold. My next idea was to mount a large hex socket directly in the 3/4″ R8 collet. The collet can not spin on the spindle because of the locating pin, and I figured with only the hex edges biting into the collet it would not spin either. This turned out to be correct, but I was concerned it would ruin the collet. I don’t really ever use this 3/4″ collet so that wasn’t really a problem.

Using this setup I got the final free play out of the bearings. There was no longer any detectable motion either axially or radially. There was a noticeable amount of friction in the spindle, but most seemed to be because of the grease because when reversing direction there was a short distance with much less friction. And in any case, when measuring the torque needed to turn the spindle by wrapping a string around it and pulling, it took about 1/7 of what it did with the old bearings.

The old bearings required 0.7kg weight as read on a spring scale used to pull the string around the 40mm diameter lower end of the spindle. This works out to 0.7kg*9.82m/s^2*0.02m = 0.14Nm torque. Converted to american units, this is 1.2in*lbf. The Benchtop Machine Shop measured 1.0 on his bearings, so this seemed pretty close. They guessed that a range of 0.6-1.5 was acceptable, although I don’t know what they based that guess on.

With the angular contact bearings, the spring force needed was 0.1kg, which would be far below the range above. This might indicate I need more preload, but since there was no play I decided to run the spindle and see what happened.

Initial results were mixed, it made what I can only describe as a “gurgling” sound, presumably this was from the grease being moved around. Gradually upping the speed to the full 5000RPM and measuring the temperature using an IR camera, the temperature rose steadily until it peaked at 67C.

IR camera image of the mill head. The temperature peaked at 67C and started coming down.

The sound gradually changed to become less noisy, but every now and then you could hear the spindle bog down a bit. I assume this was blobs of grease being sucked back into the balls. After peaking, the temperature started slowly coming down. This is textbook behavior for new greased bearings, as the grease gets distributed the friction decreases and the temperature comes down from an initial peak.

Infrared view of the lower bearing. The metal parts have low emissivity, so look “cold”, but they’re really pretty much the same temperature as the grease in the bearing.

While doing this I periodically stopped the spindle to measure friction and make sure there was no free play. Remember that the preload will have a tendency to decrease as the spindle heats up and moves the inner races further away from each other. This appeared to not be a significant effect, maybe the friction is low enough that the spindle and housing have about the same temperature so there’s little differential expansion.

Once this “run-in” had completed, I measured the torque required to spin the spindle (while at operating temperature). Initially the force needed seemed to be more like 0.05kg, gradually increasing towards 0.1kg. It’s hard to measure with the equipment I have, but it would be expected that the friction would increase if the spindle itself is first hotter than the housing but then as it’s stopped the temperature equilibrates and the preload goes up.

I also attempted to measure the stiffness of the spindle, that is, how much it deflects under load. Using the dial test indicator near the lower bearing and a luggage scale wrapped around the spindle, It seemed to require about 20kg of sideways force to deflect the spindle 0.01mm relative to the head. If we assume this is deflection in the bearings and not in the spindle or mill head, it works out to 22N/um. At some point I found a table by SKF of bearing stiffness as a function of preload, but I can’t find it now. As far as I remember, the numbers were more like 100-300N/um, so this seems to either mean that the bearings aren’t sufficiently preloaded or that something else is flexing.

Unfortunately I never measured the stiffness of the original bearings. It would have been nice to have a reference. Given that the friction in the spindle is so low, I could probably attempt to up the preload a little bit, but I don’t have a lot of confidence in my ability to accurately turn the nut by small amounts. (The nut has an annoyingly coarse pitch thread. Given that it’s the thing that sets the preload, it would have been nice if the thread was as fine as possible…) On the flip side, I decided to try some cuts and it seems to work well, so maybe I shouldn’t “chance um”. If I turn the preload up too high, I’m not sure that backing the nut off will help, since the bearing is still quite tight on the shaft.

Anyway, this was a very long post but I figured it would be nice to describe this is some detail given that I had such a hard time finding anything about it. I’ll post an update once I’ve had some experience with how it runs with these new bearings.



CNC mill upgrade: Z-axis

While I took the Z-axis apart to replace the spindle on the CNC mill, I made another discovery. I already mentioned in that post how the thrust bearings for the Z-axis ballscrew were shot, but another thing that puzzled me since the day I got the CNC conversion kit was that it appeared that the ballscrew (which was pre-mounted in the thrust bearings when it arrived) was cocked in the bearings.

I even emailed CNC Fusion, who made the kit, a video and asked whether it was supposed to be like that, and they said basically “we’re not sure what’s going on but if something’s wrong we’ll fix it.” However, at that point in time I had no real way of checking this and it was subtle, so I elected to put the kit together and start using it. Well, this is the first time that this part has been off since then.

Once I took the ballscrew and bearings out, it was clear that something was wrong.

This is looking at the lower thrust bearing down from the top. The bearing race looks pretty much concentric with the hole.

The thrust bearings are mounted in a bracket that also holds the coupler and Z-axis motor. They fit into recesses on two sides of this bracket such that when the bearings are tightened onto the ballscrew, the outer races are preloaded against the bracket and prevents the ballscrew from moving, only letting it rotate.

Viewing the upper bearing from the bottom of the mount. This bearing is clearly not concentric with the hole.

Once I started examing this mount, it became clear that the two bearings, when mounted, were not concentric. By its very nature, you have to machine the slots that the bearings sit in from opposite sides, in different setups, and one of these setups must have used an incorrect part zero. Or it was just designed wrong.

This is the second axis mount that has turned out to be incorrectly made in this kit, back when I got it I noticed that the mount for the X-axis motor also did not line up the ballscrew with the thrust bearing on the opposite side. That was a serious problem and I had to make a small plate to correct that right away. This error is more subtle but obvious if you examine the part, so at this point I’m not very impressed with their QA. (They’ve since gone out of business, so there’s that…)

In any case, this probably explains why the Z-axis ballscrew always seemed to have a tendency to wobble. Now that I know about it, I’ll just make a new, correct, mount. Before I put the Z-axis back together I measured and CADed up this part.

I might wait until the new spindle with angular contact bearings is mounted, though. In the few jobs I’ve run since assembling the spindle with the new bearings, I noticed that surface finish seemed worse. The SuperFly cutter, in particular, exhibited a noticeably ringing sound when cutting, and you could tell from reflections in the surface that the cutter was oscillating up and down. The oscillation frequency seems independent of spindle speed and is quite high, I’d say a few kHz by ear. The only obvious potential cause for this is that the new spindle bearings are less rigid than the old ones, perhaps because I now have too little preload. In any case it seems prudent to wait for the new bearings to be mounted. Now that I know what to do, you don’t even have to take the head off to disassemble the spindle, so it shouldn’t take long.

CNC mill upgrade: Spindle

The last time the CNC mill got some love was when the steppers were replaced with servos. This was quite a while ago, and the mill hasn’t seen very much use since. However, it was now time to machine the holders for the filament rolls for the storage box so I got started squaring the stock. Then several things went wrong.

First, I noted that the motion controller was losing position under certain conditions. After reporting this on the g2core github page, it became clear that this was a regression and there was a workaround. I was pretty unhappy about this, since this is what a motion controller should absolutely never do.

As a consequence of losing position, I then ran the mill head into the hardstop. This wasn’t the first time, but after this, the z-axis ballscrew started sounding even worse than it usually did. It was bad enough that I considered it unacceptable, and decided it was time to do some servicing on the spindle.

First: clean the ballscrew/ball nut. I wipe the screw with oil every day I use it, but it’s never been cleaned since they were first mounted, since this requires removing the head.  While it is shielded from direct debris coming from the spindle, the z-axis ball screw is in the open and small chips will find their way there and stick on the oiled surface. These then get ingested in the ball nut and you get binding.

Second, as I took the ballscrew off, I realized that its thrust bearings were in bad shape. They felt very “gritty” as they were turned. These are deep-groove radial ball bearings and the axial loads from the mounting preload and accelerating the heavy mill head up and down are probably higher that what they’re designed for. In any case, they needed replacing. No big deal, they’re cheap (we’ll see if the new ones are better quality…)

Third, I’ve had a kit I got to upgrade the spindle from 2500rpm to 5000rpm for years. Since the spindle is belt driven, this is easy, just change the gearing in the pulleys. However, also supplied two new spindle bearings since they said the no-name chinese bearings in the spindle can’t handle 5000rpm. I haven’t felt confident about being able to press out the old bearings and, more importantly, in the new ones, since I don’t have a hydraulic press. However, after having gone through the exercise of replacing the swingarm bearings on the NC30 last year (apparently I didn’t post anything about that), I felt a lot more confident about my ability to muddle my way into replacing the bearings!

After having remove the head and taken the ballscrew off, I embarked on the cleaning journey. I started by spraying mineral spirits through the ball nut and running the screw up and down repeatedly. I did this over a bucket and soon there was a bath of mineral spirits with tiny shiny flecks floating around. Clearly something was coming out. The ballscrew would still bind, though, so eventually I overcame my fear of dismantling it, read up about how to service ball nuts, and took it apart.

It’s a very ingenious device. Inside are 70 small (1/8″, 3.2mm) balls which roll between the screw and the nut, kind of like a ball bearing cut up and twisted into a spiral. But then you need a way for the balls to return, so at the end of the ball nut is a small tube that picks up the balls coming out and routes them back to the beginning. All you need to do is take this tube off and turn the screw and all the balls will pop out, one after another, until the ball nut is free.

I managed to not lose any balls, swirled them in mineral spirits; flushed and wiped the track in the ball nut, and did the same with the entire screw, and reassembled it. Success! It now ran smooth as butter all the way from one end to another.

Then it was time for the spindle. I found a related instruction about how to change bearings in the “SX2” mill that the HiTorque mill I have descended from. The spindle isn’t exactly the same, but close enough for the instructions to be useful.

In lieu of a press, the bearings can be pulled off and back on using a threaded rod through the spindle center and some collars so you can bear on the bearing races. The collars can be made from plastic PVC pipes. Getting the bearings off was not a big deal, but it’s easier when you don’t have to worry about damaging them.

The spindle with one of the new bearings already pressed onto the shaft.

Now for the new bearings. These are higher quality (SKF and Nachi) sealed deep groove ball bearings. The lower bearing is pressed onto the spindle shaft first, then the upper one is simultaneously pressed onto the shaft as the two outer races are pressed into the housing. This felt more iffy, since you shouldn’t side load the bearings. Had I been better prepared for this, I would have fabricated some collars of the right size to fit against both races of the bearings, but as it was, I had to improvise.

The spindle being pressed back into the housing, using a 3/8″ threaded rod to pull it into place.

One thing you always have that’s the right size is the old bearing. This works as a collar on the side where the new bearing is going in, but not for the old one since there’s a shoulder. I ended up having to press it by its inner race only, which might have damaged it. I did eventually get them into position.

However, the spindle was now very hard to turn. It’s not hard to understand that pressing in this way will preload the bearings axially. Now, some preload is good, because for stiffness you want all the play in the bearings taken up so it can’t move around. Too much preload, however, is bad, as it overloads the bearing, creating too much friction. I attempted to run the spindle like this, but it became very hot, very quickly.

Another consideration is thermal expansion. The preload specification I found for the SKF bearing called for “heavy preload” being around 10um (0.01mm) axial displacement of the race. Disregarding how you’re supposed to control the position to that accuracy given that you’re just pressing the bearing into the housing until it won’t go any further, 10um is also about the expansion of the spindle with every 10C temperature increase. The cast iron housing also heats up, but not nearly to the degree that the spindle does (after running a long job with the old bearings, you could not keep your hand on the spindle without it being painful, while the housing was merely quite warm.

So what does this mean? As far as I can tell, the typical way this is handled is by having one bearing slip fit onto the shaft, and then controlling the preload with a spring washer. As the shaft heats up and expands, the bearing can move and the washer will keep the specified preload. That’s in conflict with the desire to have all surfaces press-fit to maximize rigidity in the case of a machine spindle. What it appears you have to do is arrange the bearings such that the preload is correct at operating temperature, and such that preload goes down as temperature goes up. This means that there will be a lot of friction when the spindle is cold, but as that friction heats it up, the preload, and friction, will go down, thus creating a negative feedback.

What you don’t want to have is a situation where the preload goes up with temperature, since that would mean as the spindle heats up, friction goes up, which makes it heat up more. A positive feedback, which could lead to overheating. The spindle motor is 500W and if you end up turning all that into heat in the bearings, they won’t last very long (and you won’t have any power left to cut metal with, either.)

Anyway, after fiddling with pressing the bearings slightly back out and trying a couple of times, I ended up with a reasonable preload where the spindle is not too hard to turn and does not get harder to turn as it heats up, at least not significantly. The price for that success was that I damaged the shield on one of them, so it was rubbing and I had to rip it off entirely. So now I have an unshielded bearing. I don’t think this is a big deal, there is a cover plate over the bearing and I 3d-printed a new one that leaves very little clearance to the spindle. It seems very unlikely chips will get in there. More likely, the grease will seep out of the bearing. But from what I could conclude from SKF’s documentation, an open bearing on a vertical shaft at these sizes and speeds will need to be relubricated only every 250 hours. Given how much use the mill sees, that seems like an acceptable tradeoff for having a 5000 rpm spindle.

Deep groove ball bearing (from SKF)

From what I can conclude, though, this is not an application where deep groove radial ball bearings are a good fit. There is too much axial preload. What higher quality spindles seem to use are angular contact ball bearings, which are ball bearings where the races are tilted about 45 degrees. This gives them excellent ability to handle both radial and axial load, but only in one direction. That’s fine, since you always use them in pairs anyway. They also have less friction for a given preload.

Angular contact ball bearing (SKF) In this case, it’s obvious that the bearing can only take loads in the direction where the outer race is forced to the right and the inner to the left.

Being able to only take axial loads in one dimension is actually a plus in this context, too, because you can unambiguously know which direction will give higher preload. This means that not only is it clear how to mount them to ensure preload goes down as temperature goes up, you also always know in which direction to move the bearing to get more preload.

Sealed angular contact bearings are quite expensive (like $100+) but open bearings are about the same price as the deep groove ones I use now. Given that I’ve likely damaged at least one of the bearings, I’m going to try replacing them with angular contact bearings and see how that works out.

In any case, I’ve learned more than I ever knew about ball bearings from this exercise. As the homebuilt aircraft community say, it’s all done for “recreation and education”!

Filament storage part 19

Since the last post, the fan bracket for the heat sink has been completed.

Since it had to fit quite precisely in place below the heat sink on the side lid, I glued a piece of urethane foam in place and cut it to the correct shape and rounded the corners a bit. Then I covered this in plastic film and made the layup over it, wrapped the whole thing in plastic film, and applied vacuum.

I initially only used a single ply, but this didn’t work at all, the vacuum squeezed it and got rid of so much resin there were holes right through the weave. It was also way too flimsy. It had to be redone with two more plies to get it reasonably stiff.

Test fitting the fan holder for the dehumidifier heat sink.

After curing, it fit very nicely to the shape of the heat sink and the side lid, not surprisingly since it was shaped to it. Then the holes for the fan screws and the air passage had to be drilled and cut.

Marking out the position of the fan for cutting the holes.

I realized that it was not going to be possible to use nuts to attach the fan since you can’t get to the inside when the fan is mounted. Instead, I covered the fan in plastic, screwed it in place, and then applied flox around the nuts to stick them in place.

To make it easier to mount the fan, I screwed it to the bracket and then covered the nuts in flox (carefully so nothing got on the screws.)

Once the flox had cured, it was time to mount it by the heat sink. This was done by applying a generous coat of flox around the flange and weighting it in place. I had also drilled 4 holes for nails that ensured that it ended up in the right position.

The bracket has been floxed in place below the heat sink. Here it’s running during a drying cycle. This worked out very nicely.

This ended up working really well. The fan fits perfectly, there’s a tiny gap between the heat sink and the fan holder that can be covered up in tape. You can feel a little air escaping through the gap but I don’t think it does much to the cooling efficiency.

With that, the glass work was done. Since then, I’ve been working on the software. It’s been quite tricky to figure out the best way to get moisture out, but things are converging. I’ll have more to say about that in the next post, but as a sneak peek, this graph shows the current temperatures and humidities:

Filament storage part 18

The filament storage box was now in a state that I could start wiring everything up. Running the wires was pretty quick, but then I had some software work to do before things started functioning. I had stubbed out a lot of the code back when I assembled the circuit board, but there’s only so much you can do without having hardware (or a simulator!) to test it on.

I also still had to glass the inside of the lid before I could add seals to it to make it really tight, but I did verify that the heater and fans work. So far I’ve worked up to a box temperature of 70C, but slowly to give the epoxy plenty of time to post-cure to deal with the higher temperatures. The Pro-Set can be post-cured up to a temperature of 80C for an ultimate glass transition temperature of 95C, so there’s a bit to go yet.

Glassing the inside was a bit tricky because of the sharp corners. I had initially intended to vacuum it, but it actually turned out that the glass conformed pretty well to the corners without it, so I didn’t bother.

The finished layup on the inside of the lid. There’s a flox corner around the entire outside, and the glass is lapped halfway up the flange to give it a chance to conform to the corners.

To post-cure the lid, I strapped it in place while heating the box up to 70C. This took out the small curve it had gotten while curing and made it conform very well to the shape of the box.

The lid had taken on a bit of a curve as it cured, so I decided to “post-cure it in place” by strapping it against the box while heating it up. The heat makes the glass creep a bit and worked perfectly for taking out the curve.

The picture above also shows the electronics enclosure with all the wires. It’s a bit of a mess now, it still needs to get cleaned up. The little MicroOLED display from SparkFun that displays the current temperature and humidity can be seen among the wires. It will be attached to the top of the enclosure, which still needs to get printed.

There’s one more fiberglass layup needed, because the fan that blows air over the exterior dehumidifier heatsink needs a bracket/duct for it. That layup is curing right now, so more on that shortly.

Filament storage part 17

Coming up on the end of fiberglass work, I completed the first layup for the box cover, the outside. This was pretty easy since it’s mostly just flat, but the glass has to go around the edges and conform to the corners. The cloth will go around a 90-degree corner but only barely. Since the side is only 0.75″, there’s not much material for the cloth to hold on to.

The first layup for the box cover, the outside, is done.

I had to go back and wipe the cloth into position a few times but as it cured and the epoxy got thick and sticky, it eventually stuck in place.

One other thing that needed to be done was adding something on the cover for the dehumidifier so it could be held in place. I glassed in hardpoints in the side of the box so now I needed to add something that could hold it in place. I decided to just dremel a hole in the glass and carve away enough foam that I could flox in an aluminum tab with a screw hole in. Cutting the hole was quick work and by filling the hole with very wet flox, moving it around a bit, and then inserting the tab, I could be pretty sure there were no huge air voids.

To get the tab in the correct place I simply screwed it in place while it cured. This worked really well and one M4 screw top and bottom, in combination with the stainless steel pins that register its position, will hold it very securely.

Close-up of the restraint for the dehumidifier cover. An aluminum tab was floxed into the cover. Mounting the screw while curing ensures the tab lines up with the threaded hole in the hardpoint on the box. The plastic film ensures I don’t epoxy the cover to the box.

Next is the inside of the cover. This will need to go across an inside corner so I think I will use the vacuum technique here, too. That will be the end of the structural glass work.



Filament storage part 16

With the bottom of the box done, time to cover the remaining bare foam on the front. The front is 1.75″-2″ wide so we’re talking applying glass tapes all around. To bond to the sides a loooong flox corner was needed all around the inside and outside, which required a lot of Dremel work to remove the foam and get bare glass everywhere. 

The box front uses flox corners all around the inside and outside, so there was a lot of foam routing needed.

It took a lot of flox, too. I think I mixed 7oz of epoxy before it was all filled. I used scrap BID and just kept cutting tapes and applying until I had two plies everywhere, and then added peel ply.

The layup is complete, including peel ply. There were a few small air bubbles against the flox, but not many.

That completed the main work on the box. At this point all the wiring for fans, heaters, and sensors can be added.

The lid also needs to be fabricated, though. This consists of two blocks of foam, which were cut and sanded so one fits into the opening and the other makes a flange that matches the perimeter. After a lot of sanding, these were joined together with micro and weighed into place.

The box lid uses two pieces of foam, one for the inset and one for the flange.

 Once the micro has cured, the lid will get two layups, one for the outside and one for the inside. Then we’re finally done with all the fiberglass work.


Filament storage part 15

Now it’s time to complete the bottom of the box, fitting the penetration bracket into it.

First, the shape of the bracket was measured out on the bottom of the box, and the foam removed to the depth that would match the bracket using the Dremel. This recess was then beveled to match the bracket.

Since the recess also had quite sharp corners, I decided to try the “Lo-vac” method again. This setup was a bit trickier since I’d either have to enclose the entire box inside the plastic wrap or make some sort of joint along the sides. I used some plumber’s putty to put a bead all around the box a few inches below where the layup would end, circling into the inside.

The trickiest part was the front of the box, which still has bare foam. Trying to press the putty into the urethane foam would just have obliterated it, so I put a bead of sealant along the foam, let it cure, and then gently pressed the putty into it.

I didn’t end up taking any pictures before or during the layup, since things got pretty busy. I was pretty sure getting the big piece of fabric covering the top to conform to the recess would be next to impossible, so I used two narrow strips that went into the recess and just lapped onto the flat part, and then covered those with two large plies of cloth. Once the cloth was on, I used the electric cutter to cut a large hole so it just fit over the perimeter of the recess. This worked pretty well, but it all took a pretty long time and since I also used the  “medium” Pro-set hardener instead of the slow that I usually use, things were getting pretty sticky by the time I was ready to put the vacuum on.

The plies covering the bottom of the box have been applied and the layup is under vacuum.

I also had a hard time getting a good seal for the vacuum. I spent the better part of an hour going around the edges, pressing into the putty, straightening wrinkles, taping the loose edge, and once I also injected some sealant around the hose I finally got it to pull a decent vacuum.

After the layup had cured for 3-4 hours more, I could pull the peel ply off without too much trouble. Here, I’ve already cleaned the threaded hole for the drain fitting in the lower left.

The peel ply came off pretty easily, but the layup has a similar whitish appearance like the bracket in the last post. There are also some air bubbles visible. I think I just took too long and by the time I had vacuum the resin had gelled enough that the dinky little vacuum pump didn’t manage to pull the air out through the cloth. It did conform pretty well to the recess, though.

The holes for the storage fittings have also been cleaned. The hardpoint in the recess is for the mounting screw and has yet to be drilled.

Cutting out the fiberglass over all the threaded holes and cleaning out the threads worked like a charm, this method definitely works. If you get the sealant just the right temperature with the hot air gun, you can actually pull it out of the threads like a plug without leaving much of any residue at all.

Next it was time to drill and tap the holes for the mounting screws in the hardpoints in the recess. Using the bracket as a template, I just marked the locations with a drill, drilled out the holes the proper size for an M4 tap, and tapped them.

Finally, the recess needed to have holes for the inside fittings and tubing cut. I attempted to mark the locations there using the bracket, too, but here I did a fairly poor job so I had to enlarge the holes a bit to get them all to fit.

The bracket with its inside fittings and tubing is ready to mount into the holes in the box.

These holes are just bare foam on the inside right now. Ideally I would coat these with flox so there’s no chance of damaging the foam, but once assembled there’s no reason to be fiddling around with these so it shouldn’t matter. It can always be done later, if necessary.

Here are the penetrations into the (upside-down) box. By having the tubing protrude into the box, the filament won’t have to make a sharp turn as it enters the hole.

Here’s the bracket mounted into the bottom of the box. Only a few of the fittings are in place now, and I need countersunk screws instead of the button-head ones, too. The short piece of tubing with the red cap shows how unused fittings will be closed off so there’s no air entering.

I’ve been worried about how to make these penetrations since I started thinking about making this box over a year ago, but this worked out OK. The fit isn’t stellar but it’ll do. The only thing that remains to do now is glass the front of the box and fabricate the cover. At that point we can actually turn on the heat and see what happens! (To actually put some filament in there, I need to fabricate the holders for the spools that go inside, too.)

Filament storage part 14

It’s been a couple of weeks since the top of the filament storage box was completed. In the time since, I’ve been working on the bottom.

The first thing that had to be done was to add a drain for the water from the dehumidifier. I did this by adding an aluminum hardpoint glued to an aluminum tube, just like I did for the filament storage pockets.

The drain hole for the dehumidifier. The top of the aluminum tube has been capped with duct tape to avoid getting flox into it.

After filleting the area around the tube with lots of flox and letting it cure, I sanded away flox and the aluminum to make a nice shape for the water to drain into (and not out towards the surface.

So the bottom of the box should have penetrations for all the filaments to exit. After going back and forth a bit I decided to make a bracket that could hold push-in fittings on both the inside and outside. The reason for having them on the inside is so that a short length of tubing can go through the foam, enter the inside of the box, and create a transition so the filament won’t scrape against the fiberglass on the inside.

I conveniently had a piece of PVC foam left over after cutting the top and bottom. This was perfectly sized for making this bracket. Each side of the bracket will have 12 of the push-in fittings, so I had to fabricate 24 small pieces of aluminum and tap them with a 1/8″ NPT thread. I also had to make 5 pieces countersunk for the M4 mounting screws that will hold this bracket in place against the bottom of the box.

This piece of foam will have 12 holes on each side where the push-in fittings will screw in. It will also have 5 holes for mounting screws. That’s a lot of hardpoints.

The hardpoints for the NPT fittings and the mounting screws have been fabricated and fit into the foam.

The top and bottom of the bracket has been glassed and peel plied.

To make it easier to glass this bracket, I beveled the sides slightly. I did not have a lot of extra material, though, so even with the bevel there would be quite a sharp turn for the glass to make.

I had recently read about the “Lo-vac” method used by the Cozy Girrls that seemed like it would be useful for this situation. It’s sort of a “vacuum bagging lite” where you use peel ply, paper towels, and plastic pack wrap with a cheap vacuum pump to put the layup under a slight (like 50%) vacuum to help get rid of voids and make the glass follow the foam tightly. It seemed worth a try.

The “lo-vac” layup has been wrapped in plastic wrap and put under vacuum. It does definitely help the cloth conform to the shape of the foam, but also make the “bottom” (the outside) of the layup no longer lay flat.

The plan was to give the bracket a flat outside, extending a bit outside the foam. This would make a surface so the inside layup could get some glass to glass bonding. (Similar to the Long-Ez practice bracket.) I intended to do this in a single layup, but didn’t realize that for this to work I needed to put the  flat part against a surface inside the vacuum bag. As soon as I put the layup under vacuum, the flat part got pulled into a curve.

After partial cure, the peel ply and paper towels have to come off. Normally you can peel off peel ply after a full cure, but the presence of resin-soaked paper towels on the outside makes it far too stiff to do that. I struggled a bit anyway and had to warm the layup to make it easier.

After curing and trimming, the part looked pretty good apart from the non-flat top. However, the layup ended up with a whitish appearance, which typically means it is resin-starved. I’m not sure whether this is just the fact that the peel ply was pushed tightly against the glass cloth and it’s just in the surface, or if the vacuum pulled air bubbles up out of the foam and into the cloth. The layup definitely was not too dry before pulling the vacuum. The part is fine for this purpose, but before using this for airplane work I would definitely have to sort this out.

The finished, trimmed bracket.

The layup ended up with this whiteish appearance that makes it look like it was too dry.


After cure, the glass was cut out from all the holes, the sealant removed, and the threads chased with a tap to clean them up.

The final step was to cut the fiberglass over all the holes in the hardpoints with an X-acto knife and then clean up the holes. It ended up working quite well.

With this bracket done, it was time to cut a recess in the bottom of the box and glass it. That’ll be the topic of the next post.