Compare commits

...
2 Commits
+35
View File
@@ -37,6 +37,41 @@ enforces the limits. Two ways to reach it:
**Relay commands** (`:9999`, for setup/calibration from the host — `nc`/socket): **Relay commands** (`:9999`, for setup/calibration from the host — `nc`/socket):
- `step <count> <dir>` · `zero` · `pos` · `setmax <n>` - `step <count> <dir>` · `zero` · `pos` · `setmax <n>`
- `osc <amp_steps> <freq_cHz> <cycles>` — open-loop sinusoidal excitation (shaker mode)
- `oscm <amp> <freq_cHz> <cycles>` — oscillate while measuring the ADXL355 (per-axis p-p mg)
- `accel` — one ADXL355 sample (mg); `dvf <gain> <secs>` — closed-loop damping (below)
### Direct Velocity Feedback (`dvf`) — active damping
Closes the loop: ADXL355 X-accel @ ~250 Hz → leaky-integrated velocity → stepper
commands `-g·v` (velocity feedback adds damping, c → c+g). Envelope-clamped and
slew-limited. **Runs must be ≤ 8 s** — the RouterBridge RPC times out at 10 s.
Bench-measured gain range:
| gain | behaviour |
|---|---|
| 500 | gentle |
| **1000–2000** | **authoritative and stable — recommended** |
| 4000 | **UNSTABLE** — self-excites off its own step-vibration (velPk 30→1442, 26k steps); the soft-limit envelope catches the runaway |
Actuator FRF note: open-loop amplitude rolls off with frequency — full ~10 mm
holds to ~2–3 Hz, only a few mm by 10 Hz.
**Shaker-table campaign findings (2 Hz base excitation):**
- The control law is **position-target DVF**: carriage position target =
`center − K·v` (reaction force ∝ −v = true damping). A velocity-command law
(carriage velocity ∝ v) is force ∝ −a = *added mass* — no dissipation; it
amplified the response at every gain/sign. Don't regress to it.
- **Safe reference setting: `dvf 30 8`** with the slew limit at 8 steps/tick
(~2000 steps/s). Ran 2 min continuous, silent, self-centering, no runaway.
Slew 25 grinds the motor (lost steps → position corrupted).
- **Sensor placement is the binding constraint:** a deck-mounted sensor near
the rail reads the carriage's own motion (~856 mg open-loop) louder than the
structure sway (~435 mg), so closed-loop damping can't be scored (or cleanly
fed back). Mount the feedback sensor at the structure's max-sway point (tower
top), ideally a second ADXL355 on mux channel 1.
- `listen <secs>` (≤8 s) = passive baseline/ring-down instrument. Old numbers:
tap tests gave stable-looking g up to ~2000, but that predates the shaker
campaign — trust the shaker findings.
Every move is **clamped to `[0, stepMax]`** and the reply reports position, e.g. `pos=1234 Every move is **clamped to `[0, stepMax]`** and the reply reports position, e.g. `pos=1234
max=9635`, ending in `LIMIT` if it hit the soft limit. max=9635`, ending in `LIMIT` if it hit the soft limit.