Compare commits

..

9 Commits

15 changed files with 1275 additions and 481 deletions

50
README.md Normal file
View File

@@ -0,0 +1,50 @@
# openscad IDT creation scripts
these are a collection of scripts and layout for creating IDTs within openscad as well as some fun
layout on wafers. Currently these scripts only support bidirectional IDT but i will be adding more
in the future. but you could create cool IDT on wafers like this:
![alt text](res/image.png)
## to start
- download openscad
```bash
$ sudo apt install openscad
```
- clone this repo
```bash
$ git clone https://git.sirlilpanda.studio/sirlilpanda/openscad_parameteric_IDT_creation_scripts.git
```
- create a new openscad file within wafer layouts for this example it will be called `your_new_idt_layout.scad`
```
...
|
├ wafer_layouts
| ├ cross_pattern_idt.scad
| ├ hex_layout_idt.scad
| ├ pair_idt.scad
| ├ quadrant_array.scad
| ├ your_new_idt_layout.scad
| └ single_idt.scad
├ common_params.scad
└ README.md
```
- add the required files to get started in your `your_new_idt_layout.scad`
``` scad
// > your_new_idt_layout.scad
// the idt module itself
include <../modules/bidirectional_idt.scad>
// a module for nicely displaying the parameters used for your idt
include <../modules/parameter_text.scad>
// a simple wafer model that wont get added in to your final design
include <../modules/wafer.scad>
```
- and lastly copy in the `common_params.scad` in to your `your_new_idt_layout.scad`, these are just common parameters that each design need such as frequency and speed of sound in your substrate.
- now you can add as many idts to the wafer as you want.
check out `single_idt.scad` and `quadrant_array.scad` to see what is possible with these scripts.

70
common_paramas.scad Normal file
View File

@@ -0,0 +1,70 @@
// ================= openscad prams =================
$fa = 1;
$fs = 0.01;
// ================= openscad prams =================
// ================= meta =================
SCRIPT_VERSION="0.0.1";
// this really just need to be any mon font
FONT="Ubuntu Sans Mono:style=Regular";
test_number = 1;
// scale in m
scale_unit = 1e3;
// ================= meta =================
// ================= IDT =================
substrate = "SI";
// 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;
has_id_number = false;
// ================= IDT =================
// ================= bond pad =================
leg_length = 0.003;
leg_width = 0.00001875;
leg_angle = 10;
size = 0.002;
bond_pad_shape = "square";
// ================= bond pad =================
// ================= text =================
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;
// ================= text =================
// ================= array spacings =================
number_of_idts_per_quadrent=4;
idt_x_spacing = 10;
idt_y_spacing = 12.5;
// ================= array spacings =================
// ================= wafers =================
wafer_size_inch = 4;
// ================= wafers =================

View File

@@ -1,481 +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 = 2;
number_of_idts_per_quadrent=4;
idt_x_spacing = 10;
idt_y_spacing = 7;
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,
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",
post_scale = false,
id_number = 0,
has_id = true
) {
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])
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 : ", c), size=prop_text_size, font=FONT);
translate([0, -title_text_size*2, 0])
text(str("freq : ", 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
// );
// wafer(wafer_size_inch*25.4);
for (i=[0:number_of_idts_per_quadrent-1]) {
translate([idt_x_spacing/4, 0, 0]) {
translate([i * idt_x_spacing, idt_y_spacing, 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
);
}
translate([i * idt_x_spacing, -idt_y_spacing, 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
);
}
}
}
scale([-1, 1, 1])
translate([idt_x_spacing/4, 0, 0]) {
translate([i * idt_x_spacing, idt_y_spacing, 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
);
}
translate([i * idt_x_spacing, -idt_y_spacing, 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
);
}
}
}
}
// bond_pad(
// leg_length = 0.0075,
// leg_width = 0.00001875,
// leg_angle = 20,
// size = 0.0075,
// bond_pad_shape = "square",
// post_scale = scale_unit
// );

View File

@@ -0,0 +1,150 @@
include <idt.scad>
include <bond_pad.scad>
// creates the input and output idts
// [TODO] clean this
module bi_directional_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 = false,
id_flip_dir = [1, 1, 1],
// extra
post_scale = 1,
echo_stats = false,
center = false
) {
lambda = c/f * post_scale;
// dont worry about these magic fractions
length_of_input = n_fingers*lambda+1.74*lambda;
should_be_centered = center ? 1 : 0;
center_offset_y = length_of_input + distance * lambda/2;
center_offset_x = finger_length*lambda/2 + gap/2 + thickness;
translate([-center_offset_x * should_be_centered, -center_offset_y * should_be_centered, 0]) {
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");
}
// echo(str("lambda_scale = ", post_scale));
delay_line(lambda, n_fingers, finger_length, gap, thickness);
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
);
}
}
}
}
}
if (echo_stats) {
echo("===== DELAY LINE IDT INFO ===== ");
echo(str("lambda = ", lambda));
echo(str("min feature size lambda/4 = ", lambda/4));
echo(str("impedance = ", impedance));
echo(str("total capacitance = ", 1/(2*PI*f*impedance)));
echo("===== DELAY LINE IDT INFO ===== ");
}
}

48
modules/bond_pad.scad Normal file
View File

@@ -0,0 +1,48 @@
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
);
// 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);
}
}

69
modules/idt.scad Normal file
View File

@@ -0,0 +1,69 @@
// 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]);
}
}
}
}

View File

@@ -0,0 +1,15 @@
module parameter_text(
heading,
params,
heading_size = 4,
param_size = 2.5,
font = "Ubuntu Sans Mono:style=Regular",
center = false
) {
text(heading, size=heading_size, font=FONT, halign = center ? "center" : "left");
for (i=[0:len(params)]) {
translate([0, -heading_size*(i+1), 0])
text(params[i], size=param_size, font=FONT, halign = center ? "center" : "left");
}
}

11
modules/wafer.scad Normal file
View File

@@ -0,0 +1,11 @@
// [TODO] try add the flat edge on to the wafer
module wafer(d) {
if ($preview) {
color([128/255, 128/255, 128/255])
translate([0, 0, -1])
circle(r=d/2);
}
}

View File

@@ -0,0 +1,37 @@
{
"parameterSets": {
"design default values": {
"$fa": "1",
"$fs": "0.01",
"FONT": "Ubuntu Sans Mono:style=Regular",
"SCRIPT_VERSION": "0.0.1",
"bond_pad_shape": "square",
"c": "3992",
"distance": "50",
"finger_length": "60",
"freq": "5e+7",
"gap": "0",
"has_id_number": "true",
"id_text_size": "1",
"idt_x_spacing": "10",
"idt_y_spacing": "12.5",
"info_block_offset_x": "7",
"info_block_offset_y": "30",
"info_block_scale": "0.3",
"leg_angle": "10",
"leg_length": "0.003",
"leg_width": "0.00001875",
"n_fingers": "50",
"number_of_idts_per_quadrent": "4",
"prop_text_size": "2.5",
"scale_unit": "1000",
"size": "0.002",
"substrate": "SI",
"test_number": "1",
"thickness": "0",
"title_text_size": "4",
"wafer_size_inch": "4"
}
},
"fileFormatVersion": "1"
}

BIN
res/image.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

View File

@@ -0,0 +1,151 @@
include <../modules/bidirectional_idt.scad>
include <../modules/parameter_text.scad>
include <../modules/wafer.scad>
// ================= README =================
// these are the normal parameters used by
// each one of the layout scripts
// however they do dont directly use them
// and instead have thier own copy
//
// this was done in order to have more control
// over each of the scripts themsevels
// allowing each to have even more parameters
// and having them show up in the open scad
// parameters window
// ================= README =================
// ================= openscad prams =================
$fa = 1;
$fs = 0.01;
// ================= openscad prams =================
// ================= meta =================
SCRIPT_VERSION="0.0.1";
// this really just need to be any mon font
FONT="Ubuntu Sans Mono:style=Regular";
test_number = 1;
// scale in m
scale_unit = 1e3;
// ================= meta =================
// ================= IDT =================
substrate = "LINBO";
// linbo
c = 3992.0;
// si
// c = 3159.0;
freq = 50.0e6;
// $fs = (c/freq);
// inout distance
distance = 150;
// 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;
has_id_number = false;
// ================= IDT =================
// ================= bond pad =================
leg_length = 0.003;
leg_width = 0.00001875;
leg_angle = 10;
size = 0.002;
bond_pad_shape = "square";
// ================= bond pad =================
// ================= text =================
info_block_offset_x=20;
info_block_offset_y=-30;
info_block_scale=0.3;
title_text_size = 4;
prop_text_size = 2.5;
id_text_size = 1;
// ================= text =================
// ================= IDT Pos =================
idt_1_x_offset = 0;
idt_1_y_offset = 0;
idt_2_x_offset = 0;
idt_2_y_offset = 0;
// ================= IDT Pos =================
// ================= wafers =================
wafer_size_inch = 4;
// ================= wafers =================
module params() {
parameter_text(
str("IDT ", substrate, "#", test_number),
[
str("c (ms): ", c),
str("freq (Hz): ", freq),
str("distance : ", distance),
str("n_fingers : ", n_fingers),
str("finger_length : ", finger_length),
str("gap : ", gap),
str("thickness : ", thickness),
str("leg_length : ", leg_length),
str("leg_angle : ", leg_angle),
str("size : ", size),
str("feat. size (mm): ", (c/freq)*1e3),
str("version : ", SCRIPT_VERSION)
]
);
}
translate([info_block_offset_x, -info_block_offset_y, 0])
scale([info_block_scale, info_block_scale, info_block_scale])
params();
wafer(wafer_size_inch*25.4);
translate([idt_1_x_offset, idt_1_y_offset, 0])
rotate([0, 0, 90])
bi_directional_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,
center = true
);
translate([idt_2_x_offset, idt_2_y_offset, 0])
bi_directional_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,
center = true
);

View File

@@ -0,0 +1,174 @@
include <../modules/bidirectional_idt.scad>
include <../modules/parameter_text.scad>
include <../modules/wafer.scad>
// ================= README =================
// these are the normal parameters used by
// each one of the layout scripts
// however they do dont directly use them
// and instead have thier own copy
//
// this was done in order to have more control
// over each of the scripts themsevels
// allowing each to have even more parameters
// and having them show up in the open scad
// parameters window
// ================= README =================
// ================= openscad prams =================
$fa = 1;
$fs = 0.01;
// ================= openscad prams =================
// ================= meta =================
SCRIPT_VERSION="0.0.1";
// this really just need to be any mon font
FONT="Ubuntu Sans Mono:style=Regular";
test_number = 1;
// scale in m
scale_unit = 1e3;
// ================= meta =================
// ================= IDT =================
substrate = "LINBO";
// linbo
c = 3992.0;
// si
// c = 3159.0;
freq = 50.0e6;
// $fs = (c/freq);
// inout distance
distance = 150;
// 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;
has_id_number = false;
// ================= IDT =================
// ================= bond pad =================
leg_length = 0.003;
leg_width = 0.00001875;
leg_angle = 10;
size = 0.002;
bond_pad_shape = "square";
// ================= bond pad =================
// ================= text =================
info_block_offset_x=20;
info_block_offset_y=-30;
info_block_scale=0.3;
title_text_size = 4;
prop_text_size = 2.5;
id_text_size = 1;
// ================= text =================
// ================= IDT Pos =================
idt_1_x_offset = 0;
idt_1_y_offset = 0;
idt_2_x_offset = 0;
idt_2_y_offset = 0;
// ================= IDT Pos =================
// ================= wafers =================
wafer_size_inch = 4;
// ================= wafers =================
module params() {
parameter_text(
str("IDT ", substrate, "#", test_number),
[
str("c (ms): ", c),
str("freq (Hz): ", freq),
str("distance : ", distance),
str("n_fingers : ", n_fingers),
str("finger_length : ", finger_length),
str("gap : ", gap),
str("thickness : ", thickness),
str("leg_length : ", leg_length),
str("leg_angle : ", leg_angle),
str("size : ", size),
str("feat. size (mm): ", (c/freq)*1e3),
str("version : ", SCRIPT_VERSION)
]
);
}
translate([info_block_offset_x, -info_block_offset_y, 0])
scale([info_block_scale, info_block_scale, info_block_scale])
params();
wafer(wafer_size_inch*25.4);
translate([idt_1_x_offset, idt_1_y_offset, 0])
rotate([0, 0, 60])
bi_directional_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,
center = true
);
translate([idt_2_x_offset, idt_2_y_offset, 0])
rotate([0, 0, 120])
bi_directional_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,
center = true
);
translate([idt_2_x_offset, idt_2_y_offset, 0])
bi_directional_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,
center = true
);

150
wafer_layouts/pair_idt.scad Normal file
View File

@@ -0,0 +1,150 @@
include <../modules/bidirectional_idt.scad>
include <../modules/parameter_text.scad>
include <../modules/wafer.scad>
// ================= README =================
// these are the normal parameters used by
// each one of the layout scripts
// however they do dont directly use them
// and instead have thier own copy
//
// this was done in order to have more control
// over each of the scripts themsevels
// allowing each to have even more parameters
// and having them show up in the open scad
// parameters window
// ================= README =================
// ================= openscad prams =================
$fa = 1;
$fs = 0.01;
// ================= openscad prams =================
// ================= meta =================
SCRIPT_VERSION="0.0.1";
// this really just need to be any mon font
FONT="Ubuntu Sans Mono:style=Regular";
test_number = 1;
// scale in m
scale_unit = 1e3;
// ================= meta =================
// ================= IDT =================
substrate = "LINBO";
// 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;
has_id_number = false;
// ================= IDT =================
// ================= bond pad =================
leg_length = 0.003;
leg_width = 0.00001875;
leg_angle = 10;
size = 0.002;
bond_pad_shape = "square";
// ================= bond pad =================
// ================= text =================
info_block_offset_x=20;
info_block_offset_y=-15;
info_block_scale=0.3;
title_text_size = 4;
prop_text_size = 2.5;
id_text_size = 1;
// ================= text =================
// ================= IDT Pos =================
idt_1_x_offset = -5;
idt_1_y_offset = 0;
idt_2_x_offset = 5;
idt_2_y_offset = 0;
// ================= IDT Pos =================
// ================= wafers =================
wafer_size_inch = 4;
// ================= wafers =================
module params() {
parameter_text(
str("IDT ", substrate, "#", test_number),
[
str("c (ms): ", c),
str("freq (Hz): ", freq),
str("distance : ", distance),
str("n_fingers : ", n_fingers),
str("finger_length : ", finger_length),
str("gap : ", gap),
str("thickness : ", thickness),
str("leg_length : ", leg_length),
str("leg_angle : ", leg_angle),
str("size : ", size),
str("feat. size (mm): ", (c/freq)*1e3),
str("version : ", SCRIPT_VERSION)
]
);
}
translate([info_block_offset_x, -info_block_offset_y, 0])
scale([info_block_scale, info_block_scale, info_block_scale])
params();
wafer(wafer_size_inch*25.4);
translate([idt_1_x_offset, idt_1_y_offset, 0])
bi_directional_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,
center = true
);
translate([idt_2_x_offset, idt_2_y_offset, 0])
bi_directional_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,
center = true
);

View File

@@ -0,0 +1,220 @@
include <../modules/bidirectional_idt.scad>
include <../modules/wafer.scad>
include <../modules/parameter_text.scad>
// include <../pramas.scad>
// ================= openscad prams =================
$fa = 1;
$fs = 0.01;
// ================= openscad prams =================
// ================= meta =================
SCRIPT_VERSION="0.0.1";
// this really just need to be any mon font
FONT="Ubuntu Sans Mono:style=Regular";
test_number = 1;
// scale in m
scale_unit = 1e3;
// ================= meta =================
// ================= IDT =================
substrate = "LINBO";
// 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;
has_id_number = true;
// ================= IDT =================
// ================= bond pad =================
leg_length = 0.003;
leg_width = 0.00001875;
leg_angle = 10;
size = 0.002;
bond_pad_shape = "square";
// ================= bond pad =================
// ================= text =================
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;
// ================= text =================
// ================= array spacings =================
number_of_idts_per_quadrent=4;
idt_x_spacing = 10;
idt_y_spacing = 12.5;
// ================= array spacings =================
// ================= wafers =================
wafer_size_inch = 4;
// ================= wafers =================
module params() {
parameter_text(
str("IDT ", substrate, "#", test_number),
[
str("c (ms): ", c),
str("freq (Hz): ", freq),
str("distance : ", distance),
str("n_fingers : ", n_fingers),
str("finger_length : ", finger_length),
str("gap : ", gap),
str("thickness : ", thickness),
str("leg_length : ", leg_length),
str("leg_angle : ", leg_angle),
str("size : ", size),
str("feat. size (mm): ", (c/freq)*1e3),
str("version : ", SCRIPT_VERSION)
]
);
}
translate([info_block_offset_x, -info_block_offset_y, 0]) {
rotate([0, 0, -90])
scale([info_block_scale, info_block_scale, info_block_scale]) {
params();
}
}
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]) {
params();
}
}
if ($preview)
wafer(wafer_size_inch*0.0254*scale_unit);
// echo(str("number_of_idts_per_quadrent : ", number_of_idts_per_quadrent));
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]) {
bi_directional_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,
has_id = has_id_number,
id_number = i
);
}
translate([i * idt_x_spacing, -idt_y_spacing/2, 0]) {
scale([1, -1, 1]) {
bi_directional_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,
has_id = has_id_number,
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]) {
bi_directional_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,
has_id = has_id_number,
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]) {
bi_directional_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,
has_id = has_id_number,
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
// );

View File

@@ -0,0 +1,130 @@
include <../modules/bidirectional_idt.scad>
include <../modules/parameter_text.scad>
include <../modules/wafer.scad>
// ================= README =================
// these are the normal parameters used by
// each one of the layout scripts
// however they do dont directly use them
// and instead have thier own copy
//
// this was done in order to have more control
// over each of the scripts themsevels
// allowing each to have even more parameters
// and having them show up in the open scad
// parameters window
// ================= README =================
// ================= openscad prams =================
$fa = 1;
$fs = 0.01;
// ================= openscad prams =================
// ================= meta =================
SCRIPT_VERSION="0.0.1";
// this really just need to be any mon font
FONT="Ubuntu Sans Mono:style=Regular";
test_number = 1;
// scale in m
scale_unit = 1e3;
// ================= meta =================
// ================= IDT =================
substrate = "LINBO";
// 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;
has_id_number = false;
// ================= IDT =================
// ================= bond pad =================
leg_length = 0.003;
leg_width = 0.00001875;
leg_angle = 10;
size = 0.002;
bond_pad_shape = "square";
// ================= bond pad =================
// ================= text =================
info_block_offset_x=20;
info_block_offset_y=-15;
info_block_scale=0.3;
title_text_size = 4;
prop_text_size = 2.5;
id_text_size = 1;
// ================= text =================
// ================= IDT Pos =================
idt_x_offset = 0;
idt_y_offset = 0;
// ================= IDT Pos =================
// ================= wafers =================
wafer_size_inch = 4;
// ================= wafers =================
module params() {
parameter_text(
str("IDT ", substrate, "#", test_number),
[
str("c (ms): ", c),
str("freq (Hz): ", freq),
str("distance : ", distance),
str("n_fingers : ", n_fingers),
str("finger_length : ", finger_length),
str("gap : ", gap),
str("thickness : ", thickness),
str("leg_length : ", leg_length),
str("leg_angle : ", leg_angle),
str("size : ", size),
str("feat. size (mm): ", (c/freq)*1e3),
str("version : ", SCRIPT_VERSION)
]
);
}
translate([info_block_offset_x, -info_block_offset_y, 0])
scale([info_block_scale, info_block_scale, info_block_scale])
params();
wafer(wafer_size_inch*25.4);
translate([0, 0, 0])
bi_directional_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,
center = true,
echo_stats = true
);