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

  • FT82-43 Slit Toroid: Armor

    Given the fragility of ferrite toroids in general and slit toroids in particular, a touch of up-armoring seems sensible:

    FT82-43 toroid - mounted
    FT82-43 toroid – mounted

    The solid model includes a toroid shell with roughly the right curves:

    Toroid Mount - Show layout
    Toroid Mount – Show layout

    That puts a nice rounded shape on the bottom of the armor, not that that makes much difference:

    Toroid Mount - Build layout
    Toroid Mount – Build layout

    The central hole passes a 4-40 brass, nylon, or stainless steel screw. Most of the magnetic field stays within the ferrite and, heck, this isn’t a crazy-sensitive analog application, so even an ordinary steel screw shouldn’t cause any particular problems.

    The rectangular (not pie-wedge) slit barely passes the Hall effect sensor.

    I’ll pour some clear epoxy over the toroid, with tape masking the ferrite core and sealing the ends, to immobilize the windings. That sounds like a good idea after calibration and suchlike.

    The OpenSCAD source code, which should be sufficiently parametric that I can crank ’em out for all the other toroids large enough to accept a screw:

    // Toroid coil mounting bracket
    // Ed Nisley - KE4ZNU - August 2014
    
    Layout = "Mount";			// Coil Mount Build Show
    
    //- Extrusion parameters must match reality!
    //  Print with 4 shells and 3 solid layers
    
    ThreadThick = 0.20;
    ThreadWidth = 0.40;
    
    HoleWindage = 0.2;			// extra clearance
    
    Protrusion = 0.1;			// make holes end cleanly
    
    AlignPinOD = 1.70;			// assembly alignment pins: filament dia
    
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    
    //----------------------
    // Dimensions
    
    ID = 0;												// subscripts for cylindrical objects
    OD = 1;
    LEN = 2;
    
    Coil = [10.25,23.50,8.3];							// wound toroid core
    
    SensorThick = 2.0;
    
    BaseThick = IntegerMultiple(1.0,ThreadThick);		// baseplate under coil
    WallThick = IntegerMultiple(1.0,ThreadWidth);		// walls beside coil
    
    ScrewHoleDia = 4.0;									// allow alignment slop around 3 mm / #4 screws
    
    //----------------------
    // 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) {
    
      RangeX = floor(100 / Space);
      RangeY = floor(125 / Space);
    
    	for (x=[-RangeX:RangeX])
    	  for (y=[-RangeY:RangeY])
    		translate([x*Space,y*Space,Size/2])
    		  %cube(Size,center=true);
    
    }
    
    //----------------------
    // Basic coil shape
    
    module CoilShape() {
    	
    CornerRadius = min((Coil[LEN] / 2),((Coil[OD] - Coil[ID]) / 2))  / 3;
    MidRadius = (Coil[ID] + Coil[OD]) / 4;
    HalfX = (Coil[OD] - Coil[ID]) / 4 - CornerRadius;
    HalfY = (Coil[LEN] / 2) - CornerRadius;
    
    echo(CornerRadius,MidRadius,HalfX,HalfY);
    	
    	color("Goldenrod")
    	render(convexity = 2)
    		rotate(180/20)
    			rotate_extrude(convexity=3,$fn=20)
    				translate([MidRadius,0])
    					hull() 
    						for (i=[-1,1],j=[-1,1])
    							translate([i*HalfX,j*HalfY])
    								circle(r=CornerRadius,$fn=24);
    }
    
    //----------------------
    // Mount
    
    module Mount() {
    
    	difference() {
    		rotate(180/20)
    			cylinder(h=(BaseThick + Coil[LEN]),d=(Coil[OD] + 2*WallThick),$fn=20);
    		
    		translate([0,0,-Coil[LEN]])							// make screw hole
    			rotate(180/6)
    				PolyCyl(ScrewHoleDia,3*Coil[LEN],$fn=6);
    			
    		translate([0,0,BaseThick + Coil[LEN]/2])			// set bottom curve
    			CoilShape();
    			
    		translate([0,0,BaseThick + Coil[LEN]])				// clear out top
    			CoilShape();
    			
    		translate([(Coil[ID]/2 + Coil[OD]/2),0,0])
    			cube([Coil[OD],SensorThick,3*Coil[LEN]],center=true);
    	}
    }
    
    
    ShowPegGrid();
    
    if (Layout == "Coil") {
    	CoilShape();
    }
    
    if (Layout == "Mount")
    	Mount();
    
    if (Layout == "Show") {
    	Mount();
    	translate([0,0,(BaseThick + Coil[LEN]/2)])
    		CoilShape();
    }
    
    
    if (Layout == "Build") {
    	Mount();
    }