Stick-Slip Friction Simulator Back
Friction Vibration Simulator

Stick-Slip Friction Simulator — Self-Excited Vibration

Visualize the self-excited stick-slip vibration of a mass pulled through a spring on a dry friction surface. The gap between static and kinetic friction drives a periodic stick-then-slip cycle whose amplitude, period, and frequency you can read off interactively.

Parameters
Spring stiffness k
N/m
Pulling velocity v
mm/s
Static friction coefficient μ_s
Kinetic friction coefficient μ_k

Mass m = 1.0 kg and gravity g = 9.81 m/s² are fixed. Simulation runs 0 to 10 s with dt = 1 ms. Stick-slip requires μ_s > μ_k, so μ_k is automatically clamped below μ_s.

Results
Break-away force F_s = μ_s·m·g
Jump amplitude Δx
Period T = t_stick + t_slip
Oscillation frequency f
Time response x(t) and F(t)

top: schematic (mass + spring + pull arrow) / middle: blue = mass position x(t), grey = pulling end v·t (staircase stick + abrupt slip) / bottom: orange = spring force F(t), red dashed = static break-away threshold F_s

Theory & Key Formulas

Stick-slip is a self-excited vibration of a dry-friction system in which the spring end is pulled at constant velocity, supplying energy continuously. The motion alternates periodically between stick and slip phases.

Spring force (difference between pulling-end v·t and mass position x) and slip-phase equation of motion:

$$F(t) = k\,(v\,t - x),\qquad m\,\ddot{x} = k\,(v\,t - x) - \mu_k\,m\,g\,\mathrm{sgn}(\dot{x})$$

Stick-to-slip transition and re-stick condition:

$$|F| > \mu_s\,m\,g \;\Rightarrow\; \text{slip},\qquad \dot{x} \to 0 \;\wedge\; |F| \le \mu_s\,m\,g \;\Rightarrow\; \text{stick}$$

Jump amplitude and stick duration (simplified):

$$\Delta x \approx \frac{2(\mu_s - \mu_k)\,m\,g}{k},\qquad t_\text{stick} = \frac{\mu_s\,m\,g}{k\,v}$$

Slip duration (half-cycle approximation) and oscillation frequency:

$$t_\text{slip} \approx \frac{\pi}{\omega_n},\qquad \omega_n = \sqrt{k/m},\qquad f = \frac{1}{t_\text{stick} + t_\text{slip}}$$

What is the Stick-Slip Friction Simulator

🙋
Sometimes a sticky drawer "squeals" or jerks as you pull it. Is that the same thing?
🎓
Exactly. Stick-slip vibration is a classic "self-excited" oscillation that happens when you pull an object slowly through a spring along a dry friction surface. The key is $\mu_s > \mu_k$ — it takes a large static force to break loose, but once it moves the friction drops to the kinetic level. So the spring builds up force until it just reaches $F_s = \mu_s m g$, the mass shoots forward, decelerates, sticks again, and the cycle repeats. In the middle chart above you can see the blue mass position $x(t)$ rising in staircase steps.
🙋
So if I increase the pulling velocity v, the squeal should die down?
🎓
Good question. Try raising v with the slider. The stick time $t_\text{stick} = \mu_s m g / (k v)$ shrinks and the period gets shorter. If v is large enough, the spring force stays above the kinetic friction force and the motion becomes a continuous slide — stick-slip simply disappears at this "critical velocity". In practice that's why running a low-speed servo axis a bit faster is often a reasonable workaround for chatter.
🙋
The red dashed line in the bottom chart is F_s, right? The mass starts moving exactly when F touches that line!
🎓
Right — that is the break-away condition. While the spring force $F = k(vt - x)$ stays below $F_s$ the mass is stuck and $x$ does not change, so $F$ rises linearly with time. The instant F touches F_s, slip starts and $m\ddot{x} = F - \mu_k m g \cdot \mathrm{sgn}(\dot{x})$ governs the motion. The mass accelerates, decelerates, hits zero velocity, and re-sticks — over and over.
🙋
So if μ_s and μ_k are equal, the jump amplitude Δx ≈ 2(μ_s − μ_k)mg/k is zero, isn't it?
🎓
Theoretically, yes. With $\mu_s = \mu_k$ the jump amplitude vanishes and stick-slip does not occur. That's exactly why one mitigation is "pick a lubricant that closes the gap between static and kinetic friction". Increasing the stiffness $k$ also shrinks the amplitude inversely. Push $k$ up to about 5000 N/m in the slider and you can see both Δx getting smaller and the period getting shorter.

Frequently Asked Questions

Instability arises when the friction-velocity curve has a negative slope (∂μ/∂ẋ < 0). The equivalent damping coefficient can be written k·(−∂μ_k/∂ẋ)·mg, and it produces linear instability once it exceeds the physical viscous damping c. The critical velocity v_c is where the negative-slope region ends and the friction curve becomes flat or positive-slope: typically tens of mm/s to a few m/s for metal-on-metal, and well below 1 mm/s for some rubbers and polymers. This simulator uses a velocity-independent Coulomb model, so it is always unstable in principle; estimating the real v_c requires a velocity-dependent model such as the Stribeck curve.
Physically this almost never happens (normally μ_s ≥ μ_k). If it did, the kinetic friction would actually rise after slipping starts, so the mass would stop immediately and the spring force would have to climb back to μ_s·m·g — a different mode. The simplified jump-amplitude formula Δx ≈ 2(μ_s − μ_k)mg/k goes negative and breaks down; in practice the system transitions into continuous slip. To prevent this, the μ_k slider in this simulator is automatically clamped to μ_s − 0.01 whenever it would exceed μ_s.
The natural period is $T = 2\pi/\omega_n$, which is about 0.2 s for k = 1000 N/m and m = 1 kg. Discretizing one period into roughly 200 steps gives the velocity-Verlet integrator enough accuracy. With dt = 1 ms, a stiff system with f_n up to 16 Hz (k = 10000 N/m) still has 60 steps per period. Making dt smaller would stabilize the integration but inflate the total step count over the 10 s simulation and slow the display. A larger dt would coarsen the velocity zero-crossing detection at the end of slip and add a lag in the re-stick transition, degrading the accuracy of Δx.
The simulator assumes velocity-independent Coulomb friction, which is sufficient for the qualitative understanding of period, amplitude, and stick fraction, but limited for quantitative prediction. Real friction includes (1) velocity dependence (Stribeck curve: μ high at low speed, minimum at intermediate, rising again at high speed), (2) contact-time dependence (μ_s grows with stick time — "aging"), and (3) temperature/humidity/wear changes over time. For accurate numerical prediction, Dieterich-Ruina law or LuGre model and other rate-and-state friction models are used. As design guidelines, the three axes — reduce μ_s − μ_k with lubrication, raise k, run above critical velocity — are the standard suppressors.

Real-World Applications

Precision feed axes of machine tools: On plain sliding ways, low-speed feed (typically a few mm/s or slower) develops stick-slip — the carriage alternates between sticking and lurching, severely degrading surface finish and positioning accuracy. Common countermeasures are replacing the way with a rolling guide or hydrostatic oil bearing, or using servo velocity feed-forward compensation. The concepts of jump amplitude Δx, stick duration t_stick, and critical velocity from this simulator feed directly into the design review.

Fault slip in earthquakes: At plate boundaries, slowly dragged faults accumulate stress in a stick phase and then slip rapidly the moment a threshold is crossed, generating an earthquake. Modeling the elastic stress field as a spring, the fault block as a mass, and plate motion as the pulling velocity v gives the well-known spring-block (Burridge-Knopoff) model. Its equation structure is exactly what this simulator integrates, and it provides a qualitative picture of fault behavior.

Violin bow and string: When a bow is drawn across a string, the rosin's friction characteristics make the string repeat a stick-pull-snap cycle several hundred times per second. This is the sustaining mechanism behind the bowed-string sound (Helmholtz motion). The pulling velocity is the bow speed, the spring is the string tension stiffness, the mass is the effective string mass, and the frequency f in this tool maps to the pitch. Professional players effectively tune μ_s and μ_k through bow speed and bow pressure to keep stick-slip stable.

Seal stick-slip and brake squeal: Rubber-seal and brake-pad stick-slip are well-known noise sources. Brake squeal is a 1 to 10 kHz stick-slip oscillation between the pad and rotor that radiates through the suspension. Countermeasures include choosing friction materials without a negative-slope characteristic (adding noise-damping additives), shifting natural frequencies, and inserting shims. Raise k in the simulator and observe how f shifts upward — exactly the same intuition used to push squeal frequencies out of the audible range.

Common Misconceptions and Cautions

The most common misconception is to think that "the larger the friction, the more likely stick-slip". In reality what matters is not the absolute friction but the gap μ_s − μ_k and the negative-slope velocity dependence. If μ_s = μ_k, no stick-slip happens regardless of how high the friction is; if μ is small but μ_s − μ_k is nonzero, stick-slip still appears. Compare μ_s = 0.5, μ_k = 0.45 (gap 0.05) with μ_s = 0.3, μ_k = 0.1 (gap 0.2) in the simulator and the latter shows a Δx about four times larger.

The next common error is to assume that "raising the pulling velocity always kills stick-slip". Going above the critical velocity does push the system into continuous slip, but real friction often has a Stribeck shape (minimum at intermediate speed, rising again at high speed), and a different kind of stick-slip — typically at a different frequency — can reappear on the high-speed side. Aircraft brake "judder" during landing is a classic example. This simulator does not include velocity dependence, so raising v simply shortens the period; treat that as an idealized case.

Finally, the simplified formula Δx = 2(μ_s − μ_k)mg/k does not depend on v, which is easy to misread as "amplitude is independent of pulling speed". This holds only in the low-speed limit v << ω_n·x_typical (the ratio of pulling speed to a typical vibration velocity). In the numerical output above, Δx ≈ 2(μ_s − μ_k)mg/k fits well at small v, but once v exceeds about 50 mm/s a v correction appears and the simplified value drifts. The simplified formula is fine for an initial design check; verify with numerical integration before finalizing.