Advertisements

Archive for September, 2013

Homebrew PCB Masking: Sharpie FTW!

This is the drilled and etched PCB for the brassboard of the Hall effect current control LED Blinky Light:

Hall Effect Brassboard - bare front

Hall Effect Brassboard – bare front

The big rectangle at the top will heatsink the main p-MOSFET power switch, which shouldn’t dissipate much power at all. The two lower rectangles heatsink the n-MOSFETs, although I think they may each require a stand-up metal tab to handle the dissipation during high-duty-cycle blinkiness.

The silver line around the edge is soldered copper foil tape connecting the top and bottom ground planes; a dozen or so additional Z wires will connect the planes at high current nodes. It’ll get a bunch of flying signal wires, too, because I’m not a fanatic gotta-embed-all-the-wires kind of guy on stuff like this.

The PCB is 30 mil FR4, which (once again, I make this mistake over and over again) seems a bit bendy for surface-mount parts; I must print a simple nest to stabilize the poor thing. Some of the drilled holes look white, because I hadn’t rinsed out the remains of the silver plating powder; the surfaces are a lot more silvery in person.

Before I etched the back side, I realized I’d made a classic layout blunder: the high-current return path from the center MOSFET flows around the Hall effect sensor near the center of the board. So I filled in the grid pour with a fat point black Sharpie to get more copper in that area:

Hall Effect Brassboard - added etch masking

Hall Effect Brassboard – added etch masking

I think it probably wouldn’t matter either way, but nothing exceeds like excess. FWIW, I use the grid pattern as a way to verify the end of the board etching: when all the holes in the ground pour come clear, all the traces are done, too.

The etched backside came out OK, although with a few etched squares sprinkled in the Sharpie masking:

Hall Effect Brassboard - bare back

Hall Effect Brassboard – bare back

The three leads for the Hall effect sensor are just to the right of the center, with the middle lead connected to the ground pour. Given the millivolt-level signals, this isn’t a good place for ground bounce

It’s etched with ferric chloride, rubbed with a sponge, and took under ten minutes on each side. That’s less than the usual time, which suggests the PCB is plated with half-ounce copper (that’s 0.5 ounce / ft2), rather than the one-ounce copper on the other boards I’ve done recently; just one of the hazards of buying surplus PCB stock. Doesn’t really matter, as the peak currents will be under half an amp and now I know not to use this batch of raw board stock for high current circuits.

All in all, it looks good enough. Now, for some component soldering.

Advertisements

Leave a comment

Mouse Nest Location: Bad Decisionmaking

It’s always a good idea to open the barby lid before firing the burners: sometimes unexpected things appear:

Mouse nest in grill - foundation

Mouse nest in grill – foundation

The mouse being out and about at the time, I dumped the nest (which was just a foundation) over the patio railing into the flower garden, burned out the remainder at full throttle, and continued the mission.

A week later, the mouse had not only returned, but finished off a substantial nest in the same spot, topped with a jaunty bird feather. The entrance tunnel is on the right, opening into a comfy mouse-sized pocket inside:

Mouse nest in grill - finished

Mouse nest in grill – finished

Once again, I dumped the nest over the railing, burned out the rest, and continued the mission.

As of three weeks later, the mouse hasn’t returned; I trust it found a hollow log somewhere out back.

As nearly as I can tell, the mouse climbed up a square steel leg, scampered through the grease catch pan, leaped up through the drain hole, wriggled through three layers of crossed bars, and then deposited a single mouthful of building material.

I really need a critter camera…

5 Comments

Parsley Worm on Dill

Four of these ferocious Parsley Worms were chowing down on a volunteer dill plant along the garden fence:

Parsley Worm Caterpillar on Dill

Parsley Worm Caterpillar on Dill

Amazingly, they turn into Black Swallowtail butterflies that sometimes visit the Butterfly Bush outside our living room window. Well, maybe not this one, but certainly some of its relatives.

We don’t hassle them; they have a fearsome threat display that apparently works wonders on their natural predators.

Leave a comment

More M4/6-32 Standoffs for the 30 V Supply Brick

The 36 V supply has the same M4 mount points as the 24 V supply, so I cut up another pair of those long 6-32 threaded standoffs to make four mounts. This time, instead of meticulously drilling-and-tapping the M4 holes, I just poked a clearance hole in the end of each stud with a #23 drill (0.154 = 3.9 mm) that came out a nice slip fit, cut the heads off another quartet of M4 screws (actually, a quintet, as there’s now one stud lost in the lathe swarf), dabbed some JB Quik epoxy in the holes, and rammed the studs in place:

Power supply brick - M4 stud standoffs

Power supply brick – M4 stud standoffs

Pause for a while and it’s all good. If the epoxy loses traction with the supply hanging from the mounts, it’ll be pretty obvious…

For what it’s worth, the studs come from an M4 hex-and-Philips screws used in some PC cases (The more common M3 screw doesn’t work here, but I think I bought ’em from the same source) . Cheap and readily available, but chrome plated and murder on saw blades; I use an abrasive cutoff wheel. A quartet of equally standard 6-32 PC case screws hold the mounts to the top of the PC case…

,

2 Comments

Practical Solid Modeling for 3D Printing with OpenSCAD

I’m teaching an introduction to OpenSCAD for Squidwrench this evening in Highland NY…

To quote from the course description:

This intensive course will bootstrap you into designing solid models of useful objects suitable for production on a 3D printer.

We won’t build anything like this, but it makes a nice showpiece:

Solid Model - Oblique Exploded Top

Solid Model – Oblique Exploded Top

The presentation in PDF form: Practical Solid Modeling for 3D Printing with OpenSCAD – 2013-09-25

I plan on a bunch of learning-by-doing, but, in the event the typing becomes burdensome, here are the OpenSCAD files:

A simplified version of the Dishwasher Rack Protector, minus the support structure:

Dishwasher rack protector - support model

Dishwasher rack protector – support model

// Dishwasher rack protector
// Simplified version for OpenSCAD course
// Ed Nisley KE4ZNU - July 2013

ThreadThick = 0.25;
ThreadWidth = 0.40;

Protrusion = 0.1;							// make holes end cleanly

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

PinDia = 4.0 + 0.5;                 // upright pin diameter + clearance
PinRadius = PinDia/2;

PinOC = 3.4;                        // bar center to pin center

PinTubeLength = 15.0;               // length of upright tube along pin

BarDia = 4.7 + 0.2;                 // horizontal bar diameter + clearance
BarRadius = BarDia/2;

BarTubeLength = 30.0;               // length of horizontal half tube along bar

TubeWall = 4*ThreadWidth;           // wall thickness -- allow for fill motion

TubeSides = 4 * 4;                  // default side count for tubes (in quadrants)
$fn = TubeSides;

SupportClear = 0.85;                // support structure clearance fraction

//-------

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);
}

//-------
// Put it together

module Protector() {

  difference() {
    union() {
      translate([0,PinOC,0])
        rotate(180/TubeSides)
          cylinder(r=(PinDia + 2*TubeWall)/2,h=PinTubeLength);
      translate([-BarTubeLength/2,0,0])
        rotate([0,90,0])
          rotate(180/TubeSides)
            cylinder(r=(BarDia + 2*TubeWall)/2,h=BarTubeLength);
    }

    translate([0,PinOC,-Protrusion])
      rotate(180/TubeSides)
        cylinder(r=PinRadius,h=(PinTubeLength + 2*Protrusion),$fn=TubeSides);

    translate([-BarTubeLength/2,0,0])
      rotate([0,90,0])
        rotate(180/TubeSides)
          translate([0,0,-Protrusion])
            cylinder(r=BarRadius,h=(BarTubeLength + 2*Protrusion));

    translate([0,0,-(BarRadius + TubeWall + Protrusion)/2])
      cube([(BarTubeLength + 2*Protrusion),
          BarTubeLength,
          (BarRadius + TubeWall + Protrusion)],center=true);
  }

}

//-------
// Build it!

ShowPegGrid();

Protector();

And a bare-bones version:

// Dishwasher rack protector
// Trivial version for OpenSCAD course
// Ed Nisley KE4ZNU - July 2013

	difference() {
		union() {
			translate([0,3.4,0])
				color("lightgreen")
					cylinder(r=5,h=15);
			translate([-15.0,0,0])
				rotate([0,90,0])
					color("lightyellow")
						cylinder(r=6.0,h=30.0);
		}

		translate([0,3.4,-15.0])
			cylinder(r=3.0,h=3*15.0);

		translate([-30.0,0,0])
			rotate([0,90,0])
				cylinder(r=3.0,h=2*30.0);

		translate([0,0,-5.0])
			cube([50,50,10.0],center=true);
	}

A simplified version of the Sink Drain Strainer I wrote up for Digital Machinist:

3D Printed Sink Strainer - overview

3D Printed Sink Strainer – overview

// Strainer Plate
// Simplified version for OpenSCAD course
// Ed Nisley KE4ZNU - July 2013

Layout = "Build";				// Handle Plate Show Build

Protrusion = 0.1;							// make holes end cleanly

PlateOD = 150.0;							// strainer plate diameter
PlateThick = 5.0;							//  .. thickness

HoleOD = 6.0;								// hole diameter

NumRings = 4;								// number of hole rings
RingMinDia = 20.0;							// innermost ring diameter
RingStep = 30.0;							// ring diameter increment

HandleOD = 8.0;								// handle diameter
HandleLength = 15.0;						//  .. length
HandlePegOD = HandleOD/2;					//  .. mounting peg
HandlePegLength = 1.5;

//-- Create single handle

module Handle() {

	cylinder(r=HandleOD/2,h=HandleLength);
	cylinder(r=HandlePegOD/2,h=(HandleLength + HandlePegLength));

}//-- Create single ring of holes

module RingHoles(RingDia,HoleDia,Thickness) {

	Num = floor(90/asin(HoleDia/RingDia));	// how many holes fit in ring?
	echo(str("Dia: ",RingDia," Holes: ",Num));

	for(n=[0:(Num-1)]) {
		rotate([0,0,n*360/Num])
		translate([RingDia/2,0,-Protrusion])
			cylinder(r=HoleDia/2,
					h=(Thickness + 2*Protrusion));
	}

}

//-- Create strainer plate with holes

module StrainerPlate() {

	difference() {
		cylinder(r=PlateOD/2,h=PlateThick);
		for (RingID = [0:NumRings-1]) {
			RingHoles((RingMinDia + RingID*RingStep),
						HoleOD,PlateThick);
		}
		cylinder(r=HandlePegOD/2,h=3*PlateThick,center=true);
	}
}

//-- Build it!

if (Layout == "Plate")
	StrainerPlate();

if (Layout == "Handle")
	Handle();

if (Layout == "Build") {
	StrainerPlate();
	translate([PlateOD/2,PlateOD/2,0])
		Handle();
	translate([(PlateOD/2 - 2*HandleOD),
				PlateOD/2,0])
		Handle();
	}

if (Layout == "Show") {
	color("LightYellow")
		StrainerPlate();
	color("LightGreen") {
		translate([0,0,-HandleLength])
			Handle();
		translate([0,0,(PlateThick + HandleLength)])
			rotate([180,0,0])
			Handle();
	}

}

And a bare-bones version, minus the handles:

Protrusion = 0.1;

PlateOD = 150.0;
PlateThick = 5.0;
HoleOD = 6.0;

NumRings = 4;
RingMinDia = 20.0;
RingStep = 30.0;

module RingHoles(RingDia,HoleDia,Thickness) {

  Num = floor(90/asin(HoleDia/RingDia));
  echo("Dia: ",RingDia," holes: ",Num);

  for(n=[0:(Num-1)]) {
			rotate([0,0,n*360/Num])
	 	 translate([RingDia/2,0,-Protrusion])
			  cylinder(r=HoleDia/2,
														h=(Thickness + 2*Protrusion));
  }
}

difference() {
	cylinder(r=PlateOD/2,h=PlateThick);
	for (RingID = [0:NumRings-1]) {
		RingHoles((RingMinDia + RingID*RingStep),
					       HoleOD,PlateThick);
	}
}

[Update: The talk went well and took a bit under three hours, although by mutual agreement we didn’t fire up the M2 at the end. I’ll work on a short talk about Design for Printability and we’ll run that with a separate printing session. A good time was had by all!]

, ,

14 Comments

Improved M2 Build Platform: 30 V Power and SSR Test

The 36 V 350 W power brick for the improved M2 HBP arrived and seems to work fine, apart from a distinct smell of hot electronics under load. Dialed back to 30.1 V at the terminals (to match the HBP spec) and with the HBP connected through the same length of 12 AWG wire as before, the supply draws 150 W from the AC line.

It draws 160 W at 31.7 V and stabilizes at about 100 °C. The heater resistance is 7.6 Ω before it has a chance to cool off, so the heater runs at 4.17 A and 132 W. The supply efficiency is 83% = 132/160, about what you’d expect. The fan runs intermittently with that load.

In order to dissipate 150 W in the panel at the same resistance, the voltage must be 33.5 V at 4.5 A. I’d want to install it in the M2 and make some measurements before jumping to any conclusions.

The DC-DC solid state relays work about as expected, too. This is a 60 V 10 A brick, turned on with one of those old Tenergy RTU NiMH 8 cell packs:

DC-DC SSR Test Setup

DC-DC SSR Test Setup

The SSR’s forward drop runs around 1.0 to 1.1 V at 4 A, which suggests a drain-source resistance near 0.25 Ω, rather more than you’d expect for a bare MOSFET, but probably about right for an up-armored device. Or it could just be a crap MOSFET inside there…

So I think the brick will wind up at about 35 V to make up for the SSR drop. The SSR will dissipate about 5 W and won’t need much heatsinking; just bolting it to an aluminum chassis may suffice.

, ,

1 Comment

Musings on a Vacuum Table

After looking at all the holes in the maximum-size PCB platen for the Sherline mill, I started thinking about a vacuum table for things like PCBs and engraved slabs.

I recently harvested the compressor from a defunct dehumidifier:

Harvested Dehumidifier Compressor

Harvested Dehumidifier Compressor

That ought to be useful in a DIY vacuum table that needs a good, low-volume pump. It seems refrigeration pumps can get down around 29 inches of mercury, so the net pressure difference is maybe 13 psi and I’d round it down to 10 psi. Typical small PCBs, say 1 x 2 inches, would have 20 to 30 pounds of downforce.

From what I read, the pump will blurp oil from the smaller outlet tube while settling down to pull a vacuum through the larger, rather discolored, inlet tube; adding a larger diameter vertical catch chamber with a splash plate to the outlet would be in order. I think a trash filter on the inlet, perhaps conjured from a defunct whole-house water filter with a 3 micron spun-fiber filter element, should keep dust and crud out of the compressor; the inlet already has a small filter / dryer (the lump next to the compressor body), but that probably won’t withstand an assault of glass-fiber-laden PCB drilling dust.

As far as the vacuum table goes, I think a 3D printed base with a machinable wax insert might be just the ticket: the base collects all the complexity, including hose fittings and a plenum under the insert, into a 3D model where it’s easy to duplicate and the cheap-and-simple wax acts as a moderately hard sacrificial platform. The base would have 10-32 holes around the outside to match the Sherline’s tooling plate. The wax insert could stand proud of the base and have holes only where they’re needed, so the base holds the insert in place mostly by vacuum.

You’d (well, I’d) like to cast the wax in place, but it melts around 240 °F = 115 °C and gets pourable around 270 °F = 132 °C, well above the point where PLA gets juicy and about where ABS gets gummy, so I think a drop-in slab makes more sense; cast it on a plate for a flat bottom surface, trim off the mold flash, and drop it in place with the flat side down. Then, with the vacuum turned on, flycut the rumpled top to get a known-flat-and-true surface, mill some vacuum channels, and drill holes to match the 3D printed holes in the plenum; all that would be a G-Code routine, of course. A simple hexagonal drilled pattern (big shallow holes for maximum clamping, little through holes into the plenum) might be a good starting point, at least for the simple, low-stress stuff I’m doing: PCBs and maybe edge-lit ersatz Nixie tubes.

You could gently heat the part to seal it to the wax, although that might risk losing the top surface alignment. Given reasonably flat PCB material, a custom channel pattern under the board might be just as good.

When the wax gets sufficiently chopped up that it can’t hold a good seal, toss it in the remelting bin, drop in a new slab, mill it to suit, and continue the mission.

If you do it right, everything’s parametric and you can generate a custom base with a custom insert by twiddling a few parameters that set the overall size of the thing; print up the base, drop in a wax plate, machine the top surface, done. You’d need two source files: OpenSCAD for the base and custom G-Code for the insert. Maybe the OpenSCAD script can generate and export a DXF-ish file that could produce the mill / drill code for the insert.

, ,

5 Comments