From 846efa74da81ea7ce060a83dac8b7a754372cc54 Mon Sep 17 00:00:00 2001 From: Stephen Carpenter Date: Sat, 2 Dec 2023 14:24:14 -0500 Subject: [PATCH] First TestBed Working prototype. Still needs full case, fan and current limiter. --- bobbin.scad | 74 ++++++++++++++++++++++++-------------- core_uy1658-60.scad | 2 +- electrodes.scad | 87 +++++++++++++++++++++++++++++++++++++++++++++ legs.scad | 85 +++++++++++++++++++++++++++++++++++++++++++ zvs-driver.scad | 82 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 302 insertions(+), 28 deletions(-) create mode 100644 electrodes.scad create mode 100644 legs.scad create mode 100644 zvs-driver.scad diff --git a/bobbin.scad b/bobbin.scad index 40d88e9..2e48db1 100644 --- a/bobbin.scad +++ b/bobbin.scad @@ -2,6 +2,8 @@ include use use +use <./core_uy1658-60.scad> +use <./legs.scad> /* [Options] */ @@ -10,6 +12,8 @@ LegDiameter=16; BoltDiameter=7.06; CoreGap=0; NumberCoils=10; +YokeHeight = 12.14; +YokeLen=28.00; /* [Render Options] */ render_fs=.1; @@ -40,7 +44,26 @@ module core_uy1658(ld=16, ll=29, bz=12.14, w=60) { } } -module bobbin(ld=LegDiameter, ll=LegLength, lb=12.14, tg=CoreGap, lc=.15, t=.4, sn=NumberCoils+1, st=.6, sd=50) { +module bobbin_joiners(ld=LegDiameter, ll=LegLength, lb=12.14, tg=CoreGap, lc=.15, t=.4, sn=NumberCoils+1, st=.6, sd=50, plug=true, clear=false) { + bl=2*(ll-lb) + tg; + conThick = 12; + conWidth = 15; + inner=ld+2*lc; + pinLen = 2* conThick + bl; + zflip_copy() + up((pinLen-conThick)/2) { + xflip() { + if (clear) + half_joiner_clear(h=conWidth, w=conThick,l=conThick/2,orient=ORIENT_X_90); + else if (plug) + half_joiner(h=conWidth, w=conThick,l=conThick/2,orient=ORIENT_X_90); + else + half_joiner2(h=conWidth, w=conThick,l=conThick/2,orient=ORIENT_X_90); + } + } +} + +module bobbin(ld=LegDiameter, ll=LegLength, lb=12.14, tg=CoreGap, lc=.15, t=.4, sn=NumberCoils+1, st=.6, sd=50, orient=ORIENT_X, align=V_CENTER) { bl=2*(ll-lb) + tg; inner=ld+2*lc; outer=inner+2; @@ -50,37 +73,34 @@ module bobbin(ld=LegDiameter, ll=LegLength, lb=12.14, tg=CoreGap, lc=.15, t=.4, conThick = 12; conWidth = 15; pinLen = 2* conThick + bl; - difference() { - union() { - cylinder(d=outer,h=bl, center=true); - zspread(n=sn,l=bl-st) { - cylinder(d=sd,h=st,center=true); - left(sd/4)cube([sd/2,sd,st], center=true); + orient_and_align([sd,sd,bl], orient, align, orig_orient=ORIENT_X) { + difference() { + union() { + cylinder(d=outer,h=bl, center=true); + zspread(n=sn,l=bl-st) { + cylinder(d=sd,h=st,center=true); + left(sd/4)cube([sd/2,sd,st], center=true); + } + // connector + left(inner/2+5) bobbin_joiners(); } - // connector - left(inner/2+(conNeck+conHead)/2) zflip_copy() - down(conThick/2) - up((pinLen)/2) { - xflip() half_joiner(h=conWidth, w=conThick,l=conThick/2,orient=ORIENT_X_90); - } + cylinder(d=inner,h=bl+2*conThick+2,center=true); + // Wire Channels + yspread(n=2, l=5+sd/2 ) + left(sd/2) cylinder(d=2,h=bl+2,center=true); + } + left(2*lc+inner/2) intersection() { + cylinder(d=6,h=pinLen, center=true); + right(2*lc+inner/2) cylinder(d=inner, h=pinLen+2, center=true); } - cylinder(d=inner,h=bl+2*conThick+2,center=true); - // Wire Channels - yspread(n=2, l=5+sd/2 ) - left(sd/2) cylinder(d=2,h=bl+2,center=true); - } - left(2*lc+inner/2) intersection() { - cylinder(d=6,h=pinLen, center=true); - right(2*lc+inner/2) cylinder(d=inner, h=pinLen+2, center=true); } echo("Coil_ID = ", outer); echo("Coil_len = ", bl-sn*st); } -rotate([0,0,0]) { - left(20)bobbin(sn=2, sd=26); - right(20) bobbin(); -} - - +legx = (YokeLen + LegDiameter)/2; +right(legx) bobbin(sn=2, sd=26, orient=ORIENT_XNEG); +left(legx) bobbin(); +%core(gap=0); +//left(20+20) rotate([90,0,0]) snaps(); //core_uy1658(); diff --git a/core_uy1658-60.scad b/core_uy1658-60.scad index 1883f62..0f2ad18 100644 --- a/core_uy1658-60.scad +++ b/core_uy1658-60.scad @@ -33,7 +33,7 @@ echo("Bobbin_Max:", 2*LegLength-2*YokeHeight, "mm"); echo("Leg Cross Section Area: ", leg_a1-leg_a2, "mm^2"); yoke_a = LegDiameter * YokeHeight; echo("Yoke A: ", yoke_a); -echo("Magnetic Path: ", 2*(YokeLen+LegDiameter)+2*(LegLength-YokeHeight), "mm"); +echo("Magnetic Path: ", 2*(YokeLen+LegDiameter)+4*(LegLength-YokeHeight), "mm"); module core_leg(d=LegDiameter, l=LegLength, bd=BoltDiameter) { difference() { diff --git a/electrodes.scad b/electrodes.scad new file mode 100644 index 0000000..6f17353 --- /dev/null +++ b/electrodes.scad @@ -0,0 +1,87 @@ + +include +use +use +use +use + +/* [Options] */ + +LegLength=30.40; +LegDiameter=16; +BoltDiameter=7.06; +CoreGap=0; +YokeHeight = 12.14; +YokeLen=20.00; + +ConThick = 12; +ConWidth = 15; + +SlideClear=.2; + +/* [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; + + +// Channel +ChanWidth = LegDiameter+2*SlideClear; +ChanHeight = YokeHeight + SlideClear; +ChanLen = LegDiameter/2; + +echo("ChanWidth:", ChanWidth); + +BobbinLen = 2*ConThick + 2*(LegLength-YokeHeight); + +module snaps(ld=LegDiameter, ll=LegLength, lb=12.14, tg=CoreGap, lc=.15, t=.4, sn=NumberCoils+1, st=.6, sd=50) { + bl=2*(ll-lb) + tg; + inner=ld+2*lc; + outer=inner+2; + + //conNeck = 5; + //conHead = 5; + conThick = 12; + conWidth = 15; + pinLen = 2* conThick + bl; + // connector + // left(inner/2+(conNeck+conHead)/2) + yflip_copy() back((pinLen-conThick)/2) { + half_joiner2(h=conWidth, + w=conThick,l=conThick/2,orient=ORIENT_X); + left(10)cube([conThick,conThick,conWidth], center=true); + right(10)cube([conThick,conThick,conWidth], center=true); + } +} + +module channel(l=ChanLen,w=ChanHeight, h=ChanWidth) { + + half_joiner_clear(h=ConWidth,w=ConThick,l=ConThick/2,orient=ORIENT_XNEG); + fwd(.5)leftcube([l+8+.2,w+2+14,h]); +} + +module slide(cl=ChanLen, cw=ChanWidth, ch=ConWidth, frontLen=25, w=2) { + bl=ChanLen + frontLen; + difference() { + union() { + fwd(w+.2+2) left(cl+8) rightcube([bl+8, cw+4, cw+2*w]); + } + channel(); + fwd(4+ConThick/2) right(frontLen/2) rotate([0,-90,0]) { + thread_insertM25(bl=30, bz=-30, $die=true); + up(3)cylinder(d=7, h=10); + } + } + half_joiner2(h=ConWidth,w=ConThick,l=ConThick/2,orient=ORIENT_XNEG); + +} + +//yflip_copy() fwd(7) zflip_copy() down(10) +//yflip_copy() fwd((ConWidth+BobbinLen)/2+2) +yflip_copy() fwd(7) rotate([0,90,0]) + slide(); diff --git a/legs.scad b/legs.scad new file mode 100644 index 0000000..07ac03a --- /dev/null +++ b/legs.scad @@ -0,0 +1,85 @@ + +include +use +use +use +use + +/* [Options] */ + +LegLength=30.40; +LegDiameter=16; +BoltDiameter=7.06; +CoreGap=0; +YokeHeight = 12.14; +YokeLen=20.00; + +ConThick = 12; +ConWidth = 15; + +SlideClear=.2; + +/* [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; + + +// Channel +ChanWidth = LegDiameter+2*SlideClear; +ChanHeight = YokeHeight + SlideClear; +ChanLen = LegDiameter/2; + +echo("ChanWidth:", ChanWidth); + +module snaps(ld=LegDiameter, ll=LegLength, lb=12.14, tg=CoreGap, lc=.15, t=.4, sn=NumberCoils+1, st=.6, sd=50) { + bl=2*(ll-lb) + tg; + inner=ld+2*lc; + outer=inner+2; + + //conNeck = 5; + //conHead = 5; + conThick = 12; + conWidth = 15; + pinLen = 2* conThick + bl; + // connector + // left(inner/2+(conNeck+conHead)/2) + yflip_copy() back((pinLen-conThick)/2) { + half_joiner2(h=conWidth, + w=conThick,l=conThick/2,orient=ORIENT_X); + left(10)cube([conThick,conThick,conWidth], center=true); + right(10)cube([conThick,conThick,conWidth], center=true); + } +} + +module channel(l=ChanLen,w=ChanHeight, h=ChanWidth) { + + half_joiner_clear(h=ConWidth,w=ConThick,l=ConThick/2,orient=ORIENT_XNEG); + fwd(.5)leftcube([l+8+.2,w+1,h]); +} + +module slide(cl=ChanLen, cw=ChanWidth, ch=ConWidth, frontLen=20, w=1) { + bl=ChanLen + frontLen; + difference() { + union() { + fwd(2*w+.1) left(cl+8) rightcube([bl+8, cw, cw+2*w]); + } + channel(); + fwd(5) right(frontLen/2) zflip() { + thread_insertM25(bl=15, bz=-15, $die=true); + up(3)cylinder(d=7, h=10); + } + } + half_joiner2(h=ConWidth,w=ConThick,l=ConThick/2,orient=ORIENT_XNEG); + // leg + down(ch/2) fwd(2*w+.1) right(frontLen-2) downcube([4,cw,25]); + +} + +yflip_copy() fwd(7) zflip_copy() down(10) + slide(); diff --git a/zvs-driver.scad b/zvs-driver.scad new file mode 100644 index 0000000..9ea6e38 --- /dev/null +++ b/zvs-driver.scad @@ -0,0 +1,82 @@ + +include +use +use +use +use +use <./bobbin.scad> + +/* [Options] */ + +PCB_Y = 100.80; +PCB_X = 100.30; +PCB_Z = 1.69; +PCB_CLR = 5; + +/* [Mount Stands] */ + +Mount_Hole_D = 4.36; +Mount_X = 74.38; +Mount_Y = 89.24; + +BOX_WALL = 1.5; + +/* [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; + +zclear=2; +module print_specs() { + echo("ZVS Module: QS2015004"); + echo("Input Voltage: 12-48V"); + echo("Max Current: 20A"); + echo("24V no load current: 3A"); + echo("48V no load current: 6A"); + echo("Caps .33uFx6 = "); +} + +// PCB Board +up(5) %difference() { + cuboid([PCB_X,PCB_X,PCB_Z], fillet=3, edges=EDGES_Z_ALL, align=V_TOP); + left((Mount_Y-Mount_X)/2) yspread(l=Mount_Y) xspread(l=Mount_X) + cyl(d=Mount_Hole_D, chamfer=0, h=2*PCB_CLR, align=V_CENTER); +} + +// Box +difference() { + left(25/2) cuboid([PCB_X+30+2*BOX_WALL+.4,PCB_Y+2*BOX_WALL+.4,PCB_Z+PCB_CLR+BOX_WALL], fillet=3, edges=EDGES_Z_ALL, align=V_BOTTOM); + pcb_mount_clearance(); + mount_positions() thread_insertM25(bl=6, bz=-6, $die=true); + rotate([00,0,0]) left(5+6+PCB_X/2) rotate([0,90,90]) bobbin_joiners(clear=true); + thread_insertM25(bl=5, bz=-5, $die=false); +} +rotate([00,0,0]) left(5+6+PCB_X/2) rotate([0,90,90]) bobbin_joiners(plug=false); + +module mount_positions() { + left((Mount_Y-Mount_X)/2) yspread(l=Mount_Y) xspread(l=Mount_X) children(); +} + + +module pcb_mount_clearance() { + // clearance + // pcb itself + color("yellow") up(.01) cuboid([PCB_X+.4,PCB_Y+.4,PCB_Z+.01], fillet=3, edges=EDGES_Z_ALL, align=V_BOTTOM); + down(PCB_Z-.01) difference() { + union() { + cuboid([PCB_X,PCB_Y,PCB_CLR+.02], fillet=3, edges=EDGES_Z_ALL, align=V_BOTTOM); + } + color("green") up(.02) { + right(PCB_X/2) cuboid([4,PCB_Y,PCB_CLR+.02], align=V_BOTTOM); // Edge Support + left(PCB_X/2) cuboid([8,PCB_Y,PCB_CLR+.02], align=V_BOTTOM); // Edge Support + } + + cyl(d=Mount_Hole_D+3, chamfer=0, h=PCB_CLR, align=V_BOTTOM); + mount_positions() cyl(d=Mount_Hole_D+3, chamfer=0, h=PCB_CLR, align=V_BOTTOM); + } +}