1. LogicPi双通道FPGA数字示波器复刻指南
作为一名电子工程师,我最近复刻了LogicPi双通道FPGA数字示波器项目。这个项目基于FPGA和高速ADC构建,能够实现双通道100MHz采样率的数字示波器功能。在复刻过程中,我遇到了不少坑,也积累了一些经验,现在分享给大家。
这个项目最大的特点是采用了国产FPGA(高云半导体)和GD32 MCU的组合,成本相对较低但性能不错。示波器支持从5mV/div到5V/div的多档位电压测量,采样深度为1K points,对于日常电子调试和教学实验来说已经足够使用。
2. 器件选型与焊接注意事项
2.1 不需要焊接的NC部分
在PCB上有几个明确标注为NC(Not Connected)的部分,这些元件千万不要焊接:
- R23, R37电阻
- K2继电器
- Q2三极管
- R35电阻
特别是继电器部分,如果误焊会导致两个AD8065运放异常发热。这是因为继电器电路设计用于另一个版本的示波器功能,在这个版本中并不需要。
重要提示:焊接前务必对照BOM表仔细检查,所有标有NC的元件位置都要留空。
2.2 负电压生成电路改进
原设计使用TPS5430作为-4.5V电源芯片,但实测发现它需要输入电压大于5.8V才能正常工作,这对于USB 5V供电来说显然不够。作者后来改用SCT2433,同时需要做以下修改:
- 将R75电阻从3.74kΩ改为2.2kΩ
- 电感L7从15uH改为4.7uH
- 电容C121从10nF改为100nF
- 移除续流二极管D3(SS34)
修改前的小电压量程会出现明显底噪(约20mVpp),修改后底噪降低到5mVpp以内,达到了可用水平。
2.3 关键运放选型
原设计中的TPH2501运放耐压只有5.5V,而实际电路中的压差达到9V,这会导致运放损坏或性能下降。推荐替代型号:
- AD8065ARTZ:带宽145MHz,压摆率180V/μs
- OPA820IDBVR:带宽300MHz,压摆率150V/μs
这两种运放都能满足电路需求,且耐压足够。实际测试中,AD8065的温度表现更稳定一些。
2.4 编码器优化
原设计的编码器存在识别困难和回滚问题,这是因为固件中的去抖算法不够完善。虽然无法通过硬件完全解决,但可以通过以下修改改善:
将编码器相关的滤波电容全部从10nF增大到47nF:
- C108, C109 (通道A滤波)
- C110, C111 (通道B滤波)
- C112, C113 (按键滤波)
修改后,编码器的操作会顺畅很多,但快速旋转时仍可能出现少量丢步,这是固件限制导致的。
3. 其他关键器件处理
3.1 NE5532周边电路
NE5532运放附近的C100和C101电容如果使用原值会导致运放异常发热。有两种解决方案:
- 将这两个电容改为100pF
- 直接拆除这两个电容(推荐)
实测拆除后电路工作正常,且运放温度保持在合理范围内。
3.2 TL431基准电压
原设计的R52电阻(2kΩ)值过大,导致TL431在带载时输出电压只有1V左右,无法提供稳定的2.5V基准。需要将其改为100Ω,这样在各种负载条件下都能保持2.5V稳定输出。
3.3 继电器替代型号
如果找不到原型号继电器,可以使用HFD4/5-S替代。这两种继电器的引脚定义和电气参数基本相同,可以直接替换使用。
3.4 保护二极管调整
原设计的TVS二极管SMBJ14CA击穿电压过高(14V),起不到保护作用。建议改为SMBJ5.0CA(5V),这样可以在过压时有效保护后端电路。
3.5 AD9288选购要点
ADC芯片AD9288BSTZ-100的选购有讲究:
- 优先选择"镜面坑"标记的芯片
- 避免激光打标的产品(问题率高)
- 不同价格的产品质量差异明显(建议选择中等价位)
劣质AD9288会导致波形拉伸、坐标回滚、画面偏移等问题。我测试过9元和12元的芯片都有问题,后来换了25元的镜面坑版本才解决。
3.6 地平面处理
原设计使用120Ω@100MHz磁珠(L4,L6)连接数字地和模拟地,但实测效果不好。建议:
- 将磁珠改为0Ω电阻
- 或者直接用焊锡短路这两个位置
此外,保持完整的地平面很重要:
- 顶层和底层都做铺铜处理
- 多打过孔保证良好接地
- 信号走线尽量被地铜包裹
4. 烧录与调试
4.1 软件准备
需要安装两个开发环境:
Keil MDK(用于GD32 MCU)
- 版本要求:V5.06 update 6 build 750
- 安装后需要设置CMSIS-DAP调试器
Gowin IDE(用于FPGA)
- 注意安装对应的器件支持包
编译器版本不匹配会导致各种奇怪问题,比如坐标锁定无法调整。如果遇到这类问题,可以尝试重新安装指定版本的编译器。
4.2 GD32固件烧录
- 打开Keil工程文件
- 连接CMSIS-DAP调试器(切换到ARM模式)
- 直接点击LOAD按钮烧录
- 不需要重新编译(除非修改了代码)
- 烧录过程约10秒
4.3 FPGA配置烧录
- 打开Gowin工程文件
- 点击Programmer按钮
- 选择"External Flash Mode"
- 点击Program按钮开始烧录
- 烧录过程约30秒
- 完成后FPGA会自动加载配置
5. 测试与校准
5.1 电压测试
上电后首先检查各测试点的电压是否正常:
- 3.3V(数字电源)
- 3.3V(模拟电源)
- -4.5V(运放负电源)
- 4.5V(运放正电源)
- 2.5V(ADC基准)
- 0.625V(偏置电压)
任何一路电压异常都需要检查相应电路的焊接和元件选择。
5.2 波形坐标校准
校准需要修改GD32工程中的platform.c文件,调整以下参数:
// 通道1校准参数 {1.0f, 120, 0}, // 1V/div {0.5f, 120, 0}, // 500mV/div {0.2f, 120, 0}, // 200mV/div {0.1f, 120, 0}, // 100mV/div {0.05f, 120, 0}, // 50mV/div {0.02f, 120, 0}, // 20mV/div {0.01f, 120, 0}, // 10mV/div {0.005f, 120, 0} // 5mV/div // 通道2校准参数(格式相同)每行三个参数分别是:
- 电压增益(缩放系数)
- 0V位置(垂直偏移)
- 继电器状态(通常为0)
校准步骤:
- 将输入通道短路到地
- 调整第二个参数使波形位于屏幕中央
- 输入已知电压信号(如1Vpp)
- 调整第一个参数使波形幅度正确
- 重复各档位
对于没有专业示波器的开发者,可以用可调电源产生校准信号。注意探头要设置在1X档位,10X档位时需要相应调整输入信号幅度。
6. 常见问题解决
6.1 运放自激振荡
在某些特定位置(各档位可能不同)会出现波形抖动,这是运放自激振荡导致的。虽然可以通过调整C100/C101的值改变振荡点位置,但无法完全消除。建议解决方案:
- 记录各档位的振荡点位置
- 使用时避开这些位置
- 必要时轻微调整时间基准避开敏感区域
6.2 波形异常问题
如果出现以下现象,很可能是AD9288芯片质量问题:
- 波形拉伸变形
- 坐标回滚
- 画面整体偏移
- 一个通道正常另一个通道异常
解决方法只有更换质量好的AD9288芯片,优先选择镜面坑标记的产品。
6.3 编译器版本问题
如果遇到坐标锁定无法调整的问题,很可能是Keil编译器版本不匹配。解决方法:
- 确认使用的是V5.06 update 6 build 750版本
- 如果不是,下载对应版本
- 覆盖ARMCC文件夹
- 重新编译烧录
7. 优化建议
通过多次测试,我发现以下优化可以显著提高性能:
- 不分割数字地和模拟地(保持完整地平面)
- 删除NC的示波器部分电路
- 缩短通道2的信号走线长度
- 顶层和底层都做铺铜处理
- 信号路径用地铜良好包裹
优化后,通道2的采样质量甚至优于通道1,底噪更低,波形更清晰。这对于需要双通道高精度测量的应用非常有用。
复刻这个项目让我深刻体会到硬件设计中的细节重要性。从电源设计到信号路径,从器件选型到PCB布局,每个环节都可能影响最终性能。希望这些经验能帮助其他复刻者少走弯路。