把DIY示波器性能实测这件事讲清楚之前,先泼半盆冷水。任何示波器都不是靠一句“绝对超出你想象”就能下结论的,它本质上就是带宽、采样率、触发、存储深度和前端信噪比互相妥协的测试设备。会判断边界的人,能把低成本方案用到很顺手;不会判断边界的人,用再贵的台式机也可能测出错误结论。
我这次拿到的是一块常见主控加板载ADC的DIY示波器硬件,不是商业整机,也不是加了高带宽探头、FPGA外置ADC的定制方案。先说实测结论:在PWM驱动、串口PID调试、GPIO时序这类嵌入式日常调试场景里,它确实比很多人预期中更能干活;但在高频振铃、偶发毛刺、精密纹波测量这些场景里,它和入门级台式示波器的差距非常明显,有些信号甚至不适合直接测量。下面按完整测试流程拆开讲,每一步都给出环境条件、操作步骤、判断标准和容易踩的坑,方便你在自己的板子上复现。
1. 实测前先把边界划清:它解决什么问题,替代不了什么
1.1 示波器在硬核调试流程里的真实位置
纯软件调试时,用Keil、VSCode、GDB、串口调试助手能看到程序有没有跑对,寄存器值是什么,变量是否符合预期。但这些工具都停留在处理器内部或串口日志层面,无法回答“某个引脚上真实的电压到底是多少、边沿是不是足够陡、接上负载之后波形会不会塌掉”。逻辑分析仪能看到数字电平变化,但看不到模拟噪声、过冲和振铃。真正做硬核调试,示波器是唯一能把物理信号实时变成图形的工具。
所以别把示波器当成万能调试设备。它和GDB调试、串口调试助手的关系是互补的:先用软件工具确认程序流程,再用逻辑分析仪看协议状态,最后用示波器验证真实引脚上的模拟波形。DIY示波器只要能稳定解决最后一环,对绝大多数嵌入式项目就已经很有价值。
1.2 DIY方案和台式示波器的差距在哪
常见DIY/低成本示波器方案和入门级台式示波器之间,差距最容易体现在模拟前端、触发电路和存储深度上,而不是屏幕到底有多大、界面上显示了多少位小数。
| 对比维度 | 常见DIY/低成本方案 | 入门级台式示波器的优势 |
|---|---|---|
| 模拟前端 | 往往用运放、分压电阻和简单衰减网络 | 更规范的探头匹配、校准和通道一致性 |
| 采样率与带宽 | 受主控、ADC和前端限制,差异很大 | 可选带宽更高,时基档位更齐全 |
| 触发能力 | 很多只做边沿触发或软件触发 | 普遍支持边沿、脉宽、斜率等多种触发 |
| 存储深度 | 偏小,慢时基下采样率容易下降 | 长记录采集更稳,不容易丢细节 |
| 软件稳定性 | 依赖上位机驱动、USB线和缓存处理 | 整合度更高,长时间采集更可靠 |
这里给的是常见印象,不是把你的板子一棍子打死。确实有DIY方案用FPGA加外部高速ADC,性能可以做得不错,但那种方案已经不太适合叫“低成本调试玩具”,更接近一台开源仪器开发平台。这篇文章主要以最常见的主控内置ADC方案为例,因为它的性能边界最有代表性。
1.3 先列待测信号清单,再决定要不要追求更高性能
动手测试之前,先把你实际要调的信号类型列出来:
- STM32或单片机输出的PWM,频率一般在几百Hz到几十kHz。
- 串口PID调试时,需要观察PWM占空比变化,以及电机驱动输出是否跟随指令。
- UART、I2C、SPI这类低速数字协议,可能需要看波形高低电平是否正常。
- 电源开关瞬间、GPIO使能信号的时序。
- 高速MIPI、差分信号、市电、高频射频这类信号,普通DIY示波器基本不碰。
如果只是看PWM占空比和频率,一个低频能力够用的DIY示波器就能解决。如果是要追查偶发毛刺,更重要的不是带宽,而是触发能力和存储深度。如果是要做精密电源纹波测量,不仅需要足够的垂直分辨率,还要考虑探头地线方式,问题会更复杂。先明确需求,再测性能,才能避免拿一个低频场景去要求高频仪器。
2. 实测环境与接线准备:顺序错了,后面数据都不作数
2.1 需要准备的测试工具
DIY示波器性能实测不一定需要多昂贵的设备,但至少要有几样基础工具,否则很多结论无法量化。
| 工具 | 用途 | 没有时的替代方案 |
|---|---|---|
| 被测DIY示波器 | 被测对象 | 无 |
| 示波器探头 | 连接被测点 | 尽量使用原配探头,不要用长杜邦线直接捅 |
| 万用表 | 校准直流电压读数 | 没有时只能默认示波器读数,但误差评估不完整 |
| 直流电源或LDO板 | 提供3.3V/5V参考电压 | 用开发板上的电源输出 |
| 信号发生器 | 输出方波、正弦波做带宽测试 | 用STM32 PWM输出方波,但正弦扫频仍需要补充 |
| 稳定USB线 | 连接虚拟示波器上位机 | 换线排查供电和数据传输问题 |
信号发生器是比较好用的工具。如果暂时没有,先用单片机输出PWM也可以完成部分测试,比如看方波上升沿、触发稳定性、长时间漂移。但是要做正弦扫频和带宽定量判断,最好还是要有一台DDS信号发生器。不需要买很贵的,功能正常、输出幅度稳定即可。
2.2 接线顺序里的两个工程要求
接线顺序第一原则是共地。示波器探头的地夹必须和被测试板的GND接到同一个参考点。如果两边地电位不同,屏幕上会出现乱跳的波形,甚至可能损坏被测板。实际接线时,先接地夹,再点信号针;取下时先摘信号针,再松地夹。养成这个习惯能避免不少误触发和短路风险。
第二原则是别随意延长地线。DIY示波器本身输入噪声就不算低,如果再用一根很长的夹子线当地线,它就像天线一样把环境噪声捡进来。测量高频信号时,长地线还会带来明显振铃。确实需要延长线时,尽量用屏蔽线,并且保持地线尽量短。很多朋友测SPI、UART时发现波形上有毛刺,先怀疑示波器坏了,其实问题很可能出在地线接法和探头夹子上。
2.3 开启一次像样的自检
拿到DIY示波器不要急着接被测信号,先做一次基础自检。第一步,接一个已知电压,比如开发板上的3.3V或5V,和万用表读数对比。第二步,看探头倍率开关。如果探头打在10x档,但示波器软件里没有设置成10x,显示电压会变成实际值的十分之一。这种错误很基础,却非常常见。
第三步,如果有板载方波自检输出,把探头接到自检端,观察方波边沿。如果边沿变圆,说明探头补偿电容偏小;如果出现过冲和振铃,说明补偿电容偏大。调探头上的可调电容,直到方波边沿锐利、顶部平坦即可。没有自检输出时,可以用信号发生器或单片机PWM先输出一个1kHz方波做参照。自检的意义是确认探头和输入通道没有明显异常,否则后面所有测量结果都可能失真。
3. 幅度和带宽底子:直流精度与方波上升沿测试
3.1 直流电压测量,如何判断误差
先测直流,因为直流是误差最容易被量化的项目。把示波器探头接到稳定的3.3V或5V电源,设置为合适的垂直档位,打开平均值测量或读取波形中部的电平值,同时用万用表读同一个测试点。
可以做一个简单记录表:
| 被测电压 | 示波器读数 | 万用表读数 | 误差 |
|---|---|---|---|
| 3.3V | ? | ? | ? |
| 5.0V | ? | ? | ? |
如果误差超过2%到5%,先检查量程、探头倍率和校准偏移。如果做过校准后误差仍然很大,多数不是软件问题,而是分压电阻精度、参考电压或者输入保护电路的问题。这种偏差会直接影响后续电压测量结论,所以不建议跳过。
从原理上理解一下:如果一个示波器的输入量程是3.3V,ADC位数是12位,理想量化步长大约是3.3除以4096,约0.8mV。但DIY方案的实际有效分辨率会被参考电压噪声、运放偏置、PCB布局等因素拉低。界面上显示很多位小数,不代表有效精度一定高。
如果你拿到的DIY虚拟示波器支持输出ADC原始采样序列,可以用类似逻辑做二次分析:
# 示例:把一串ADC原始值换算成电压 # ADC位数和参考电压以实际固件为准,这里只是演示思路 adc_bits = 12 vref = 3.3 raw_list = [0, 1024, 2048, 3072, 4095] voltage_list = [raw * vref / (2**adc_bits - 1) for raw in raw_list] print(voltage