pre uc480 integration

This commit is contained in:
Thomas Ales [M S E]
2026-05-22 09:38:39 -05:00
parent 43e7b99512
commit a0e0151b5d
30 changed files with 12557 additions and 41 deletions
+55
View File
@@ -0,0 +1,55 @@
# 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.