初步目标

  1. 初级阶段目标:完成一个示波器。
  2. 基本功能:
    1. 实时采样 ADC (+DMA)
    2. 可调整参数:
      1. 采样率(速率,Msps)
      2. 采样深度(频率)
      3. 采样精度(分辨率)
    3. 可调整显示方式:
      1. 调整图像位置、拉伸、显示模式
      2. 调整颜色、帧率
    4. 定义触发方式
      1. 自动触发
      2. 正常触发方式:上下沿触发
      3. 自定义触发(自定义触发函数)
      4. 单次触发/单次运行
    5. 测量
      1. 鼠标点击、拖拽测量
      2. 峰峰值、有效值等
    6. Autoset
    7. 内置自测信号:方波、正弦波、三角波等
    8. FFT 分析(软件/硬件/GPU 实现)
  3. 特点
    1. 界面使用前端语言构建,通过网络传输数据,然后通过浏览器操作。
    2. 提供 Electron 版本,利于保存文件。
    3. 拥有设计好的程序接口,支持不同的接口格式。
      1. 输入:

        1. PCIE 的 AD 板卡
        2. USB 的逻辑分析仪
        3. USB 的 STM32 单片机(已有开源项目:

        GitHub - chiro2001/ScopeMCU: 虚拟示波器 MCU端

        1. 有 PCIE 的 FPGA 开发板
        2. 电脑声卡录音(?
        3. ESP 远程 ADC
      2. 输出

        1. PCIE 的 DA 板卡
        2. USB 的 STM32 单片机(可以基于ScopeMCU改改
        3. 有 PCIE 的 FPGA 开发板
        4. 电脑声卡播放声音(?
    4. 后端在服务器上运行,为前端提供服务。
    5. 可以添加用户登录密码等,提高安全性。
    6. 多人共享示波器:
      1. 多用户登录服务器,打开通道等于占用该通道资源,其他人无法访问。
      2. 示波器配置信息可以保存为用户数据,或者全局数据,加载/保存数据方便。
    7. 提供编程语言接口:
      1. 可以直接输入代码作函数发生器,Python、JavaScript、Lua等。
      2. 可以提供 Verilog、VHD、C++ 代码等作为捕获处理中断,如果是 FPGA 作输出可以编译为比特流然后部分下载到板卡中。(难度较大。
      3. 提供前端编程接口,可以数据处理保存钩子,支持自定义数据显示、自定义数据处理方法、自定义文件保存方式等。
      4. 提供前端 UI 接口,添加自定义 UI 等。
    8. 高级功能
      1. RDMA:远程内存直接访问,指的是数据从 AD 板卡 → GPU → 内存的技术,数据在传送到 GPU 之后传送给各个 CUDA 节点分别处理,从而提升处理速度。SPCM 的 AD/DA 板卡对此进行了支持。
      2. 实验室监控:如果实验室批量使用可以让一台教师主机监听所有人的操作和数据。
  4. 优点:
    1. 可定制程度高,在很多地方可以自定义处理方式。
    2. 成本可以很低,最低只需要一个 USB 逻辑分析仪。
    3. 开源,如果用的人多,可以有更多的开源贡献者。
    4. 性能可以很高,并且可以在此基础上开发更多的功能,制作频谱仪等。

可行性和理论支持

  1. 远程数据传输能不能满足实时要求?

    利用 TCP(WebSocket) 传输的话,有线内网延迟约 1~10ms,前端接收到程序立刻开始绘制图像,应该可以接受。

  2. 前端页面如何设计才能方便操作?

    1. 一般的示波器有多个旋钮和按钮,可以拟物化写成旋钮/滚动条,显示方式也尽量向示波器靠拢,这样能显著减少设计/学习成本,但是写起来有点麻烦:
      1. 示波器一种,频谱仪一种,那么就很难适配完全所有仪器
      2. 拟物化风格难写,容易写得难看
      3. 添加自定义 UI 之类的挺难搞
    2. 新设计一种贴近前端页面的布局和前端风格。设计成本有点高,但是对不同功能兼容性强,而且利于自定义。
    3. 设计一套对应多个键位的快捷键,方便调整

运行流程

服务器

  1. 启动 Web 监听
  2. 加载读取配置信息
  3. 硬件自检:检查支持的设备,USB设备/PCIE 设备/已经添加的网络设备……
  4. 等待请求到来
  5. 打开设备对应通道,打开对应 WebSocket 监听

客户端

  1. 检查服务器列表,或选择默认服务器
  2. 注册/登录
  3. 使用当前服务器有的设备,打开通道
  4. 使用……