56 lines
2.3 KiB
Markdown
56 lines
2.3 KiB
Markdown
# 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.
|