include use /* [Options] */ LegLength=30.40; LegDiameter=16; BoltDiameter=5; CoreGap=0.0; NumberCoils=10; YokeHeight=12.14; YokeLen=28.00; /* [Render Options] */ render_fs=.1; render_fn=0; render_fa=.1; // Set Render Options $fs= ($preview) ? $fs : render_fs; $fn= ($preview) ? $fn : render_fn; $fa= ($preview) ? $fa : render_fa; // Area Info leg_a1 = PI * (LegDiameter/20)^2; leg_a2 = PI * (BoltDiameter/20)^2/2; yoke_a = LegDiameter * YokeHeight; path_l1 = 2*LegLength - YokeHeight; path_l2 = YokeLen + LegDiameter; echo("Leg Len:", 2*LegLength, "mm"); echo("Bobbin_Max:", 2*LegLength-2*YokeHeight, "mm"); echo("Leg Cross Section Area: ", leg_a1-leg_a2, "cm^2"); echo("Yoke A: ", yoke_a); echo("Magnetic Path: ", 2*(path_l1+path_l2), "mm"); module core_leg(d=LegDiameter, l=LegLength, bd=BoltDiameter) { difference() { cylinder(d=d, h=l); down(1) left(d/2) cylinder(d=bd, h=l+2); } } module core_uy1658(ld=LegDiameter, ll=LegLength, yoke_z=YokeHeight, yokelen=YokeLen, orient=ORIENT_X, align=V_CENTER) { legx = yokelen + ld; orient_and_align([legx+2*ld,ld,LegLength],orient,align,orig_orient=ORIENT_X) xflip_copy() down(ll/2) { left(legx/2) core_leg(d=ld, l=ll); fwd(ld/2) cube([legx/2,ld,yoke_z]); } } // Full Core, both halfs. module core(gap=CoreGap, orient=ORIENT_X, align=V_CENTER) { orient_and_align([YokeLen+2*LegDiameter,LegDiameter,2*LegLength], orient=orient,align=align,orig_orient=ORIENT_X) xflip_copy() { up(gap/2) core_uy1658(align=V_TOP, orient=ORIENT_X_180); down(gap/2) core_uy1658(align=V_BOTTOM); } } core();