Whirlpool Refrigerator Fan Noise: Cartridge Bearings?

The endcaps of that fan motor have a crimped-in-place aluminum disk capturing a felt washer that held oil and a circular spring that presses the spherical bronze bearing in place:

Fan motor endcap - interior

Fan motor endcap – interior

Pulling all that out reveals the bearing (tilted on its side to show the spherical outer shape):

Fan motor endcap - parts

Fan motor endcap – parts

The shaft is a scant 3/16 inch in diameter, about 0.181 instead of 0.1875 inch. I have some 3/16 inch ID cartridge bearings in the heap that are a sloppy fit on the shaft, but nothing that a wrap of 2 or 3 mil shimstock and a dab of green Loctite wouldn’t cure.

A bit of doodling suggests two of these bearing holders should fit in the endcaps, stand over the spherical bearing mounts, capture the ball bearing OD, keep dust out of the balls, and perhaps have enough compliance to let the bearings self-adjust to the right fit:

Fan Bearing Holder

Fan Bearing Holder

The fan tries to pull the rotor out of the frame, although I think the bearings & Loctite can handle that much axial load. I must try this out on the bench and see how long it takes for the Freezer Dog to return…

It needs a trial print and some sizing adjustment, plus maybe an allowance for end play, but it’s close.

The OpenSCAD source code:

// Refrigerator Fan Bearing Support
// Ed Nisley KE4ZNU - May 2012

// Layouts

Layout = "Show";			// Show Fit Build

Gap = 5.0;					// between parts in Show mode

BuildOffset = 5.0;			// offset between parts on build plate

//- Extrusion parameters must match reality!
//  Print with +1 shells and 3 solid layers

ThreadThick = 0.25;
ThreadWidth = 2.0 * ThreadThick;

HoleWindage = 0.2;

function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);

Protrusion = 0.1;			// make holes end cleanly

//----------------------
// Dimensions

CapID = 32.0;				// bearing endcap
CapHeight = 7.0;			//  ... below aluminum cap recess

SupportOD = 10.3;			// spherical bearing support
SupportHeight = 3.0;

BearingOD = 12.7;			// ball bearing race
BearingID = 4.68;			//  ... shaft dia
BearingThick = 4.0;

Ribs = 8;					// number of support ribs
RibLength = 2.0;			// length beyond cylinder
RibWidth = 4*ThreadWidth;

LidOD = CapID/2;			// bearing retainer lid
LidThick = 2*ThreadThick;

//----------------------
// Useful routines

module PolyCyl(Dia,Height,ForceSides=0) {			// based on nophead's polyholes

  Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);

  FixDia = Dia / cos(180/Sides);

  cylinder(r=(FixDia + HoleWindage)/2,
           h=Height,
	   $fn=Sides);
}

module ShowPegGrid(Space = 10.0,Size = 1.0) {

  Range = floor(50 / Space);

	for (x=[-Range:Range])
	  for (y=[-Range:Range])
		translate([x*Space,y*Space,Size/2])
		  %cube(Size,center=true);

}

//-------------------
// Objects

module Retainer() {
  color("Green")
  difference() {
	PolyCyl(LidOD,LidThick);
	translate([0,0,-Protrusion])
	  PolyCyl(BearingID,(LidThick + 2*Protrusion),8);
  }
}

module Holder() {

  color("Chocolate")
  difference() {

	union() {
	  cylinder(r=(CapID - 2*RibLength)/2,h=(CapHeight + LidThick));
	  for (Index = [0:Ribs-1]) {
		rotate(Index*360/Ribs)
		  translate([0,-RibWidth/2,0])
			cube([CapID/2,RibWidth,CapHeight],center=false);
	  }
	}

	translate([0,0,-Protrusion])
	  PolyCyl(SupportOD,(CapHeight + 2*Protrusion));		// clear old support

	translate([0,0,SupportHeight])
	  PolyCyl(BearingOD,CapHeight);						// bearing pocket

	translate([0,0,(SupportHeight + BearingThick)])
	  PolyCyl(LidOD,CapHeight);							// bearing retainer

  }
}

//-------------------
// Build things...

ShowPegGrid();

if (Layout == "Show") {
  Holder();
  translate([0,0,(CapHeight + Gap)])
	Retainer();
}

if (Layout == "Fit") {
  Holder();
  translate([0,0,CapHeight])
	Retainer();
}

if (Layout == "Build") {
  translate([(CapID/2 + BuildOffset),0,0])
	Holder();
  translate([-(LidOD/2 + BuildOffset),0,0])
	Retainer();

}

Well, it’s a thought…

,