You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
3.5 KiB
133 lines
3.5 KiB
/*
|
|
Open freecad, select Workbench OpenSCAD
|
|
import file, save as freecad file.fcstd, close,
|
|
open freecad file.fcstd, select all (object becomes green),
|
|
export to VRML 2.0 (wrl file)
|
|
PCB->right click->3D shape
|
|
navigate to file.wrl, edit filename ./footprints/bla/bla.3dshapes/file.wrl
|
|
use XYZ 0.3937 scale and rotate Z=90
|
|
https://www.freecadweb.org/wiki/Import_OpenSCAD_code
|
|
*/
|
|
|
|
// Case dimensions
|
|
case_x=22.42; // Case X dimension
|
|
case_y=10.16; // Case Y dimension
|
|
case_z=1.2; // Case Z dimension
|
|
dot_radius=0.3; // Notch radius
|
|
dot_depth=0.1; // Notch depth
|
|
dot_off_x=0.5; // Notch offset X
|
|
dot_off_y=0.5; // Notch offset Y
|
|
color_case=[0.15,0.15,0.15]; // dark gray
|
|
color_dot=[1,1,1]; // white
|
|
|
|
// Pin arrays parameters
|
|
side1_pins = 27;
|
|
side2_pins = 0;
|
|
side3_pins = 27;
|
|
side4_pins = 0;
|
|
pin_distance =0.8; // Pin step
|
|
color_pin=[1,1,1]; // white
|
|
|
|
// Pin parameters
|
|
pin_th = 0.15; // Thickness
|
|
pin_W = 0.375; // Pin width
|
|
pin_L = 0.8; // Total Length
|
|
pin_H = case_z/2+pin_th/2; // Pin height (from bottom to top)
|
|
pin_l = 0.4; // Length of the bottom part
|
|
pin_a = 115; // Bending angle
|
|
|
|
translate_to_center=[-(side1_pins-1)*pin_distance/2,-(case_y+pin_L*2)/2,0];
|
|
|
|
// Bended pin
|
|
// _L - whole pin length
|
|
// _l - length of bottom part
|
|
// _H - whole pin height
|
|
// _th - pin thickness
|
|
// _a - bending angle
|
|
// _W - pin width
|
|
module pin(_L,_l,_H,_th,_a,_W)
|
|
{
|
|
// Internal variables
|
|
_d1 = _th*sin(_a) / (1-cos(_a));
|
|
_d2 = (_th-_H)*cos(_a) / sin(_a);
|
|
|
|
rotate([90,0,90])
|
|
// Extrude the following polygon
|
|
linear_extrude(height = _W, center = true, convexity = 10, twist = 0)
|
|
polygon([[0,0],
|
|
[_l,0],
|
|
[_l+_d2,_H-_th],
|
|
[_L,_H-_th],
|
|
[_L,_H],
|
|
[_l+_d2-_d1,_H],
|
|
[_l-_d1,_th],
|
|
[0,_th]]);
|
|
}
|
|
|
|
// Array of pins
|
|
// _cnt - number of pins
|
|
// _distance - distance between pin centres
|
|
module pins_array(_cnt, _distance)
|
|
{
|
|
if (_cnt>0)
|
|
color(color_pin)
|
|
{
|
|
for (_i = [0:_cnt-1])
|
|
{
|
|
translate([_distance*_i,0,0])
|
|
pin(pin_L,pin_l,pin_H,pin_th,pin_a,pin_W);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Simple case with notch
|
|
module case()
|
|
{
|
|
difference()
|
|
{
|
|
translate([case_x/2,case_y/2,case_z/2])
|
|
color(color_case)
|
|
cube([case_x,case_y,case_z],center=true);
|
|
translate([dot_radius+dot_off_x,dot_radius+dot_off_y,case_z])
|
|
color(color_dot)
|
|
cylinder(h=dot_depth*2, r = dot_radius, center= true, $fn = 10);
|
|
}
|
|
}
|
|
|
|
|
|
// Complete model
|
|
// scale(1/2.54) // 1/2.54=0.3937 scale for Kicad
|
|
module ic()
|
|
{
|
|
// Case
|
|
translate([-(case_x-(side1_pins-1)*pin_distance)/2,pin_L,0]+translate_to_center)
|
|
case();
|
|
|
|
translate(translate_to_center)
|
|
union()
|
|
{
|
|
// Top pins
|
|
translate([(side1_pins-side3_pins)*pin_distance/2,case_y+pin_L*2,0])
|
|
mirror([0,1,0])
|
|
pins_array(side3_pins, pin_distance);
|
|
|
|
// Bottom pins
|
|
pins_array(side1_pins, pin_distance);
|
|
|
|
// Left pins
|
|
translate([-(case_x-(side1_pins-1)*pin_distance)/2 - pin_L,pin_L+case_y/2-(side4_pins-1)*pin_distance/2,0])
|
|
mirror([1,0,0])
|
|
rotate([0,0,90])
|
|
pins_array(side4_pins, pin_distance);
|
|
|
|
// Right pins
|
|
translate([-(case_x-(side1_pins-1)*pin_distance)/2-pin_L+case_x+2*pin_L,pin_L+case_y/2-(side2_pins-1)*pin_distance/2,0])
|
|
mirror([0,1,0])
|
|
mirror([0,1,0])
|
|
rotate([0,0,90])
|
|
pins_array(side2_pins, pin_distance);
|
|
}
|
|
}
|
|
|
|
ic();
|