1
0
mirror of https://github.com/nophead/NopSCADlib.git synced 2025-09-07 21:50:45 +02:00

Compare commits

...

8 Commits

Author SHA1 Message Date
Chris Palmer
e4b1b686ff Added rd_cm_choke(), rd_coil() and spiral_wrap().
Added 10mm ceramic disc capacitors.
2024-09-30 01:58:04 +01:00
Chris Palmer
6eba75a41d Updated changelog. 2024-09-13 18:25:16 +01:00
Chris Palmer
c484ac2e8d Updated libtest image with new D-connector. 2024-09-13 18:23:45 +01:00
Chris Palmer
f12ac7b569 Updated changelog. 2024-09-13 17:03:40 +01:00
Chris Palmer
cfc3b483e0 Merge branch 'trnila-DCONN37' 2024-09-13 17:00:46 +01:00
Chris Palmer
6da845215b Updated readme. 2024-09-13 16:59:55 +01:00
Daniel Trnka
7fe5aaac22 Added DCONN37 connector 2024-09-10 23:11:04 +02:00
Chris Palmer
983511b906 Updated changelog. 2024-09-02 22:00:01 +01:00
16 changed files with 294 additions and 17 deletions

View File

@@ -3,6 +3,37 @@
This changelog is generated by `changelog.py` using manually added semantic version tags to classify commits as breaking changes, additions or fixes.
#### [v21.27.1](https://github.com/nophead/NopSCADlib/releases/tag/v21.27.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v21.27.0...v21.27.1 "diff with v21.27.0")
* 2024-09-13 [`c484ac2`](https://github.com/nophead/NopSCADlib/commit/c484ac2e8dbc8e9f9cb5051ce963250839a2705d "show commit") [C.P.](# "Chris Palmer") Updated libtest image with new D-connector.
### [v21.27.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.27.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.26.0...v21.27.0 "diff with v21.26.0")
* 2024-09-13 [`6da8452`](https://github.com/nophead/NopSCADlib/commit/6da845215bd2a4c3b7dc8a022579947cef27b8b8 "show commit") [C.P.](# "Chris Palmer") Updated readme.
* 2024-09-10 [`7fe5aaa`](https://github.com/nophead/NopSCADlib/commit/7fe5aaac22283c453b2c2e5a2239b65ddd4320c1 "show commit") [D.T.](# "Daniel Trnka") Added DCONN37 connector
### [v21.26.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.26.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.25.0...v21.26.0 "diff with v21.25.0")
* 2024-09-02 [`4f073f9`](https://github.com/nophead/NopSCADlib/commit/4f073f97e815e5c0b469a07d20526f7e2b88d79d "show commit") [C.P.](# "Chris Palmer") Added `rod_ends.scad` to `lib.scad` and `lib_test.scad`.
Fixed `rod_end` colours.
Added new pulleys to the test list and reodered.
Printed pulleys nopw shown in two rows.
Updated images and readme.
* 2024-08-23 [`fe3ce88`](https://github.com/nophead/NopSCADlib/commit/fe3ce88086de8480a88b69b7f7d2e6376b03caa6 "show commit") [T.](# "texas") adding test code for weld nuts and rod ends, adding ball bearings to test code list, and updating code for dome screw heads to use an angle to determine inset distance of the lower taper
* 2024-08-16 [`37fe83e`](https://github.com/nophead/NopSCADlib/commit/37fe83e2e08b6a0bd23042e37fbe89122d78516c "show commit") [T.](# "texas") added chamfer distance variable to taper in the bottom of the dome heads
* 2024-08-14 [`f86dfef`](https://github.com/nophead/NopSCADlib/commit/f86dfef919731f9731ca39f70ebd07b2c7204dfa "show commit") [T.](# "texas") fixed the calculations for dome screws to now use equations for a scaled sphere cap instead. This allows for larger and smaller sizes than were previously possible, and also eliminates the need for that lift value. Adding M6 and M8 dome screws as a result of this new ability
* 2024-08-14 [`e97f9fd`](https://github.com/nophead/NopSCADlib/commit/e97f9fdacc87bbc31cb9f0f3474132bc09f5ed91 "show commit") [=.](# "=") adding weld nuts
* 2024-08-13 [`ba45f85`](https://github.com/nophead/NopSCADlib/commit/ba45f8558007c7efe6bfd17bebacf285293ba4ad "show commit") [A.](# "alex") adding weld nuts, m4 and m6 for now
* 2024-03-18 [`90fb9eb`](https://github.com/nophead/NopSCADlib/commit/90fb9eb01f8721cb48589e59a14b3770da250cd5 "show commit") [A.](# "alex") adding F625 ball bearing
* 2024-03-13 [`905fc01`](https://github.com/nophead/NopSCADlib/commit/905fc016778d6a78774c05236425463fa2aa3323 "show commit") [A.](# "alex") adding rod end bearing and a yellow bed spring
* 2024-03-04 [`a695974`](https://github.com/nophead/NopSCADlib/commit/a695974ac562b88ed08cc3ea54a2a4e07f638c5f "show commit") [T.](# "Tex") updating after maybe breaking debian
### [v21.25.0](https://github.com/nophead/NopSCADlib/releases/tag/v21.25.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v21.24.1...v21.25.0 "diff with v21.24.1")
* 2024-08-15 [`bc7f294`](https://github.com/nophead/NopSCADlib/commit/bc7f294f995d8aa8ba500a1ef666c8fb50f94fd3 "show commit") [C.P.](# "Chris Palmer") Added `smd_250V_fuse()` and `rd_box_cap()`.
Fixed missing value parameters from a lot of the SMD component instantiation examples.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1007 KiB

After

Width:  |  Height:  |  Size: 1010 KiB

View File

@@ -406,8 +406,8 @@ translate([x2, components_y])
components();
veroboard_y = 0;
d_connectors_y = veroboard_y + 110;
iecs_y = d_connectors_y + 80;
d_connectors_y = veroboard_y + 120;
iecs_y = d_connectors_y + 70;
modules_y = iecs_y + 60;
ssrs_y = modules_y + 80;
blowers_y = ssrs_y + 60;
@@ -425,10 +425,10 @@ translate([x3 + 50, veroboard_y + 20])
translate([x3 + 160, ssrs_y])
pcb_mounts();
translate([x3 + 145, veroboard_y + 16])
translate([x3 + 145, veroboard_y])
cameras();
translate([x3 + 145, d_connectors_y - 10])
translate([x3 + 145, veroboard_y + 45])
camera_housings();
translate([x3, d_connectors_y])

View File

@@ -1006,9 +1006,11 @@ D-connectors. Can be any number of ways, male or female, solder buckets, PCB mou
| 1 | `d_socket(DCONN15, idc = true)` | D-type 15 way IDC socket |
| 1 | `d_plug(DCONN25, pcb = true)` | D-type 25 way PCB mount plug |
| 1 | `d_socket(DCONN25, pcb = true)` | D-type 25 way PCB mount socket |
| 1 | `d_plug(DCONN37)` | D-type 37 way plug |
| 1 | `d_socket(DCONN37)` | D-type 37 way socket |
| 1 | `d_plug(DCONN9)` | D-type 9 way plug |
| 1 | `d_socket(DCONN9)` | D-type 9 way socket |
| 6 | `d_pillar()` | D-type connector pillar |
| 8 | `d_pillar()` | D-type connector pillar |
<a href="#top">Top</a>
@@ -2678,7 +2680,9 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `potentiometer(BTT_encoder)` | BTT_encoder |
| 1 | `box_header(2p54header, 4, 2)` | Box header 4 x 2 |
| 1 | `box_header(2p54header, 4, 2, right_angle = true)` | Box header 4 x 2 right angle |
| 1 | `rd_disc(10mm_disc, "1nF Y2")` | Ceramic capacitor, 10mm_disc 1nF Y2 |
| 1 | `rd_disc(6p4mm_disc, "100n")` | Ceramic capacitor, 6p4mm_disc 100n |
| 1 | `rd_cm_choke(ATX_CM_CHOKE ,"3.5mH")` | Common mode choke 3.5mH |
| 1 | `rd_xtal(ACT1100, "40MHz")` | Crystal ACT1100 40MHz |
| 1 | `rd_xtal(ACT1700, "80MHz")` | Crystal ACT1700 80MHz |
| 1 | `rd_xtal(C_002RX, "60KHz")` | Crystal C_002RX 60KHz |
@@ -2714,6 +2718,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `pin_socket(2p54header, 4, 1)` | Pin socket 4 x 1 |
| 1 | `pin_socket(2p54header, 6, 1)` | Pin socket 6 x 1 |
| 2 | `pin_socket(2p54header, 8, 1)` | Pin socket 8 x 1 |
| 1 | `rd_coil(IND16x10 ,"4.7uH")` | Radial inductor 16x10 4.7uH |
| 1 | `rd_transistor(TO92, "78L05")` | Regulator TO92 78L05 |
| 1 | `rd_module(HF33F, "012-HSL-3F")` | Relay HF33F / 012-HSL-3F |
| 1 | `ax_res(res1_2, 10, tol = 10)` | Resistor 10 Ohms 10% 0.5W |
@@ -3427,6 +3432,15 @@ Radial components for PCBs.
| `rd_boxc_size(type)` | Overall size and corner radius |
| `rd_boxc_skirt(type)` | Skirt slot, thickness, height |
| `rd_boxc_z(type)` | Height of inner base above PCB. |
| `rd_cm_choke_core(type)` | Core OD, ID, width, corner radius |
| `rd_cm_choke_csep(type)` | Central separator thickness in slot, total thickness, height |
| `rd_cm_choke_seam(type)` | Overlapping semicircular seams to join the two halves of the core width and thickness |
| `rd_cm_choke_slot(type)` | Slot to hold central separator width, height, thickness |
| `rd_cm_choke_wire(type)` | Wire positions, length and diameter |
| `rd_coil_colour(type)` | Core colour |
| `rd_coil_size(type)` | OD, ID, height, coil height |
| `rd_coil_turns(type)` | Number of turns |
| `rd_coil_wire(type)` | Wire pitch, diameter and length |
| `rd_disc_colours(type)` | Colours of body and text |
| `rd_disc_kind(type)` | Capacitor, etc |
| `rd_disc_lead_d(type)` | Lead diameter and sleeve diameter |
@@ -3457,6 +3471,8 @@ Radial components for PCBs.
| Module | Description |
|:--- |:--- |
| `rd_box_cap(type, kind, value)` | Draw radial boxed film capacitor |
| `rd_cm_choke(type, value)` | Draw specified common mode choke. |
| `rd_coil(type, value, pitch = undef)` | Draw the specified vertical coil |
| `rd_disc(type, value, pitch = undef, z = 0, tail = 3)` | Draw a radial disc component |
| `rd_electrolytic(type, value, pitch = undef, z = 0, tail = 3)` | Draw a radial electrolytic capcacitor |
| `rd_module(type, value)` | Draw a PCB mounted potted module, e.g. PSU or relay |
@@ -3468,7 +3484,9 @@ Radial components for PCBs.
### Vitamins
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
| 1 | `rd_disc(10mm_disc, "1nF Y2")` | Ceramic capacitor, 10mm_disc 1nF Y2 |
| 1 | `rd_disc(6p4mm_disc, "10nF")` | Ceramic capacitor, 6p4mm_disc 10nF |
| 1 | `rd_cm_choke(ATX_CM_CHOKE ,"3.5mH")` | Common mode choke 3.5mH |
| 1 | `rd_xtal(ACT1100, "ACT1100")` | Crystal ACT1100 ACT1100 |
| 1 | `rd_xtal(ACT1700, "ACT1700")` | Crystal ACT1700 ACT1700 |
| 1 | `rd_xtal(C_002RX, "C_002RX")` | Crystal C_002RX C_002RX |
@@ -3478,6 +3496,7 @@ Radial components for PCBs.
| 1 | `rd_module(LDE10_20B, "12V 900ma")` | PSU LDE10_20B / 12V 900ma |
| 1 | `rd_module(VCE03, "12V 250ma")` | PSU VCE03 / 12V 250ma |
| 2 | `pcb(PERF70x50)` | Perfboard 70 x 50mm |
| 1 | `rd_coil(IND16x10 ,"4.7uH")` | Radial inductor 16x10 4.7uH |
| 1 | `rd_module(HF33F, "012-HSL3F")` | Relay HF33F / 012-HSL3F |
| 1 | `rd_transistor(E_LINE, "ZTX853")` | Transistor E_LINE ZTX853 |
| 1 | `rd_transistor(TO92, "BC337")` | Transistor TO92 BC337 |
@@ -7578,6 +7597,7 @@ Each vertex, apart from the first and the last, has an associated radius and the
| `segmented_path(path, min_segment)` | Add points to a path to enforce a minimum segment length |
| `skin_faces(points, npoints, facets, loop, offset = 0)` | Create the mesh for the swept volume without end caps |
| `spiral_paths(path, n, r, twists, start_angle)` | Create a new paths which spiral around the given path. Use for making twisted cables |
| `spiral_wrap(path, profile, pitch, turns)` | Create a path that spirals around the specified profile with the given pitch. |
| `sweep(path, profile, loop = false, twist = 0)` | Generate the point list and face list of the swept volume |
### Modules

View File

@@ -134,6 +134,7 @@ test_pcb = ["test_pcb", "Test PCB",
[ 25, 190, 0, "rd_electrolytic", ECAP8x11, "220uF35V"],
[ 25, 180, 90, "rd_disc", ERZV07D471, "471"],
[ 25, 170, 90, "rd_disc", 6p4mm_disc, "100n"],
[ 30, 170, 90, "rd_disc", 10mm_disc, "1nF Y2"],
[ 90, 135, -90, "rd_module", HF33F, "012-HSL-3F"],
[ 35, 3, 0, "link", 0, 5], // Vertical wire
@@ -189,7 +190,7 @@ test_pcb = ["test_pcb", "Test PCB",
[ 52, 200, 0, "pcb", 11, TMC2130 ],
[ 76, 210, 0, "pdip", 24, "27C32", true, inch(0.6) ],
[ 80, 180, 0, "pdip", 8, "NE555" ],
[ 71, 180, 0, "smd_inductor", IND2525, "4R7"],
[ 71, 180, 0, "smd_inductor", IND2525, "4R7"],
[ 87, 166, -90, "smd_soic", SOIC18, "PIC18F88"],
[ 78, 166, -90, "smd_soic", SOIC14, "74HC00"],
@@ -197,14 +198,16 @@ test_pcb = ["test_pcb", "Test PCB",
[ 64, 166, -90, "smd_soic", SOIC8, "M34063"],
[ 70, 150, 0, "chip", 10, 5, 1, grey(20)],
[90, 140, -90, "relay", HF33F, "012-HSL-3F"],
[ 90, 140, -90, "relay", HF33F, "012-HSL-3F"],
[ 52, 206, 0, "2p54socket", 8, 1 ],
[ 52, 194, 0, "2p54socket", 8, 1, false, 0, false, "red" ],
[ 50, 220, 0, "standoff", 5, 4.5, 12.5, 2.54],
[ 50, 240, 0, "potentiometer"],
[ 55, 220, 0, "standoff", 5, 4.5, 12.5, 2.54],
[ 60, 240, 0, "potentiometer"],
[ 75, 240, 0, "potentiometer", KY_040_encoder, 8],
[ 40, 235, -90, "rd_cm_choke", ATX_CM_CHOKE, "3.5mH"],
[ 40, 217, 0, "rd_coil", IND16x10, "4.7uH"],
[ 30, 85, -90, "7seg", WT5011BSR, 2],
[ 30, 55, -90, "D_plug", DCONN9],
],

View File

@@ -26,7 +26,7 @@ include <../vitamins/cameras.scad>
use <../vitamins/pcb.scad>
module camera_housings()
layout([for(c = cameras) pcb_length(camera_pcb(c))], 10, false) let(c = cameras[$i])
layout([for(c = cameras) pcb_length(camera_pcb(c))], 15, false) let(c = cameras[$i])
if(pcb_screw(camera_pcb(c)))
camera_fastened_assembly(c, 3);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 KiB

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 KiB

After

Width:  |  Height:  |  Size: 235 KiB

View File

@@ -21,7 +21,9 @@ include <../vitamins/pcbs.scad>
module radials() {
pcb = PERF70x50;
$solder = pcb_solder(pcb);
pcb(pcb);
translate([0, pcb_width(pcb) + inch(0.2)]) {
pcb(pcb);
@@ -36,9 +38,17 @@ module radials() {
for(i = [0 : len(rd_box_caps) - 1])
pcb_grid(pcb, 20, i * 4)
rd_box_cap(rd_box_caps[i], "X2 rated film capacitor", ["0.1uF 250V", "0.47uF 250V"][i]);
for(i = [0 : len(rd_cm_chokes) - 1])
pcb_grid(pcb, 10.5, 2)
rd_cm_choke(rd_cm_chokes[i], "3.5mH");
pcb_grid(pcb, 4, 2.5)
rotate(90)
rd_coil(rd_coils[0], "4.7uH");
}
$solder = pcb_solder(pcb);
for(i = [0 : len(rd_xtals) - 1])
pcb_grid(pcb, [0.5, 1, 1.5, 9, 1][i], [4, 6, 10.5, 10.5, 16][i])
@@ -51,7 +61,6 @@ module radials() {
rotate(-90)
rd_module(rd_modules[1], "12V 250ma");
for(i = [0 : len(rd_discs) - 1])
pcb_grid(pcb, 1 + 2.5 * i, 1) {
disc = rd_discs[i];
@@ -60,7 +69,7 @@ module radials() {
dy = round(pitch.y / inch(0.1)) * inch(0.1);
rotate(90 - atan2(dy, dx))
rd_disc(disc, pitch = norm([dy, dx]), z = 0.5, value = ["10nF", "470V",][i]);
rd_disc(disc, pitch = norm([dy, dx]), z = 0.5, value = ["10nF", "470V", "1nF Y2"][i]);
}
for(i = [0 : len(rd_transistors) - 1])

View File

@@ -263,3 +263,29 @@ module show_path(path, r = 0.1) //! Show a path using a chain of hulls for debug
translate(path[i])
color("red") sphere($fn = 16, r * 4);
}
function move_along(j, z, path_S) =
j >= len(path_S) - 1 || z <= path_S[j] ? j : move_along(j + 1, z, path_S);
function spiral_wrap(path, profile, pitch, turns) = //! Create a path that spirals around the specified profile with the given pitch.
let(
transforms = sweep_transforms(path, loop = false, twist = 0),
plen = len(profile),
S = path_length(profile),
profile = [
for(i = 0, s = 0; i < plen; s = s + norm(profile[(i + 1) % plen] - profile[i]), i = i + 1)
let(p = profile[i]) [p.x, p.y, p.z + pitch * s / S, 1]
],
path_len = len(path),
path_S = [for(i = 0, s = 0; i < path_len; s = s + norm(path[(i + 1) % path_len] - path[i]), i = i + 1) s],
n = turns * plen,
) [
for(i = 0, j = 0, k = 0, zstep = 0;
i < n;
i = i + 1,
k = i % plen,
zstep = floor(i / plen) * pitch,
j = move_along(j, zstep + profile[k].z, path_S))
if(!i || k) (profile[k] + [0, 0, zstep - path_S[j], 0]) * transforms[j]
];

View File

@@ -23,7 +23,8 @@
DCONN9 = ["DCONN9", 30.81, [18, 16.92], 24.99, [9.26, 8.38], 12.55, 10.72, 6.693, 1.12, 9];
DCONN15 = ["DCONN15", 39.14, [26.25, 25.25], 33.32, [9.26, 8.38], 12.55, 10.72, 6.693, 1.12, 15];
DCONN25 = ["DCONN25", 53.04, [40, 38.96], 47.04, [9.26, 8.38], 12.55, 10.72, 6.693, 1.12, 25];
DCONN37 = ["DCONN37", 69.50, [56.42, 55.42], 63.50, [9.26, 8.38], 12.55, 10.72, 6.693, 1.12, 37];
d_connectors = [DCONN9, DCONN15, DCONN25];
d_connectors = [DCONN9, DCONN15, DCONN25, DCONN37];
use <d_connector.scad>

View File

@@ -1170,6 +1170,8 @@ module pcb_component(comp, cutouts = false, angle = undef) { //! Draw pcb compon
if(show(comp, "rd_transistor")) rd_transistor(type = comp[4], value = comp[5], lead_positions = param(6, undef), z = param(7, 5), kind = param(8,"Transistor"));
// type, value, lead positions, z, kind
if(show(comp, "rd_box_cap")) rd_box_cap(type = comp[4], kind = comp[5], value = comp[6]);
if(show(comp, "rd_cm_choke")) rd_cm_choke(type = comp[4], value = comp[5]);
if(show(comp, "rd_coil")) rd_coil(type = comp[4], value = comp[5], pitch = param(6, undef));
if(show(comp, "link")) wire_link(l = comp[4], h = param(5, 1), d = param(6, 0.8), tail = param(7, 3), sleeve = param(8, false));
if(show(comp, "D_plug")) translate_z(d_pcb_offset(comp[4])) d_plug(comp[4], pcb = true);
if(show(comp, "molex_hdr")) molex_254(comp[4], param(5, 0), param(6, undef));

View File

@@ -451,3 +451,179 @@ module rd_box_cap(type, kind, value) { //! Draw radial boxed film capacitor
resize([size.x * 0.9, size.z / 6])
text(value, halign = "left", valign = "top");
}
function rd_cm_choke_core(type) = type[1]; //! Core OD, ID, width, corner radius
function rd_cm_choke_seam(type) = type[2]; //! Overlapping semicircular seams to join the two halves of the core width and thickness
function rd_cm_choke_slot(type) = type[3]; //! Slot to hold central separator width, height, thickness
function rd_cm_choke_csep(type) = type[4]; //! Central separator thickness in slot, total thickness, height
function rd_cm_choke_wire(type) = type[5]; //! Wire positions, length and diameter
module rd_cm_choke(type, value) { //! Draw specified common mode choke.
vitamin(str("rd_cm_choke(", type[0], " ,\"", value, "\"): Common mode choke ", value));
core = rd_cm_choke_core(type);
seam = rd_cm_choke_seam(type);
slot = rd_cm_choke_slot(type);
csep = rd_cm_choke_csep(type);
wire = rd_cm_choke_wire(type);
or = core.x / 2;
ir = core.y / 2;
core_w = core.z;
core_r = core[3];
z = seam.y + or;
wire_r = wire[3] / 2;
w = or - ir;
$fs = fs; $fa = fa;
color(grey(90))
translate_z(z) {
rotate([90, 0, 0]) {
rotate_extrude()
translate([(ir + or) / 2, 0])
rounded_square([w, core_w], core_r, center = true);
for(h = [true, false])
hflip(h)
rotate(-90)
rotate_extrude(angle = 180)
translate([or, 0])
square([seam.y, seam.x]);
}
r = sqrt(sqr(or * cos(180 / r2sides(or))) - sqr(slot.z + csep.x / 2));
for(x = [-1, 1], z = [-1, 1])
translate([x * (csep.x / 2 + slot.z / 2), 0, z * (r - slot.y / 2)])
rotate([0, 90, 0])
rounded_rectangle([slot.y, slot.x, slot.z], core_r, center = true);
rotate([0, 90, 0]) {
rounded_rectangle([2 * ir, slot.x, csep.x], core_r, center = true);
rounded_rectangle([csep.z, slot.x, csep.y], core_r, center = true);
}
}
color(silver)
for(x = [-1, 1], y = [-1, 1])
translate([x * wire.x / 2, y * wire.y / 2]) {
solder(wire_r);
vflip()
cylinder(r = wire_r, h = wire.z, $fn = fn);
}
color(copper) {
wire_d = 2 * wire_r;
r = ir - wire_r;
cr = core_r + wire_r;
points = [
[-core_w / 2 + core_r, 0, 0],
[ core_w / 2 + wire_r, 0, 0], cr,
[ core_w / 2 + wire_r, w + wire_r, 0], cr,
[ 0, w + wire_d + seam.y * 2, 0], 7,
[-core_w / 2 - wire_r, w + wire_r, 0], cr,
[-core_w / 2 - wire_r, 0, 0], cr - eps,
[-core_w / 2 + core_r, 0, 0],
];
profile = segmented_path(rounded_path(points, $fn = fn), fs);
min_gap_angle = 2 * asin((slot.z + csep.x / 2 + wire_r) / r);
turns = floor((r * PI * (180 - min_gap_angle) / 180) / wire_d);
turn_angle = wire_d / (r * PI) * 180;
//turns = floor(((or + wire_r) * PI * (180 - min_gap_angle) / 180) / wire_d / 2);
//turn_angle = 2 * asin(wire_d / (or + wire_r));
gap_angle = 180 - turns * turn_angle;
path = arc_points(r, a = [90, 180 + gap_angle / 2, 180], al = 180 - gap_angle, $fn = turns * len(profile));
spiral = spiral_wrap(path, profile, path_length(path) / turns, turns);
tail = bezier_join([[wire.x / 2, wire.y / 2, -z - eps], [wire.x / 2, wire.y / 2, -z]], spiral, 1.5);
tilt = turn_angle * (or + wire_r) / 120;
outer_points = [
[ core_w / 2 - core_r - wire_d, -wire_d, 0],
[-core_w / 2 - wire_r - wire_d, -wire_d, 0], cr + wire_d,
[-core_w / 2 - wire_r, w + wire_r, tilt / 2], cr,
[ 0, w + wire_d + seam.y * 2, -tilt / 4], 7, // No idea why -tilt / 2.5 and not zero.
[ core_w / 2 + wire_r, w + wire_r, -tilt / 1.5], cr,
[ core_w / 2 + wire_r + wire_d, -wire_d, 0], cr + wire_d,
[ core_w / 2 - core_r - wire_d, -wire_d, 0],
];
outer_profile = segmented_path(rounded_path(outer_points, $fn = fn), fs);
outer_path = arc_points(r, a = [90, 180 + gap_angle / 2 + turn_angle / 2, 180], al = 180 - gap_angle, $fn = (turns - 1) * len(outer_profile));
outer_spiral = concat(spiral_wrap(outer_path, outer_profile, path_length(outer_path) / turns, turns), [spiral[len(spiral) - 1]]);
outer_tail = bezier_join([[wire.x / 2, -wire.y / 2, -z - eps], [wire.x / 2, -wire.y / 2, -z]], outer_spiral, 3);
wire_points = circle_points(wire_r, $fn = fn);
translate_z(z)
for(side = [-1, 1]) mirror([side < 0 ? 1 : 0, 0]){
color(copper)sweep(tail, wire_points);
sweep(outer_tail, wire_points);
}
}
}
function rd_coil_size(type) = type[1]; //! OD, ID, height, coil height
function rd_coil_wire(type) = type[2]; //! Wire pitch, diameter and length
function rd_coil_colour(type) = type[3]; //! Core colour
function rd_coil_turns(type) = type[4]; //! Number of turns
module rd_coil(type, value, pitch = undef) { //! Draw the specified vertical coil
size = rd_coil_size(type);
wire = rd_coil_wire(type);
pitch = is_undef(pitch) ? wire.x : pitch;
wire_d = wire.y;
wire_r = wire_d / 2;
vitamin(str("rd_coil(", type[0], " ,\"", value, "\"): Radial inductor ", size.z, "x", size.x, " ", value));
$fs = fs; $fa = fa;
end = (size.z - size[3]) / 2;
function sigmoid(x) = 1 / (1 + exp(-x));
z = end + size[3] / 2;
h = size[3] - wire_d;
color(rd_coil_colour(type)) {
cylinder(d = size.y, h = size.z);
for(z = [0, size.z - end])
translate_z(z)
cylinder(d = size.x, h = end);
}
turns = rd_coil_turns(type);
color(silver)
for(side = [-1, 1])
translate([side * pitch / 2, 0]) {
vflip()
cylinder(d = wire_d, h = wire.z, $fn = fn);
solder(wire.y / 2);
}
color(copper) {
r = size.y / 2 + wire_r;
sides = r2sides4n(r);
leadin = sides / 4;
total = sides * turns;
shortcut = 3;
spiral = [
for(i = [shortcut: total - shortcut])
let(a = 360 * i / sides,
j = i <= leadin ? leadin - i : i >= total - leadin ? i - (total - leadin) : 0,
R = r + j * wire_r / leadin
)
[R * cos(a), R * sin(a), (size[3] - wire.y) * i / total + end + wire_r]
];
half_spiral = [
for(i = [sides / 2 - shortcut : -1 : shortcut * 2])
let(a = 360 * i / sides, R = r + wire_d)
[R * cos(a), R * -sin(a), h * sigmoid((i - sides / 4) / 2) + end + wire_r]
];
path = bezier_join([[-pitch / 2, 0, -eps], [-pitch / 2, 0, 0]], bezier_join(bezier_join(half_spiral, spiral, 1), [[pitch / 2, 0, 0], [pitch / 2, 0, -eps]], 3), 3);
sweep(path, circle_points(wire_r, $fn = fn));
}
color("white")
translate_z(size.z)
linear_extrude(eps)
resize([size.x * 0.9, 0], auto = true)
text(value, halign = "center", valign = "center");
}

View File

@@ -38,10 +38,11 @@ LDE10_20B = ["LDE10_20B","PSU", [53.8, 28.8, 19.0], 0.5, grey(20), [1.0, 0,
rd_modules = [HF33F, VCE03, LDE10_20B];
// Disks
ERZV07D471 = ["ERZV07D471", "Varistor", [6.5, 5.0, 8.0], [4.75, 3.1], [0.6, 1.4], [grey(20), grey(80)]];
6p4mm_disc = ["6p4mm_disc","Ceramic capacitor", [6.5, 2.1, 7.8], [5.0, 0.9], [0.6, 0.8], ["#C5702D", grey(20)]];
ERZV07D471 = ["ERZV07D471", "Varistor", [6.5, 5.0, 8.0], [4.75, 3.1], [0.6, 1.4], [grey(20), grey(80)]];
6p4mm_disc = ["6p4mm_disc", "Ceramic capacitor", [6.5, 2.1, 7.8], [5.0, 0.9], [0.6, 0.8], ["#C5702D", grey(20)]];
10mm_disc = ["10mm_disc", "Ceramic capacitor", [10, 4.25, 12], [7.72, 0], [0.64, 2.0], ["#BA9C16", grey(20)]];
rd_discs = [6p4mm_disc, ERZV07D471];
rd_discs = [6p4mm_disc, ERZV07D471, 10mm_disc];
// Transistors
TO92 = ["TO92", [5.0, 3.9, 4.5], [grey(20), grey(80)], [0.48, 0.48], [[-1,0], [0,0], [1,0]] ];
@@ -60,4 +61,12 @@ BOXC18x10x16 = ["BOXC18x10x16", [18, 10, 16, 0.25], 1.7, [12, 0.8, 0.4], [15, 0.
rd_box_caps = [BOXC18x5x11, BOXC18x10x16];
ATX_CM_CHOKE = ["ATX_CM_CHOKE", [17.4, 11.4, 9, 0.5], [2, 0.8], [11, 4.7, 0.8], [1, 2.4, 6.8], [inch(0.3), inch(0.4), 3, 0.65]];
rd_cm_chokes = [ATX_CM_CHOKE];
IND16x10 = ["IND16x10", [10, 6.7, 16, 10], [inch(0.5), 0.9, 3], grey(20), 10];
rd_coils = [IND16x10];
use <radial.scad>