ADAM LIN

SESSION · LOG

LOG

← LOG

· LOG ENTRY

Six runs, two damper maps: first data from Storm Stadium

About $300 of loggers, one autocross, and six runs alternating PASM Normal and Sport+. Three assumptions failed before I could compare the car.

Saturday night, I opened two logger files from my first instrumented autocross expecting to compare PASM modes. I didn't get there right away. First I had to sort out three bad assumptions: the IMU's sample rate, my grip prediction, and the clock linking the two loggers.

This is what I found in six runs. The raw session files, processed per-run tables, and code behind every number and figure are public in the vd-macan repository. One script rebuilds this post from the raw logs.

The setup

The comparison fits on one line: press the PASM button and my Macan switches between its Normal and Sport+ damper maps. The springs, anti-roll bars, and the rest of the hardware stay the same. The map is the intended variable.

I alternated it every run. Normal, Sport+, Normal, Sport+, Normal, Sport+. Six runs in the afternoon session at Storm Stadium (SCCA Cal Club, Lake Elsinore), powertrain locked in Sport+, PSM in Sport. The damper button was the only thing I touched all afternoon.

The small setup details matter here. I set cold pressures to the placard 37/40 with my reference gauge. TPMS showed 36/39 at the start, a consistent 1 psi low on both axles, so the offset cancels. By the end it read 40/42. Fuel moved from about 5/8 tank to 1/2.

Two loggers rode along: the RaceBox on the roof catching every run at 25 Hz, and the AHRS IMU on the center console writing 200 Hz to its own storage. That also meant two independent clocks. Each run gave me a sync signature anyway: a launch spike followed by roughly 56 seconds of car dynamics. I used that signal later to align the files.

Wrong #1: 200 Hz frames weren't 200 Hz samples

Sample rate sets the highest frequency a channel can resolve. You only get to see content below half the sample rate,

fvisible=12fsample.f_\mathrm{visible} = \tfrac{1}{2} f_\mathrm{sample}.

Secondary ride, the busy patter that makes a car feel firm, lives at roughly 4 to 25 Hz. The RaceBox samples at 25 Hz, so it tops out at 12.5 Hz. It literally cannot see the top half of the thing I care about most. That's why the project also has the IMU.

Before I used the IMU data, I characterized the logger. Its stored frame rate and distinct-value rates weren't the same:

frames written to storage:      200 per second  (exact, clean)
distinct accelerometer values:  ~104 per second
distinct gyro values:           ~50 per second

The sensor writes 200 frames a second, but its fusion loop produces about 104 new accelerometer values a second. Nearly half the frames repeat the previous value. That still clears my requirement because 104 Hz covers the 4 to 25 Hz band four times over. The product listing doesn't make that distinction. My ingest code drops the duplicates before it computes a spectrum.

Timing runs without timing equipment

The event has timing lights, but those numbers live on a results sheet, not in my logger file. The file gives me GPS instead.

Every run starts with hard acceleration from a stop and ends with a large braking event. I built virtual gates from the six trajectories: a start line where speed first crosses 5 m/s, and a finish line just before the terminal braking. The six launch points landed within 0.7 m of one another, tighter than I expected.

Then I calibrated the pair against the two official times I remembered. The fit barely moved the start line, but it pulled the finish 23 m before the braking point. At 22 m/s, the car crosses the lights flat-out and doesn't reach that obvious brake event for about another second. I show the calibrated GPS virtual-gate estimates to tenths; the fit residual against those two remembered times is about 0.11 s rms.

STARTFINISH50 M0 MPH56 MPH
FIG 01RUN 6 · GPS PATH, SPEED-COLORED · VIRTUAL GATESRACEBOX MINI S · 25 HZ

The runs

run PASM GPS virtual-gate estimate [s] vmax [mph] peak lat [g]
1 Normal 53.1 53.3 1.05
2 Sport+ 52.0 57.1 1.09
3 Normal 52.1 55.1 1.06
4 Sport+ 52.3 55.3 1.04
5 Normal 51.9 53.5 1.06
6 Sport+ 51.2 55.6 1.14

Sport+ holds the day's best GPS estimate, and the mode averages sit about half a second apart. Run 4 was the slow one. That was my driving mistake, not a damper result.

These are GPS virtual-gate estimates, shown to tenths because the calibration residual is about a tenth. They are also three unmatched competition runs per mode. Driver inputs and lines weren't matched, so neither the time gap nor the response differences can be attributed to PASM.

From the seat, the modes felt like different cars even though their estimated times were separated by tenths on a 52-second course. That gap between the subjective impression and the logged result is what I want to measure, but this session can't assign its cause.

51.052.053.0Run 1 · Normal · 53.1 s53.1RUN 1NORMALRun 2 · Sport+ · 52.0 s52.0RUN 2SPORT+Run 3 · Normal · 52.1 s52.1RUN 3NORMALRun 4 · Sport+ · 52.3 s52.3RUN 4SPORT+Run 5 · Normal · 51.9 s51.9RUN 5NORMALRun 6 · Sport+ · 51.2 s51.2RUN 6SPORT+RUN TIME · SNORMALSPORT+
FIG 02GPS VIRTUAL-GATE ESTIMATES · THREE UNMATCHED RUNS PER MODESHOWN TO 0.1 S · CALIBRATION RMS 0.11 S · STORM STADIUM · 2026-08-15
02040600 M200 M400 M600 M800 MSPEED · MPHRUN 5 · NORMALRUN 6 · SPORT+
FIG 03SPEED VS COURSE DISTANCE · BEST RUN PER MODERACEBOX MINI S · 25 HZ

Wrong #2: the grip prediction failed

Before any data existed, I put a number on the record: a 2.2-ton-class SUV on touring all-seasons should top out around 0.75–0.85 g.

The primary measurement is the raw roof-mounted RaceBox channel across all six runs: 95th percentile 0.97 g, peak 1.14 g. I missed by a wide margin, so the registered prediction stays in the report.

Two caveats stay attached. The raw roof-mounted values remain the primary grip result. Body roll tilts the RaceBox and leaks a slice of gravity into the lateral channel, so below I apply one roll-gradient correction as an exploratory sensitivity check, not a replacement measurement. And an autocross rewards brief peaks, not skidpad steady-state.

REGISTERED PREDICTION · 0.75–0.85 G0.5 G1.0 GLAT G →ACCEL ↑BRAKE ↓NORMAL RUNS 1·3·5SPORT+ RUNS 2·4·6
FIG 04G-G DIAGRAM BY PASM MODE · ALL SIX RUNSROOF-MOUNTED · UNCORRECTED FOR BODY ROLL

Wrong #3: the IMU clock drifted by two percent

My first pass at the IMU file said the sensor sat perfectly still through every run window. Flat. Nothing. I first suspected it had spent the session in the paddock while I drove.

It hadn't. The file contained six unmistakable 56-second bursts of car dynamics, spaced exactly like the run schedule. They just weren't where the timestamps said they'd be.

The failure was clock drift. File time relates to true time through an offset,

tGPS=tIMU+OFF(t),OFF(t)=a+b t,t_\mathrm{GPS} = t_\mathrm{IMU} + \mathrm{OFF}(t), \qquad \mathrm{OFF}(t) = a + b,t,

and the fitted drift came out around b≈20b \approx 20 ms per second. That's the two percent. The offset was 131 s at run 1 and 182 s by run 6. Fifty-one seconds of drift in one afternoon. The IMU frames are spaced a regular 5.000 ms apart relative to one another, but the clock runs slow and every power cycle resets the starting error. My analysis windows were cutting through empty paddock time while the actual runs sat two minutes away in file time.

The correction needed no new hardware. I cross-correlated the acceleration envelope against the RaceBox and fit the OFF(t)\mathrm{OFF}(t) line per file. Per-run correlation came out 0.84 to 0.90 with residuals inside ±130 ms. After alignment, IMU lateral tracks GPS lateral at r=0.90r = 0.90, longitudinal tracks longitudinal, and yaw tracks yaw.

The per-session checklist now has two clock checks: measure each logger against GPS, and look for the sync signal already present in the driving data.

What did the seat measure? Rate isn't angle

What I remembered from the seat, written down the day after (the per-run blind sheets fell to the event-day rush, so this is memory and I'm labeling it as memory): Normal had way more body roll, pitch, and yaw. Sport+ felt planted and reactive.

The first relevant channel is the roll-rate gyro.

0246Run 1 · Normal · 4.32 deg/s RMS4.32RUN 1NORMALRun 2 · Sport+ · 4.81 deg/s RMS4.81RUN 2SPORT+Run 3 · Normal · 4.28 deg/s RMS4.28RUN 3NORMALRun 4 · Sport+ · 4.59 deg/s RMS4.59RUN 4SPORT+Run 5 · Normal · 4.55 deg/s RMS4.55RUN 5NORMALRun 6 · Sport+ · 4.95 deg/s RMS4.95RUN 6SPORT+ROLL-RATE RMS · °/SNORMALSPORT+
FIG 05ROLL-RATE RMS PER RUN · CONSOLE-MOUNTED IMUWT901SDCL-BT50 · CLOCK SYNCED TO GPS

At first glance, the gyro disagrees. Roll-rate RMS is higher in Sport+, not lower: 4.79 °/s against 4.38 °/s, about 9% more. Normalize by how hard the car was being driven, RMS(p) / RMS(a˙y)\mathrm{RMS}(p),/,\mathrm{RMS}(\dot a_y), and the values are almost equal: 3.24 against 3.28.

I had been using roll rate and roll angle as if they were the same thing. The basic roll equation separates them:

Kφ φ+Cφ φ˙=m hs ayK_\varphi,\varphi + C_\varphi,\dot\varphi = m,h_s,a_y

where φ\varphi is the roll angle, KφK_\varphi is the roll stiffness (springs and anti-roll bars, stock, fixed), CφC_\varphi is the roll damping (the dampers, the one thing PASM touches), and m hs aym,h_s,a_y is the overturning moment from cornering. In a steady corner, φ˙=0\dot\varphi = 0, so

φss=m hsKφ ay\varphi_\mathrm{ss} = \frac{m,h_s}{K_\varphi},a_y

and CφC_\varphi drops out. The damper term multiplies roll rate, so it doesn't set the final angle once the car settles into a corner. With the same springs and anti-roll bars, PASM changes the transition, not the steady-state lean in this model.

The phrase "body roll" had been doing too much work. I meant roll angle, which is spring territory, and roll rate, which is damper territory. "Planted and reactive" describes rate. A tighter response can produce more roll rate, not less, so the gyro fit the remembered seat impression. I had asked it the wrong question.

One real confound stays attached: I drove the Sport+ runs harder. Separating "the car responds faster" from "the driver asked for more" would need a future matched-input study after a suitable venue exists.

Five derived analyses

Once the clocks lined up, I tried five derived analyses. One produced a usable number. Four didn't.

The useful one starts with two channels that disagree for a known reason. An accelerometer bolted to the body reads cornering force plus a slice of gravity leaking through the roll angle. GPS speed times gyro yaw rate reads cornering force alone, with no gravity term:

ameas≈ay+gsin⁡φ≈ay+g φ,akin=v ψ˙.a_\mathrm{meas} \approx a_y + g\sin\varphi \approx a_y + g,\varphi, \qquad a_\mathrm{kin} = v,\dot\psi.

The gap between those channels estimates roll angle:

φ≈ameas−aking.\varphi \approx \frac{a_\mathrm{meas} - a_\mathrm{kin}}{g}.

The roll gradient is then just the slope G=dφ/dayG = d\varphi/da_y in degrees per g. Both channels come from the same device, so the clock drift between devices can't affect this analysis. I sampled where cornering is quasi-steady and regressed each run:

-1.0 G-0.5 G+0.5 G+1.0 G-4°-2°+2°+4°+2.9°/G NORMAL+2.1°/G SPORT+ROLL ANGLE FROM ACCEL/KINEMATIC SPLIT · °NORMALSPORT+
FIG 06ROLL ANGLE VS LATERAL G · QUASI-STEADY SAMPLESRACEBOX ACCEL MINUS V×YAW · SELF-CONSISTENT

The fitted gradients were Normal: 2.93 °/g (per-run 2.65 to 3.12) and Sport+: 2.10 °/g (1.94 to 2.26). The ranges don't touch; every Normal run produced a higher estimated gradient than every Sport+ run.

That ~0.8 °/g split is not a PASM attribution. A true steady-state gradient shouldn't split with the same springs, but an autocross never gives me truly steady samples. Even the calmest windows carry some leftover φ˙\dot\varphi, which lets damping enter a measurement meant to exclude it. Damping is one plausible contribution; unmatched driver inputs are another, and this dataset can't separate them.

Two checks help bound the interpretation. Loosen the steadiness filter and the split shrinks toward overlap. The binned means also bow steeper at high g, which says the relationship is progressive and one slope is only a summary. A genuinely steady number would need a future constant-radius study, only after a suitable venue exists.

The gradient also shows the possible scale of the roof-mount confound. With G≈2.5G \approx 2.5 °/g, or Grad≈0.044G_\mathrm{rad} \approx 0.044,

aroll adjusted≈ameas1+Grada_\mathrm{roll\ adjusted} \approx \frac{a_\mathrm{meas}}{1 + G_\mathrm{rad}}

the exploratory correction is about 4%: 0.97 g becomes 0.93 g sustained, and 1.14 g becomes 1.09 g peak. The raw roof-mounted values remain primary because the roll gradient is itself quasi-steady and approximate. The prediction is still wrong after the sensitivity check.

The other four analyses didn't produce usable results:

  • Roll transfer function per mode. Coherence between lateral input and roll rate never reached 0.6 at any frequency. On a course, the road excites roll as much as the driver does, and the estimator doesn't have enough usable input.
  • Launch and brake pitch transients. Driver variance swamps the mode signal, and the roof lever-arm contaminates the accelerometer during pitch transients.
  • Dive and squat gradients. Autocross braking is a two-second ramp, never quasi-steady. Correlations near zero.
  • Repeated-bump ringdowns. Storm Stadium's lot is smooth. Three vertical events all session, none recurring.

All four need the same thing: controlled inputs, not another pass at the same session.

What this session changed

  • Characterize the instrument before the experiment.
  • Write predictions down before the data exists.
  • Record what each sensor is bolted to.
  • Measure each logger's clock against a reference.
  • When an analysis needs cleaner inputs, collect controlled inputs.

Future studies, only after a suitable venue exists

The current campaign was one autocross day. It is complete. No tire experiment, controlled-input ride measurement, step-steer set, or constant-radius set ran. None is scheduled.

If a suitable closed venue becomes available, future studies could add blind per-run ratings, fixed-speed step-steers, constant-radius or spiral ramps, and repeated passes over one bump. Only measured controlled-input data could support a quarter-car fit or semi-active study. Until then, those remain proposals, not results.

← Back to the log