From c4f687ea99f9dc86d2f8219b0af6dc6ce72c4118 Mon Sep 17 00:00:00 2001 From: Kelvin Ly Date: Mon, 24 Mar 2025 21:32:51 -0400 Subject: [PATCH] Add z stepper mount and holes in z bracket --- gantry.py | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++---- utils.py | 2 + 2 files changed, 110 insertions(+), 7 deletions(-) diff --git a/gantry.py b/gantry.py index 9538064..4d21bb7 100644 --- a/gantry.py +++ b/gantry.py @@ -402,7 +402,10 @@ class Carriage: .center(-x - HGR20.L - x_carriage_spacing / 2, -x_rail_spacing / 2) .transformed(rotate=(180, 0, 0)) .rect(60, 60) - .extrude(64) + .extrude(64 - 8) + .faces(">z") + .rect(60, 32) + .extrude(8) ) self.x_nut_mount = gantry.ball_screw_model.nutHoles( self.x_nut_mount, x + carriage_w / 2 @@ -418,7 +421,7 @@ class Carriage: s.copyWorkplane(back) .center(-x - HGR20.L - x_carriage_spacing / 2, -x_rail_spacing / 2) .transformed(rotate=(0 if forward else 180, 0, 0)) - .rect(44, 44) + .rect(48, 48) .vertices() .hole(5) ) @@ -508,7 +511,7 @@ class Carrier: angle_z = 0.188 * 25.4 angle_w = 2.0 * 25.4 - self.stepper_mount = ( + self.stepper_bracket = ( cq.Workplane() .copyWorkplane(self.plane) .transformed(offset=(-200 / 2, z_rail_len / 2, 0), rotate=(0, 90, 0)) @@ -520,10 +523,106 @@ class Carrier: .finalize() .extrude(200) ) + self.stepper_bracket = carriage.left_rail.holes(self.stepper_bracket) + self.stepper_bracket = carriage.right_rail.holes(self.stepper_bracket) + self.stepper_bracket = ( + self.stepper_bracket.copyWorkplane( + self.ballscrew_model.w.transformed(rotate=(90, 0, 0)) + ).hole(32) + # .copyWorkplane(self.ballscrew_model.w.transformed(rotate=(90, 0, 0))) + # .pushPoints([(40, 0)]) + # .hole(5) + ) + self.stepper_bracket = self.ballscrew_model.fixedBearingHoles( + self.stepper_bracket + ) + + offset = ( + self.ballscrew_model.w.vertices().val() + - self.plane.transformed( + offset=(0, z_rail_len / 2 + 10, 0), rotate=(-90, 0, 0) + ) + .vertices() + .val() + ) + + # print("offset: ", offset) + self.stepper_mount = ( + cq.Workplane() + .copyWorkplane( + self.plane.transformed( + offset=(0, z_rail_len / 2 + 10, 0), rotate=(-90, 0, 0) + ) + ) + .tag("flange_center") + .rect(100, 50) + .extrude(5) + .workplaneFromTagged("flange_center") + .transformed(rotate=(180, 0, 0)) + .rect(90, 25, forConstruction=True) + .vertices() + .hole(5) + .copyWorkplane( + self.plane.transformed( + offset=(0, z_rail_len / 2 + 10, 0), rotate=(-90, 0, 0) + ).transformed(offset=(0, -offset.y, 0), rotate=(0, 0, 30)) + ) + .tag("stepper_center") + .rect(58.4, 58.4) + .extrude(5) + .workplaneFromTagged("stepper_center") + .transformed(rotate=(180, 0, 0)) + .rect(47.41, 47.41, forConstruction=True) + .vertices() + .hole(5) + .copyWorkplane(self.ballscrew_model.w.transformed(rotate=(90, 0, 0))) + .hole(40) + ) + self.stepper_bracket = ( + self.stepper_bracket.copyWorkplane( + self.stepper_mount.workplaneFromTagged("stepper_center") + ) + .rect(47.41, 47.41, forConstruction=True) + .vertices() + .hole(5) + .copyWorkplane(self.stepper_mount.workplaneFromTagged("flange_center")) + .transformed(rotate=(0, 0, 0)) + .rect(90, 25, forConstruction=True) + .vertices() + .hole(5) + ) + + self.stepper_lower_spacer = ( + cq.Workplane() + .copyWorkplane(self.fixed_bearing.workplaneFromTagged("mounting face")) + .rect(60, 40) + .extrude(16) + .copyWorkplane(self.ballscrew_model.w.transformed(rotate=(90, 0, 0))) + .rect(36, 36) + .cutThruAll() + ) + self.stepper_lower_spacer = self.ballscrew_model.fixedBearingHoles( + self.stepper_lower_spacer + ) + self.stepper_mount = self.ballscrew_model.fixedBearingHoles(self.stepper_mount) + + def bracket_mounting_holes(s): + points = [ + (x, y) + for x in [-93, -83, 93, 83] + for y in [-z_ballscrew_len / 2 + 30, -z_ballscrew_len / 2 + 10] + ] + return ( + s.copyWorkplane(self.plane.transformed(rotate=(180, 0, 0))) + .pushPoints(points) + .hole(5) + ) + + self.plate = bracket_mounting_holes(self.plate) + self.stepper_bracket = bracket_mounting_holes(self.stepper_bracket) ballscrew_offset = z_ballscrew_len / 2 + carriage.z / 2 - z carriage.z_nut = self.ballscrew_model.nut(ballscrew_offset) - # TODO add carriage nut mount to carriage carriage.z_nut_mount = ( cq.Workplane() .copyWorkplane(carriage.plate.workplaneFromTagged("carriage_plate")) @@ -538,7 +637,7 @@ class Carrier: ) ) .rect( - 44, 44 + 48, 48 ) # mounting holes; these need to line up with the x nut mounting holes .vertices() .hole(5) @@ -561,8 +660,10 @@ class Carrier: .add(self.plate, name="z plate") .add(self.ballscrew, name="z ballscrew") .add(self.fixed_bearing, name="z fixed bearing") - .add(self.floating_bearing, name="z floating bearing") - .add(self.stepper_mount, name="stepper motor-ballscrew mount") + # .add(self.floating_bearing, name="z floating bearing") + .add(self.stepper_bracket, name="stepper motor-ballscrew bracket") + .add(self.stepper_lower_spacer, name="stepper motor lower spacer") + .add(self.stepper_mount, name="stepper mount") ) diff --git a/utils.py b/utils.py index ca4b360..6b5e439 100644 --- a/utils.py +++ b/utils.py @@ -104,6 +104,8 @@ class SFU1204: .copyWorkplane(w2) .rect(B, H1) .extrude(L) + .copyWorkplane(w2.transformed(offset=(0, 0, L))) + .tag("mounting face") .copyWorkplane(w.transformed(rotate=(180, 0, 0))) .hole(d1) .copyWorkplane(w3.transformed(rotate=(180, 0, 0)))