

Analog board
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
5OPA695ID
SOIC-8-40℃~+85℃ -6V~6V 1 1.4GHz 1.8nV/√Hz@1kHz 12.9mA 15uV/℃ 300uV 4.3V/ns 56dB 5V~12V 5uA 90mA Enable/shutdown function SOIC-8 Operational Amplifier ROHSTexas InstrumentsOperational AmplifierAD9747BCPZ
LFCSP-72(10x10)-40℃~+85℃ 1.8V~3.3V 16 2 250MHz 2LSB、4LSB Current-Non-buffered SPI LFCSP-72(10x10) Digital to Analog Converters (DAC) ROHSAnalog DevicesDigital To Analog Converters (DAC)AMS1117
1.0 A Low-Dropout Fixed RegulatorAdvanced Monolithic SystemsUncategorisedL7805
TO-220ST0℃~+125℃@(Tj) 1 1.2A 20V 2V@(1A) 42uV 500uA 5V 73dB@(120Hz) Fixed Positive Short Circuit Protection TO-220ST Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSOSENVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsMMBT3906
SOT-23-55℃~+150℃ 1 PNP 100 100nA 200mA 200mW 300MHz 300mV 40V 5V PNP SOT-23 Bipolar (BJT) ROHSTWGMCBipolar (BJT)
README
README.md⚠️ 注意:你当前查看的是 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 示波器实测):
正弦波满幅输出波形:

方波满幅输出波形:

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

经上图数据可计算出1: THD ≈ -60.2 dBc @10MHz, SFDR2 ≈ 63.26 dBc @10MHz
⚠️ 已知问题
- 当前版本方波有约 13.5% 的过冲,为滤波器群延时特性所致,后续将通过优化滤波器设计解决。
- 当前版本在运行一段时间后,在输出 25 MHz 以上正弦波时,有概率出现固定大小/方向的偏置抖动,怀疑是 FPGA 发热导致时序漂移,后续将通过优化 FPGA 时序约束和增加散热解决。
- 当前分板设计会导致成品过长过细(约 225mm x 90mm),后续将调整分板方案,分为电源板、模拟板、控制板。
🧱 仓库结构
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 命令示例
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 |
| 文档、图片、README | Creative 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
Parts
295| Qty | Value | Footprint | References |
|---|---|---|---|
| 55 | 100nF | Capacitor_SMD:C_0603_1608Metric | C1, C11, C12, C13, C14, C101, C102, C105, C106, C109, C111, C114, C117, C120, C147, C149 +39 |
| 17 | 100pF | Capacitor_SMD:C_0603_1608Metric | C27, C31, C34, C39, C42, C45, C48, C52, C55, C62, C63, C66, C67, C79, C80, C83 +1 |
| 16 | 600R@100MHz | Inductor_SMD:L_0603_1608Metric | FB2, FB3, FB4, FB5, FB6, FB7, FB8, FB9, FB10, FB11, FB12, FB13, FB14, FB15, FB16, FB17 |
| 13 | 10uF | Capacitor_SMD:C_0603_1608Metric | C28, C35, C38, C49, C56, C96, C100, C103, C104, C107, C108, C175, C176 |
| 10 | 1nF | Capacitor_SMD:C_0603_1608Metric | C26, C30, C33, C37, C41, C44, C47, C51, C54, C60 |
| 8 | 100uF | Capacitor_SMD:C_Elec_6.3x7.7 | C160, C161, C164, C165, C167, C168, C170, C172 |
| 8 | 180n | Inductor_SMD:L_0805_2012Metric | L2, L3, L5, L6, L9, L10, L11, L12 |
| 8 | 33R | Resistor_SMD:R_Array_Concave_4x0402 | RN2, RN3, RN4, RN5, RN6, RN7, RN8, RN9 |
| 8 | 49.9R | Resistor_SMD:R_0603_1608Metric | R16, R17, R22, R23, R26, R27, R76, R77 |
| 7 | 10kR | Resistor_SMD:R_0603_1608Metric | R13, R14, R36, R37, R39, R40, R71 |
| 7 | 4.7uF | Capacitor_SMD:C_0603_1608Metric | C3, C6, C10, C97, C112, C115, C118 |
| 6 | 4.7kR | Resistor_SMD:R_0603_1608Metric | R2, R3, R7, R8, R9, R10 |
| 5 | 100R | Resistor_SMD:R_0603_1608Metric | R15, R47, R48, R50, R52 |
| 4 | 160n | Inductor_SMD:L_0805_2012Metric | L1, L4, L7, L8 |
| 4 | 1kR | Resistor_SMD:R_0603_1608Metric | R1, R4, R5, R6 |
| 4 | 2.0p | Capacitor_SMD:C_0603_1608Metric | C71, C74, C85, C86 |
| 4 | 22R | Resistor_SMD:R_0402_1005Metric | R58, R59, R60, R75 |
| 4 | 4.7kR | Capacitor_SMD:C_0603_1608Metric | R54, R55, R56, R57 |
| 4 | 442R | Resistor_SMD:R_0603_1608Metric | R33, R34, R45, R46 |
| 4 | 470nF | Capacitor_SMD:C_0603_1608Metric | C110, C113, C116, C119 |
| 4 | 56pF | Capacitor_SMD:C_0603_1608Metric | C61, C65, C75, C76 |
| 4 | 6.8p | Capacitor_SMD:C_0603_1608Metric | C69, C72, C77, C78 |
| 4 | 62pF | Capacitor_SMD:C_0603_1608Metric | C64, C68, C87, C88 |
| 4 | 73.2R | Resistor_SMD:R_0603_1608Metric | R31, R32, R43, R44 |
| 4 | 9.1p | Capacitor_SMD:C_0603_1608Metric | C70, C73, C81, C82 |
| 3 | 0R | Resistor_SMD:R_0603_1608Metric | R11, R35, R38 |
| 3 | 1uF | Capacitor_SMD:C_0603_1608Metric | C57, C58, C166 |
| 3 | CH1 | Connector_Coaxial:SMA_BAT_Wireless_BWSMA-KWE-Z001 | J5, J6, J7 |
| 2 | 100n | Capacitor_SMD:C_0603_1608Metric | C90, C95 |
| 2 | 10nF | Capacitor_SMD:C_0603_1608Metric | C4, C7 |
| 2 | 1uF | Capacitor_SMD:C_1206_3216Metric | C145, C146 |
| 2 | 226R | Resistor_SMD:R_0603_1608Metric | R30, R42 |
| 2 | 22uF | Capacitor_SMD:C_1206_3216Metric | C154, C155 |
| 2 | 499R | Resistor_SMD:R_0603_1608Metric | R24, R25 |
| 2 | 53.6R | Resistor_SMD:R_0603_1608Metric | R29, R41 |
| 2 | 68R | Resistor_SMD:R_0603_1608Metric | R49, R51 |
| 2 | Heatsink_Pad | Heatsink:TO-220_Heatsink | HS2, HS4 |
| 2 | MMBT3906 | Package_TO_SOT_SMD:SOT-23 | Q1, Q2 |
| 2 | OPA695ID | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U4, U5 |
| 1 | +1.8VA | TestPoint:TestPoint_Pad_D1.0mm | TP17 |
| 1 | +1.8VD | TestPoint:TestPoint_Pad_D1.0mm | TP18 |
| 1 | +1V | TestPoint:TestPoint_Pad_D1.0mm | TP11 |
| 1 | +3.3VA | TestPoint:TestPoint_Pad_D1.0mm | TP16 |
| 1 | +5VA | TestPoint:TestPoint_Pad_D1.0mm | TP15 |
| 1 | -5VA | TestPoint:TestPoint_Pad_D1.0mm | TP14 |
| 1 | 0R | Resistor_SMD:R_0402_1005Metric | R20 |
| 1 | 1.8kR | Resistor_SMD:R_0603_1608Metric | R18 |
| 1 | 100R | Resistor_SMD:R_0402_1005Metric | R21 |
| 1 | 10kR | Capacitor_SMD:C_0603_1608Metric | R53 |
| 1 | 120R@100MHz | Inductor_SMD:L_0603_1608Metric | FB1 |
| 1 | 12kR | Resistor_SMD:R_0603_1608Metric | R72 |
| 1 | 15k | Resistor_SMD:R_0603_1608Metric | R69 |
| 1 | 2.2uH | Inductor_SMD:L_Changjiang_FXL0420 | L15 |
| 1 | 2.4kR | Resistor_SMD:R_0603_1608Metric | R70 |
| 1 | 22uF | Capacitor_SMD:CP_Elec_5x5.4 | C152 |
| 1 | 2x5 牛角座 | Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical_antiClockWise | J1 |
| 1 | 33R | Resistor_SMD:R_0603_1608Metric | R12 |
| 1 | 33R | Resistor_SMD:R_Array_Concave_4x0603 | RN1 |
| 1 | 33nF | Capacitor_SMD:C_0603_1608Metric | C148 |
| 1 | 4.7k | Resistor_SMD:R_0402_1005Metric | R28 |
| 1 | 510R | Resistor_SMD:R_0603_1608Metric | R19 |
| 1 | 68kR | Resistor_SMD:R_0603_1608Metric | R73 |
| 1 | 7.5kR | Resistor_SMD:R_0603_1608Metric | R74 |
| 1 | AD9747BCPZ | Package_CSP:LFCSP-72-1EP_10x10mm_P0.5mm_EP5.3x5.3mm | U3 |
| 1 | AMS1117 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U19 |
| 1 | ASE-10MHz | Oscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mm | Y1 |
| 1 | CDCI6214RGER | Package_DFN_QFN:VQFN-24-1EP_4x4mm_P0.5mm_EP2.45x2.45mm | U8 |
| 1 | CH1_F+ | TestPoint:TestPoint_Pad_D1.0mm | TP5 |
| 1 | CH1_F- | TestPoint:TestPoint_Pad_D1.0mm | TP6 |
| 1 | CH1_O | TestPoint:TestPoint_Pad_D1.0mm | TP1 |
| 1 | CH2_F+ | TestPoint:TestPoint_Pad_D1.0mm | TP3 |
| 1 | CH2_F- | TestPoint:TestPoint_Pad_D1.0mm | TP4 |
| 1 | CH2_O | TestPoint:TestPoint_Pad_D1.0mm | TP2 |
| 1 | Conn_01x04_Pin | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J3 |
| 1 | Conn_01x08 | Connector_JST:JST_VH_B8P-VH_1x08_P3.96mm_Vertical | J4 |
| 1 | Conn_02x08_Counter_Clockwise | Connector_IDC:IDC_IDC-Header_2x08_P2.54mm_Vertical_antiClockWise | J2 |
| 1 | GD25Q32JVSS | Package_SO:SOIC-8_5.3x5.3mm_P1.27mm | U2 |
| 1 | GREEN | LED_SMD:LED_0603_1608Metric | D1 |
| 1 | GW2A-LV18EQ144 | ArbWave30_lib:LQFP-144_20x20_Pitch0.5mm | U1 |
| 1 | L7805 | Package_TO_SOT_THT:TO-220-3_Vertical | U12 |
The 288 most common of 295 parts.
More from EERNINUO/ArbWave30
1- 4 layers100 × 90 mm

Similar boards
- 2 layers61 × 61.1 mm

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 mm

MTS module
TU-Darmstadt-APQ/MTS_module
Module for AOM-based modulation transfer spectroscopy (MTS) signal generation.
131 parts3 - 2 layers160 × 100 mm

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 mm

- 2 layers100 × 90 mm

- 2 layers121.5 × 115 mm

IrrigationController
alorcs/Irrigation-System-v2
The external footprints used can be found in the Imports folder.
115 partsApache-2.0 - 2 layers117.2 × 110 mm

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 mm

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).