Pacifica Headlight Upgrade

Over 2 years ago, when we got the minivan, I intended to upgrade its crappy halogen headlights. (In fact, I started planning this upgrade before we even got it, since I new the headlights were bad.) 

To be able to work on this while having a vehicle, I ordered two used headlights from ebay, and on the assumption that I could figure out how to fit them, a pair of Morimoto M-LED 2.0 bi-led projectors for low/high beam, and a pair of Morimoto Mini HB LED dedicated high beam projectors. After that, the project sat on back burner for most of the time, first because of the absurd difficulty in opening up the headlights.

Back in the Passat days, opening up headlights was easy. The lens was held on with butyl rubber and by throwing them in an oven at ~90C for a couple of minutes it would soften up sufficiently to be able to pull the lens off. These days, a bunch of manufacturers have switched to a 2-component glue known as “Permaseal” which is, you might guess from the name, much more permanent. No matter how much you heat up the headlight, it remains stiff enough that you may be able to wedge a tool into the glue line and physically tear it. I attempted this and basically failed. Only after a major mutilation of the headlight did I manage to get the lens off, cracking a piece out of the lens and ripping parts off the base in the process.

For the second headlight, I did what other people have done and simply cut the lens with an oscillating saw instead.

After the extreme difficulty of getting the lens off on the first headlight, on the second one I just cut the lens with the oscillating saw instead. Much faster and much less damage to the overall headlight.

Looking at the headlight above, the projector on the left is the low beam, while the large reflector in the middle is the high beam. The small reflector on the right is the turn signal. The idea here is to simply replace the stock projector with the M-LED, which has a similar size lens, and to fit the Mini HB projector where the high beam reflector is mounted.

While the M-LED lens is similar size as the stock projector, the length is different. The projector is mounted on a plastic frame, shown below.

This is the frame to which the low beam projector was mounted. To mount the M-LED, it needed to be cut out a bit in the middle and have material added for the top holes. JB Weld to the rescue.

Because the M-LED is shorter, I also mounted it on the front side of that frame rather than on the back like the stock projector. (The four round pads are the back sides of the projector screw holes.) The layout of the holes are naturally different, so I had to make up new holes, but luckily I could use the back of the stock screw holes as the reference plane for getting the projector aligned.


The M-LED projector mounted where the low beam projector was.

While the M-LED is shorter than stock, it’s still long enough that mounting it on the front face of the frame still makes it protrude further forward than the stock one. To get it to fit, I had to cut back the shroud as much as possible. Luckily, that was enough. If I had to cut it more I would have had to start cutting into the frame and moving the projector back instead.

The Mini HB projector is easy to mount, you just put it into the bulb hole in the reflector. To get it to look nice, there’s a matching “gatling-style” shroud (similar to the projectors used in the NC23 retrofit), but when you add that shroud it’s a very tight fit to the covers on top and bottom. A large amount of cutting of shrouds and the headlight housing was necessary, but in the end I got it all to fit. 

Both the M-LED and the Mini HB projectors mounted. Looks pretty clean.

If you look at the original light at the top of the article, the high beam housing also had a large chrome-colored housing around it. This is not ideal because it makes all the changes very visible. It also detracts from the look of the light. This all got painted black to match the rest of the housing. Only the projector shrouds were kept chrome, to make it look as much stock as possible. I kind of wish there was an option for a smooth, round shroud for the Mini HB instead of the “gatling-style”, but there isn’t. In the end, I think it looks pretty clean anyway.

The M-LED projector has a power supply box that was mounted to the inside of the headlight housing behind the projector.

As far as wiring goes, the M-LED power supply has two 9006 headlight socket inputs, for low and high beam, so that makes wiring it very easy. The low beam input gets plugged into the stock low beam bulb connector, and for the high beam I had to make a splitter so the stock high beam bulb connector can be plugged into both the M-LED high beam input and the Mini HB input. Then I 3d-printed some brackets to hold the connectors and screwed them to the back of the lights so they’re not rattling around inside the housings.

To avoid the connectors rattling around inside the headlight housings, I 3d-printed some brackets that hold the connectors to the screw holes on the back of the lights.


To swap the headlights, you need to drop the entire front fascia. This is a bit time-consuming, but not very difficult.

Once all the wiring was completed and the paint cured, everything (especially the projector lenses) was cleaned up and the headlight lens glued in place with Permatex Right Stuff. It was actually easiest to close up the headlight I sawed off since it wasn’t mutilated like the one where I cut the Permaseal joint.

To switch the headlights, you have to drop the entire front fascia which was a daunting prospect but with the help of instructions and youtube videos wasn’t a big deal. It was even possible to do it without disconnecting anything (except the lights, obviously) which meant I could get by with not powering down the hybrid system and disconnecting the high voltage battery, which was nice.

I even had the privilege of having to do this twice because once I started adjusting the headlight aim it became clear that I had forgotten to engage the horizontal adjustment screw on one of them, so no amount of turning it moved the lights. Second time around was much quicker, I can tell you that.

New headlights in action.

So how does it work? They’re awesome. Everyone agrees the stock projectors are bad, but the M-LED low beam is very wide and even, and the high beam with both lights on is also something else. I’ll try to get a good picture of the beam pattern, but I have to dig out my 40D to get a good view of that. So it took 2.5 years, but it was worth it.

2022 House update: the foyer

Besides the large living room, there was one easily sealed off part that also needed to be stripped and repainted: the (unused) foyer. The windows and windowsills here were also in bad shape externally, so that also needed fixing.

We don’t actually use the foyer as an entrance (no one in Hawaii seems to, there’s always a side entrance used), so there would be no loss to sealing it off for a while. I had planned two weeks to strip and paint it, but as usual that was quite a bit optimistic.

The foyer is separated from the living room by a cased opening. This needed to be stripped first, before the opening is sealed with plastic.

The weird thing about the foyer is that the wall planking is not planed smooth like everywhere else, they’re just sawed and quite rough. The wall on the right in the picture above is the back wall of the kitchen cabinets, so I guess they just used planks planed on one side for the exterior wall and must have “forgotten” that the foyer was going to be here. I don’t know what the excuse is for the wall on the left side, which is an exterior wall, not being planed. (Maybe they accidentally put that facing outwards, I haven’t pulled off the vinyl siding to check.)

In any case, the rough nature of the wall made it much, much harder to strip than the normal, planed walls, since the paint sticks in all the valleys. Then there was the termite damage. This area had by far the worst damage I’ve encountered so far. I used more than a full gallon of Bondo for all the repairs.

The walls here had pretty severe termite damage.

The outermost (leftmost) plank in this wall was particularly bad. I pretty much reconstructed the entire plank in Bondo before I was done. I also encountered the back sides of some repairs I’d made from the kitchen side.

The walls are done here, but the white trim on the cased opening remains.

With all the painting done here, it was time to take the windows out for stripping and painting.

Once all the interior painting was done, we took the windows out for stripping, re-glazing, and painting, so we’ve had the window opening covered by a sheet of plastic for a while now. It takes a long time for glazing putty to harden here, I’ve been waiting to paint the windows for more than two weeks at this point.

At some point I also have to strip and paint the window frame, but I don’t want to do that too early since I don’t want to have to staple the plastic back up with fresh paint. Once the windows are painted, I’ll tackle the window frame. While I’m waiting on the putty to cure, I’m trying to make some progress on some cabinets doors instead. 

2022 House update: the kitchen

We already painted the lower kitchen cabinets and replaced the countertops back in 2016, but the upper cabinets and the wall/ceiling remained. Needless to say this would put the kitchen out of commission, but we also didn’t want Axel running around while doing the stripping work. We were fortunate enough to be able to stay in a friend’s Ohana for a month in September while we did the work.

The kitchen took a lot longer than I had planned. It’s amazing how much longer any form of corners, trim, etc, take over just a plain surface. Our ballpark rate for stripping a wall is 1m^2/hour. However, when you have to do rounded trim, or inside cabinets where you can’t fit the Speedheater very well, it takes many times longer than that. The kitchen had an abundance of such problems. Stripping and sanding the ceiling is also very hard on the neck, even if the weight of the Speedheater is carried by the stand. My generally unhappy neck just does not like looking upwards for hours on end.

This is what we had to work with. The lower cabinets there are done, but everything else needs stripping and painting.


Kathy plugs away at stripping the ceiling with the Speedheater.


This is the easy part of the stripping work. The flat walls go quickly.


The cabinets are not easy to strip, though. It’s very cramped, but the new Cobra from Speedheater made it a lot easier.

It turned out to be very difficult to get the large Speedheater into the shelved cabinets, so we decided to invest in the new “Cobra” from Speedheater. It’s a much smaller IR heater that’s perfect for doing detail work. It made it possible to get the paint out of the corners, but it was still slow work.

Lots of repair work


Priming in progress


Top coat on ceiling




The final result

In the end it took 7 weeks from start to finish, so that’s how long we didn’t have a kitchen. Out of that, the stripping was just over a month, the rest painting. There’s always a long tail of painting, with a few coats of Brushing Putty on surfaces receiving the brilliant white paint, each requiring drying at least 48h until it’s easily sandable without clogging up the paper.

We’ve been  wondering how to finish the kitchen since we started it in 2016, so it feels good to be done (except the cabinet doors, of course.) The remaining large job is the living room. We’re still working out how to manage that…

2021 House update: the hallway

Things have been dead here for quite a while, but in real life we’ve made a lot of progress on the house. The process here has been described ad nauseam in the previous posts, so these updates will be pretty brief.

While Kathy and Axel went to visit the grandparents in July of 2021, I stripped and painted the hallway.

The doorways were sealed off with plastic and the doors to the rooms taped shut so lead dust wouldn’t get everywhere.


Ready to start stripping


This is the GrooveSander, a specialized tool for cleaning up the grooves in the planking. I affixed some sand paper to a foot-long length of square tubing with spray adhesive. The grooves often get a bit damaged from the scraper, this tool works great for getting into the corner and cleaning up the grooves.


All the old paint has been stripped away and the termite damage repaired.


All repainted, the color is “Saffron” and the ceiling is the same white as everywhere else. Looks good!

Feeling confident about being able to make progress (amazing how much difference working half-time makes!) we decided to tackle the kitchen. That’s the next post.

Filament storage part 20

It’s been a while since the last update on the filament storage project. I was at the point that I needed to machine the brackets that will hold the filament spools when I started the spindle bearing replacement project. Since it took a while to get the spindle reliably working again, and there are 5 of them, it took a while to get the parts fabricated.

This is what the holders for the filament spools look like. The top one is finished, the bottom one has only been machined on one side.

The idea is that the filament rolls will be mounted on 2″ diameter tubes, and those tubes slide into the recesses cut in the spool holders. This of course requires these brackets to be lined up properly. The edges that will hold the filament rolls are only 3mm deep so they need to be located fairly precisely.

After thinking about how to do this, I decided to make use of the 10mm registration hole I had drilled through all the parts and line them up by getting a 10mm steel rod for a linear rail and threading them all onto it. This would ensure they are all concentric. Then I could cut spacers between each of them to also hold them at the correct distances from each other.

Test fitting the brackets, with pieces of 2×4 cut to the correct length to set the spacing. The aluminum angle at the bottom is used to ensure the brackets aren’t rotated relative to each other around the steel rod.


Two pieces of wood set the distance between the end pieces and the back, to ensure the assembly is parallel with the box.

If you think about it for a minute it becomes obvious that getting that steel rod out is a problem. Either it has to be cut into pieces (which isn’t easy since it’s hardened) or it needs to come out through the side of the box. I chose the latter, drilling a 10mm hole through the left edge of the box after locating the brackets.

After cutting the 2″ tubes that will hold the filament rolls, these were also test fit.

There was a lot of test fitting since I did not want this to go wrong. It would be a major pain to redo. After convincing myself that everything was good (and thinking twice and even three times about whether I could get everything out after fixing the brackets, I had convinced myself it was OK. The wood spacers were fixed in place with some Bondo, and it was time to mix up some flox.

After the wood spacers were Bondoed in place to make sure nothing would shift, the bottoms of all the brackets were floxed in place. Note that unlike the other three tubes, the rightmost tube is not in its mounted position, since this would make it impossible to get to the 10mm rod and push it out the side.


It was a bit tricky to get the flox, which has a tendency to clump to itself, to come out even. I tried my best to make a nice fillet all around the brackets, but in the end I had to go in and sand them to get rid of all the little sharp edges that resulted.

Once the bottoms had cured, I flipped the box over and repeated with the tops.

With the box flipped upside down, the tops of the brackets were floxed in place the next day.

After a good cure, the Bondo was snapped off and the spacers could be withdrawn. Then the 10mm rod was pushed out the side of the box. The hole in the side was plugged with a foam plug fitted in place with micro and covered with two plies of BID.

The hole in the side was filled in with a foam plug and micro and covered with some fiberglass.


Verifying that a 3.5kg spool can indeed fit (and that the lid can be closed.) There’s not a lot of extra space, but that was intended.

So with this task completed, we’re rapidly reaching the end of this project. I need to adjust the channel where the water drips down after the cold plate, and I also need to put some handles on the lid so it can be taken off more easily. After that, it should be ready to start drying some filament!



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: