На подходе китайский генератор FY6900. Дешевое Г с широкими возможностями. Больше всего доставил софт — это лучше цирка.
Обзоров на него и младшие приборы данной серии (6600 и 6800) в сети достаточно.
Больше всего народу не нравится джитер, отсутствующий только на частотах, кратных 2.5 МГц (уточнить). Сам лично наблюдал, очень заметный.
При замере осциллографом через короткий 50-омный кабель с BNC, фронты — супер. По спецификации не более 7 нс, по факту не более 4.5 нс. Но как только меняешь BNC на крокодилы, волнение захлестывает экран, поднимается пена, но золотая рыбка так и не приплывает. Т.е. не стоит делать крутые фронты на невысоких частотах.
Нестабильность амплитуды огромна. При 5 В по генератору на осциллографе Vpp 5.14 В. Завалы амплитуды на высоких частотах приличны, синус 60 МГц — почти половина остается от 5 В, хотя заявлено, что для 20..60 МГц — до 5 В. Надо проверить с меньшей амплитудой.
За кривизной софта разбираюсь с протоколом. Девайc управляется через USB UART. Вот есть готовое на питоне, но очень бедно:
https://github.com/NikkiGirl/FY6xxxspecification 1.5:
http://www.eevblog.com/forum/testgear/feeltech-fy6600-60mhz-2-ch-vco-function-arbitrary-waveform-signal-generator/?action=dlattach;attach=393626specification 1.8:
https://supereyes.ru/img/instructions/FY6900_communication_protocol.pdfОни все разные! И реальность тоже!
Различается не только состав команд, но и параметры, причем хаотично. Часть команд принимает действительное число (напр., RMF и WMF), часть только целое (напр., RMH и WMH), при этом чтение значения может быть, действительным, а запись того же значения — целым (напр., RMA и WMA).
Некоторые параметры можно с прибора выставить до последнего знака, а с команды последний разряд недоступен (WPR) и наоборот, выставив с команды последний разряд, не можешь поменять его с прибора (UST и UEN для offset).
Некоторые параметры доступны только из команд, их нет на приборе (USA, USD, RSA).
Зачем для первого и второго канала не одинаковая нумерация форм сигналов? Второй канал не поддерживает всего лишь одну форму (Adj-Pulse), из-за этого нумерация не совпадает, а ведь не сложно же было сделать.
Плавает логика булевых значений: для записи это всегда 0 и 1, а на чтении вместо 1 может быть 255. Но хотя бы точно 0 и не 0.
А что с официальным софтом? Это жесть! Он падает на всем. Ввел 0 — упал, ввел после цифры "." — упал, ввел после цифры "," — не падает, но и число не парсит. В общем, шлак полный. Да еще и на VB6, судя по ошибкам.
Пипец разработчики с обоих концов...
Нашел недокументированные команды каналов L и T (соотв.: RML, WML, RMT, и т.д.) и нет в приборном интерфейсе им аналогов.
И пока не знаю команд для записи пользовательских форм, ради этого ресерч и замутил.
Надо брать в руки USB-снифер и потерзать официальную программу.
Еще прибор посылает коды действий на панели прибора, что-то типа сканкодов. Лучше бы посылал внесенные изменения.
Черновик исследования:
= Commands
Line terminator 0x0A.
Rxy — read from Y of X
Wxya — write A to Y of X
Uxxa — system command XX with optional argument A (write)
Rxxa — system command XX with optional argument A (read)
Sxxa — sweep command XX with optional argument A
= Commands for Rx and Wx
x:
* M — main (channel 1)
* F — subsidiary (channel 2)
* S — main pulse (RSS)
* P — trigger
* T — modulation
* C — counter
= Channels
y:
* N — status (0, 1)
* W — wave (0..99)
* F — frequency (Hz) (NNNNNNNN.NNNNNN)
* A — amplitude (V) (read NNNNNN, write NN.NNNNN)
* O — offset (V) (read NNNNN, write NN.NNN)
* P — phase (grad) (read NNNNNN, write NNN.NNN)
* D — duty cycle (%) (read NNNNN, write NN.NNN)
* S — pulse period (ns) (read NNNNNNNNNN, write NNNNNNNNNN, min 10)
* H — rise time (ns) (read NNNNN, wrire NNNNN)
* L — ??? (read 28, can write)
* T — ??? (read 1, no write)
* K — second frequency for FSK modulation (Hz) (NNNNNNNN.NNNNNN)
* M — frequency offset for FM modulation (Hz) (read NNNNNNNN.NNNNNN, write NNNNNNNNNNNNNN)
wave M F
SINE 0 0
Square 1 1
Rectangle 2 2
Trapezoid 3 3
CMOS 4 4
Adj-Pulse 5 -
DC 6 5
TRGL 7 6
Ramp 8 7
NegRamp 9 8
Stair TRGL 10 9
Stairstep 11 10
NegStair 12 11
PosExponen 13 12
NegExponen 14 13
P-Fall-Exp 15 14
N-Fall-Exp 16 15
PosLogarit 17 16
NegLogarit 18 17
P-Fall-Log 19 18
N-Fall-Log 20 19
P-Full-Wav 21 20
N-Full-Wav 22 20
P-Half-Wav 23 22
N-Half-Wav 24 23
Lorentz-Pu 25 24
Multitone 26 25
Random-Noi 27 26
ECG 28 27
Trapezoid 29 28
Sinc-Pulse 30 29
Impulse 31 30
AWGN 32 31
AM 33 32
FM 34 33
Chirp 35 34
Impulse 36 35
ARB1 37 36
...
ARB64 99 98
= Modulation
y:
* F — main modulation function (N)
* M — main modulation source (N)
* N — number of trigger pulses for mode BURS (NNNNNNN)
* O — manual trigger command
* R — AM rate (%) (NNN.N)
* P — PM offset (grad) (NNN.NN)
function:
* 0 — ASK
* 1 — FSK
* 2 — PSK
* 3 — BURS (trigger)
* 4 — AM
* 5 — FM
* 6 — PM
source:
* 0 — channel 2
* 1 — external AC (VCO IN for modes 4..6)
* 2 — manual (button OK or WPO command) (modes 0..3 only)
* 3 — external DC (modes 0..3 only)
= Counter
y:
* F — read frequency (Hz) (NNNNNNNN)
* C — read counting and continue (N...)
* C — set coupling mode DC/AC (0, 1)
* Z — reset counting (0)
* P — pause the measurement (0)
* T — read cycle width (ns) (N...)
* + — read positive width (ns) (N...)
* - — read negative width (ns) (N...)
* D — read cycle duty (0.1%) (NNN)
* G — read/set gate time 1/10/100 sec (0, 1, 2)
= Sweep
xx:
* OB — set object (N)
* ST — set start position
* EN — set end position
* TI — set time (NNN.NN)
* MO — set mode linear/log (0, 1)
* BE — on/off (0, 1)
* XY — set the control source time/VCO (0, 1)
* MD — set direction forth/back/forth to back (0, 1, 2)
object:
* 0 — frequency
* 1 — amplitude
* 2 — offset
* 3 — duty cycle
position:
* frequency — (Hz) (NNNNNNNN.N)
* amplitude — (V) (NN.NNN)
* offset — (V) (NN.NNN) = (12.000 — V)
* duty cycle — (%) (NN.NN)
= System
xx (xxx):
* MO — model
* ID — ID
* SN — save the parameters of current two channels (01..20)
* LN — load the parameters of current two channels (01..20)
* SA — add channel 2 to channel 1 sync mode (N)
* SD — delete channel 2 to channel 1 sync mode (N)
* RSA — read status of sync mode (N)
* BZn — set status (0, 1)
* RBZ — read status (0, 255)
* MS — uplink mode master/slave (0, 1)
* RMS — read uplick mode (0, 255)
* UL — uplick off/on (0, 1)
sync mode:
* 0 — waveform
* 1 — frequency
* 2 — amplitude
* 3 — offset
* 4 — duty cycle