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

2.3 KiB
Raw Blame History

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:

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)

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.