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:

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

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:

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…