Cam-Follower Contact in SolidWorks Is a Tessellated Approximation. NeuroCAD Computes It in Closed Form.
If your camshaft simulation reports follower acceleration with a phantom 12 g spike at the rise-dwell transition, the spike is almost certainly not in your motion law. It is in the mesh.
A small mystery from a real machine
A printing-press camshaft running at 900 rpm. Cycloidal lift, 60° rise, 30° dwell, 60° fall. On paper a textbook design — Norton ch. 3, every cam-design course since the 1980s. The motion law is C² continuous: position, velocity, and acceleration all blend smoothly across the dwell transition. There should be no acceleration shock.
Open the cam in SolidWorks Motion. Run the simulation. The follower-acceleration plot has a 12 g spike — barely a millisecond wide — sitting exactly on the rise-dwell boundary. Re-mesh the cam with a finer chord tolerance. The spike shrinks to 6 g. Halve the tolerance again. It moves to 3 g but it does not vanish. The plotted acceleration goes up as the mesh gets finer in some places and down in others, and the C² continuity that the cycloidal motion law guarantees on paper is nowhere to be seen.
The mechanism designer is not crazy. The mesh is lying.
Where the lie lives
Every conventional CAD package, when asked to compute the contact between a disk cam and a flat-faced or roller follower, does roughly this:
- Take the cam profile, originally defined as a parametric curve of
(angle, lift)pairs, and sample it onto a polyline (for a 2D cam) or a tessellated B-rep face (for a 3D cam). - For each follower position along the rotation, find the closest tessellated edge or triangle.
- Compute distance, contact normal, and reaction line geometrically against that piecewise-linear approximation.
This pipeline has three failure modes that surface as soon as you ask for second derivatives:
- C⁰ at the chord boundaries. Adjacent tessellation chords meet with a kink. The normal vector jumps by a finite angle at every chord boundary. When you differentiate position twice to get acceleration, those kinks become Dirac-spike artefacts.
- Topology flicker. When the closest-point search hops from one chord to the next, the index of the active edge changes discretely. Some integrators behave well across the hop; many don’t. The acceleration plot picks up integration noise that has nothing to do with the cam.
- Refinement does not converge. Norton’s textbook treatment [Norton 2009, ch. 3] guarantees C² continuity for cycloidal, modified-trapezoidal, and polynomial 4-5-6-7 motion laws. A tessellated approximation is C⁰ no matter how fine you mesh — the limit of a piecewise-linear approximation of a smooth curve is a smooth curve, but every finite approximation is non-smooth.
If you have ever filed a “phantom acceleration spike” bug against a CAD-package motion solver and been told to “increase mesh density on the cam profile” — that’s where the spike came from, and that’s why increasing mesh density only ever moved it.
Two questions, two answers
A cam-follower system asks two geometric questions at every simulation step:
Q1. Where is the contact point between the cam and the follower right now?
Q2. What is the lift
s(θ)— the follower displacement as a function of crank angle?
In a B-rep tessellated kernel, both questions are answered by searching a discrete data structure (BVH over the tessellation, edge-traversal). In an SDF-native kernel like NeuroCAD, both questions become closed-form root-finding on a smooth field.
The setup is simple. Define the cam SDF in the cam-fixed frame:
f_cam(x, y; θ) = signed distance from point (x, y) to the cam profile
(rotated by crank angle θ)
For a disk cam with translating roller follower offset e, follower radius r, follower axis ŷ, the contact condition is exactly:
contact point c = (e, s(θ)) such that f_cam(c; θ) + r = 0
follower lift s(θ) = argmin_y { f_cam((e, y); θ) | f_cam = -r }
In words: the lift is the height at which the cam SDF, evaluated along the follower axis, hits the value -r (centre of the roller is r from the surface, and inside the cam’s exterior region). For a flat-faced follower, r = 0 and the lift is the height where the cam SDF first touches the follower face along the local normal.
For an analytic cam profile — a circle, an involute arc, a cycloidal-lift curve s(θ) = h·(θ/β − sin(2πθ/β)/(2π)) — the SDF can be written in closed form, and so can s(θ). No tessellation. No polyline. No finite chord that adds kink-noise to the second derivative.
The contact normal is the gradient of the SDF, also analytic:
n̂(c; θ) = ∇f_cam(c; θ) / |∇f_cam(c; θ)|
A cycloidal-lift cam evaluated this way gives an acceleration s̈(θ) that is C² across rise-dwell — by construction, because the SDF is C² wherever the underlying motion law is C².
What the C² Test Actually Measures
The publishable test for this method is small enough to fit in a paragraph:
Build a disk-cam SDF parametrised by a cycloidal lift law with rise angle β = 60°, dwell 30°, lift h = 10 mm, base radius 30 mm. Sample the follower lift
s(θ)for 10 000 angles uniformly across the 360° cycle. Computes̈(θ)by central differencing. Compare against the analytic cycloidal accelerations̈_analytic(θ) = (2πh/β²) · sin(2πθ/β). The maximum absolute error must satisfymax|s̈ − s̈_analytic| < 1e-4 · max|s̈_analytic|everywhere including the rise-dwell boundary.
Run the same test against the same cam tessellated to 10⁴ chords and the error at the boundary is on the order of unity — three to four orders of magnitude worse, exactly as the kink argument predicts.
Run the same test against the same cam tessellated to 10⁶ chords and the error at the boundary is still on the order of 1e-2, because the C⁰-to-C¹ gap does not close under refinement. The B-rep approach does not converge to C² no matter how fine you mesh.
This is the kind of result that mechanism designers have been intuiting from frustrating motion-solver runs for thirty years. NeuroCAD makes it formal.
Loss-of-contact prediction sneaks in for free
Once you have analytic contact, you get a second result almost for nothing.
A spring-loaded follower at high cam rpm can lose contact with the cam — the well-known follower-bounce or follower-jump failure mode [Norton ch. 9]. The bounce condition is:
m · s̈(θ) > k · (s_0 + s(θ))
where m is follower mass, k is return-spring stiffness, and s_0 is preload. The right-hand side is a function of geometry and a known spring constant. The left-hand side requires s̈(θ) accurate enough that you trust its sign and magnitude.
If your s̈ plot has 12-g phantom spikes at the dwell transitions, the bounce check fires at every dwell, every cycle. You disable the warning. You miss the real bounce that happens at 1500 rpm because it’s drowned in the noise.
If your s̈ plot is C² to machine precision, the bounce check fires exactly when the bounce really happens. The warning becomes useful instead of useful-then-disabled.
NeuroCAD’s plan is to wire this directly into the Mechanisms workbench: the cam profile is an SDF primitive, the lift function is computed analytically, the acceleration plot is C², and the loss-of-contact predictor reads the same s̈ that the verifier reads. One source of truth, no tessellation in the loop.
What this is not
It is fair to ask what we are not claiming.
We are not claiming to have invented analytic cam-follower contact analysis. The algebraic geometry of cam-follower kinematics is well-developed Norton 2009; the IntechOpen survey “General Kinematic Pair of a Cam Mechanism” gives a recent overview and there are MATLAB toolboxes that compute analytic lift for textbook cam shapes.
We are claiming that doing this inside the live CAD kernel, with the cam represented as an SDF that participates in the same compose graph as the rest of the body, with the contact computation traced by the same DCG that traces every other feature edit, with the C² acceleration available to every downstream consumer (the FEA module, the BOM module, the Mechanisms workbench plot, the tolerance analyser) — that is genuinely new. Conventional CAD systems either do contact in the tessellated body and get C⁰ acceleration, or they do contact in a separate analytic motion-design tool and lose all coupling to the live geometry.
We are also not claiming this is shipped today. The SDF cam profile primitive exists in the field kernel. The cam-follower joint kind exists in the mechanisms layer. Analytic tangent-contact analysis is the proposed Mechanisms-workbench feature and the publishable test that justifies it. The C² convergence test is in the REV11.5 lab plan. None of it has merged. The architecture supports it; the work is in flight.
Why a mechanism-design audience should care
Three reasons:
-
You can stop fighting the mesh. Acceleration plots that are right for the right reason. Loss-of-contact warnings you can trust. Jerk values you can publish in a vendor data sheet.
-
The math is auditable. Because the lift function is computed from the SDF in closed form, every value
s(θ)is reproducible from the cam definition alone. No mesh, no tessellation tolerance, no quiet refinement step that changes the answer between two patches. The same definition gives the same answer on every machine, every time. -
The cam is part of the model, not a separate motion-design artefact. Edit the cam profile in the sketcher — the SDF re-evaluates, the lift function re-evaluates, the acceleration plot re-evaluates, every downstream analysis re-evaluates. No “export to motion-analysis tool, fix the geometry, re-import, lose your study” cycle.
For mechanism designers who have lived inside SolidWorks Motion or NX Mechanism Designer for a decade, this is not just a faster cam tool. It is a different kind of CAD platform — one where the geometric primitives and the kinematic analysis share a substrate instead of agreeing across a fragile import boundary.
We think that is worth a paper. We are writing it.
References
- Norton, R. L. Cam Design and Manufacturing Handbook, 2nd ed., Industrial Press (2009).
- Norton, R. L. Design of Machinery, 5th ed., McGraw-Hill (2011).
- General Kinematic Pair of a Cam Mechanism, IntechOpen (2019). https://www.intechopen.com/chapters/67535
- ISO 1328-1:2013 — Cylindrical gears — ISO system of flank tolerance classification (used here as derived-tooth-cam reference, not as the primary cam standard).
Status
NeuroCAD’s SDF kernel ships its primitive set (sphere, box, plane, cylinder, capsule, torus). The mechanisms layer ships the CamFollower joint kind plumbed end-to-end through the session API. Proposed for the Mechanisms workbench: the parametric disk-cam SDF primitive (cycloidal, modified-trapezoidal, polynomial lift laws), the analytic tangent-contact solver (closed-form s(θ) from cam SDF + follower geometry), the C² convergence test against the analytic cycloidal acceleration, and the loss-of-contact predictor. Anything not marked shipped is plan, not product. The architecture supports every line above; the implementation is in flight.