Parametric Encoder Wheel


This is a parametric encoder wheel that allows you to set circumference, internal width, shoulder height/width, mounting hole diameter, number of timing holes, as well as several parameters for captive nuts, alignment/snap-together pins, bolt holes, and inset of those timing holes. Most of the renderings here are for a 608 bearing (for free rotation) and sized to fit another pinch bearing.

The wheel circumference (less shoulders) of the metric and SAE versions is slightly different, and the hole sizes/spacing is different depending upon what distance you want to measure between holes. The distances will be accurate at the surface of the wheel for these renderings.

[sc:pic folder=”things/EncoderWheel” l=”EncoderWheel.jpg”]


NEW UPDATES — please read below for important information abut which renderings are part of which version!

A note about resolution: The resolution of the renderings is defined by the circumference of the wheel (but not the shoulders) divided by the number of holes. So, if you’re using an optoisolator, you can either count rising edges or falling edges for this resolution. But, you can effectively double the resolution by counting both rising and falling edges. For example, use the 5mm resolution wheel and count both edges (e.g. using Bounce or a pin change interrupt) for 2.5mm resolution.

If you want to just print the stl models…

For most of the models shown, print one copy of the encoder wheel cap, and one of the encoder wheels. Onto an 8mm (or 5/16in) bolt, add a washer, the cap (flat side first), another washer or two, the 608 bearing, another washer, and then the nut. Slide the encoder wheel onto the 608 bearing, but not so far that it contacts the cap. If it’s loose (default 0.5mm play), then put a bit of tape around it.

The 2.5mm version was rendered using the latest v0.9 of this openSCAD file, and includes several of the new features, including captive nuts, bearing constraints, and pins you can use to join the parts together. I’ll update the others as I get these files tested.

If you want to tweak it for your own purposes…

Open the file and tweak the values of these variables in the “User-defined values” section.

General Encoder wheel parameters:

  • bearingSize – The dimensions of the bearing, if you’re using that to define the hole
  • encoderCircumference – The circumference at the *surface* of the wheel (subtract tire thickness, e.g.)
  • internalWidth – The internal width (e.g. tire width) of the wheel. This is the width of a pinch 608 by default
  • collarPlay – The amount of play to build into the internal width.
  • collarHeight – How high the shoulders/encoder extend out from the wheel
  • collarWidth – How thick the shoulders are
  • holeDiameter – The diameter of the mounting hole. This is the diameter of a 608 bearing by default.
  • holePlay – The amount of play built into the mounting hole.
  • timingHoles – The number of timing holes to render. (e.g. 100mm circumference / 5mm per hole = 20 holes)
  • timingHoleInset – How far the timing holes are inset from the edge of the shoulder

Captive Nut traps allow you to tighten the wheel onto a shaft or bearing.

  • nutCount – The number of captive nuts
  • nutDiameter – The distance across the nut, from flat to flat, default M3
  • nutThickness – The thickness of the nut, default M3
  • setScrewDiameter – The diameter of the set screw clearance hole, default M3

The constraint values can be used to add material to the bottom of the mounting hole that partially blocks the hole. This can be useful, for example, if you want to constrain a bearing in the hole.

  • constraintInset – How far the constraint estends toward the center of the mounting hole
  • constraintThickness – The thickness of the contstraining wall
  • capConstraintInset – How far the constraint estends toward the center of the mounting hole on the cap
  • capConstraintThickness – The thickness of the contstraining wall on the cap

Pins or holes allow the cap to be snapped, glued, or bolted to the encoder wheel.

  • pinCount – The total number of pins / pin holes to render evenly-spaced
  • pinLength – The length of the pins/holes
  • pinDiameter – The diameter of the pins/holes
  • useHolesInstead – If true, render bolt through-holes rather than pins and pin holes
  • mateHoleDiameter – Bolt holes are sized to match hardware, not physical properties.

These values define the cap

  • capDiameter – The diameter of the shoulder cap, defaulting to the outer diameter of the encoder
  • capWidth – The thickness of the shoulder cap, defaulting to the thickness of the slotted encoder shoulder
  • capStandoff – A surface rendered on the inside of the cap around the mounting hole
  • capStandoffWidth – The width of the stand-off surface
  • capHoleRotation – Rotation of cap holes (in order to avoid the nut traps)

Other miscellaneous Parameters

  • distanceApart – How far apart the object will be rendered.

Important Notes

I’ve printed it successfully (as pictured) using a 0.5mm nozzle Prusa Mendel down to about 1.6mm. The pins in v0.9 come out quite small, and two of the three default pins were usable once I drilled out the holes. I’m still a bit new at this, though, and I’m still tuning my print quality, so I’d be interested in hearing about anyone else’s experiences with printing these.


[sc:pics folder=”things/EncoderWheel” l=”EncoderWheel-cap_display_large.jpg” r=”EncoderWheel-8mm-5mm_display_large.jpg”]
[sc:pics folder=”things/EncoderWheel” l=”EncoderWheel-5mm_display_large.jpg” r=”EncoderWheel-4mm_display_large.jpg”]
[sc:pics folder=”things/EncoderWheel” l=”EncoderWheel-20mm_display_large.jpg” r=”EncoderWheel-2.5mm_display_large.jpg”]
[sc:pics folder=”things/EncoderWheel” l=”EncoderWheel-1mm_display_large.jpg” r=”EncoderWheel-1in_display_large.jpg”]
[sc:pics folder=”things/EncoderWheel” l=”EncoderWheel-10mm_display_large.jpg” r=”EncoderWheel-0.5in_display_large.jpg”]
[sc:pics folder=”things/EncoderWheel” l=”EncoderWheel-0.25in_display_large.jpg” r=”EncoderWheel-0.125in_display_large.jpg”]

[sc:license id=”20491″ ]

Tags: , , , , ,


Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.