Compare commits
21 Commits
07d67fb0ae
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f4ce14d35 | ||
|
|
9918d2b064 | ||
|
|
d499fff5cc | ||
| 91f84fb78a | |||
| 129a5b5d3d | |||
| 67a76eff07 | |||
| 8ae175e08c | |||
|
|
04e1ad0d0a | ||
|
|
2516378755 | ||
|
|
f94a6d137e | ||
|
|
7526d8d2a1 | ||
|
|
21ed153977 | ||
| f3216a74db | |||
| bdc5bbbd6a | |||
| 7382cca207 | |||
| 79fa5c8237 | |||
| f65383ef28 | |||
| ab7024b46a | |||
| 3a634cdb18 | |||
| ade276e1ec | |||
| 446890d958 |
50
README.md
Normal file
50
README.md
Normal 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:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## 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.
|
||||||
116
common_paramas.scad
Normal file
116
common_paramas.scad
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
// ================= 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 =================
|
||||||
|
|
||||||
|
// min angle
|
||||||
|
$fa = 0.1;
|
||||||
|
|
||||||
|
// min size
|
||||||
|
$fs = 0.01;
|
||||||
|
// ================= openscad prams =================
|
||||||
|
|
||||||
|
// ================= meta =================
|
||||||
|
// version number of the current script
|
||||||
|
SCRIPT_VERSION="0.0.1";
|
||||||
|
|
||||||
|
// font for layout
|
||||||
|
FONT="Ubuntu Sans Mono:style=Regular";
|
||||||
|
|
||||||
|
// the test number ref number for this set of IDTs
|
||||||
|
test_number = 1;
|
||||||
|
|
||||||
|
// this is needed due to the min size value
|
||||||
|
// a pre scaler for the given values
|
||||||
|
scale_unit = 1e3;
|
||||||
|
|
||||||
|
// ================= meta =================
|
||||||
|
|
||||||
|
|
||||||
|
// ================= IDT =================
|
||||||
|
|
||||||
|
// the underlying substrate
|
||||||
|
substrate = "SI";
|
||||||
|
|
||||||
|
// linbo
|
||||||
|
// the aoucstice wave speed in the substrate
|
||||||
|
c = 3992.0;
|
||||||
|
// si
|
||||||
|
// c = 3159.0;
|
||||||
|
|
||||||
|
// the target frequency of the IDT
|
||||||
|
freq = 50.0e6;
|
||||||
|
|
||||||
|
// the distance between the input and output IDT
|
||||||
|
// should be between 100-200
|
||||||
|
distance = 50;
|
||||||
|
|
||||||
|
// the number of fingers the IDT has
|
||||||
|
n_fingers = 50;
|
||||||
|
|
||||||
|
// the length of the figure or aperture should be 50-70
|
||||||
|
finger_length = 60;
|
||||||
|
|
||||||
|
// the gap between both sides of the IDT (should be used for tweaking)
|
||||||
|
gap = 0;
|
||||||
|
|
||||||
|
// the thickness of the wire the connects all the fingers
|
||||||
|
thickness = 0;
|
||||||
|
|
||||||
|
// adds an ID number to an IDT, useful if you have multiple on a wafer
|
||||||
|
has_id_number = false;
|
||||||
|
// ================= IDT =================
|
||||||
|
|
||||||
|
// ================= bond pad =================
|
||||||
|
|
||||||
|
// the length of the bond pad leg from the edge of the IDT to the center of the bond pad
|
||||||
|
leg_length = 0.003;
|
||||||
|
|
||||||
|
// the width of the leg
|
||||||
|
leg_width = 0.00001875;
|
||||||
|
|
||||||
|
// the angle the leg comes off from the IDT,
|
||||||
|
// positive angle means the leg is angled away
|
||||||
|
// negitive angle means the leg is angled inwards
|
||||||
|
leg_angle = 10;
|
||||||
|
|
||||||
|
// the size of the bond pad
|
||||||
|
size = 0.002;
|
||||||
|
|
||||||
|
// the shape of the bond pad (not implemented)
|
||||||
|
bond_pad_shape = "square";
|
||||||
|
|
||||||
|
// ================= bond pad =================
|
||||||
|
|
||||||
|
// ================= text =================
|
||||||
|
|
||||||
|
info_block_offset_x=7;
|
||||||
|
info_block_offset_y=30;
|
||||||
|
// total scale of infoblock
|
||||||
|
info_block_scale=0.3;
|
||||||
|
|
||||||
|
// the text size of the heading in the info block
|
||||||
|
title_text_size = 4;
|
||||||
|
|
||||||
|
// the size of all the sub items in the info block
|
||||||
|
prop_text_size = 2.5;
|
||||||
|
|
||||||
|
// the size of the ID numbers in on the IDTS
|
||||||
|
id_text_size = 1;
|
||||||
|
|
||||||
|
// ================= text =================
|
||||||
|
|
||||||
|
// ================= wafers =================
|
||||||
|
// the size of the wafer in inchs (why inch and not metric like everything else because its standard)
|
||||||
|
wafer_size_inch = 4;
|
||||||
|
// ================= wafers =================
|
||||||
481
delay_line.scad
481
delay_line.scad
@@ -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
|
|
||||||
// );
|
|
||||||
685486
dxfs/10MHz_pair_IDT/pair_10MHZ.dxf
Normal file
685486
dxfs/10MHz_pair_IDT/pair_10MHZ.dxf
Normal file
File diff suppressed because it is too large
Load Diff
38
dxfs/10MHz_pair_IDT/pair_idt.json
Normal file
38
dxfs/10MHz_pair_IDT/pair_idt.json
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"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": "70",
|
||||||
|
"finger_length": "50",
|
||||||
|
"freq": "1e+7",
|
||||||
|
"gap": "0",
|
||||||
|
"has_id_number": "true",
|
||||||
|
"id_text_size": "1",
|
||||||
|
"idt_1_x_offset": "-15",
|
||||||
|
"idt_1_y_offset": "0",
|
||||||
|
"idt_2_x_offset": "15",
|
||||||
|
"idt_2_y_offset": "0",
|
||||||
|
"info_block_offset_x": "32",
|
||||||
|
"info_block_offset_y": "-7",
|
||||||
|
"info_block_scale": "0.3",
|
||||||
|
"leg_angle": "10",
|
||||||
|
"leg_length": "0.003",
|
||||||
|
"leg_width": "0.00001875",
|
||||||
|
"n_fingers": "50",
|
||||||
|
"prop_text_size": "2.5",
|
||||||
|
"scale_unit": "1000",
|
||||||
|
"size": "0.002",
|
||||||
|
"substrate": "SI",
|
||||||
|
"test_number": "2",
|
||||||
|
"thickness": "0",
|
||||||
|
"title_text_size": "4",
|
||||||
|
"wafer_size_inch": "4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fileFormatVersion": "1"
|
||||||
|
}
|
||||||
685486
dxfs/10MHz_pair_IDT/wafer_layout.dxf
Normal file
685486
dxfs/10MHz_pair_IDT/wafer_layout.dxf
Normal file
File diff suppressed because it is too large
Load Diff
704170
dxfs/10MHz_single_IDT/single_10MHZ.dxf
Normal file
704170
dxfs/10MHz_single_IDT/single_10MHZ.dxf
Normal file
File diff suppressed because it is too large
Load Diff
713626
dxfs/10MHz_single_IDT/single_IDT_SI#1.dxf
Normal file
713626
dxfs/10MHz_single_IDT/single_IDT_SI#1.dxf
Normal file
File diff suppressed because it is too large
Load Diff
36
dxfs/10MHz_single_IDT/single_idt.json
Normal file
36
dxfs/10MHz_single_IDT/single_idt.json
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"parameterSets": {
|
||||||
|
"design default values": {
|
||||||
|
"$fa": "0.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": "50",
|
||||||
|
"freq": "1e+7",
|
||||||
|
"gap": "0",
|
||||||
|
"has_id_number": "false",
|
||||||
|
"id_text_size": "1",
|
||||||
|
"idt_x_offset": "0",
|
||||||
|
"idt_y_offset": "0",
|
||||||
|
"info_block_offset_x": "25",
|
||||||
|
"info_block_offset_y": "10",
|
||||||
|
"info_block_scale": "0.3",
|
||||||
|
"leg_angle": "10",
|
||||||
|
"leg_length": "0.003",
|
||||||
|
"leg_width": "0.00001875",
|
||||||
|
"n_fingers": "50",
|
||||||
|
"prop_text_size": "2.5",
|
||||||
|
"scale_unit": "1000",
|
||||||
|
"size": "0.002",
|
||||||
|
"substrate": "LINBO",
|
||||||
|
"test_number": "1",
|
||||||
|
"thickness": "0",
|
||||||
|
"title_text_size": "4",
|
||||||
|
"wafer_size_inch": "4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fileFormatVersion": "1"
|
||||||
|
}
|
||||||
704170
dxfs/10MHz_single_IDT/wafer_layout.dxf
Normal file
704170
dxfs/10MHz_single_IDT/wafer_layout.dxf
Normal file
File diff suppressed because it is too large
Load Diff
694474
dxfs/25MHz_cross_idt/cross_25MHz.dxf
Normal file
694474
dxfs/25MHz_cross_idt/cross_25MHz.dxf
Normal file
File diff suppressed because it is too large
Load Diff
38
dxfs/25MHz_cross_idt/cross_pattern_idt.json
Normal file
38
dxfs/25MHz_cross_idt/cross_pattern_idt.json
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"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": "150",
|
||||||
|
"finger_length": "60",
|
||||||
|
"freq": "2.5e+7",
|
||||||
|
"gap": "0",
|
||||||
|
"has_id_number": "false",
|
||||||
|
"id_text_size": "1",
|
||||||
|
"idt_1_x_offset": "0",
|
||||||
|
"idt_1_y_offset": "0",
|
||||||
|
"idt_2_x_offset": "0",
|
||||||
|
"idt_2_y_offset": "0",
|
||||||
|
"info_block_offset_x": "20",
|
||||||
|
"info_block_offset_y": "-30",
|
||||||
|
"info_block_scale": "0.3",
|
||||||
|
"leg_angle": "10",
|
||||||
|
"leg_length": "0.003",
|
||||||
|
"leg_width": "0.00001875",
|
||||||
|
"n_fingers": "50",
|
||||||
|
"prop_text_size": "2.5",
|
||||||
|
"scale_unit": "1000",
|
||||||
|
"size": "0.002",
|
||||||
|
"substrate": "LINBO",
|
||||||
|
"test_number": "1",
|
||||||
|
"thickness": "0",
|
||||||
|
"title_text_size": "4",
|
||||||
|
"wafer_size_inch": "4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fileFormatVersion": "1"
|
||||||
|
}
|
||||||
694474
dxfs/25MHz_cross_idt/wafer_layout.dxf
Normal file
694474
dxfs/25MHz_cross_idt/wafer_layout.dxf
Normal file
File diff suppressed because it is too large
Load Diff
3165838
dxfs/345MHz_grid_10_10_IDT/array_345MHz.dxf
Normal file
3165838
dxfs/345MHz_grid_10_10_IDT/array_345MHz.dxf
Normal file
File diff suppressed because it is too large
Load Diff
3543358
dxfs/345MHz_grid_10_10_IDT/gird_array_idt.dxf
Normal file
3543358
dxfs/345MHz_grid_10_10_IDT/gird_array_idt.dxf
Normal file
File diff suppressed because it is too large
Load Diff
38
dxfs/345MHz_grid_10_10_IDT/gird_array_idt.json
Normal file
38
dxfs/345MHz_grid_10_10_IDT/gird_array_idt.json
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"parameterSets": {
|
||||||
|
"design default values": {
|
||||||
|
"$fa": "0.1",
|
||||||
|
"$fs": "0.01",
|
||||||
|
"FONT": "Ubuntu Sans Mono:style=Regular",
|
||||||
|
"SCRIPT_VERSION": "0.0.1",
|
||||||
|
"bond_pad_shape": "square",
|
||||||
|
"c": "3992",
|
||||||
|
"cols": "10",
|
||||||
|
"distance": "50",
|
||||||
|
"finger_length": "60",
|
||||||
|
"freq": "3.45e+8",
|
||||||
|
"gap": "0",
|
||||||
|
"has_id_number": "true",
|
||||||
|
"id_text_size": "0.5",
|
||||||
|
"info_block_offset_x": "28",
|
||||||
|
"info_block_offset_y": "-5",
|
||||||
|
"info_block_scale": "0.3",
|
||||||
|
"leg_angle": "10",
|
||||||
|
"leg_length": "0.001",
|
||||||
|
"leg_width": "0.00001875",
|
||||||
|
"n_fingers": "50",
|
||||||
|
"prop_text_size": "2.5",
|
||||||
|
"rows": "10",
|
||||||
|
"scale_unit": "1000",
|
||||||
|
"size": "0.00075",
|
||||||
|
"spacing_x": "4",
|
||||||
|
"spacing_y": "7",
|
||||||
|
"substrate": "SI",
|
||||||
|
"test_number": "1",
|
||||||
|
"thickness": "0",
|
||||||
|
"title_text_size": "4",
|
||||||
|
"wafer_size_inch": "4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fileFormatVersion": "1"
|
||||||
|
}
|
||||||
3165862
dxfs/345MHz_grid_10_10_IDT/wafer_layout.dxf
Normal file
3165862
dxfs/345MHz_grid_10_10_IDT/wafer_layout.dxf
Normal file
File diff suppressed because it is too large
Load Diff
1609558
dxfs/50MHz_quadrant_array_16/quadrand_50MHz.dxf
Normal file
1609558
dxfs/50MHz_quadrant_array_16/quadrand_50MHz.dxf
Normal file
File diff suppressed because it is too large
Load Diff
37
dxfs/50MHz_quadrant_array_16/quadrant_array_16_50MHz.json
Normal file
37
dxfs/50MHz_quadrant_array_16/quadrant_array_16_50MHz.json
Normal 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"
|
||||||
|
}
|
||||||
1609558
dxfs/50MHz_quadrant_array_16/wafer_layout.dxf
Normal file
1609558
dxfs/50MHz_quadrant_array_16/wafer_layout.dxf
Normal file
File diff suppressed because it is too large
Load Diff
19
makefile
Normal file
19
makefile
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
|
||||||
|
all: single_10MHZ pair_10MHZ quadrand_50MHz array_345MHz cross_25MHz
|
||||||
|
|
||||||
|
|
||||||
|
single_10MHZ:
|
||||||
|
openscad -o dxfs/10MHz_single_IDT/single_10MHZ.dxf wafer_layouts/single_idt.scad -p dxfs/10MHz_single_IDT/single_idt.json
|
||||||
|
|
||||||
|
pair_10MHZ:
|
||||||
|
openscad -o dxfs/10MHz_pair_IDT/pair_10MHZ.dxf wafer_layouts/pair_idt.scad -p dxfs/10MHz_single_IDT/pair_idt.json
|
||||||
|
|
||||||
|
quadrand_50MHz:
|
||||||
|
openscad -o dxfs/50MHz_quadrant_array_16/quadrand_50MHz.dxf wafer_layouts/quadrant_array.scad -p dxfs/50MHz_quadrant_array_16/quadrant_array_16_50MHz.json
|
||||||
|
|
||||||
|
array_345MHz:
|
||||||
|
openscad -o dxfs/345MHz_grid_10_10_IDT/array_345MHz.dxf wafer_layouts/gird_array_idt.scad -p dxfs/345MHz_grid_10_10_IDT/gird_array_idt.json
|
||||||
|
|
||||||
|
cross_25MHz:
|
||||||
|
openscad -o dxfs/25MHz_cross_idt/cross_25MHz.dxf wafer_layouts/cross_pattern_idt.scad -p dxfs/25MHz_cross_idt/cross_pattern_idt.json
|
||||||
154
modules/bidirectional_idt.scad
Normal file
154
modules/bidirectional_idt.scad
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
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_scale = [1, 1, 1],
|
||||||
|
id_translate = [0, 0, 0],
|
||||||
|
id_rot = [0, 0, 0],
|
||||||
|
// 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])
|
||||||
|
translate(id_translate)
|
||||||
|
rotate(id_rot)
|
||||||
|
scale(id_scale)
|
||||||
|
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 ===== ");
|
||||||
|
}
|
||||||
|
}
|
||||||
35
modules/bond_pad.scad
Normal file
35
modules/bond_pad.scad
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
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
|
||||||
|
) {
|
||||||
|
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)));
|
||||||
|
}
|
||||||
77
modules/idt.scad
Normal file
77
modules/idt.scad
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
// creates 1 side of the idt
|
||||||
|
module delay_line(
|
||||||
|
lambda = 1,
|
||||||
|
n_fingers = 1,
|
||||||
|
finger_length = 50,
|
||||||
|
gap = 0,
|
||||||
|
thickness = 0
|
||||||
|
) {
|
||||||
|
|
||||||
|
// just a very small value that allows the polygons to overlap nicely
|
||||||
|
esp = $fs;
|
||||||
|
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 + esp],
|
||||||
|
[0, l4*5-l4 + esp]
|
||||||
|
];
|
||||||
|
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]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
15
modules/parameter_text.scad
Normal file
15
modules/parameter_text.scad
Normal 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
11
modules/wafer.scad
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
res/image.png
Normal file
BIN
res/image.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 101 KiB |
151
wafer_layouts/cross_pattern_idt.scad
Normal file
151
wafer_layouts/cross_pattern_idt.scad
Normal 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 = 25.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 / 4),
|
||||||
|
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
|
||||||
|
);
|
||||||
188
wafer_layouts/gird_array_idt.scad
Normal file
188
wafer_layouts/gird_array_idt.scad
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
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 =================
|
||||||
|
|
||||||
|
// min angle
|
||||||
|
$fa = 0.1;
|
||||||
|
|
||||||
|
// min size
|
||||||
|
$fs = 0.01;
|
||||||
|
// ================= openscad prams =================
|
||||||
|
|
||||||
|
// ================= meta =================
|
||||||
|
// version number of the current script
|
||||||
|
SCRIPT_VERSION="0.0.1";
|
||||||
|
|
||||||
|
// font for layout
|
||||||
|
FONT="Ubuntu Sans Mono:style=Regular";
|
||||||
|
|
||||||
|
// the test number ref number for this set of IDTs
|
||||||
|
test_number = 1;
|
||||||
|
|
||||||
|
// this is needed due to the min size value
|
||||||
|
// a pre scaler for the given values
|
||||||
|
scale_unit = 1e3;
|
||||||
|
|
||||||
|
// ================= meta =================
|
||||||
|
|
||||||
|
|
||||||
|
// ================= IDT =================
|
||||||
|
|
||||||
|
// the underlying substrate
|
||||||
|
substrate = "SI";
|
||||||
|
|
||||||
|
// linbo
|
||||||
|
// the aoucstice wave speed in the substrate
|
||||||
|
c = 3992.0;
|
||||||
|
// si
|
||||||
|
// c = 3159.0;
|
||||||
|
|
||||||
|
// the target frequency of the IDT
|
||||||
|
freq = 345.0e6;
|
||||||
|
|
||||||
|
// the distance between the input and output IDT
|
||||||
|
// should be between 100-200
|
||||||
|
distance = 50;
|
||||||
|
|
||||||
|
// the number of fingers the IDT has
|
||||||
|
n_fingers = 50;
|
||||||
|
|
||||||
|
// the length of the figure or aperture should be 50-70
|
||||||
|
finger_length = 60;
|
||||||
|
|
||||||
|
// the gap between both sides of the IDT (should be used for tweaking)
|
||||||
|
gap = 0;
|
||||||
|
|
||||||
|
// the thickness of the wire the connects all the fingers
|
||||||
|
thickness = 0;
|
||||||
|
|
||||||
|
// adds an ID number to an IDT, useful if you have multiple on a wafer
|
||||||
|
has_id_number = true;
|
||||||
|
// ================= IDT =================
|
||||||
|
|
||||||
|
// ================= bond pad =================
|
||||||
|
|
||||||
|
// the length of the bond pad leg from the edge of the IDT to the center of the bond pad
|
||||||
|
leg_length = 0.001;
|
||||||
|
|
||||||
|
// the width of the leg
|
||||||
|
leg_width = 0.00001875;
|
||||||
|
|
||||||
|
// the angle the leg comes off from the IDT,
|
||||||
|
// positive angle means the leg is angled away
|
||||||
|
// negitive angle means the leg is angled inwards
|
||||||
|
leg_angle = 10;
|
||||||
|
|
||||||
|
// the size of the bond pad
|
||||||
|
size = 0.00075;
|
||||||
|
|
||||||
|
// the shape of the bond pad (not implemented)
|
||||||
|
bond_pad_shape = "square";
|
||||||
|
|
||||||
|
// ================= bond pad =================
|
||||||
|
|
||||||
|
// ================= text =================
|
||||||
|
|
||||||
|
info_block_offset_x=28;
|
||||||
|
info_block_offset_y=-5;
|
||||||
|
// total scale of infoblock
|
||||||
|
info_block_scale=0.3;
|
||||||
|
|
||||||
|
// the text size of the heading in the info block
|
||||||
|
title_text_size = 4;
|
||||||
|
|
||||||
|
// the size of all the sub items in the info block
|
||||||
|
prop_text_size = 2.5;
|
||||||
|
|
||||||
|
// the size of the ID numbers in on the IDTS
|
||||||
|
id_text_size = 0.5;
|
||||||
|
|
||||||
|
// ================= text =================
|
||||||
|
|
||||||
|
// ================= wafers =================
|
||||||
|
// the size of the wafer in inchs (why inch and not metric like everything else because its standard)
|
||||||
|
wafer_size_inch = 4;
|
||||||
|
// ================= wafers =================
|
||||||
|
|
||||||
|
// ================= # IDTS =================
|
||||||
|
|
||||||
|
rows = 10;
|
||||||
|
cols = 10;
|
||||||
|
spacing_x = 4;
|
||||||
|
spacing_y = 7;
|
||||||
|
|
||||||
|
// ================= # IDTS =================
|
||||||
|
|
||||||
|
|
||||||
|
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 / 4),
|
||||||
|
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(4*0.0254*scale_unit);
|
||||||
|
|
||||||
|
translate([-spacing_x*rows/2, -spacing_y*cols/2, 0])
|
||||||
|
for (x=[0:rows]) {
|
||||||
|
for (y=[0:cols]) {
|
||||||
|
translate([spacing_x*x, spacing_y*y, 0])
|
||||||
|
bi_directional_idt(
|
||||||
|
c,
|
||||||
|
freq,
|
||||||
|
n_fingers,
|
||||||
|
distance,
|
||||||
|
finger_length,
|
||||||
|
gap,
|
||||||
|
thickness,
|
||||||
|
post_scale=scale_unit,
|
||||||
|
center = true,
|
||||||
|
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_translate = [1.7, -0.5, 0],
|
||||||
|
id_rot = [0, 0, 90],
|
||||||
|
id_number = x*rows + y
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
174
wafer_layouts/hex_layout_idt.scad
Normal file
174
wafer_layouts/hex_layout_idt.scad
Normal 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 / 4),
|
||||||
|
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
|
||||||
|
);
|
||||||
157
wafer_layouts/pair_idt.scad
Normal file
157
wafer_layouts/pair_idt.scad
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
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
|
||||||
|
// 1e3 : mm
|
||||||
|
// 1e6 : um
|
||||||
|
// 1e9 : nm
|
||||||
|
scale_unit = 1e3;
|
||||||
|
// ================= meta =================
|
||||||
|
|
||||||
|
|
||||||
|
// ================= IDT =================
|
||||||
|
substrate = "LINBO";
|
||||||
|
// linbo
|
||||||
|
c = 3992.0;
|
||||||
|
// si
|
||||||
|
// c = 3159.0;
|
||||||
|
freq = 10.0e6;
|
||||||
|
|
||||||
|
// $fs = (c/freq);
|
||||||
|
|
||||||
|
// inout distance
|
||||||
|
distance = 70;
|
||||||
|
|
||||||
|
// number of finger
|
||||||
|
n_fingers = 50;
|
||||||
|
|
||||||
|
// should be 50-70
|
||||||
|
finger_length = 50;
|
||||||
|
|
||||||
|
// 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=32;
|
||||||
|
info_block_offset_y=-7;
|
||||||
|
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 = -15;
|
||||||
|
idt_1_y_offset = 0;
|
||||||
|
idt_2_x_offset = 15;
|
||||||
|
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 / 4),
|
||||||
|
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,
|
||||||
|
has_id = has_id_number,
|
||||||
|
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,
|
||||||
|
has_id = has_id_number,
|
||||||
|
id_number = 1,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
220
wafer_layouts/quadrant_array.scad
Normal file
220
wafer_layouts/quadrant_array.scad
Normal 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 / 4),
|
||||||
|
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_scale = [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_scale = [-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_scale = [-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
|
||||||
|
// );
|
||||||
176
wafer_layouts/single_idt.scad
Normal file
176
wafer_layouts/single_idt.scad
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
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 =================
|
||||||
|
|
||||||
|
// min angle
|
||||||
|
$fa = 0.1;
|
||||||
|
|
||||||
|
// min size
|
||||||
|
$fs = 0.01;
|
||||||
|
// ================= openscad prams =================
|
||||||
|
|
||||||
|
// ================= meta =================
|
||||||
|
// version number of the current script
|
||||||
|
SCRIPT_VERSION="0.0.1";
|
||||||
|
|
||||||
|
// font for layout
|
||||||
|
FONT="Ubuntu Sans Mono:style=Regular";
|
||||||
|
|
||||||
|
// the test number ref number for this set of IDTs
|
||||||
|
test_number = 1;
|
||||||
|
|
||||||
|
// this is needed due to the min size value
|
||||||
|
// a pre scaler for the given values
|
||||||
|
scale_unit = 1e3;
|
||||||
|
|
||||||
|
// ================= meta =================
|
||||||
|
|
||||||
|
// ================= IDT =================
|
||||||
|
|
||||||
|
// the underlying substrate
|
||||||
|
substrate = "SI";
|
||||||
|
|
||||||
|
// linbo
|
||||||
|
// the acoustic wave speed in the substrate
|
||||||
|
c = 3992.0;
|
||||||
|
// si
|
||||||
|
// c = 3159.0;
|
||||||
|
|
||||||
|
// the target frequency of the IDT
|
||||||
|
freq = 10.0e6;
|
||||||
|
|
||||||
|
// the distance between the input and output IDT
|
||||||
|
// should be between 100-200
|
||||||
|
distance = 50;
|
||||||
|
|
||||||
|
// the number of fingers the IDT has
|
||||||
|
n_fingers = 50;
|
||||||
|
|
||||||
|
// the length of the figure or aperture should be 50-70
|
||||||
|
finger_length = 50;
|
||||||
|
|
||||||
|
// the gap between both sides of the IDT (should be used for tweaking)
|
||||||
|
gap = 0;
|
||||||
|
|
||||||
|
// the thickness of the wire the connects all the fingers
|
||||||
|
thickness = 0;
|
||||||
|
|
||||||
|
// adds an ID number to an IDT, useful if you have multiple on a wafer
|
||||||
|
has_id_number = false;
|
||||||
|
// ================= IDT =================
|
||||||
|
|
||||||
|
// ================= bond pad =================
|
||||||
|
|
||||||
|
// the length of the bond pad leg from the edge of the IDT to the center of the bond pad
|
||||||
|
leg_length = 0.003;
|
||||||
|
|
||||||
|
// the width of the leg
|
||||||
|
leg_width = 0.00001875;
|
||||||
|
|
||||||
|
// the angle the leg comes off from the IDT,
|
||||||
|
// positive angle means the leg is angled away
|
||||||
|
// negitive angle means the leg is angled inwards
|
||||||
|
leg_angle = 10;
|
||||||
|
|
||||||
|
// the size of the bond pad
|
||||||
|
size = 0.002;
|
||||||
|
|
||||||
|
// the shape of the bond pad (not implemented)
|
||||||
|
bond_pad_shape = "square";
|
||||||
|
|
||||||
|
// ================= bond pad =================
|
||||||
|
|
||||||
|
// ================= text =================
|
||||||
|
|
||||||
|
info_block_offset_x=25;
|
||||||
|
info_block_offset_y=10;
|
||||||
|
// total scale of infoblock
|
||||||
|
info_block_scale=0.3;
|
||||||
|
|
||||||
|
// the text size of the heading in the info block
|
||||||
|
title_text_size = 4;
|
||||||
|
|
||||||
|
// the size of all the sub items in the info block
|
||||||
|
prop_text_size = 2.5;
|
||||||
|
|
||||||
|
// the size of the ID numbers in on the IDTS
|
||||||
|
id_text_size = 1;
|
||||||
|
|
||||||
|
// ================= text =================
|
||||||
|
|
||||||
|
// ================= wafers =================
|
||||||
|
// the size of the wafer in inchs (why inch and not metric like everything else because its standard)
|
||||||
|
wafer_size_inch = 4;
|
||||||
|
// ================= wafers =================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ================= IDT Pos =================
|
||||||
|
|
||||||
|
// the x offset of the IDT from the center
|
||||||
|
idt_x_offset = 0;
|
||||||
|
// the y offset of the IDT from the center
|
||||||
|
idt_y_offset = 0;
|
||||||
|
|
||||||
|
// ================= IDT Pos =================
|
||||||
|
|
||||||
|
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 / 4),
|
||||||
|
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
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user