The Smell of Molten Projects in the Morning

Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.

The New Hotness

  • Thing-O-Matic: Minimum Power Supply Load

    Dummy load in place
    Dummy load in place

    The ATX power supplies commonly used in PCs generally require a minimum load of about an amp on the +5 V and +12 V lines to ensure good voltage regulation, but the Thing-O-Matic Motherboard has only a 30 Ω power resistor that draws 170 mA. They’re also designed for relatively constant-current loads, which the Thing-O-Matic is not, by any stretch of the imagination, so it’s no wonder the voltages jump all over the place.

    I think, but cannot prove, that many of the random problems plaguing long-duration prints arise from power glitches. That load resistor on the +5 V line was, at best, a stop-gap measure, and this is what I had in mind from the start. There are additional constant loads here and there throughout the Thing-O-Matic, but it really does not apply a known minimum load to the power supply.

    I got a stock of 6 Ω resistors for that heater project and used a trio here: one draws 800 mA from +5 V (about an amp, including the MB load) and the other two in series draw 1 A from +12 V. The little fan runs from +12 V, although I may connect it to +5 V to make it quieter; the 16 W total power dissipation is too high for convection cooling.

    Power resistors on heat spreader
    Power resistors on heat spreader

    Note that these are 50 W resistors dissipating 6 W apiece while running at room temperature. Yes, they look like extruder heater resistors, but this is an application they’re designed for.

    A bit of machining mated a junked CPU cooler to a half-inch slab of aluminum that serves as a heat spreader. The cooler had many tabs and protuberances on its bottom surface that I simply sliced off with an abrasive wheel. Two pieces of brass shim stock filled in a mysterious recess along the right edge in this picture. The cooler’s spring clamp engages a pair of wire tabs screwed to the spreader and the force smushes a layer of thermal compound into the air gaps.

    CPU heatsink on aluminum spreader
    CPU heatsink on aluminum spreader

    The holes atop the cooler didn’t match up with any fans in my collection, but that’s why I have a Thing-O-Matic. I had to rotate the fan case to get the holes to fit, which was trivially easy in OpenSCAD.

    Fan Adapter Plate Model
    Fan Adapter Plate Model

    And then it built about like you’d expect:

    Fan adapter plate
    Fan adapter plate

    Yes, it really needs a finger guard, but that’s in the nature of fine tuning…

    Assembled dummy load
    Assembled dummy load

    The OpenSCAD source code, with a rather fat ThreadWidth setting. IIRC, this was fallout from a random walk through the Skeinforge parameter space.

    // Fan adapter plate for CPU cooler
    //  Used for Thing-O-Matic minimum current loads
    // Ed Nisley - KE4ZNU - Mar 2011
    
    // Build with...
    //	extrusion parameters matching the values below
    //	+2 extra shells
    //	3 solid surfaces at top + bottom
    
    include </home/ed/Thing-O-Matic/lib/MCAD/units.scad>
    
    // Extrusion parameters for successful building
    
    ThreadWidth = 1.0;					// should match extrusion width
    ThreadZ = 0.33;						// should match extrusion thickness
    
    HoleWindage = ThreadWidth;			// enlarge hole dia by extrusion width
    
    // Plate dimensions
    
    PlateX = 70.0;
    PlateY = 66.0;
    PlateZ = 5.0;
    
    FrameHoleSpace = 50.0;				// mounting holes in frame
    FrameHoleXOffset = 10.0;			//  ... offset from front left
    FrameHoleYOffset = 10.0;			//  ... which are *not* symmetrical!
    FrameHoleDia = 3.0 + HoleWindage;	// from frame holes
    FrameHoleRadius = FrameHoleDia/2;
    
    FanHoleSpace = 40.0;				// fan hole separation in X & Y
    FanHoleDia = FanHoleSpace * sqrt(2);	// diameter of hole circle
    FanHoleRadius = FanHoleDia / 2;
    
    FanAngle = acos(FrameHoleSpace / FanHoleDia) - 45;
    
    FanDuctDia = 48.0;
    FanDuctRadius = FanDuctDia/2;
    
    FanCenterX = PlateX/2;
    FanCenterY = PlateY/2;
    
    FanScrewDia = 4.0 + HoleWindage;	// from fan frame holes
    FanScrewRadius = FanScrewDia/2;
    
    // Convenience settings
    
    BuildOffsetX = 3.0 + PlateX/2;		// build X spacing between top & bottom plates
    BuildOffsetY = 3.0 + PlateY/2;		//	... Y
    
    Protrusion = 0.1;					// extend holes beyond surfaces for visibility
    HoleZ = PlateZ + 2*Protrusion;
    
    //-- Build it!
    
      difference() {
    	cube([PlateX,PlateY,PlateZ],center=true);
    
    	translate([(FrameHoleXOffset - FanCenterX),(FrameHoleYOffset + FrameHoleSpace - FanCenterY),0])
    	  cylinder(r=FrameHoleRadius,h=HoleZ,center=true,$fn=6);
    	translate([(FrameHoleXOffset + FrameHoleSpace - FanCenterX),(FrameHoleYOffset - FanCenterY),0])
    	  cylinder(r=FrameHoleRadius,h=HoleZ,center=true,$fn=6);
    
    	cylinder(r=FanDuctRadius,h=HoleZ,center=true,$fn=48);
    
    	rotate(a=[0,0,FanAngle]) {
    	  for(x=[-FanHoleSpace/2,FanHoleSpace/2]) {
    		for(y=[-FanHoleSpace/2,FanHoleSpace/2]) {
    		  translate([x,y,0])
    			cylinder(r=FanScrewRadius,h=HoleZ,center=true,$fn=6);
    		}
    	  }
    	}
      }
    

    The original as-it-was-being-machined heat spreader dimensions:

    Dummy load - As-built spreader dimensions
    Dummy load – As-built spreader dimensions