-
Bafang vs. Tour Easy: Chain Guide
After adding the Bafang motor to my Tour Easy, the chain has fallen off the chainring a few times, prompting the gap filler between the motor and the chainring spider. That this has never happened to Mary’s essentially identical Tour Easy suggests I have a different shift technique, but adding a chain catcher seemed easier than re-learning shifting:

Chain Catcher – top view It’s more properly called a “chain guide” and is basically a shifter cage minus the mechanism:

Chain Catcher – side view Because the Tour Easy frame has a 25 mm tube where the guide’s clamp expects a minimum 31.8 mm tube, a 3D printed adapter fills the gap:

Chain Catcher adapter ring – solid model The hole is off-center because it seemed like a good idea, although it’s not strictly necessary. The flange helps align the pieces while tightening the clamp screw.
The guide cage clears the chain on all sides while up on the work stand, but there’s nothing like getting out on the road to find out why something doesn’t work as you expect.
The OpenSCAD source code as a GitHub Gist:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters// Chain catcher adapter ring // Ed Nisley – KE4ZNU – 2023-05 /* [Hidden] */ ThreadThick = 0.25; ThreadWidth = 0.40; HoleWindage = 0.2; Protrusion = 0.1; // make holes end cleanly function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); ID = 0; OD = 1; LENGTH = 2; inch = 25.4; //———————- // Dimensions TubeOD = 26.0; // frame tube with silicone tape Clamp = [35.0,39.0,12.0]; // Chain catcher clamp ring Flange = [Clamp[ID],Clamp[OD],3*ThreadThick]; Kerf = 1.0; Offset = (Clamp[ID] – TubeOD)/2 – 3*ThreadWidth; NumSides = 2*3*4; //———————– $fn=NumSides; difference() { union() { cylinder(d=Flange[OD],h=Flange[LENGTH]); cylinder(d=Clamp[ID],h=Clamp[LENGTH]+Flange[LENGTH]); } cube([2*Flange[OD],Kerf,3*Clamp[LENGTH]],center=true); translate([0,Offset,0]) cylinder(d=TubeOD,h=3*Clamp[LENGTH],center=true); }