diff --git a/delay_line.scad b/delay_line.scad deleted file mode 100644 index 87d21f5..0000000 --- a/delay_line.scad +++ /dev/null @@ -1,495 +0,0 @@ -// inputs, delay line config -// will have to scale approperly -$fa = 1; -$fs = 0.01; - -SCRIPT_VERSION="0.0.1"; -FONT="Ubuntu Sans Mono:style=Regular"; -// lambda = 7.5; - -substrate = "SI"; -test_number = 1; -// linbo -c = 3992.0; -// si -// c = 3159.0; -freq = 50.0e6; - -// $fs = (c/freq); - -// inout distance -distance = 50; - -// number of finger -n_fingers = 50; - -// should be 50-70 -finger_length = 60; - -// for tweaking the design -gap = 0; - -// for tweaking the design -thickness = 0; - -// scale in m -scale_unit = 1e3; - -leg_length = 0.003; -leg_width = 0.00001875; -leg_angle = 10; -size = 0.002; -bond_pad_shape = "square"; - - -info_block_offset_x=7; -info_block_offset_y=30; -info_block_scale=0.3; -title_text_size = 4; -prop_text_size = 2.5; -id_text_size = 1; - -number_of_idts_per_quadrent=4; -idt_x_spacing = 10; -idt_y_spacing = 12.5; - -wafer_size_inch = 4; - -function length(point_1, point_2) = sqrt( - (point_1-point_2).x^2 + - (point_1-point_2).y^2 + - (point_1-point_2).z^2 -); - - -// creates 1 side of the idt -module delay_line(lambda = 1, n_fingers = 1, finger_length = 50, gap = 0, thickness = 0) { - // code - l45 =lambda*5/4; - l2 = lambda/2; - l4 = lambda/4; - l8 = lambda/8; - b = l4 + thickness; - f = l4 + finger_length*lambda; - - points_cap = [ - [0, 0], - [0, l2], - [-b-f, l2], - [-b-f, l4], - [-b, l4], - [-b, 0] - ]; - - points = [ - [0, 0], - [b, 0], - [b, l2], - [b+f, l2], - [b+f, l2+l4], - [b, l2+l4], - [b, l4*5-l4], - [0, l4*5-l4] - ]; - // union () { - - translate([0, l2, 0]){ - for(i = [0:n_fingers]){ - translate([0, i*(l45-l4), 0]) { - polygon(points); - } - } - - color("red") { - rotate([0, 0, 180]) - translate([0, 0, 0]) { - polygon(points_cap); - } - - translate([f+l2+gap+thickness, -l2, 0]) { - square(size=[l4+thickness, l4]); - } - } - - - union() { - for(i = [0:n_fingers]){ - translate([2*b+f+gap+l4, i*(l45-l4)+l2+l4 , 0]) - rotate([0, 0, 180]) - polygon(points); - } - } - - color("red") { - translate([2*b+f+gap+l4, n_fingers*lambda+lambda-l4, 0]) { - polygon(points_cap); - } - translate([0, n_fingers*lambda+lambda, 0]) { - square(size=[l4+thickness, l4]); - } - } - - } -} - - -// todo fix this -// units in m, the size is the min bond pad size -module bond_pad( - leg_length = 0.000075, - leg_width = 0.00001875, - leg_length_tweak = 0, - leg_angle = 45, - size = 0.000075, - bond_pad_shape = "square", - post_scale = false -) { - if (post_scale) { - circle(r=leg_width*post_scale); - - rotate([0, 0, leg_angle+180]) { - translate([-leg_length*post_scale-leg_length_tweak, -leg_width*post_scale/2, 0]) { - // color([0, 255/255, 255/255]) { - // arm - square(size=[(leg_length)*post_scale+leg_length_tweak, leg_width*post_scale]); - // } - } - } - // pad - translate([post_scale*leg_length*cos(leg_angle), post_scale*leg_length*sin(leg_angle), 0]) { - square(size=[size*post_scale, size*post_scale], center=true); - } - - // echo(str("x = ", post_scale*leg_length*cos(leg_angle+180))); - // echo(str("y = ", post_scale*leg_length*sin(leg_angle+180))); - - - } else { - rotate([0, 0, leg_angle+180]) { - translate([-leg_length/2, -leg_width, 0]) { - // color([0, 255/255, 255/255]) { - square(size=[leg_length, leg_width]); - // } - } - } - square(size=[size, size], center=true); - } -} - -// creates the input and output ids -module delay_line_idt( - c, - f, - n_fingers, - distance = 100, - finger_length = 50, - gap = 0, - thickness = 0, - impedance = 50, - - // bond pad prams - has_bond_pads = false, - bond_pad_leg_length = 0.00005, - bond_pad_leg_width = 0.00001875, - bond_pad_size = 0.000075, - bond_pad_angle = 45, - bond_pad_bond_pad_shape = "square", - - // id number prams - id_number = 0, - has_id = true, - id_flip_dir = [1, 1, 1], - // extra - post_scale = false -) { - - local_scale = 0; - // echo("===== DELAY LINE IDT INFO ===== "); - - if (post_scale) { - lambda = c/f * post_scale; - // dont worry about these magic fractions - length_of_input = n_fingers*lambda+1.74*lambda; - // n_fingers*lambda+lambda/2; - - - // echo(str("lambda = ", lambda)); - // echo(str("lambda/4 = ", lambda/4)); - // echo(str("lambda_scale = ", post_scale)); - delay_line(lambda, n_fingers, finger_length, gap, thickness); - - - - if (has_id) { - color([255/255, 0/255, 255/255]) - translate([finger_length*lambda/2, has_bond_pads ? -(bond_pad_leg_length * post_scale * cos(bond_pad_angle)) : -lambda*finger_length/2, 0]) - scale(id_flip_dir) - text(str(id_number), size=id_text_size, halign="center"); - } - - color([0/255, 255/255, 128/255]) { - translate([0, distance*lambda+length_of_input, 0]) { - delay_line(lambda, n_fingers, finger_length, gap, thickness); - } - } - - // near ori - rotate([0, 0, -90]) { - if (has_bond_pads) { - color([255/255, 255/255, 255/255]) { - bond_pad( - leg_length_tweak = lambda/4, - leg_width=c/f/4, - leg_length=length( - [0,0,0], - [bond_pad_leg_length, bond_pad_leg_length, 0] - ), - leg_angle = -bond_pad_angle, - size = bond_pad_size, - post_scale=scale_unit - ); - } - } - } - // near side - - translate([lambda*finger_length+gap+thickness*2+lambda, 0, 0]) { - rotate([0, 0, -90]) { - if (has_bond_pads) { - bond_pad( - leg_length_tweak = lambda/5, - leg_width=c/f/4, - leg_length=length( - [0,0,0], - [bond_pad_leg_length, bond_pad_leg_length, 0] - ), - leg_angle = bond_pad_angle, - size = bond_pad_size, - post_scale=scale_unit - ); - } - } - } - - // far side - translate([0, length_of_input+distance*lambda+length_of_input, 0]) { - rotate([0, 0, 90]) { - if (has_bond_pads) { - bond_pad( - leg_length_tweak = lambda/5, - leg_width=c/f/4, - leg_length=length( - [0,0,0], - [bond_pad_leg_length, bond_pad_leg_length, 0] - ), - leg_angle = bond_pad_angle, - size = bond_pad_size, - post_scale=scale_unit - ); - } - } - // furthest side - translate([lambda*finger_length+gap+thickness*2+lambda, 0, 0]) { - rotate([0, 0, 90]) { - if (has_bond_pads) { - bond_pad( - leg_length_tweak = lambda/4, - leg_width=c/f/4, - leg_length=length( - [0,0,0], - [bond_pad_leg_length, bond_pad_leg_length, 0] - ), - leg_angle = -bond_pad_angle, - size = bond_pad_size, - post_scale=scale_unit - ); - } - } - } - } - } else { - lambda = 1; - length_of_input = n_fingers*lambda*15/8; - echo(str("lambda = ", lambda)); - echo(str("lambda_scale = ", 1)); - delay_line(lambda, n_fingers, finger_length, gap, thickness); - translate([0, length_of_input+distance*lambda, 0]) - delay_line(lambda, n_fingers, finger_length, gap, thickness); - } - - // echo(str("impedance = ", impedance)); - - // echo(str("total capacitance = ", 1/(2*PI*f*impedance))); - - // echo("===== DELAY LINE IDT INFO ===== "); -} - -module wafer(d) { - color([128/255, 128/255, 128/255]) { - translate([0, 0, -1]) { - circle(r=d/2); - } - } -} - -module prameter_text() { -text(str("IDT ", substrate, "#", test_number), size=4, font=FONT); -translate([0, -title_text_size, 0]) -text(str("c (ms): ", c), size=prop_text_size, font=FONT); -translate([0, -title_text_size*2, 0]) -text(str("freq (Hz): ", freq), size=prop_text_size, font=FONT); -translate([0, -title_text_size*3, 0]) -text(str("distance : ", distance), size=prop_text_size, font=FONT); -translate([0, -title_text_size*4, 0]) -text(str("n_fingers : ", n_fingers), size=prop_text_size, font=FONT); -translate([0, -title_text_size*5, 0]) -text(str("finger_length : ", finger_length), size=prop_text_size, font=FONT); -translate([0, -title_text_size*6, 0]) -text(str("gap : ", gap), size=prop_text_size, font=FONT); -translate([0, -title_text_size*7, 0]) -text(str("thickness : ", thickness), size=prop_text_size, font=FONT); -translate([0, -title_text_size*8, 0]) -text(str("leg_length : ", leg_length), size=prop_text_size, font=FONT); -translate([0, -title_text_size*9, 0]) -text(str("leg_angle : ", leg_angle), size=prop_text_size, font=FONT); -translate([0, -title_text_size*10, 0]) -text(str("size : ", size), size=prop_text_size, font=FONT); -translate([0, -title_text_size*11, 0]) -text(str("feat. size (mm): ", (c/freq)*1e3), size=prop_text_size, font=FONT); -translate([0, -title_text_size*12, 0]) -text(str("version : ", SCRIPT_VERSION), size=prop_text_size, font=FONT); - -} - - - -translate([info_block_offset_x, -info_block_offset_y, 0]) { -rotate([0, 0, -90]) -scale([info_block_scale, info_block_scale, info_block_scale]) { - prameter_text(); -} -} - -rotate([0, 0, 180]) -translate([info_block_offset_x, -info_block_offset_y, 0]) { -rotate([0, 0, -90]) -scale([info_block_scale, info_block_scale, info_block_scale]) { - prameter_text(); -} -} - -// delay_line_idt( -// c, -// freq, -// n_fingers, -// distance, -// finger_length, -// gap, -// thickness, -// post_scale=scale_unit, -// has_bond_pads = true, -// bond_pad_angle = leg_angle, -// bond_pad_leg_width = leg_width, -// bond_pad_leg_length = leg_length, -// bond_pad_size = size -// ); - -if ($preview) -wafer(wafer_size_inch*25.4*post_scale); -for (i=[0:number_of_idts_per_quadrent-1]) { - translate([idt_x_spacing/4, 0, 0]) { - translate([i * idt_x_spacing, idt_y_spacing/2, 0]) { - delay_line_idt( - c, - freq, - n_fingers, - distance, - finger_length, - gap, - thickness, - post_scale=scale_unit, - has_bond_pads = true, - bond_pad_angle = leg_angle, - bond_pad_leg_width = leg_width, - bond_pad_leg_length = leg_length, - bond_pad_size = size, - id_number = i - ); - } - translate([i * idt_x_spacing, -idt_y_spacing/2, 0]) { - scale([1, -1, 1]) { - delay_line_idt( - c, - freq, - n_fingers, - distance, - finger_length, - gap, - thickness, - post_scale=scale_unit, - has_bond_pads = true, - bond_pad_angle = leg_angle, - bond_pad_leg_width = leg_width, - bond_pad_leg_length = leg_length, - bond_pad_size = size, - id_number = i + number_of_idts_per_quadrent, - id_flip_dir = [1, -1, -1] - ); - } - } - } - - scale([-1, 1, 1]) - translate([idt_x_spacing/4, 0, 0]) { - - translate([i * idt_x_spacing, idt_y_spacing/2, 0]) { - delay_line_idt( - c, - freq, - n_fingers, - distance, - finger_length, - gap, - thickness, - post_scale=scale_unit, - has_bond_pads = true, - bond_pad_angle = leg_angle, - bond_pad_leg_width = leg_width, - bond_pad_leg_length = leg_length, - bond_pad_size = size, - id_number = i + number_of_idts_per_quadrent*2, - id_flip_dir = [-1, 1, 1] - ); - } - translate([i * idt_x_spacing, -idt_y_spacing/2, 0]) { - scale([1, -1, 1]) { - delay_line_idt( - c, - freq, - n_fingers, - distance, - finger_length, - gap, - thickness, - post_scale=scale_unit, - has_bond_pads = true, - bond_pad_angle = leg_angle, - bond_pad_leg_width = leg_width, - bond_pad_leg_length = leg_length, - bond_pad_size = size, - id_number = i + number_of_idts_per_quadrent*3, - id_flip_dir = [-1, -1, 1] - ); - } - } - } -} - -// bond_pad( -// leg_length = 0.0075, -// leg_width = 0.00001875, -// leg_angle = 20, -// size = 0.0075, -// bond_pad_shape = "square", -// post_scale = scale_unit -// ); \ No newline at end of file