Skip to the content
4 layers125 × 90 mmAnalog board, the printed circuit board in 3D

ArbWave30 – 30MHz 任意波形发生器 | FPGA + 高速DAC | SCPI 可控

Size
125 × 90 mm
Copper layers
4
Thickness
1.58 mm
Parts
295
Nets
286
Pads
1,015
Tracks, vias
2,344, 428
Pours
43
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
4 Apr 2026
Updated
20 Oct 2026

Overview

Analog board is an open-source printed circuit board by EERNINUO, from the EERNINUO/ArbWave30 repository on GitHub, published under the GPL-3.0 licence. It is a 4-layer board of 125 × 90 mm with 295 parts on 286 nets, routed with 2,344 tracks and 428 vias.

It is built around the OPA695ID, AD9747BCPZ and AMS1117, with the L7805 and MMBT3906 among its other parts. Its parts include 147 capacitors, 69 resistors, 13 inductors, 8 ICs and 7 connectors. It belongs with the FPGA and CPLD boards of this library.

Main components

5

README

README.md

ArbWave30

30MHz 任意波形发生器 | FPGA + 高速DAC | SCPI 可控

仓库状态 GitHub 仓库星标 GitHub 仓库分支
许可证 许可证 许可证


⚠️ 注意:你当前查看的是 develop 开发分支,内容可能不稳定。 推荐使用稳定发布版本:查看 Releases

⚠️ 更新状态

作者正在参与《0854 不相信眼泪》,本项目暂停更新,承诺 2026.12.25 恢复更新并发布第一个 Release。(你问我为什么不是 20 号就更新?好不容易解放了我不得爽玩几天)

✨ 特性

硬件指标(V1.0)

  • 波形:正弦、方波、三角波、噪声波、直流
  • 正弦波最高 30MHz,方波最高 5MHz
  • 电压范围(高阻):20Vpp(DC~10MHz),14Vpp(10~20MHz),10Vpp(20~30MHz)
  • 幅值分辨率:2mV(典型),偏移范围 ±10V
  • 总谐波失真(THD):< -50dBc @10MHz 满幅(目标值)
  • 相位噪声:-100dBc/Hz @10kHz offset(30MHz 载波)(目标值,受限于测试条件,目前无法标定)
  • 输出阻抗:50Ω
  • 参考时钟:内部 TCXO(±1ppm)或外部 10MHz 输入

硬件指标(MVP)

  • 波形:正弦、方波、三角波、噪声波、直流
  • 正弦波最高 30MHz,方波最高 5MHz
  • 电压范围(高阻):4Vpp(DC~10MHz),2.8Vpp(10~20MHz),2Vpp(20~30MHz)
  • 幅值分辨率:2mV(典型),偏移范围 ±2V
  • 总谐波失真(THD):< -50dBc @10MHz 满幅(目标值)
  • 相位噪声:-80dBc/Hz @10kHz offset(30MHz 载波)(目标值,受限于测试条件,目前无法标定)
  • 输出阻抗:50Ω
  • 参考时钟:内部 TCXO(±1ppm)

控制与接口

  • USB 2.0(USB CDC 类),支持 SCPI-1999 命令集
  • SMA 输出,SMA 触发 I/O,SMA 外部时钟输入
  • 电源输入:24V DC,功耗 <24W

软件与扩展路线

  • V1.0:单通道 + 基础波形 + 核心 SCPI
  • V2.0:双通道 + 调制 + 扫频
  • V3.0:Linux GUI + 任意波(16kpts)

🚦 项目状态

当前阶段:MVP 硬件、MCU/FPGA 核心程序验证完成,已能通过 SCPI 控制输出,正在进行模拟前端进一步调优

✅ 已完成

  • PCB 设计与打样(4层板,信号完整性设计)
  • 模拟前端调试通过
  • DAC 上电参数配置正常(SPI 接口通信稳定)
  • 正弦 DDS 核(IP 核实现,48位相位累加器)
  • 方波/直流/三角波/噪声波生成
  • 幅度控制模块
  • 相位控制模块
  • SPI Slave 通信接口与寄存器组
  • 模拟板驱动库(MCU 端)
  • SCPI 协议栈移植
  • 7阶椭圆滤波器焊接调试
  • 输出性能粗略标定(THD、SFDR)
  • 软件幅度校准

🏗️ 开发中

  • 谐波性能优化

📋 待办(MVP 之后)

  • 滤波器性能优化(重构滤波器,调整群延时,减少快速边沿的过冲/振铃)
  • 分板思路调整(电源板、模拟板、控制板)
  • 模拟板完整版设计(加入 硬件幅度控制、直流偏置、外部触发、外部时钟输入)
  • 输出性能精确标定(需要专业频谱仪,目前无法进行)
  • 上位机控制软件

📸 当前进展

正弦波输出(SDS824X HD 示波器实测):

正弦波满幅输出波形: 10MHz正弦波满幅输出波形 30MHz正弦波满幅输出波形

方波满幅输出波形: 5MHz方波满幅输出波形

当前版本方波有约 13.5% 的过冲,为滤波器群延时特性所致,后续将通过优化通道设计解决,详见重构滤波器调试笔记。

10MHz正弦波FFT结果:

10MHz正弦波FFT结果

经上图数据可计算出1: THD ≈ -60.2 dBc @10MHz, SFDR2 ≈ 63.26 dBc @10MHz


⚠️ 已知问题

  • 当前版本方波有约 13.5% 的过冲,为滤波器群延时特性所致,后续将通过优化滤波器设计解决。
  • 当前版本在运行一段时间后,在输出 25 MHz 以上正弦波时,有概率出现固定大小/方向的偏置抖动,怀疑是 FPGA 发热导致时序漂移,后续将通过优化 FPGA 时序约束和增加散热解决。
  • 当前分板设计会导致成品过长过细(约 225mm x 90mm),后续将调整分板方案,分为电源板、模拟板、控制板。

🧱 仓库结构

text
ArbWave30/  
├── docs/ # 设计文档  
│    ├── pic/ # 文档图片  
│    ├── adr/ # 决策记录  
│    ├── 硬件设计文档/ # 硬件设计文档  
│    ├── 设计笔记/ # 设计笔记
│    ├── 用户手册/ # 用户手册  
│    └──  LICENSE # CC BY-SA 4.0  
├── hardware/ # 原理图、PCB源文件   
│    ├── analog_board/ # 模拟板 PCB设计  
│    ├── control_board/ # 控制板 PCB设计  
│    └── LICENSE # CERN-OHL-S-2.0   
├── firmware/ 
│    ├── fpga/ # FPGA 设计源代码(Verilog)  
│    │    ├── Application/ # 项目代码   
│    │    └── FPGA_Test_Hardware/ # FPGA 硬件测试代码   
│    │         ├── FPGA_Clodck_Test/ # 时钟测试代码   
│    │         └── FPGA_Hardware_Test/ # FPGA 硬件测试代码   
│    ├── mcu/ # MCU 固件源代码(C/C++)   
│    │    ├── Application/ # 项目代码   
│    │    ├── MCU_Test_Hardware/ # MCU 硬件测试代码   
│    │    │    └── min_system_test/ # MCU 最小系统测试代码   
│    │    └── SCPI_Test/ # SCPI-parser 移植测试工程   
│    └── Clock_Generator_Config/ # 时钟发生器配置     

🚀 快速开始

项目处于 最小可行产品(MVP)验证阶段,未来会出现破坏兼容性的变更,正在进行 MVP 版本软硬件联调,待 MVP 验证完成后,将提供:

  • 打样 PCB 的 Gerber 文件及 BOM
  • FPGA 比特流烧录方法(通过 JTAG 加载)
  • 固件编译与升级步骤

当前你可以浏览 docs/ 中的设计文档,了解详细的技术规格和设计思路; 或查看 hardware/ 中的原理图和 PCB 设计文件与 firmware/ 中的代码框架,了解硬件与软件的构成,并提出您的宝贵意见。


📡 SCPI 命令示例

python
import pyvisa

# 1. 指定纯 Python 后端(无需安装 NI-VISA 驱动)
rm = pyvisa.ResourceManager('@py')

# 2. 列出所有资源,找到你的 COM 口(通常是 'ASRL3::INSTR' 类似格式)
# print(rm.list_resources())

# 3. 打开串口资源,并配置终止符
inst = rm.open_resource('ASRL3::INSTR')  # 请替换为实际的 ASRL 端口号
inst.baud_rate = 115200        # 串口波特率,对于 USB CDC 类设备并不重要
inst.read_termination = '\n'   # 非常重要:库默认是 '\n',但最好显式声明
inst.write_termination = '\n'  # 发送时自动追加换行符

# 4. 现在你可以像用 USBTMC 仪器一样使用 query
print(inst.query('*IDN?'))
inst.write('SOUR:FREQ 1000')
inst.write('SOUR:STAT ON')

# 5. 查询
freq = inst.query('SOUR:FREQ?')
print(f"Freq: {freq}")

inst.close()

完整命令集参见 docs/SCPI_reference.md。

🧪 自动化测试

测试脚本位于 scripts/(持续更新中),使用 PyVISA 与设备通信。你可以运行对应的脚本进行自动化测试,或者根据你的需求,参考这些脚本自行编写测试用例。

📄 文档

设计文档、测试报告和用户手册位于 docs/,持续更新中。

📅 版本路线图

阶段功能描述
V1.0单通道,基础波形(正弦、方波、三角、噪声、DC)支持频率、幅值、偏置、相位连续可调;支持SCPI命令(少量核心指令)
V2.0双通道增加第二路输出,支持频率/相位同步,相位差可调
AM调制内/外部调制源,调制深度0~100%
V3.0嵌入式GUI基于Linux + LVGL,通过LCD触摸屏直接控制
任意波支持用户自定义波形表,存储深度≥16kpts

📜 许可证

Copyright © 2026 EERNINUO

本项目采用多许可证策略,不同部分适用不同许可证:

组成部分许可证
固件 (MCU/FPGA 代码)GNU General Public License v3.0
硬件设计文件 (原理图、PCB、BOM)CERN Open Hardware Licence Version 2 - Strongly Reciprocal
文档、图片、READMECreative Commons Attribution-ShareAlike 4.0 International

这意味着:

  • 你可以自由使用、修改、分享固件代码,但任何衍生代码也必须以 GPL-3.0 开源。
  • 你可以基于硬件设计文件制作、分发物理设备,但必须同时开源你对设计文件的修改,并保留署名。
  • 你可以复制和修改文档,但必须同样以 CC BY-SA 4.0 分享,并注明原作者。

商标声明:ArbWave30 名称及标志未经授权不得用于商业产品。

🤖 AI 辅助声明

本项目文档框架由 GitHub Copilot / DeepSeek 辅助生成。 作者已逐一审查并测试,但如有任何问题欢迎提交 Issue。

⚠️ 免责声明

注意:本项目为个人学习与开源作品,不保证商业级可靠性。使用前请仔细阅读免责声明。

📫 联系方式

项目主页: https://github.com/EERNINUO/ArbWave30

⭐ Star History

如果您觉得这个项目有帮助,请给一个 Star ⭐,谢谢!

Footnotes

  1. 由于示波器自身产生的谐波不可忽略,该值仅供参考,实际值需频谱分析仪复测。 ↩

  2. SFDR 分为两种定义:1、含谐波;2、不含谐波。由于表中没有非谐波分量,故采用第一种定义。 ↩

Parts

295
QtyValueFootprintReferences
55100nFCapacitor_SMD:C_0603_1608MetricC1, C11, C12, C13, C14, C101, C102, C105, C106, C109, C111, C114, C117, C120, C147, C149 +39
17100pFCapacitor_SMD:C_0603_1608MetricC27, C31, C34, C39, C42, C45, C48, C52, C55, C62, C63, C66, C67, C79, C80, C83 +1
16600R@100MHzInductor_SMD:L_0603_1608MetricFB2, FB3, FB4, FB5, FB6, FB7, FB8, FB9, FB10, FB11, FB12, FB13, FB14, FB15, FB16, FB17
1310uFCapacitor_SMD:C_0603_1608MetricC28, C35, C38, C49, C56, C96, C100, C103, C104, C107, C108, C175, C176
101nFCapacitor_SMD:C_0603_1608MetricC26, C30, C33, C37, C41, C44, C47, C51, C54, C60
8100uFCapacitor_SMD:C_Elec_6.3x7.7C160, C161, C164, C165, C167, C168, C170, C172
8180nInductor_SMD:L_0805_2012MetricL2, L3, L5, L6, L9, L10, L11, L12
833RResistor_SMD:R_Array_Concave_4x0402RN2, RN3, RN4, RN5, RN6, RN7, RN8, RN9
849.9RResistor_SMD:R_0603_1608MetricR16, R17, R22, R23, R26, R27, R76, R77
710kRResistor_SMD:R_0603_1608MetricR13, R14, R36, R37, R39, R40, R71
74.7uFCapacitor_SMD:C_0603_1608MetricC3, C6, C10, C97, C112, C115, C118
64.7kRResistor_SMD:R_0603_1608MetricR2, R3, R7, R8, R9, R10
5100RResistor_SMD:R_0603_1608MetricR15, R47, R48, R50, R52
4160nInductor_SMD:L_0805_2012MetricL1, L4, L7, L8
41kRResistor_SMD:R_0603_1608MetricR1, R4, R5, R6
42.0pCapacitor_SMD:C_0603_1608MetricC71, C74, C85, C86
422RResistor_SMD:R_0402_1005MetricR58, R59, R60, R75
44.7kRCapacitor_SMD:C_0603_1608MetricR54, R55, R56, R57
4442RResistor_SMD:R_0603_1608MetricR33, R34, R45, R46
4470nFCapacitor_SMD:C_0603_1608MetricC110, C113, C116, C119
456pFCapacitor_SMD:C_0603_1608MetricC61, C65, C75, C76
46.8pCapacitor_SMD:C_0603_1608MetricC69, C72, C77, C78
462pFCapacitor_SMD:C_0603_1608MetricC64, C68, C87, C88
473.2RResistor_SMD:R_0603_1608MetricR31, R32, R43, R44
49.1pCapacitor_SMD:C_0603_1608MetricC70, C73, C81, C82
30RResistor_SMD:R_0603_1608MetricR11, R35, R38
31uFCapacitor_SMD:C_0603_1608MetricC57, C58, C166
3CH1Connector_Coaxial:SMA_BAT_Wireless_BWSMA-KWE-Z001J5, J6, J7
2100nCapacitor_SMD:C_0603_1608MetricC90, C95
210nFCapacitor_SMD:C_0603_1608MetricC4, C7
21uFCapacitor_SMD:C_1206_3216MetricC145, C146
2226RResistor_SMD:R_0603_1608MetricR30, R42
222uFCapacitor_SMD:C_1206_3216MetricC154, C155
2499RResistor_SMD:R_0603_1608MetricR24, R25
253.6RResistor_SMD:R_0603_1608MetricR29, R41
268RResistor_SMD:R_0603_1608MetricR49, R51
2Heatsink_PadHeatsink:TO-220_HeatsinkHS2, HS4
2MMBT3906Package_TO_SOT_SMD:SOT-23Q1, Q2
2OPA695IDPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU4, U5
1+1.8VATestPoint:TestPoint_Pad_D1.0mmTP17
1+1.8VDTestPoint:TestPoint_Pad_D1.0mmTP18
1+1VTestPoint:TestPoint_Pad_D1.0mmTP11
1+3.3VATestPoint:TestPoint_Pad_D1.0mmTP16
1+5VATestPoint:TestPoint_Pad_D1.0mmTP15
1-5VATestPoint:TestPoint_Pad_D1.0mmTP14
10RResistor_SMD:R_0402_1005MetricR20
11.8kRResistor_SMD:R_0603_1608MetricR18
1100RResistor_SMD:R_0402_1005MetricR21
110kRCapacitor_SMD:C_0603_1608MetricR53
1120R@100MHzInductor_SMD:L_0603_1608MetricFB1
112kRResistor_SMD:R_0603_1608MetricR72
115kResistor_SMD:R_0603_1608MetricR69
12.2uHInductor_SMD:L_Changjiang_FXL0420L15
12.4kRResistor_SMD:R_0603_1608MetricR70
122uFCapacitor_SMD:CP_Elec_5x5.4C152
12x5 牛角座Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical_antiClockWiseJ1
133RResistor_SMD:R_0603_1608MetricR12
133RResistor_SMD:R_Array_Concave_4x0603RN1
133nFCapacitor_SMD:C_0603_1608MetricC148
14.7kResistor_SMD:R_0402_1005MetricR28
1510RResistor_SMD:R_0603_1608MetricR19
168kRResistor_SMD:R_0603_1608MetricR73
17.5kRResistor_SMD:R_0603_1608MetricR74
1AD9747BCPZPackage_CSP:LFCSP-72-1EP_10x10mm_P0.5mm_EP5.3x5.3mmU3
1AMS1117Package_TO_SOT_SMD:SOT-223-3_TabPin2U19
1ASE-10MHzOscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mmY1
1CDCI6214RGERPackage_DFN_QFN:VQFN-24-1EP_4x4mm_P0.5mm_EP2.45x2.45mmU8
1CH1_F+TestPoint:TestPoint_Pad_D1.0mmTP5
1CH1_F-TestPoint:TestPoint_Pad_D1.0mmTP6
1CH1_OTestPoint:TestPoint_Pad_D1.0mmTP1
1CH2_F+TestPoint:TestPoint_Pad_D1.0mmTP3
1CH2_F-TestPoint:TestPoint_Pad_D1.0mmTP4
1CH2_OTestPoint:TestPoint_Pad_D1.0mmTP2
1Conn_01x04_PinConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ3
1Conn_01x08Connector_JST:JST_VH_B8P-VH_1x08_P3.96mm_VerticalJ4
1Conn_02x08_Counter_ClockwiseConnector_IDC:IDC_IDC-Header_2x08_P2.54mm_Vertical_antiClockWiseJ2
1GD25Q32JVSSPackage_SO:SOIC-8_5.3x5.3mm_P1.27mmU2
1GREENLED_SMD:LED_0603_1608MetricD1
1GW2A-LV18EQ144ArbWave30_lib:LQFP-144_20x20_Pitch0.5mmU1
1L7805Package_TO_SOT_THT:TO-220-3_VerticalU12

The 288 most common of 295 parts.

More from EERNINUO/ArbWave30

1
  • 4 layers100 × 90 mmControl board, the printed circuit board in 3D

    Control board

    EERNINUO/ArbWave30

    ArbWave30 – 30MHz 任意波形发生器 | FPGA + 高速DAC | SCPI 可控

    149 parts53GPL-3.0

Similar boards

  • 2 layers61 × 61.1 mmLaser com v1, the printed circuit board in 3D

    Laser com v1

    oguzhanbaser/GalvoScanner

    Gazebo-Sim/ mytestpkg/ CMakeLists.txt (ROS paketi derleme tanımı) package.xml (ROS paket meta verisi) launch/cameragazebo.launch (Kamera modelini Gazebo’da başlatma) urdf/cameramodel.xacro (Parametrik kamera URDF/Xacro…

    69 parts
  • 2 layers160 × 100 mmMTS module, the printed circuit board in 3D

    MTS module

    TU-Darmstadt-APQ/MTS_module

    Module for AOM-based modulation transfer spectroscopy (MTS) signal generation.

    131 parts3
  • 2 layers160 × 100 mmPDH module, the printed circuit board in 3D

    PDH module

    TU-Darmstadt-APQ/PDH-module

    Produces a PDH error-signal using MiniCircuits SYPD-1+ phase detector and LT1568 4th order low-pass filter. To be used with a AD9959 DDS board.

    85 parts2
  • 2 layers114 × 89 mmAyn-4b, the printed circuit board in 3D

    Ayn-4b

    afiskon/ayn-4b

    Portable QRP CW Transceiver

    278 parts7MIT
  • 2 layers100 × 90 mmAyn dc, the printed circuit board in 3D

    Ayn dc

    afiskon/ayn-dc

    DC QRP CW transceiver

    226 parts5MIT
  • 2 layers121.5 × 115 mmIrrigationController, the printed circuit board in 3D

    IrrigationController

    alorcs/Irrigation-System-v2

    The external footprints used can be found in the Imports folder.

    115 partsApache-2.0
  • 2 layers117.2 × 110 mmHardware design, the printed circuit board in 3D

    Hardware design

    AudioMorphology/ParrotRev2

    Parrot is a 12hp Eurorack digital delay powered by a Raspberry Pi Pico microcontroller.

    96 partsGPL-3.0
  • 2 layers61.1 × 52.3 mmStack lights, the printed circuit board in 3D

    Stack lights

    tpcarlson/synth-diy

    Mostly Eurorack projects

    33 parts107

Questions

How big is the Analog board PCB?

It measures 125 × 90 mm and has 4 copper layers, 1.58 mm thick.

What parts does the Analog board use?

295 parts, built around the OPA695ID, AD9747BCPZ, AMS1117 and L7805. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Analog board KiCad files?

From the EERNINUO/ArbWave30 repository on GitHub, at the commit this page was made from: the board is hardware/analog_board/analog_board.kicad_pcb and its schematic hardware/analog_board/Clock.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Analog board design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).