فهرست منبع

Add parametric FPC adapter board mockup

Waveshare e-Paper FPC adapter model with PCB, mounting holes,
two FPC connectors (Y+ and Y-), and configurable cable stubs
via FPC_YP / FPC_YN parameters.
ZiB 4 ماه پیش
والد
کامیت
696d7bb8ea
1فایلهای تغییر یافته به همراه99 افزوده شده و 0 حذف شده
  1. 99 0
      fpc_adapter.scad

+ 99 - 0
fpc_adapter.scad

@@ -0,0 +1,99 @@
+// Waveshare e-Paper FPC Adapter — parametric mockup
+//
+// Coordinate system:
+//   Origin at PCB Z- face, lower-left corner (X=0, Y=0, Z=0).
+//   X: board long axis (width)
+//   Y: board short axis (height)
+//   Z: 0 = bottom face (Z-); PCB_T = top face (Z+, component side)
+//
+// Two FPC connectors sit on the Z+ face:
+//   Connector A (Y+): FPC exits in +Y direction
+//   Connector B (Y-): FPC exits in -Y direction
+//
+// fpc_len_a / fpc_len_b control how much cable to show beyond each connector.
+// Set either to 0 to show an empty (no-cable) connector.
+
+// ── PCB ────────────────────────────────────────────────────────────────
+PCB_W  = 32.0;   // board width  (X)
+PCB_H  = 18.0;   // board height (Y)
+PCB_T  = 1.6;    // board thickness (standard; measured ~1.72)
+PCB_R  = 3.0;    // corner radius     ← replace with measured value
+
+// ── Mounting holes ─────────────────────────────────────────────────────
+HOLE_D   = 3.0;  // hole diameter
+HOLE_MX  = 3.75;  // hole center X from nearest X edge (2.25 clearance + 1.5 radius)
+HOLE_MY  = 3.75;  // hole center Y from nearest Y edge (2.25 clearance + 1.5 radius)
+
+// ── FPC connectors (simple box approximation) ──────────────────────────
+CON_W    = 15.5;  // connector width along X
+CON_D    = 5.85;  // connector depth along Y
+CON_H    = 2.05;  // connector height above Z+ face (total stack 3.65 - PCB_T)
+CON_T    = 0.5;   // connector wall / overhang      ← replace
+
+// X centre of both connectors (assumed centred on board)
+CON_CX   = PCB_W / 2;
+
+// Y edge positions of the connector body
+//   Connector A sits at Y+ edge; connector B sits at Y- edge.
+CON_A_Y1 = PCB_H - CON_D;   // inner face (toward board centre)
+CON_B_Y0 = 0;                // outer face (at Y=0 edge)
+
+// ── FPC cable (simple flat box) ────────────────────────────────────────
+FPC_W  = 12.5;  // cable width along X
+FPC_T  = 0.3;   // cable thickness      ← replace with measured value
+
+// FPC stub length at each connector. 0 = no cable shown; >0 = stub that many mm.
+FPC_YP = 20;  // cable length beyond Y+ connector
+FPC_YN = 0;   // cable length beyond Y- connector
+
+// ═══════════════════════════════════════════════════════════════════════
+// Modules
+// ═══════════════════════════════════════════════════════════════════════
+
+module _pcb_shape(h) {
+  r = PCB_R;
+  linear_extrude(h)
+    offset(r=r)
+      translate([r, r])
+        square([PCB_W - 2*r, PCB_H - 2*r]);
+}
+
+module fpc_adapter(fpc_yp=FPC_YP, fpc_yn=FPC_YN) {
+
+  // ── PCB body ──────────────────────────────────────────────────────
+  color("#1a7abf", 0.85)
+    difference() {
+      _pcb_shape(PCB_T);
+
+      // Mounting holes
+      for (xi = [HOLE_MX, PCB_W - HOLE_MX])
+        for (yi = [HOLE_MY, PCB_H - HOLE_MY])
+          translate([xi, yi, -0.1])
+            cylinder(d=HOLE_D, h=PCB_T + 0.2, $fn=24);
+    }
+
+  // ── Connector A (Y+ edge, FPC exits +Y) ──────────────────────────
+  color("#d0d0d0")
+    translate([CON_CX - CON_W/2, CON_A_Y1, PCB_T])
+      cube([CON_W, CON_D, CON_H]);
+
+  // FPC stub out of connector A
+  if (fpc_yp > 0)
+    color("#e8e8e8")
+      translate([CON_CX - FPC_W/2, PCB_H, PCB_T + (CON_H - FPC_T)/2])
+        cube([FPC_W, fpc_yp, FPC_T]);
+
+  // ── Connector B (Y- edge, FPC exits -Y) ──────────────────────────
+  color("#d0d0d0")
+    translate([CON_CX - CON_W/2, CON_B_Y0, PCB_T])
+      cube([CON_W, CON_D, CON_H]);
+
+  // FPC stub out of connector B
+  if (fpc_yn > 0)
+    color("#e8e8e8")
+      translate([CON_CX - FPC_W/2, -fpc_yn, PCB_T + (CON_H - FPC_T)/2])
+        cube([FPC_W, fpc_yn, FPC_T]);
+}
+
+// Standalone render
+fpc_adapter(fpc_yp=FPC_YP, fpc_yn=FPC_YN);