bearing - parametric bearings

Many mechanical designs will contain bearings of some kind. The bearing sub-package provides a set of classes that create many different types of parametric bearings.

Bearings are created as build123d Compound/Assemblies and with accurate external dimensions but simplified internal structure to avoid excess creation time.

_images/bearings.png

Here is a list of the classes (and bearing types) provided:

  • Bearing - the base bearing class
    • SingleRowDeepGrooveBallBearing: SKT

    • SingleRowCappedDeepGrooveBallBearing: SKT

    • SingleRowAngularContactBallBearing: SKT

    • SingleRowCylindricalRollerBearing: SKT

See Extending the fastener sub-package (these instructions apply to bearings as well) for guidance on how to easily add new sizes or entirely new types of bearings.

The following example creates a variety of different sized bearings:

from build123d import *
from bd_warehouse.bearing import SingleRowDeepGrooveBallBearing, SingleRowTaperedRollerBearing

skate_board_bearing = SingleRowDeepGrooveBallBearing(size="M8-22-7")
motocycle_head_bearing = SingleRowTaperedRollerBearing(size="M20-42-15")

Both metric and imperial sized standard bearings are directly supported by the bearing sub-package although the majority of the bearings currently implemented are metric.

The following sections describe each of the provided classes.

Bearing

As the base class of all other bearing classes, all of the bearing classes share the same interface as follows:

class Bearing(size: str, bearing_type: str = 'SKT')[source]

Parametric Bearing

Base Class used to create standard bearings

Parameters:
  • size (str) – bearing size, e.g. “M8-22-7”

  • bearing_type (str) – type identifier - e.g. “SKT”

Raises:
  • ValueError – bearing_type is invalid

  • ValueError – size is invalid

Bearing Selection

As there are many classes and types of bearings to select from, the Bearing class provides some methods that can help find the correct bearing for your application. As a reminder, to find the subclasses of the Bearing class, use __subclasses__():

>>> Bearing.__subclasses__()
[<class 'bd_warehouse.bearing.SingleRowDeepGrooveBallBearing'>, <class 'bd_warehouse.bearing.SingleRowCappedDeepGrooveBallBearing'>, <class 'bd_warehouse.bearing.SingleRowAngularContactBallBearing'>, <class 'bd_warehouse.bearing.SingleRowCylindricalRollerBearing'>, <class 'bd_warehouse.bearing.SingleRowTaperedRollerBearing'>]

Here is a summary of the class methods:

classmethod Bearing.types() set[str][source]

Return a set of the bearing types

>>> SingleRowDeepGrooveBallBearing.types()
{'SKT'}
classmethod Bearing.sizes(bearing_type: str) list[str][source]

Return a list of the bearing sizes for the given type

>>> SingleRowDeepGrooveBallBearing.sizes("SKT")
['M3-10-4', 'M4-9-2.5', 'M4-11-4', 'M4-12-4', 'M4-13-5', 'M4-16-5', 'M5-11-3', 'M5-13-4', 'M5-16-5', 'M5-19-6', 'M6-13-3.5', 'M6-15-5', 'M6-19-6', 'M7-14-3.5', 'M7-17-5', 'M7-19-6', 'M7-22-7', 'M8-16-4', 'M8-19-6', 'M8-22-7', 'M8-24-8', 'M9-17-4', 'M9-20-6', 'M9-24-7', 'M9-26-8', 'M10-19-5', 'M10-22-6', 'M10-26-8', 'M10-28-8', 'M10-30-9', 'M10-35-11']
classmethod Bearing.select_by_size(size: str) dict[source]

Return a dictionary of list of fastener types of this size

>>> Bearing.select_by_size("M8-22-7")
{<class 'bd_warehouse.bearing.SingleRowDeepGrooveBallBearing'>: ['SKT'], <class 'bd_warehouse.bearing.SingleRowCappedDeepGrooveBallBearing'>: ['SKT']}

Derived Bearing Classes

The following is a list of the current bearing classes derived from the base Bearing class. Also listed is the type for each of these derived classes where the type refers to a standard that defines the bearing parameters. All derived bearings inherit the same API as the base Bearing class.

  • SingleRowDeepGrooveBallBearing: SKT

  • SingleRowCappedDeepGrooveBallBearing: SKT

  • SingleRowAngularContactBallBearing: SKT

  • SingleRowCylindricalRollerBearing: SKT

class SingleRowDeepGrooveBallBearing(size: str, bearing_type: str = 'SKT')[source]

Single Row Deep Groove Ball Bearing

Deep groove ball bearings are particularly versatile. They are simple in design, non- separable, suitable for high and very high speeds and are robust in operation, requiring little maintenance. Because deep groove ball bearings are the most widely used bearing type, they are available in many designs, variants and sizes.

class SingleRowCappedDeepGrooveBallBearing(size: str, bearing_type: str = 'SKT')[source]

Single Row Capped Deep Groove Ball Bearings

Deep groove ball bearings capped with a seal or shield on both sides.

class SingleRowAngularContactBallBearing(size: str, bearing_type: str = 'SKT')[source]

Single Row Angular Contact Ball Bearing

Angular contact ball bearings have raceways in the inner and outer rings that are displaced relative to each other in the direction of the bearing axis. This means that they are designed to accommodate combined loads, i.e. simultaneously acting radial and axial loads. The axial load carrying capacity of angular contact ball bearings increases with increasing contact angle. The contact angle is defined as the angle between the line joining the points of contact of the ball and the raceways in the radial plane, along which the load is transmit- ted from one raceway to another, and a line perpendicular to the bearing axis.

class SingleRowCylindricalRollerBearing(size: str, bearing_type: str = 'SKT')[source]

Single Row Cylindrical Roller Bearings

Suitable for very heavy radial loads at moderate speeds, roller bearings use cylindrical rollers instead of spherical ball bearings.

Detailed information about any of the bearing types can be readily found on the internet from manufacture’s websites or from the standard document itself. SKT provides comprehensive information about all types of rolling bearings in their document: Rolling bearings.

Press Fit Holes

When designing parts with build123d a common operation is to place holes appropriate to a specific bearing into the part. This operation is optimized with bd_warehouse by the following custom hole object:

class PressFitHole(bearing: ~bearing.Bearing, interference: float = 0, fit: ~typing.Literal['Close', 'Normal', 'Loose'] = 'Normal', depth: float | None = None, mode: ~build123d.build_enums.Mode = <Mode.SUBTRACT>)[source]

Press Fit Hole

A press fit hole for a bearing is a precisely machined cavity designed to hold a bearing securely through interference fit, where the hole’s diameter is slightly smaller than the bearing’s outer diameter. This fit relies on frictional force to keep the bearing in place without additional fasteners. Key factors include material compatibility, tight tolerance control, and smooth surface finish to ensure a reliable and stable fit. Press fit holes are widely used in high-precision applications like automotive, aerospace, and industrial machinery, offering a robust and maintenance-free solution for securing bearings.

Parameters:
  • bearing – A bearing instance

  • interference – The amount the decrease the hole radius from the bearing outer radius. Defaults to 0.

  • fit – one of “Close”, “Normal”, “Loose” which determines hole diameter for the bore. Defaults to “Normal”.

  • depth – hole depth. Defaults to through part.

  • mode (Mode, optional) – combination mode. Defaults to Mode.SUBTRACT.

Raises:

ValueError – PressFitHole only accepts bearings of type Bearing

Note that this object can place a hole in the part sized and aligned for the bore of the bearing if an axle is intended to pass through the part. The fit parameter determines how much larger this hole is than the bearing bore. The hole_locations attribute of the bearing instance passed to PressFitHole will be updated with the location of the hole to easy assembly creation.