sweep feature added

This commit is contained in:
Ayzen
2026-10-09 19:45:30 +03:00
parent 62e0430668
commit a1386e2588
8 changed files with 241 additions and 6 deletions
+28 -1
View File
@@ -49,6 +49,9 @@ from .constants import (
PROFILE_SAVE_SECTION_WAVEFORM_TEXT,
STM32_DAC_CODE_MAX,
STM32_DAC_CODE_MIN,
SWEEP_PAUSE_MAX_MS,
SWEEP_STEP_PERIOD_MAX_US,
SWEEP_STEP_PERIOD_MIN_US,
STATUS_RESPONSE_LENGTH,
WAIT_AFTER_SEND_SEC,
TEC_MODULATION_AMPLITUDE_CODE_MAX,
@@ -62,7 +65,14 @@ from .exceptions import (
DeviceStateError,
InvalidParameterError,
)
from .models import DeviceState, DeviceStatus, Measurements, ProfileSaveRequest
from .models import (
DeviceState,
DeviceStatus,
Measurements,
ProfileSaveRequest,
SweepSettings,
SweepTarget,
)
from .protocol import Protocol
from .transport import SerialTransport
from .validators import ParameterValidator
@@ -472,6 +482,23 @@ class LaserController:
amplitude_code,
)
def configure_sweep(self, settings: SweepSettings) -> None:
"""Start (or stop, if disabled) a firmware staircase sweep of laser 2 current or the STM32 DAC."""
if settings.enabled:
code_max = STM32_DAC_CODE_MAX if settings.target == SweepTarget.STM32_DAC else 0xFFFF
self._validate_int_range(settings.min_code, "min_code", 0, code_max)
self._validate_int_range(settings.max_code, "max_code", settings.min_code, code_max)
self._validate_int_range(settings.step_code, "step_code", 1, code_max)
self._validate_int_range(
settings.step_period_us,
"step_period_us",
SWEEP_STEP_PERIOD_MIN_US,
SWEEP_STEP_PERIOD_MAX_US,
)
self._validate_int_range(settings.pause_ms, "pause_ms", 0, SWEEP_PAUSE_MAX_MS)
self._send_and_expect_ok(Protocol.encode_sweep_control(settings))
logger.info("Sweep configured: %s", settings)
def save_profile_to_sd(self, request: ProfileSaveRequest) -> None:
"""Stream a rendered profile INI and optional waveform CSV to the device SD card."""
if not isinstance(request, ProfileSaveRequest):