When you feel the iPhone’s crisp Home Button click or a Pixel’s sharp keystroke tick, you’re feeling a mass on a spring being braked with millimeter precision in under 15 milliseconds. The industry lumps all of this under “vibration motor,” but the engineering spread between a $0.60 eccentric rotating mass (ERM) and a $7 custom linear resonant actuator (LRA) is as wide as LCD versus OLED.
This analysis disassembles the stack: voice-coil physics, suspension design, driver ICs, and the OS APIs that turn a sine burst into a convincing texture.
1. The Three Haptic Families
All phone haptics are mass-spring systems driven by Lorentz force. The taxonomy is simple, but the performance delta is brutal.
ERM: The Legacy Buzzer
An offset weight on a DC motor. Cheap, loud, slow. Rise time 40–60 ms, fall time 80–100 ms, no frequency control. You command voltage and wait for inertia to do the rest. Still found in sub-$200 devices because it costs cents and needs only a FET.
Z-Axis LRA: The Thin Click
A magnet suspended on a spring over a coil, vibrating perpendicular to the display. Compact (8–10 mm diameter), strong peak acceleration on the Z-axis (~0.8 Grms), but the stroke is <0.4mm and the moving mass is 0.5–1.0g. Efficient for notifications, terrible for rich waveforms — it resonates at 200–235 Hz and decays quickly.
X-Axis LRA: The Modern Standard
A rectangular sled with a tungsten mass sliding horizontally on leaf springs. Mass 1.8–3.2g, stroke 0.8–1.2mm, resonance 130–180 Hz. Because the vibration is in-plane, it couples efficiently to the phone’s chassis and your fingertip, feels louder at the same power, and can render both sharp transients and sustained textures. Apple’s Taptic Engine, Samsung’s and AAC Technologies’ X-axis units all belong here.
2. Taptic Engine
Apple’s Taptic Engine is not a component; it is a tuned system. Since iPhone 7 it has occupied a rectangular volume on the lower left, replacing the 3.5 mm jack’s space. The secret is not exotic materials but tolerances and control.
| Feature | 5G NR | Wi-Fi 7 | Bluetooth 5.4 |
|---|---|---|---|
| Peak Throughput | 20 Gbps | 46 Gbps | 2 Mbps |
| Latency | 1–4 ms | 1–2 ms | 3–6 ms |
| Range | Several km | 30–50 m | 100–400 m |
| Power Draw | High | Medium | Ultra-low |
| Primary Use | Cellular data | Local networking | Peripherals/IoT |
The moving mass is sintered tungsten — density 18.5 g/cm³ versus steel’s 7.8 — allowing ~2.5 g in a 30×12×4.5 mm envelope. Dual leaf springs (often custom stainless with progressive stiffness) suspend the mass with negligible friction. The coil is driven by a proprietary Apple haptic PMIC that implements three non-negotiable features: overdrive, back-EMF sensing, and active braking.
Overdrive slams the coil with 2–3× nominal voltage for the first 5–8 ms to overcome inertia; without it, rise time doubles. BEMF sensing reads the voltage generated by the moving magnet to estimate velocity and resonant frequency (F0), which drifts with temperature and aging. Active braking then injects an inverted waveform 180° out of phase to arrest the mass within 10 ms, preventing the muddy tail that plagues cheap motors. Result: a 10 ms rectangular acceleration envelope that your Meissner corpuscles perceive as a click, not a buzz.
Integration matters too. The Taptic Engine is bolted to the mid-frame and its impulse is routed through the enclosure. The haptic driver shares timing with the display and audio subsystems — crucial for synchronizing haptics with HDR capture tone mapping shutter feedback and system animations. This co-design is why iOS can offer UIImpactFeedbackGenerator with < 11 ms tap-to-feedback latency consistently, even under thermal throttling.
3. Android’s X-Axis Catch-Up
Between 2019 and 2024, Android flagships migrated en masse from Z-axis coins to X-axis sleds. Suppliers like AAC Technologies (models 0832, 0815) and Nidec standardized 0809–0832 footprints — 8×9 mm up to 8×32 mm. The largest, seen in devices like the ROG Phone and Xiaomi 13 Ultra, approaches Taptic Engine mass at 2.0–2.5 g and delivers 1.2 Grms at 155 Hz.
What changed was the driver. Early X-axis phones drove LRAs open-loop; they were strong but sloppy, ringing for 40 ms after the command. Modern designs use Awinic AW8697, AW8624X or Dialog DA7280 with real-time playback (RTP) and F0 tracking. These chips store or stream 8 kHz 8-bit waveforms, close the loop at 1 kHz, and support the integrated haptic drivers rumored for the Samsung Exynos 2500 GAAFET era where the haptic amplifier is integrated in the PMIC.
The remaining gap is not physics but calibration. Apple characterizes each engine at the factory and burns a trimming coefficient for F0 and Q factor. Most Android OEMs use a single waveform table per model, so unit-to-unit variance of ±5 Hz in resonance creates inconsistent sharpness. Leaders like Pixel and Galaxy S Ultra now implement per-unit auto-calibration on first boot, narrowing the gap to near parity.
Spec Snapshot: Modern X-Axis LRA (AAC 0832)
Dimensions: 8.0×32.0×3.2 mm • Mass: 2.1 g • F0: 152 Hz ±6 Hz • Rated voltage: 1.6 Vrms (2.2 Vp) • Max vibration: 1.35 Grms • Rise time: 18 ms (12 ms with overdrive) • Brake time: 14 ms • Lifetime: 1M cycles at rated voltage. Impedance 6.5Ω + 1.2 mH. For comparison, Apple Taptic Engine Gen 4 is estimated ~30×14×4.8 mm, 2.7 g, F0 165 Hz, 1.4 Grms.
4. Waveforms Are the Product
Hardware defines the envelope; software defines the feeling. Two OS APIs dominate:
iOS Core Haptics
Introduced in iOS 13, Core Haptics exposes CHHapticEngine and CHHapticPattern with continuous parameters: intensity (0–1) and sharpness (0–1). Sharpness maps to frequency shaping and attack time; designers blend transient (AHAP) events and continuous curves with 1 ms resolution. Crucially, Apple requires apps to declare haptics entitlements, a process adjacent to the App Store security review process that audits haptic abuse (e.g., endless buzzing).
// iOS 17 — Core Haptics crisp tap with braking tail let pattern = try CHHapticPattern(events: [ CHHapticEvent(eventType: .hapticTransient, parameters: [.hapticIntensity: 1.0, .hapticSharpness: 0.9], relativeTime: 0), CHHapticEvent(eventType: .hapticContinuous, parameters: [.hapticIntensity: 0.12, .hapticSharpness: 0.2], relativeTime: 0.018, duration: 0.04) // braking texture ], parameters: []) try engine.makePlayer(with: pattern).start(atTime: 0)
Android Vibrator / VibrationEffect
Android 12+ offers VibrationEffect.Composition with primitives: PRIMITIVE_CLICK, PRIMITIVE_TICK, PRIMITIVE_SPIN, plus createWaveform and vendor HeVibrator extensions. The HAL (android.hardware.vibrator) reports capabilities and resonantFrequency; apps can query support and fall back gracefully. However, fragmentation remains — a PRIMITIVE_CLICK on a Pixel 8 renders as 9 ms; on a Z-axis mid-ranger it stretches to 35 ms.
// Android 14 — Composition API with fallback Vibrator vibrator = getSystemService(Vibrator.class); if (vibrator.arePrimitivesSupported(PRIMITIVE_CLICK)) { vibrator.vibrate(VibrationEffect.startComposition() .addPrimitive(PRIMITIVE_CLICK, 1.0f, 10) // scale, delay ms .addPrimitive(PRIMITIVE_TICK, 0.6f, 35) .compose()); } else { vibrator.vibrate(VibrationEffect.createWaveform( new long[]{0, 12, 20}, new int[]{0, 255, 0}, -1)); }
For precise prototyping, use tooling like Apple’s Haptic Composer or Immersion’s Haptic Studio, export AHAP/IVT, then A/B on a high-speed accelerometer rig (ADXL356 at 4 kHz) — ear-testing alone lies.
5. Latency, Power, Acoustics — The Tradeoffs
Latency: Perception threshold for touch-haptic synchrony is ~20 ms. ERMs at 40 ms feel detached; Z LRAs at 25 ms feel late on fast typing; X LRAs at 10–16 ms feel instantaneous. iOS achieves this by reserving a high-priority audio/haptic thread and bypassing the Java layer. Android’s VibratorManager improved determinism in 13, but OEMs still add 8–12 ms binder IPC unless using NDK direct HAL access for games. For RF-critical haptics in connected mode, see our analysis of mobile network interception and IMSI timing where radio scheduling competes for the same real-time cores.
Power: LRAs are inductive loads; efficiency depends on class-D driver and waveform duty. A crisp tap: Ipk ~ 180 mA for 15 ms = 2.7 mJ. At 150 taps/hour = 0.11 mAh — negligible. Sustained gaming (50% duty, 1.2 Grms) draws 120–200 mW; 30 minutes costs 2–3% battery. Overdriving too aggressively heats the coil and demagnetizes NdFeB above 80 °C, so thermal foldback is mandatory.
Acoustics: X-axis motors are quieter than they feel because in-plane motion radiates less sound than Z-axis pistons slapping the display. But poor mounting creates audible buzz at F0 (a 155 Hz hum). Apple damps with foam gaskets and tunes anti-resonance notches; cheap implementations skip this and the “silent” haptic becomes a speaker.
| Attribute | Taptic Engine (Apple) | X-Axis LRA (Flagship Android) | Z-Axis LRA / ERM |
|---|---|---|---|
| Architecture | Rectangular X-sled, tungsten mass, dual leaf spring | Rectangular X-sled, steel mass, leaf spring | Coin Z-piston or ERM eccentric weight |
| Moving mass | 2.5–2.8 g | 1.6–2.5 g | 0.6–1.0 g / 1.2 g (ERM) |
| Resonance (F0) | 155–170 Hz tuned | 130–180 Hz | 205–235 Hz / 150 Hz |
| Stroke / Accel. | ~1.0 mm / 1.4 Grms | 0.7–1.1 mm / 0.9–1.35 Grms | 0.3 mm / 0.7 Grms / 0.9 Grms |
| Rise / Brake time | 10–12 ms / 10 ms closed-loop | 12–18 ms / 12–20 ms | 22–35 ms / 30–90 ms |
| Driver | Apple PMIC, BEMF + F0 tracking + braking | AW8697/DA7280, RTP + auto-F0 | FET / simple H-bridge, open-loop |
| API fidelity | Core Haptics AHAP, 1 ms curves | VibrationEffect primitives + waveform | One-shot / waveform only |
| Cost (est.) | $6–8 | $1.8–3.5 | $0.4–0.9 |
| Ideal use | System-wide rich haptics, Force Touch | Keyboard, gaming, nuanced feedback | Notifications, low-cost |
Choosing and Tuning
If you are building a device, qualify haptics on the chassis, not on the bench jig. Mount the actuator per the vendor’s keep-out and torque spec, then measure closed-loop acceleration with an accelerometer taped to the display center. Validate three waveforms: ultra-short tick (8 ms), double-click (two 10 ms pulses, 45 ms gap), and texture (80 ms ramp). If the double-click smears, your braking is insufficient.
If you are building an app, design fallback: query areAllPrimitivesSupported on Android and supportsHaptics on iOS, then degrade to a single transient rather than a WAV. And respect user settings — 18% of users disable system haptics; honor UIAccessibility.isReduceMotionEnabled patterns.
The gap has never been smaller. A well-tuned AAC 0832 with DA7280 can now match Taptic Engine single-tap crispness in blind tests — though Apple still leads in consistency and system-wide integration. The next frontier is not stronger buzz but localized multi-actuator arrays for directional haptics, as teased in foldables and AR controllers.
Frequently Asked Questions
What is the difference between Taptic Engine and a standard vibration motor?
Taptic Engine is Apple’s custom X-axis linear resonant actuator with a large tungsten mass, leaf-spring suspension and a closed-loop driver that senses back-EMF and actively brakes the mass. Standard ERMs or Z-axis LRAs are smaller, open-loop, slower to start/stop, and produce a buzzy ring rather than a sharp tap.
Are X-axis linear motors better than Z-axis?
For user experience, yes. X-axis sleds move horizontally with 2–3× the mass and stroke of Z-axis coins, resonating lower (130–180 Hz) for a stronger, crisper feel with less audible buzz. Z-axis remains useful where thickness is constrained to sub-3.5 mm or cost must stay under $1.
Why does haptic latency matter?
Humans detect touch-haptic asynchrony above ~20 ms. If keyboard haptics lag key rendering, typing feels mushy; if game haptics lag collisions, immersion breaks. Closed-loop X-axis systems hit 8–15 ms feedback loops, while open-loop ERMs are 30–50 ms and feel disconnected.
Do haptics drain battery significantly?
A single crisp tap uses about 2–4 mJ — roughly 0.03 mAh. Even heavy use (200 taps/hour) costs under 1% battery per hour. Only continuous, high-duty gaming haptics (~150 mW sustained) has visible battery impact, where driver efficiency matters more than motor size.