Files
scanengine-3/left_off.md
T
Thomas Ales [M S E] a0e0151b5d pre uc480 integration
2026-05-22 09:38:39 -05:00

56 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Session summary — scan timeout & geometry fixes
## Bug fixed: oscilloscope timeout on first row
**File:** `hardware/tektronix_base.py` — `transfer_fastframe()` (~line 1414)
The scope was configured for N frames but only triggered on fewer (e.g. 57 of 58) because
the stage decelerates before the last laser pulse. `transfer_fastframe` looped using
`get_fastframe_count()` (the configured maximum), so the final `read_raw()` call blocked
waiting for data that never came and timed out.
**Fix:** replaced `get_fastframe_count()` with a live query:
```python
acquired = int(self.query("ACQuire:NUMFRAMESACQuired?"))
```
The loop now reads exactly as many frames as the scope actually captured.
---
## Scan geometry overhaul
**File:** `sc3_aui_app.py`
### Constants added (near line 71)
```python
LASER_FREQ_HZ = 2000.0 # fixed laser pulse frequency
SCAN_RAMP_MM = v² / (2a) # ≈ 3.33 mm (100² / 2×1500)
```
`SCAN_RAMP_MM` is the distance the stage needs to accelerate from rest to full scan
velocity, or decelerate back to rest.
### `_run_scan()` changes
- `points_per_row` now uses `LASER_FREQ_HZ` instead of the param-supplied `laser_freq`.
- Pre-scan X position is `x_start - SCAN_RAMP_MM` so the stage arrives at `x_start`
already at full velocity (TRIGOUT_MAXV fires at the right place).
- Scan move ends at `x_start + x_delta + SCAN_RAMP_MM` so the stage doesn't begin
decelerating until after the last data point.
### Travel-limit guards added (before any hardware interaction)
Raises `ValueError` with an actionable message if the extended move would exceed the
stage limits baked into the driver (`bbd20x.py`: X 0–110 mm, Y 0–75 mm):
- `x_start - SCAN_RAMP_MM < 0`
- `x_start + x_delta + SCAN_RAMP_MM > 110`
- any Y row position outside 0–75 mm
Error messages tell the user exactly how many mm to adjust.
---
## What to check / next steps
- Verify `ACQuire:NUMFRAMESACQuired?` is the correct query string for the specific scope
model in use (MDO/MSO series assumed; confirm against programmer manual).
- `LASER_FREQ_HZ = 2000.0` is a temporary constant — wire it to the UI param when ready.
- Confirm `SCAN_RAMP_MM` matches observed stage behaviour; if the BBD202 velocity profile
is not perfectly triangular the empirical ramp may differ slightly from v²/2a.