硬禾仪器用数据传输及控制协议
本逻辑用于将高速ADC采集到的数据进行缓存,并根据上位机的需要,从缓存的数据中选出用于显示的部分进行传输,传输的方式可以是:
- 串口UART
- BLE
- WiFi
- SPI
FPGA的作用负责解析控制器发来的控制字,并根据控制字的内容从缓存中选取需要的数据
- 由ADC获取的数据或送往DAC的数据:LVDS:250MHz/8bits/4Lanes, 并行:100MHz/14bits
- 需要显示的数据:20帧/秒 * 1KPoints/帧 * 10bit/points = 200kbps
- 存储深度:ADC - 8K * 10bits * 2(通道)= 20KBytes, DAC - 4K * 12bits * 2 = 12KByte,总计32KBytes
未来在FPGA里面可以扩展的数据处理功能:
- FFT
- 数字滤波
- 模式识别
- 机器学习
FPGA内部的框图如下:
数据采集FPGA逻辑功能
参考文档:
示波器部分的功能
主要分为两部分:
双口RAM
根据FPGA的内部Block RAM或外扩的RAM的实际情况设定双口RAM的大小,一般我们使用的Lattice XO2系列的FPGA内带的Block RAM为96kbits,如果采用双通道8位的高速ADC,则每个通道可以使用的RAM空间为48Kbits ~ 6KByte,考虑到高速ADC可以采用更高分辨率,比如12bit,96Kbits ~ 12bits * 2 * 4K,每个通道为4KB的存储深度。
并/串变换及控制逻辑
任意波形发生器部分
直流稳压电源部分
Waveformlive的仪器控制协议参考
- 下面的JSON数据已扩展以提高可读性。在传输之前,应将所有JSON缩小(删除空白).
- 除非另有说明,否则使用HTTP时,所有命令均使用POST方法发送.
- 所有Digilent Instrumentation协议命令必须是JSON对象或分块传输:
- JSON对象
- 必须以'{'字符开头,并以'}'字符结尾.
- 可能后跟一个或多个'\ r \ n'.
- 大块转移
- 由一个或多个块组成.
- 每个块必须以ASCII十六进制格式的块中的字节数开头,后跟一个'\ r \ n',二进制数据和一个'\ r \ n'.
- 块长度在块长度和数据之间不包含'\ r \ n'.
- 块长度不包含二进制数据后的尾随'\ r \ n'.
- 每个分块传输都以零长度的分块终止.
- Ex.
6\r\n chunk1\r\n 8\r\n somedata\r\n E\r\n in\r\n\r\nchunks.\r\n 0\r\n \r\n
多命令
可以使用多命令在单个事务中发送多个命令。
举例:
Command
{ "dc":{ "1":[ { "command":"setVoltage", "voltage":3300 }, { "command":"getVoltage" } ], "2":[ { "command":"setVoltage", "voltage":5000 } ] } }
Response
{ "dc":{ "1":[ { "command":"setVoltage", "statusCode":0, "wait":500 }, { "command":"getVoltage", "statusCode":0, "wait":100, "voltage":3300 } ], "2":[ { "command":"setVoltage", "statusCode":0, "wait":500 } ] } }
波形发生器部分
提供访问任意波形发生器的数据和功能的命令
获得当前状态
获得仪器通道的当前状态、
命令
- awg - (Object) - 任意波形发生器的目标.
- # - (Array<Object>) - An array of command objects to apply to the awg channel.
- command - (String) - 获取当前状态的命令: “getCurrentState”
响应
- awg - (Object) - 任意波形发生器的目标
- # - (Array<Object>) - An array of command objects applied to the awg channel.
- command - (String) - The Get Current State command: “getCurrentState”
- statusCode - (Integer) - A numeric value representing the device status.
* ** wait ** - (Integer) - The number of ms to wait before the device is ready to process another command. * ** state ** - (String) - The instrument channel state: "idle" or "running". * ** waveType ** - (String) - The waveform type: "sine", "square", "triangle", "dc", "sawtooth", "arbitrary", or "none". * ** actualSignalFreq ** - (Integer) - The actual waveform frequency in mHz. * ** actualVpp ** - (Integer) - The actual peak-to-peak voltage in mV. * ** actualVOffset ** - (Integer) - The actual voltage offset in mV.
例子
命令
{ "awg": { "1": [ { "command": "getCurrentState" } ] } }
响应
{ "awg": { "1": [ { "command": "getCurrentState", "statusCode": 0, "wait": 0, "state": "running", "waveType": "sine", "actualSignalFreq": 1000000, "actualVpp": 3000, "actualVOffset": 0 } ] } }
设置通用波形
设置AWG的通道参数以输出正常的波形
命令
- awg - (Object) - The arbitrary waveform generator object.
- # - (Array<Object>) - An array of command objects to apply to the awg channel.
- command - (String) - The Set Regular Waveform command: “setRegularWaveform”
- signalType - (String) - The waveform type: “sine”, “square”, “triangle”, “dc”, “sawtooth”, “arbitrary”, or “none”.
- signalFreq - (Integer) - The signal frequency in mHz.
- vpp - (Integer) - The peak-to-peak voltage in mV.
- vOffset - (Integer) - The voltage offset in mV.
响应
- awg - (Object) - The arbitrary waveform generator object.
- # - (Array<Object>) - An array of command objects applied to the awg channel.
- command - (String) - The Set Regular Waveform command: “setRegularWaveform”
- statusCode - (Integer) - A numeric value representing the device status. See reference/software/digilent-instrumentation-protocol/status-codes
- wait - (Integer) - The number of ms to wait before the device is ready to process another command.
* **actualSignalFreq** - (Integer) - The actual waveform frequency in mHz. * **actualVpp** - (Integer) - The actual peak-to-peak voltage in mV. * **actualVOffset** - (Integer) - The actual voltage offset in mV.
举例(波形)
Command
{ "awg":{ "1":[ { "command":"setRegularWaveform", "signalType":"sine", "signalFreq":1000000, "vpp":3000, "vOffset":0 } ] } }
Response
{ "awg":{ "1":[ { "command":"setRegularWaveform", "statusCode":0, "wait":0, "actualSignalFreq": 1000000, "actualVpp": 3000, "actualVOffset":0 } ] } }
运行
运行AWG通道
命令
- awg - (Object) - The arbitrary waveform generator object.
- # - (Array<Object>) - An array of command objects to apply to the awg channel.
- command - (String) - The Run command: “run”
响应
- awg - (Object) - The arbitrary waveform generator object.
- # - (Array<Object>) - An array of command objects applied to the awg channel.
- command - (String) - The Run command: “run”
- statusCode - (Integer) - A numeric value representing the device status. See reference/software/digilent-instrumentation-protocol/status-codes
- wait - (Integer) - The number of ms to wait before the device is ready to process another command.
举例:
Command
{ "awg":{ "1":[ { "command":"run" } ] } }
Response
{ "awg":{ "1":[ { "command":"run", "statusCode":0, "wait":0 } ] } }
停止
停止AWG通道
命令
- awg - (Object) - The arbitrary waveform generator object.
- # - (Array<Object>) - An array of command objects to apply to the awg channel.
- command - (String) - The Stop command: “stop”
响应
- awg - (Object) - The arbitrary waveform generator object.
- # - (Array<Object>) - An array of command objects applied to the awg channel.
- command - (String) - The Stop command: “stop”
- statusCode - (Integer) - A numeric value representing the device status. See reference/software/digilent-instrumentation-protocol/status-codes
- wait - (Integer) - The number of ms to wait before the device is ready to process another command.
举例:
Command
{ "awg":{ "1":[ { "command":"stop" } ] } }
Response
{ "awg":{ "1":[ { "command":"stop", "statusCode":0, "wait":0 } ] } }
直流电压
提供访问直流电压数据和函数的命令
获取当前状态
Get the current state of the instrument's channel
命令
- dc - (Object) - The DC power supply object.
- # - (Array<Object>) - An array of command objects to apply to the DC power supply channel.
- command - (String) - The Get Current State command: “getCurrentState”
响应
- gpio - (Object) - The DC power supply object.
- # - (Array<Object>) - An array of command objects applied to the DC power supply channel.
- command - (String) - The Get Current State command: “getCurrentState”
- statusCode - (Integer) - A numeric value representing the device status. See reference/software/digilent-instrumentation-protocol/status-codes
- wait - (Integer) - The number of ms to wait before the device is ready to process another command.
* **state** - (String) - The current state of the channel: "idle" or "running". * **voltage** - (Integer) - The current measured value of the channel in mV.
#### 举例
命令
{ "dc": { "1": [ { "command":"getCurrentState" } ] } }
响应
{ "dc": { "1": [ { "command": "getCurrentState", "statusCode": 0, "wait": 0, "state": "idle", "voltage": 3300 } ] } }
获取电压值
Get the output voltage(s) of the specified DC power supply channel(s).
命令
- dc - (Object) - The DC power supply object.
- # - (Array<Object>) - An array of command objects to apply to the DC power supply channel.
- command - (String) - The Get Voltage command: “getVoltage”
响应
- gpio - (Object) - The DC power supply object.
- # - (Array<Object>) - An array of command objects applied to the DC power supply channel.
- command - (String) - The Get Voltage command: “getVoltage”
- statusCode - (Integer) - A numeric value representing the device status. See reference/software/digilent-instrumentation-protocol/status-codes
- wait - (Integer) - The number of ms to wait before the device is ready to process another command.
* **voltage** - (Integer) - The current measured value of the channel in mV.
#### 举例
命令
{ "dc":{ "1":[ { "command":"getVoltage" } ] } }
Response
{ "dc":{ "1":[ { "command":"getVoltage", "statusCode":0, "wait":100, "voltage":3300 } ] } }
设置电压
Set the output voltage(s) of the specified DC power supply channel(s).
命令
- dc - (Object) - The DC power supply object.
- # - (Array<Object>) - An array of command objects to apply to the DC power supply channel.
- command - (String) - The Set Current State command: “setCurrentState”
- voltage - (Integer) - The desired voltage in mV.
响应
- gpio - (Object) - The DC power supply object.
- # - (Array<Object>) - An array of command objects applied to the DC power supply channel.
- command - (String) - The Set Current State command: “setCurrentState”
- statusCode - (Integer) - A numeric value representing the device status. See reference/software/digilent-instrumentation-protocol/status-codes
- wait - (Integer) - The number of ms to wait before the device is ready to process another command.
#### 举例:
Command
{ "dc":{ "1":[ { "command":"setVoltage", "voltage":3300 } ] } }
Response
{ "dc":{ "1":[ { "command":"setVoltage", "statusCode":0, "wait":500 } ] } }