Started work on microcar suspension
This commit is contained in:
parent
be42bd388f
commit
66e772172b
2 changed files with 139 additions and 10 deletions
109
microcar/suspension.scad
Normal file
109
microcar/suspension.scad
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
/**
|
||||||
|
* suspension.scad
|
||||||
|
*
|
||||||
|
* First sketch of a microcar suspension subframe.
|
||||||
|
*
|
||||||
|
* The purpose of the subframe is sumply to carry the inner ends of the
|
||||||
|
* wishbones, so it is simply the minimum size required to do that.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// assumes we're building out of square section aluminium tobe;
|
||||||
|
// the section width of that tube.
|
||||||
|
stock_section = 25;
|
||||||
|
|
||||||
|
lug_thickness = stock_section/6;
|
||||||
|
|
||||||
|
// radius of suspension pivots
|
||||||
|
pivot_radius = stock_section/3; //for now
|
||||||
|
|
||||||
|
module lug() {
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
translate([0, stock_section/2, 0]){
|
||||||
|
cube([ stock_section, stock_section, lug_thickness], center=true);
|
||||||
|
}
|
||||||
|
|
||||||
|
cylinder( r=stock_section/2, h=stock_section/4, center=true);
|
||||||
|
|
||||||
|
}
|
||||||
|
cylinder( r=pivot_radius, h=stock_section, center=true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module wishbone(l, w) {
|
||||||
|
ssd2 = stock_section/2;
|
||||||
|
ssm2 = stock_section * 2;
|
||||||
|
ssm3 = stock_section * 3;
|
||||||
|
|
||||||
|
translate([ (l - lug_thickness)/2, stock_section, ssd2])
|
||||||
|
rotate([180,90,0])
|
||||||
|
lug();
|
||||||
|
translate([ 0 - (l - lug_thickness)/2, stock_section, ssd2])
|
||||||
|
rotate([180,90,0])
|
||||||
|
lug();
|
||||||
|
|
||||||
|
color("silver")
|
||||||
|
union() {
|
||||||
|
intersection(){
|
||||||
|
linear_extrude(stock_section)
|
||||||
|
polygon( points=[[0-(l/2), ssd2], [l/2, ssd2],
|
||||||
|
[3*ssd2, w-(3*ssd2)], [0-(3*ssd2), w-(3*ssd2)],
|
||||||
|
// hole in the middle
|
||||||
|
[0-(l/2 - 3*ssd2), 3*ssd2],
|
||||||
|
[l/2 - 3*ssd2, 3*ssd2],
|
||||||
|
[ssd2, w-(5*ssd2)], [0-ssd2, w-(5*ssd2)]],
|
||||||
|
paths=[[0, 1, 2, 3], [4, 5, 6, 7]]);
|
||||||
|
translate([0 - (l - ssd2)/2, 0, 0 - stock_section])
|
||||||
|
cube([l-ssd2, w, ssm3]);
|
||||||
|
}
|
||||||
|
translate([-3*ssd2, w-3*ssd2, 0])
|
||||||
|
cube( [stock_section, 3*ssd2, stock_section]);
|
||||||
|
translate([ssd2, w-3*ssd2, 0])
|
||||||
|
cube( [stock_section, 3*ssd2, stock_section]);
|
||||||
|
};
|
||||||
|
color("darkgray")
|
||||||
|
translate([0, stock_section, ssd2])
|
||||||
|
rotate([0, 90, 0])
|
||||||
|
cylinder(h=l, r=pivot_radius, center=true);
|
||||||
|
color("darkgray")
|
||||||
|
translate([0, w - ssd2, ssd2])
|
||||||
|
rotate([0, 90, 0])
|
||||||
|
cylinder(h=ssm3, r=pivot_radius, center=true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module subframe(l, w, h) {
|
||||||
|
q = stock_section * 2;
|
||||||
|
color( "silver")
|
||||||
|
difference() {
|
||||||
|
cube([l,w,h], center=true);
|
||||||
|
cube([l+200, w-q, h-q], center=true);
|
||||||
|
cube([l-q, w+200, h-q], center=true);
|
||||||
|
cube([l-q, w-q, h+200], center=true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module suspension( l = 300, w = 300, h = 300,
|
||||||
|
track = 1400, hub_width = 135, wheel_diameter=600) {
|
||||||
|
subframe(l,w,h);
|
||||||
|
|
||||||
|
// Upper wishbones
|
||||||
|
translate([0, w/2, (h/2) - stock_section])
|
||||||
|
wishbone( l, 500);
|
||||||
|
mirror([0,1, 0]) {
|
||||||
|
translate([0, w/2, (h/2) - stock_section])
|
||||||
|
wishbone( l, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// lower wishbones
|
||||||
|
translate([0, w/2, 0 -(h/2)])
|
||||||
|
wishbone( l, 500);
|
||||||
|
mirror([0,1, 0]) {
|
||||||
|
translate([0, w/2, 0 -(h/2)])
|
||||||
|
wishbone( l, 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lug();
|
||||||
|
|
||||||
|
suspension();
|
||||||
|
|
@ -11,7 +11,11 @@ bb_width = 260; // internal width of battery box
|
||||||
* moment I'm making the simlifying assumption that it
|
* moment I'm making the simlifying assumption that it
|
||||||
* is horizontal.
|
* is horizontal.
|
||||||
****************************************************/
|
****************************************************/
|
||||||
cowl_height = 550;
|
|
||||||
|
// slope of the cowl
|
||||||
|
cowl_angle = -70;
|
||||||
|
// maximum height of the cowl (at the A pillar)
|
||||||
|
cowl_height = 450;
|
||||||
|
|
||||||
floor_length = 1100;
|
floor_length = 1100;
|
||||||
floor_width = 1500;
|
floor_width = 1500;
|
||||||
|
|
@ -21,8 +25,10 @@ floor_width = 1500;
|
||||||
* which bonds to the front or rear bulkhead from the
|
* which bonds to the front or rear bulkhead from the
|
||||||
* layback angles, but I'm being lazy for now
|
* layback angles, but I'm being lazy for now
|
||||||
****************************************************/
|
****************************************************/
|
||||||
layback_angle_f = 60;
|
// angle of the front bulkhead to vertical
|
||||||
layback_angle_r = 60;
|
layback_angle_f = 30;
|
||||||
|
// angle of the rear bulkhead to vertical
|
||||||
|
layback_angle_r = 45;
|
||||||
|
|
||||||
sheet_thickness = 8;
|
sheet_thickness = 8;
|
||||||
sill_max_height = bb_height;
|
sill_max_height = bb_height;
|
||||||
|
|
@ -31,27 +37,31 @@ sill_width = 150;
|
||||||
|
|
||||||
module battery_box_side( floor_length = 1100) {
|
module battery_box_side( floor_length = 1100) {
|
||||||
fhl = (floor_length/2);
|
fhl = (floor_length/2);
|
||||||
top_hl = 800; // calculate this later
|
top_hlf = (bb_height * tan(layback_angle_f)) + fhl;
|
||||||
|
top_hlr = (bb_height * tan(layback_angle_r)) + fhl;
|
||||||
rotate([90, 0 , 0])
|
rotate([90, 0 , 0])
|
||||||
linear_extrude( height=sheet_thickness) {
|
linear_extrude( height=sheet_thickness) {
|
||||||
polygon([[ 0 - fhl, 0],
|
polygon([[ 0 - fhl, 0],
|
||||||
[ fhl, 0],
|
[ fhl, 0],
|
||||||
[ top_hl, bb_height],
|
[ top_hlr, bb_height],
|
||||||
[ 0 - top_hl, bb_height]]);
|
[ 0 - top_hlf, bb_height]]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module battery_box( floor_length = 1100) {
|
module battery_box( floor_length = 1100) {
|
||||||
top_hl = 800; // calculate this later
|
top_hl = 800; // calculate this later
|
||||||
hbbw = bb_width/2;
|
hbbw = bb_width/2;
|
||||||
|
bias = (layback_angle_f == layback_angle_r) ? 0 : bb_height * ( tan(layback_angle_r) - tan(layback_angle_f))/2;
|
||||||
|
|
||||||
translate([0, hbbw, 0])
|
translate([0, hbbw, 0])
|
||||||
battery_box_side( floor_length);
|
battery_box_side( floor_length);
|
||||||
translate([0, 0 - (hbbw + sheet_thickness), 0])
|
translate([0, 0 - (hbbw + sheet_thickness), 0])
|
||||||
battery_box_side( floor_length);
|
battery_box_side( floor_length);
|
||||||
translate([0, 0 - hbbw, 0])
|
translate([0, 0 - hbbw, 0])
|
||||||
cube([sheet_thickness, bb_width, bb_height]);
|
cube([sheet_thickness, bb_width, bb_height]);
|
||||||
translate([0, 0 - sheet_thickness, bb_height])
|
translate([bias, 0 - sheet_thickness, bb_height])
|
||||||
cube([1600, bb_width + (sheet_thickness * 2),
|
cube([floor_length + (bb_height * tan(layback_angle_f)) +
|
||||||
|
(bb_height * tan(layback_angle_r)), bb_width + (sheet_thickness * 2),
|
||||||
sheet_thickness],
|
sheet_thickness],
|
||||||
center = true);
|
center = true);
|
||||||
}
|
}
|
||||||
|
|
@ -59,13 +69,14 @@ module battery_box( floor_length = 1100) {
|
||||||
module sill( floor_length = 1100) {
|
module sill( floor_length = 1100) {
|
||||||
cr = 5000;
|
cr = 5000;
|
||||||
fhl = (floor_length/2);
|
fhl = (floor_length/2);
|
||||||
top_hl = 800; // calculate this later
|
top_hl = fhl + (cowl_height * tan(layback_angle_f));
|
||||||
|
top_hlr = fhl + (sill_max_height * tan(layback_angle_r));
|
||||||
difference() {
|
difference() {
|
||||||
rotate([90, 0 , 0])
|
rotate([90, 0 , 0])
|
||||||
linear_extrude( height=sill_width) {
|
linear_extrude( height=sill_width) {
|
||||||
polygon([[ 0 - fhl, 0],
|
polygon([[ 0 - fhl, 0],
|
||||||
[ fhl, 0],
|
[ fhl, 0],
|
||||||
[ top_hl, sill_max_height],
|
[ top_hlr, sill_max_height],
|
||||||
[ 0, sill_min_height],
|
[ 0, sill_min_height],
|
||||||
[ a_pillar_y, sill_min_height],
|
[ a_pillar_y, sill_min_height],
|
||||||
[ a_pillar_y, cowl_height],
|
[ a_pillar_y, cowl_height],
|
||||||
|
|
@ -79,6 +90,14 @@ module sill( floor_length = 1100) {
|
||||||
}
|
}
|
||||||
|
|
||||||
module front_bulkhead() {
|
module front_bulkhead() {
|
||||||
|
e = cowl_height / cos(layback_angle_f);
|
||||||
|
|
||||||
|
translate([ 0 - floor_length/2, 0 -floor_width/2, 0])
|
||||||
|
rotate([0, 0- layback_angle_f, 0])
|
||||||
|
cube([sheet_thickness, floor_width, e]);
|
||||||
|
}
|
||||||
|
|
||||||
|
module rear_bulkhead() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -94,3 +113,4 @@ mirror([0, 1, 0])
|
||||||
( floor_width/2) + (sill_width/2), 0])
|
( floor_width/2) + (sill_width/2), 0])
|
||||||
sill();
|
sill();
|
||||||
|
|
||||||
|
front_bulkhead();
|
||||||
Loading…
Add table
Add a link
Reference in a new issue