ai: команда SF <Гц> — частота синусоиды (защита от алиасинга f<=f_s/2); W S показывает частоту синуса
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
#
|
||||
# Протокол команд (ввод строкой в терминале, Enter = конец команды):
|
||||
# F <Гц> — установить частоту (1..200000)
|
||||
# SF <Гц> — частота синусоиды (1..f_s/2, защита от алиасинга)
|
||||
# W Q | W S — режим: Q — прямоугольник, S — синус
|
||||
# D <0..255> — скважность прямоугольника (128 = 50 %)
|
||||
# M <0..127> — амплитуда синуса (127 = максимум)
|
||||
@@ -168,6 +169,8 @@ def cmd_w(a):
|
||||
else:
|
||||
pwm_config(CARRIER_HZ) # выборки пишет dds_tick
|
||||
print("OK W", state["mode"])
|
||||
if state["mode"] == "S":
|
||||
print("# sine:", state["freq"], "Hz")
|
||||
|
||||
|
||||
def cmd_d(a):
|
||||
@@ -182,6 +185,13 @@ def cmd_m(a):
|
||||
print("OK M", state["amp"])
|
||||
|
||||
|
||||
def cmd_sf(a):
|
||||
"""Частота синусоиды (с защитой от алиасинга: f <= f_s/2)."""
|
||||
hz = min(fs_eff // 2, max(1, int(float(a))))
|
||||
state["freq"] = hz
|
||||
print("OK SF", hz)
|
||||
|
||||
|
||||
def cmd_sweep_parts(a):
|
||||
parts = a.split()
|
||||
if len(parts) != 4:
|
||||
@@ -221,6 +231,8 @@ def handle(line, phase):
|
||||
a = parts[1] if len(parts) > 1 else ""
|
||||
if cmd == "F":
|
||||
cmd_f(a)
|
||||
elif cmd == "SF":
|
||||
cmd_sf(a)
|
||||
elif cmd == "W":
|
||||
cmd_w(a)
|
||||
elif cmd == "D":
|
||||
|
||||
Reference in New Issue
Block a user