#include "colors.inc" #include "metals.inc" #macro jlcc(pins) #local ppside = pins / 4; #local chipwidth = 0.05*ppside + 0.1; #local pinboundary = chipwidth + 0.04; #declare siliconwidth = (ppside+0.08*pins)*0.008; #declare wcs=siliconwidth/(ppside+4); #local wsnc=0.0142; // wire spacing nearest chip #local wsnp=0.0265; // wire spacing nearest package #declare ocavitywidth = (ppside+1)*wsnp; #declare cavitywidth = (ppside+1)*wsnc/2; #declare ibandwidth = ocavitywidth+0.014; #declare obandwidth = ibandwidth+0.16; #if(pins<52) #declare obandwidth = ibandwidth+0.16/2; #end #if(pins<44) #declare obandwidth = ibandwidth+0.016; #end union{ intersection{ difference{ #declare bwidth=chipwidth; #declare bheight=0.08; #declare boffset=0; box{<-bwidth/2,-bwidth/2,boffset-bheight/2> } #declare bwidth=ibandwidth; #declare bheight=0.05; #declare boffset=0.05; box{<-bwidth/2,-bwidth/2,boffset-bheight/2> } } #declare bw=sqrt((chipwidth/2)*(chipwidth/2)*2)-0.03; box{<-bw,-bw,-1> < bw, bw, 1> rotate -z*45} texture{pigment{rgbf <0.43,0.32,0.39,0.00>}} } difference{ #declare bwidth=obandwidth; #declare bheight=0.02; #declare boffset=0.035; box{<-bwidth/2,-bwidth/2,boffset-bheight/2> } #declare bwidth=ibandwidth; #declare bheight=0.05; #declare boffset=0.025; box{<-bwidth/2,-bwidth/2,boffset-bheight/2> } texture{pigment{P_Gold1} finish{F_MetalA}} } // chip #declare bheight=0.02; #declare boffset=0.03; //#declare wcs=0.0079; //wire spacing at the chip #declare siliconwidth = (ppside+0.08*pins)*0.008; box{ <-siliconwidth/2,-siliconwidth/2,boffset-bheight/2> texture{pigment{color rgb <0.21, 0.21, 0.21>} finish{F_MetalA}} } // leads #declare lead=difference{ union{ box{<-0.017/2,0,0><0.017/2,0.015,0.07>} box{<-0.030/2,0,0><0.030/2,0.015,0.07>} box{<-0.02/2,0,0.073> <0.02/2,0.05,0.073+0.005>} difference{ difference{cylinder{<-0.017/2,0.035,0> <0.017/2,0.035,0> 0.035}cylinder{<-0.02,0.035,0> <0.02,0.035,0> 0.035-0.008}} box{<-0.1,-0.1,0.0> <0.1,0.1,0.1>} } } box{<-0.03/2,0,0.08> <0.03/2,0.05,0.02+0.005> rotate -x*45 translate <0,-0.07,0.08>} texture{pigment{P_Gold1} finish{F_MetalA}} } #declare i = 0; #declare cw = pinboundary-0.01; #declare co = -0.03; #while (i<(ppside+1)/2) object{lead rotate z*180 translate } object{lead rotate z*180 translate <-i*0.05,cw/2,co>} object{lead translate } object{lead translate <-i*0.05,-cw/2,co>} object{lead rotate z*90 translate } object{lead rotate z*90 translate } object{lead rotate -z*90 translate <-cw/2,i*0.05,co>} object{lead rotate -z*90 translate <-cw/2,-i*0.05,co>} #declare i = i + 1; #end // lead connection #declare bheight=0.005; #declare boffset=0.035; #declare lead_connection = box{<-0.038/2,-0.07/2,boffset-bheight/2> <0.038/2, 0.07/2,boffset+bheight/2> texture{pigment{P_Gold1} finish{F_MetalA}}} #declare i = 0; #declare cw = chipwidth-0.07; #declare co = 0.005; #while (i<(ppside-1)/2) object{lead_connection translate } object{lead_connection translate <-i*0.05,cw/2,co>} object{lead_connection translate } object{lead_connection translate <-i*0.05,-cw/2,co>} object{lead_connection rotate z*90 translate } object{lead_connection rotate z*90 translate } object{lead_connection rotate -z*90 translate <-cw/2,i*0.05,co>} object{lead_connection rotate -z*90 translate <-cw/2,-i*0.05,co>} #declare i = i + 1; #end #declare cutbox = 0.018; #declare cutbox1 = 0.025; #declare lead_connectiond1 = difference{ object{lead_connection} box{ <-cutbox,-cutbox,-0.11> rotate z*45 translate } texture{pigment{P_Gold1} finish{F_MetalA}} } #declare lead_connectiond2 = difference{ object{lead_connection} box{ <-cutbox,-cutbox,-0.11> rotate z*45 translate } texture{pigment{P_Gold1} finish{F_MetalA}} } #declare lead_connectiond3 = difference{ object{lead_connection} box{ <-cutbox,-cutbox,-0.11> rotate z*45 translate <-cutbox1, 0.035, 0> } texture{pigment{P_Gold1} finish{F_MetalA}} } #declare lead_connectiond4 = difference{ object{lead_connection} box{ <-cutbox,-cutbox,-0.11> rotate z*45 translate <-cutbox1,-0.035,0> } texture{pigment{P_Gold1} finish{F_MetalA}} } #declare i = (ppside-1)/2; object{lead_connectiond2 translate } object{lead_connectiond1 rotate z*90 translate } object{lead_connectiond4 translate <-i*0.05,cw/2,co>} object{lead_connectiond3 rotate -z*90 translate <-cw/2,i*0.05,co>} object{lead_connectiond3 rotate z*90 translate } object{lead_connectiond1 translate } object{lead_connectiond1 rotate -z*90 translate <-cw/2,-i*0.05,co>} object{lead_connectiond3 translate <-i*0.05,-cw/2,co>} // bond wires #declare i=0; #declare wd=0.002; //wire diameter //#declare wcs=0.008; //wire spacing at the chip #declare wcp=0.0162; //wire spacing at the package #declare ceg=siliconwidth/2-0.01; //gap from edge of chip to wire #declare peg=cavitywidth+ppside/1000; //gap from edge of package to wire #while (i<(ppside+1)/2) // top left cylinder{ wd texture{pigment{P_Silver3} finish{F_MetalC}}} // top right cylinder{<-i*wcs,ceg,0.04> <-i*wcp,peg,0.025> wd texture{pigment{P_Silver3} finish{F_MetalC}}} // bottom left cylinder{ wd texture{pigment{P_Silver3} finish{F_MetalC}}} // bottom right cylinder{<-i*wcs,-ceg,0.04> <-i*wcp,-peg,0.025> wd texture{pigment{P_Silver3} finish{F_MetalC}}} // left upper cylinder{ wd texture{pigment{P_Silver3} finish{F_MetalC}}} // left lower cylinder{ wd texture{pigment{P_Silver3} finish{F_MetalC}}} // right upper cylinder{<-ceg,i*wcs,0.04> <-peg,i*wcp,0.025> wd texture{pigment{P_Silver3} finish{F_MetalC}}} // right lower cylinder{<-ceg,-i*wcs,0.04> <-peg,-i*wcp,0.025> wd texture{pigment{P_Silver3} finish{F_MetalC}}} #declare i = i + 1; #end // bond wire to package #declare i=0; #declare wnc=0.01; // width nearest chip #declare wnp=0.018; // width nearest package #declare wsnc=0.0142; // wire spacing nearest chip #declare wsnp=0.0265; // wire spacing nearest package #declare icav=cavitywidth; #declare ocav=ocavitywidth/2; #while (i<(ppside+1)/2) // top left prism{ linear_spline 0.078, 0.074, 5, , <-wnc/2+i*wsnc,icav>, <-wnp/2+i*wsnp,ocav>, , rotate -x*90 translate z*0.1 texture{pigment{P_Gold1} finish{F_MetalA}} } // top right prism{ linear_spline 0.078, 0.074, 5, , <-wnc/2-i*wsnc,icav>, <-wnp/2-i*wsnp,ocav>, , rotate -x*90 translate z*0.1 texture{pigment{P_Gold1} finish{F_MetalA}} } // bottom left prism{ linear_spline 0.078, 0.074, 5, , <-wnc/2+i*wsnc,-icav>, <-wnp/2+i*wsnp,-ocav>, , rotate -x*90 translate z*0.1 texture{pigment{P_Gold1} finish{F_MetalA}} } // bottom right prism{ linear_spline 0.078, 0.074, 5, , <-wnc/2-i*wsnc,-icav>, <-wnp/2-i*wsnp,-ocav>, , rotate -x*90 translate z*0.1 texture{pigment{P_Gold1} finish{F_MetalA}} } // left upper prism{ linear_spline 0.078, 0.074, 5, , , , , rotate -x*90 translate z*0.1 texture{pigment{P_Gold1} finish{F_MetalA}} } // left lower prism{ linear_spline 0.078, 0.074, 5, , , , , rotate -x*90 translate z*0.1 texture{pigment{P_Gold1} finish{F_MetalA}} } // right upper prism{ linear_spline 0.078, 0.074, 5, <-icav,wnc/2+i*wsnc>, <-icav,-wnc/2+i*wsnc>, <-ocav,-wnp/2+i*wsnp>, <-ocav,wnp/2+i*wsnp>, <-icav,wnc/2+i*wsnc> rotate -x*90 translate z*0.1 texture{pigment{P_Gold1} finish{F_MetalA}} } // right lower prism{ linear_spline 0.078, 0.074, 5, <-icav,wnc/2-i*wsnc>, <-icav,-wnc/2-i*wsnc>, <-ocav,-wnp/2-i*wsnp>, <-ocav,wnp/2-i*wsnp>, <-icav,wnc/2-i*wsnc> rotate -x*90 translate z*0.1 texture{pigment{P_Gold1} finish{F_MetalA}} } #declare i = i + 1; #end // pin 1 index #if(0) #declare bwidth=0.025; #declare bheight=0.015; #declare boffset=0.035; box{<-bwidth/2,-bwidth/2,boffset-bheight/2>< bwidth/2, bwidth/2,boffset+bheight/2> translate -x*.45 texture{pigment{P_Gold1} finish{F_MetalA}}} #end } #end