1. 项目缘起为什么在2021年复刻一台GameBoy示波器你可能觉得奇怪都2021年了示波器从模拟到数字从台式到手持甚至直接用电脑声卡或手机APP都能凑合看波形为什么还要折腾一台基于二十年前老杂志Elektor 2000年10月刊设计的、用任天堂GameBoy当显示器的数字采样示波器GBDSO这事儿听起来就带着一股“复古硬核”的酸爽味儿。但对我来说理由简单得有点幼稚自从几年前偶然在网上看到Steve Willis的这个设计我心里就种了草那种将经典游戏硬件“废物利用”成专业测试仪器的巧妙构思一直让我念念不忘。所以与其一直惦记不如动手把它做出来。当然这不只是情怀。在动手之前我仔细盘算过第一是成本全套物料算下来不到40欧元这价格在如今的测试仪器市场连个像样的探头都买不到。第二是教育意义这个项目麻雀虽小五脏俱全涉及模拟前端调理、ADC采样、单片机控制、与老旧游戏机的通信协议是一个绝佳的、贯穿硬件与底层软件的嵌入式系统学习案例。第三是独特的便携性与体验用五号电池供电能连续工作5小时揣口袋里就能走那块低分辨率但极具特色的绿色液晶屏显示波形时有种别样的赛博朋克美感。所以这个项目就成了。我不仅复刻了它还修复了原设计因年代久远导致的部分元器件采购问题优化了PCB布局甚至增加了一个原版没有的“在线编程ROM”的小功能。最终所有的设计文件、源码、物料清单和详细的搭建指南我都开源在了GitHub上。下面我就把这台“古董级”数字示波器从原理到实作的方方面面为你彻底拆解清楚。2. 核心设计解析GameBoy如何变身示波器要理解GBDSO我们得先抛开现代示波器复杂的菜单和高速处理器回到一个更本质的问题示波器的核心任务是什么是捕获电压随时间的变化并将其显示出来。GBDSO巧妙地分解了这个任务并由两个主要部分协同完成一个定制的、负责信号采集与处理的硬件采集盒以及一台负责图形显示和用户交互的原版任天堂GameBoy。2.1 系统架构与分工整个系统的架构可以看作一个经典的“采集-处理-显示”流水线但处理环节被极大地简化了。硬件采集盒核心模拟前端负责接收外部信号。包括输入耦合选择AC/DC、衰减/放大实现50mV/div到10V/div的量程、以及阻抗匹配1MΩ输入阻抗与标准示波器探头兼容。这部分主要依靠运放电路实现。采样与量化使用一颗ADC模数转换器以最高1Msps每秒百万次采样的速度将连续的模拟电压转换为离散的数字值。这是实现“数字采样”的关键。逻辑控制与缓存使用一颗单片机或类似的逻辑器件来控制ADC的采样时序并将采样得到的数据暂存于RAM中。通信接口负责与GameBoy通信。GameBoy通过它的卡带接口Cartridge Port与采集盒连接。这个接口不仅提供电源更是一条并行的数据/地址总线。采集盒需要模拟一个GameBoy卡带的行为将波形数据按照特定协议“喂”给GameBoy。GameBoy显示与交互终端图形显示GameBoy的CPU一颗改版的Z80和GPU会从采集盒“映射”到其内存地址空间中的特定区域读取波形数据然后将其渲染到那块160x144像素的绿色LCD屏幕上。所有网格、刻度、波形绘制均由GameBoy完成。用户界面通过GameBoy的十字键和A/B按钮用户可以操作菜单改变时基时间/格、垂直灵敏度电压/格、触发模式等。这些操作指令通过卡带接口发送给采集盒。数据处理与高级功能令人惊讶的是一些“高级”功能如FFT快速傅里叶变换、XY模式、波形平均等竟然也是由GameBoy那颗主频仅4.19MHz的8位CPU来计算的。这充分体现了当年程序员在极端资源限制下的优化功力。这种分工的精妙之处在于它让采集盒的硬件设计变得相对简单和专注而将复杂的图形和人机交互逻辑交给了本就擅长此道的GameBoy。你不需要在采集盒上设计屏幕、绘制UI、编写图形库这些都直接“借用”了GameBoy成熟且现成的能力。2.2 关键芯片选型与替代方案原设计发表于2000年许多当时的“常青树”芯片在今天可能已经停产或难以购买。我在复刻时首要任务就是解决元器件的可获得性问题。运算放大器Op-Amp的替换原设计使用MC33182D这是一款低功耗、轨到轨输出的运放用于模拟前端放大。我在DigiKey等主流平台已找不到现货。经过参数对比我选择了TL072。这是一款极其通用、双电源供电的JFET输入运放。虽然功耗比MC33182D稍高但其高输入阻抗、低噪声和广泛的可用性使其成为完美的替代品。在±5V的供电环境下TL072完全能满足前端缓冲和放大电路的需求。注意TL072不是轨到轨运放其输出电压无法达到电源轨5V/-5V会有一个约1.5V的裕量。这意味着在最大量程10V/div时需要确保输入信号幅度留有余地避免顶部或底部被削波。在实际电路中通过合理的分压和偏置设计这个影响可以被控制在可接受范围内。数字电位器Digital Potentiometer原设计使用DS1267S100100kΩ。这款芯片现在仍有衍生型号如DS1267-100可用。它在电路中可能用于软件可调的增益或偏置是实现自动设置或微调的关键。程序存储器ROM原设计使用一颗27C25632KB容量的EPROM。这是标准的并行接口EPROM至今仍有新品或库存品可买。我购买到了Elektor官方提供的、已烧录好GBDSO固件的最后一片ROM。更重要的是在获得Elektor授权后我将这个**.bin文件开源了**。这意味着你可以购买一颗空白的27C256或兼容的W27C256等用通用编程器自行烧录成本更低。ADC与主控这部分是设计的核心原文未明确型号但从1Msps的采样率和与GameBoy通信的复杂度推断很可能使用了一颗具备高速ADC和足够GPIO的微控制器或者是“ADC CPLD/FPGA”的组合。在我的复刻版中我沿用了原设计的选择具体型号需查阅开源原理图因为它经过了时间验证与GameBoy的通信时序已经调通稳定性是第一位的。3. 硬件制作全流程从原理图到焊接调试有了设计文件下一步就是把它变成实物。这个过程充满了工程实践的细节任何一个疏忽都可能导致板子变成“砖头”。3.1 PCB设计与打样要点我的设计文件在GitHub仓库中包含原理图和PCB。即使你直接使用我的文件去生产也需要了解几个关键点板层与工艺这是一个双面板设计。对于这种低速数字混合模拟电路双面板完全足够。在JLCPCB等工厂下单时选择最基础的FR-4材质、1.6mm厚度、有铅喷锡HASL即可性价比最高。接口与布局GameBoy连接器这是整个PCB上最精密的部件。它是一个与GameBoy卡带金手指匹配的edge connector。PCB设计时必须确保金手指的尺寸、间距和位置绝对准确否则插不进GameBoy。我的设计中已经包含了这个封装。BNC输入接口两个通道的BNC座子应选用质量可靠的型号并确保其在PCB上的固定孔位牢固能承受反复插拔探头的应力。电源部分由于使用电池供电需要有电源开关、电池座或连接器以及良好的电源去耦电路。钽电容和瓷片电容要靠近芯片的电源引脚放置。我的三次改版教训我前后做了三个版本的PCB才成功。主要踩的坑有原理图网络标号错误一个运放的反相/同相输入端画反了导致放大电路工作异常。教训画完原理图后必须逐个模块进行功能仿真哪怕只是脑补电流电压方向并邀请他人复查。封装错误一个去耦电容用了0805的封装但BOM里写的是0603。焊接时才发现对不上。教训生成BOM和PCB前必须进行封装的一致性检查ERC/DRC。GameBoy连接器引脚顺序最初误以为卡带接口是镜像对称的导致一组地址线接反。教训对于不熟悉的接口一定要找到官方的引脚定义图或拆解一个现有卡带进行实物比对不能想当然。3.2 元器件采购与焊接BOM清单上有大约70个元件。除了前面提到的几个关键芯片大部分都是电阻、电容、二极管等无源器件。采购渠道像Digi-Key, Mouser, LCSC这样的国际分销商是首选确保正品。对于TL072、阻容件等通用料也可以在淘宝/天猫找到可靠的商家。特别注意27C256 EPROM如果你要自己烧录需要确认编程器支持。焊接顺序建议采用“先低后高先内后外”的原则。焊接所有贴片电阻、电容、二极管。焊接贴片芯片如TL072、数字电位器、逻辑门芯片等。可以使用热风枪或细尖烙铁配合焊锡丝。焊接插接件BNC座、电源开关、电池座、GameBoy连接器。这些元件需要更大的热量注意不要烫坏周围已焊好的贴片元件。最后焊接EEPROM插座和任何需要通过插座安装的芯片方便调试和更换。在线编程扩展板这是我添加的一个特色功能。原版ROM是焊死在板子上的或者插在插座里。我设计了一个小转接板将PLCC32封装的ROM座转接到DIP32插座并在主板上预留了跳线。通过切换跳线可以将主控芯片的数据/地址总线切换到编程器从而在不拔下ROM芯片的情况下直接对板载的27C256进行编程。这对于调试和固件更新非常方便。3.3 上电调试与功能验证焊接完成后切勿直接插入GameBoy必须按步骤进行安全检查。目视与连通性检查用放大镜检查有无桥接、虚焊、漏焊。用万用表二极管档检查电源对地是否短路这是最重要的第一步。空载上电不插GameBoy仅连接电池。测量各路电源电压如5V, -5V, 3.3V等是否正常、稳定。静态电流测试串联电流表测量整板空载电流。应与预估功耗根据芯片手册估算在一个数量级。如果电流过大比如上百mA说明有短路或芯片损坏。连接GameBoy在确认电源无异常后关闭采集盒电源插入GameBoy再打开采集盒电源。此时GameBoy应该正常开机并显示GBDSO的启动画面或菜单。如果GameBoy无法开机或花屏立即断电检查GameBoy连接器是否接触不良或电源引脚是否有短路。基本功能测试输入一个已知信号如函数发生器产生的1kHz 1Vpp正弦波。在GameBoy上调整时基和垂直灵敏度观察屏幕是否能稳定显示波形。测试两个通道是否都工作。尝试切换AC/DC耦合观察波形变化DC耦合能看到直流偏置AC耦合会滤除直流分量。高级功能验证进入FFT模式观察频谱测试XY模式李萨如图形测试自动触发和平均功能。4. 软件、固件与使用技巧硬件是躯体软件是灵魂。GBDSO的“灵魂”分为两部分运行在采集盒微控制器上的固件以及运行在GameBoy上的卡带程序。由于我们拿到了完整的ROM文件所以GameBoy部分已经搞定。我们的工作主要集中在理解和使用上。4.1 固件烧录与更新如果你使用的是我从Elektor购买并开源的那个.bin文件你需要一个能烧录27C256或类似并行EPROM的编程器。将空白芯片放入编程器选择正确的芯片型号加载.bin文件执行“编程”即可。烧录完成后将芯片插入采集板的插座。对于我设计的“在线编程”版本操作更简单将主板上的编程跳线设置为“编程模式”。通过扩展板上的接口用编程器电缆连接电脑和采集板。在编程器软件中像对待一颗独立的ROM一样进行擦除、查空、编程、校验。完成后将跳线切回“运行模式”重启系统。4.2 GameBoy端操作指南GBDSO的UI完全通过GameBoy的按键操作虽然复古但逻辑清晰。方向键移动光标选择菜单项调整参数左右键增减数值。A键确认选择。B键返回上一级菜单。Select可能在特定模式下切换功能如冻结波形。Start可能用于启动/停止采样或进入主菜单。主要菜单结构通常包括垂直系统设置每个通道的V/div电压每格、耦合方式AC/DC、探头衰减比。水平系统设置s/div时间每格从100秒到5微秒以及采样模式实时、等效采样等。触发系统设置触发源CH1/CH2、触发边沿上升/下降、触发电平。自动触发功能非常实用它能在无稳定触发时强制刷新波形避免屏幕空白。显示模式选择YT模式常规波形、XY模式用于相位比较显示李萨如图、FFT模式频谱分析、Chart Recorder图表记录仪慢速滚动模式。测量与工具可能包含光标测量、波形平均、参考波形存储/调出等功能。4.3 实测应用与性能边界这台示波器能做什么不能做什么心里必须有数。它能胜任的工作音频电路调试20Hz-20kHz范围内的信号观察比如检查麦克风前置放大、功放输出波形是否失真。FFT功能可以分析谐波成分。数字逻辑入门观察Arduino、STM32等开发板的GPIO输出测量脉冲宽度、频率看串口通信波形如UART的Start/Stop bit。1Msps的采样率对于几百kHz的数字信号足够了。传感器信号观察读取光敏电阻、热敏电阻、电位器等模拟传感器的缓慢变化信号使用Chart Recorder模式非常直观。教学演示由于其结构透明、成本低廉是讲解示波器原理、ADC采样、数字信号处理的绝佳教具。它的局限性带宽与采样率1Msps的采样率根据奈奎斯特采样定理理论上能无失真显示的最高频率信号是500kHz。但实际上模拟前端电路也有带宽限制实际可用带宽可能在200-300kHz左右。绝对无法测量高频开关电源、射频信号等。分辨率垂直分辨率受限于ADC的位数很可能是8位也就是256个量化等级。在10V/div量程下每格电压对应的数字量很少测量精度有限。它更适合观察波形形状和相对变化而非高精度电压测量。存储深度受限于GameBoy的内存和传输速度波形存储点数是有限的。这意味着在高速时基下只能捕获很短时间窗口的信号。输入保护原设计可能没有强大的过压/过流保护电路。切勿直接测量市电或高压电路如果需要测量务必使用高压差分探头进行隔离和衰减。重要安全提示GBDSO的输入阻抗是1MΩ与普通示波器相同。但它的输入耐压值未知。为安全起见假设它非常脆弱。测量未知电压时先使用一个高阻值电阻如1MΩ串联进行分压测试确认电压范围安全后再直接连接。5. 常见问题排查与进阶玩法即使按照指南制作也可能会遇到问题。以下是一些常见故障的排查思路。5.1 硬件故障排查表现象可能原因排查步骤GameBoy无法开机或开机后白屏/花屏1. 电源短路2. GameBoy连接器接触不良或引脚错误3. 核心芯片如MCU、ROM损坏或未插好4. 复位电路故障1. 断开采集盒检查GameBoy单独是否正常。2. 测量采集盒各电源对地电阻排除短路。3. 用万用表蜂鸣档逐点检查GameBoy连接器到PCB的连通性。4. 重新插拔所有插座芯片。5. 检查复位信号电平。GameBoy能开机但无法进入GBDSO界面卡在Nintendo Logo1. ROM数据读取错误2. 主控芯片未正确初始化或损坏3. 通信总线有断路或短路1. 确认ROM已正确烧录并尝试更换一片ROM。2. 用逻辑分析仪或示波器如果你有另一台的话探测GameBoy卡带接口的读信号RD和地址/数据线看是否有正常的读写周期。通道无信号或信号严重失真1. 输入BNC座损坏或虚焊2. 模拟前端运放电路故障如TL072损坏、供电异常3. 衰减/放大网络电阻值错误4. ADC不工作1. 输入一个已知的小信号如从手机耳机孔输出的1kHz正弦波用万用表交流档或另一台示波器从BNC入口开始逐级向后测量追踪信号在哪一级丢失或变形。2. 检查运放的电源电压±5V是否正常输出是否饱和。3. 检查ADC的参考电压、采样时钟是否正常。波形显示不稳定抖动严重1. 触发设置不当2. 电源噪声大3. 信号地线环路干扰1. 尝试使用“自动触发”模式或调整触发电平至信号幅度的中间值。2. 给电池仓并联一个大的电解电容如100uF以稳定电源。3. 确保被测电路、探头地线、GBDSO地线连接良好尽量采用单点接地。5.2 性能优化与校准出厂设置可能并非最佳你可以尝试微调。直流偏移校准将输入耦合设为DC并将探头短路或输入接地。理论上波形应是一条位于屏幕中央的直线。如果存在垂直偏移可以通过软件菜单中的“DC Offset”或“Position”功能进行调零。如果软件无法调零则可能是硬件前端运放的输入偏置电压过大需要考虑更换输入级运放为低失调电压型号但这涉及硬件改动。增益校准输入一个精确的、已知幅度的信号例如使用校准过的信号源输出一个1.000Vpp的正弦波。调整垂直灵敏度至合适的档位观察屏幕显示的格数是否与计算值一致。如果不一致通常需要通过软件校准菜单输入实际电压值进行校准。有些设计也可能通过调整数字电位器的值来微调硬件增益。提高信噪比为模拟部分运放、ADC提供干净的、经过LC滤波的电源。在PCB布局上让模拟地AGND和数字地DGND单点连接。使用屏蔽线连接探头并尽量缩短地线夹的长度。5.3 扩展与改造想法GBDSO是一个开放的平台你可以基于它进行改造升级ADC如果能找到引脚兼容但速度更快如5Msps、位数更高如12位的ADC芯片可以大幅提升性能。但这需要同步修改固件以支持新的采样率和数据格式。增加通信接口除了GameBoy是否可以增加一个蓝牙或Wi-Fi模块将波形数据发送到电脑或手机上进行更复杂的分析和存储这需要主控MCU有额外的处理能力和接口。设计新外壳为采集盒和GameBoy设计一个3D打印的一体化外壳让它看起来更像一台专业的便携设备而不仅仅是“板子加游戏机”。开发新固件如果你精通GameBoy的汇编或C开发甚至可以尝试为这个硬件平台编写全新的应用程序比如逻辑分析仪、频谱图记录仪等等。复刻GBDSO的过程更像是一次对电子工程黄金时代的致敬和亲手实践。它没有现代仪器的华丽屏幕和复杂功能但它教会你从最基础的层面理解信号是如何被捕获、处理和显示的。当你按下GameBoy的电源键绿色的波形在像素屏幕上跳动起来的那一刻你会觉得所有的调试和等待都是值得的。这不仅仅是一台工具更是一个凝结了智慧与情怀的作品。