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() {

	translate([(FrameHoleXOffset - FanCenterX),(FrameHoleYOffset + FrameHoleSpace - FanCenterY),0])
	translate([(FrameHoleXOffset + FrameHoleSpace - FanCenterX),(FrameHoleYOffset - FanCenterY),0])


	rotate(a=[0,0,FanAngle]) {
	  for(x=[-FanHoleSpace/2,FanHoleSpace/2]) {
		for(y=[-FanHoleSpace/2,FanHoleSpace/2]) {

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

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