| | @@ -1,18 +1,46 @@ |
| 1 | | -"""Single-direction thrust ball bearing, 511, 512 and 513 series, bore up to 50 mm: envelope for assemblies, one solid with the boundary dimensions bore d, outside |
| 2 | | -diameter D and height T. Rolling elements, cage and the gaps between the rings are not modelled. Axis along Z, centred on the origin.""" |
| 1 | +"""Single-direction thrust ball bearing, 511, 512 and 513 series, bore up to 50 mm. Bore d, outside diameter D, height T, shaft washer outside d1, housing washer bore D1, washer thickness t and chamfer r are sourced and make the fit. detail = "full": two washers with raceways and the balls between them. The rolling element size and count, shoulder heights and clearances are proportions for looks, not for design, and never change the fit dimensions. The cage is not drawn. detail = "simple": one solid ring. Axis along Z, centred on the origin.""" |
| 2 | +import math |
| 3 | + |
| 3 | 4 | from steve import Model |
| 4 | 5 | |
| 5 | 6 | designation = "51104" # Bearing number |
| 7 | +detail = "full" # full: rings and rolling elements; simple: one solid |
| 6 | 8 | |
| 7 | | -# number: (d, D, T). NTN Ball and Roller Bearings CAT. No. 2203-3/E (2024), pp. B-150 to B-151 (PDF pages 226 and 227), boundary dimensions. |
| 8 | | -BEARINGS = {"51100": (10, 24, 9), "51101": (12, 26, 9), "51102": (15, 28, 9), "51103": (17, 30, 9), "51104": (20, 35, 10), "51105": (25, 42, 11), "51106": (30, 47, 11), "51107": (35, 52, 12), "51108": (40, 60, 13), "51109": (45, 65, 14), "51110": (50, 70, 14), "51200": (10, 26, 11), "51201": (12, 28, 11), "51202": (15, 32, 12), "51203": (17, 35, 12), "51204": (20, 40, 14), "51205": (25, 47, 15), "51206": (30, 52, 16), "51207": (35, 62, 18), "51208": (40, 68, 19), "51209": (45, 73, 20), "51210": (50, 78, 22), "51305": (25, 52, 18), "51306": (30, 60, 21), "51307": (35, 68, 24), "51308": (40, 78, 26), "51309": (45, 85, 28), "51310": (50, 95, 31)} |
| 9 | +# number: (d, D, T, housing washer bore D1, washer thickness t, r). NTN Ball and Roller Bearings CAT. No. 2203-3/E (2024), pp. B-150 to B-151 (PDF pages 226-227), https://www.ntnglobal.com/en/products/catalog/pdf/2203E.pdf |
| 10 | +BEARINGS = {"51100": (10, 24, 9, 11, 2.5, 0.3), "51101": (12, 26, 9, 13, 2.5, 0.3), "51102": (15, 28, 9, 16, 2.5, 0.3), "51103": (17, 30, 9, 18, 2.5, 0.3), "51104": (20, 35, 10, 21, 2.5, 0.3), "51105": (25, 42, 11, 26, 3, 0.6), "51106": (30, 47, 11, 32, 3, 0.6), "51107": (35, 52, 12, 37, 3.5, 0.6), "51108": (40, 60, 13, 42, 3.8, 0.6), "51109": (45, 65, 14, 47, 4, 0.6), "51110": (50, 70, 14, 52, 4, 0.6), "51200": (10, 26, 11, 12, 3.3, 0.6), "51201": (12, 28, 11, 14, 3.3, 0.6), "51202": (15, 32, 12, 17, 3.5, 0.6), "51203": (17, 35, 12, 19, 3.5, 0.6), "51204": (20, 40, 14, 22, 4.1, 0.6), "51205": (25, 47, 15, 27, 4.3, 0.6), "51206": (30, 52, 16, 32, 5, 0.6), "51207": (35, 62, 18, 37, 5.2, 1), "51208": (40, 68, 19, 42, 5.5, 1), "51209": (45, 73, 20, 47, 6, 1), "51210": (50, 78, 22, 52, 7, 1), "51305": (25, 52, 18, 27, 5, 1), "51306": (30, 60, 21, 32, 6.4, 1), "51307": (35, 68, 24, 37, 7.2, 1), "51308": (40, 78, 26, 42, 7.6, 1), "51309": (45, 85, 28, 47, 8.3, 1), "51310": (50, 95, 31, 52, 9.2, 1)} |
| 9 | 11 | |
| 10 | | -d, D, width = BEARINGS[designation] |
| 12 | +d, D, T, D1, t, r = BEARINGS[designation] |
| 13 | +W = T |
| 11 | 14 | model = Model() |
| 12 | | -with model.sketch("rings", on="XY", name="Rings") as sk: |
| 13 | | - sk.circle("outer", (0, 0), D / 2) |
| 14 | | - sk.circle("bore", (0, 0), d / 2) |
| 15 | | -model.extrude("body", "rings", distance=width, both=True, name="Bearing") |
| 16 | | -model.material("steel-generic", color="#b9bdc2") |
| 15 | +if detail == "simple": |
| 16 | + outline = [(d / 2 + r, -W / 2), (D / 2 - r, -W / 2), (D / 2, -W / 2 + r), (D / 2, W / 2 - r), (D / 2 - r, W / 2), (d / 2 + r, W / 2), |
| 17 | + (d / 2, W / 2 - r), (d / 2, -W / 2 + r)] |
| 18 | + with model.sketch("section", on="XZ", name="Section") as sk: |
| 19 | + sk.polyline("ring", outline, closed=True) |
| 20 | + model.revolve("inner", "section", axis="Z", name="Bearing") |
| 21 | +else: |
| 22 | + pitch_r = (D + D1) / 4 |
| 23 | + depth = 0.25 * t # raceway depth in each washer |
| 24 | + ball = T - 2 * t + 2 * depth |
| 25 | + race = ball / 2 + 0.02 * ball |
| 26 | + half = math.sqrt(race * race - (race - depth) ** 2) |
| 27 | + angles = [math.asin(half / race) * (i - 4) / 4 for i in range(9)] |
| 28 | + low_face_z, low_top = -T / 2, -T / 2 + t |
| 29 | + high_top, high_face_z = T / 2 - t, T / 2 |
| 30 | + low_groove = [(pitch_r + race * math.sin(a), -race * math.cos(a)) for a in reversed(angles)] |
| 31 | + high_groove = [(pitch_r + race * math.sin(a), race * math.cos(a)) for a in angles] |
| 32 | + shaft_washer = [(d / 2 + r, low_face_z), (D / 2 - r, low_face_z), (D / 2, low_face_z + r), (D / 2, low_top)] + low_groove + [(d / 2, low_top), (d / 2, low_face_z + r)] |
| 33 | + housing_washer = [(D1 / 2, high_face_z - r), (D1 / 2, high_top)] + [p for p in reversed(high_groove)][::-1][:0] + high_groove + [(D / 2, high_top), (D / 2, high_face_z - r), (D / 2 - r, high_face_z), (D1 / 2 + r, high_face_z)] |
| 34 | + with model.sketch("shaft_section", on="XZ", name="Shaft washer section") as sk: |
| 35 | + sk.polyline("shaft_ring", shaft_washer, closed=True) |
| 36 | + model.revolve("shaft_washer", "shaft_section", axis="Z", op="new", body="shaft_washer_body", name="Shaft washer") |
| 37 | + with model.sketch("housing_section", on="XZ", name="Housing washer section") as sk: |
| 38 | + sk.polyline("housing_ring", housing_washer, closed=True) |
| 39 | + model.revolve("housing_washer", "housing_section", axis="Z", op="new", body="housing_washer_body", name="Housing washer") |
| 40 | + balls = max(5, int(2 * math.pi * pitch_r / (1.25 * ball))) |
| 41 | + model.sphere("ball", ball / 2, at=(pitch_r, 0, 0), op="new", body="ball_body", name="Ball") |
| 42 | + model.circular_pattern("balls", axis="Z", count=balls, bodies=["ball_body"], name="Balls") |
| 43 | +model.material("steel-generic") |
| 44 | +model.appearance(color="#b9bdc2") |
| 17 | 45 | result = model.result() |
| 18 | 46 | |