☰
便携式数字示波器设计与实现全解析:从模拟前端到波形重构
2026/10/21 7:12:33 网站建设 项目流程

我们搞电子的都知道,示波器这东西,工作台上多大都不嫌大,可一旦要往外跑,尺寸和重量就成了最大的问题。我一直琢磨着做一台便携式数字示波器,不是买不起成品,而是市面上那些手持示波器要么带宽缩水严重,要么操作逻辑别扭,要么价格高得离谱。折腾了几个月,方案推倒重来三次,最后总算做出一台带宽够用、能塞进工具包、续航还过得去的样机。这篇文章就把整个设计和实现过程完整拆开来讲,从需求指标怎么定,到模拟前端怎么搭,再到触发和波形重构怎么处理,以及那些在调试阶段差点让人砸键盘的坑,一次性说清楚。无论你是想复刻一台,还是正在犹豫要不要动手,这份记录应该都能帮你少走不少弯路。

1. 为什么非要自己做一个?聊聊便携示波器的真实使用场景

1.1 台式示波器在现场调试里的"笨重"问题

先说动机。日常维修和现场调试,传统台式示波器的痛点非常明显:体积大、重量重、必须有交流电。很多现场环境,比如设备柜后面、夹层里、甚至户外测试点,根本没有放台机的地方,更别提还要拖着电源线。带一台轻便的笔记本去现场,再配一个USB示波器,算是个折中方案,但USB示波器依赖电脑,开机慢、软件环境不一、隔离性也差,有时候光装驱动就耗掉半天。

便携式数字示波器要解决的就是"随时随地看波形"这件事。它不是替代实验室里的高精度台机,而是覆盖那些台机够不着、万用表又看不见的场景:判断传感器有无输出、看电机驱动板的PWM波形、量一下通信总线的电平时序、检查电源上电瞬间的过冲。这些场景的共同特点是信号频率不高、幅度不算太小、但要求设备随拿随用,最好单手操作,另一只手还能拿探头。

1.2 从需求表出发:先定指标再选器件

做硬件最忌讳拿着芯片手册挑参数,该做的是先拉一张需求表。我给自己定的设计目标是这样的,你可以直接参考:

需求项指标设定理由
模拟带宽50MHz覆盖绝大多数现场调试信号(PWM、通信、电源噪声)
实时采样率200MSa/s对50MHz信号足够重构波形,兼顾ADC成本和功耗
垂直分辨率8位看波形形态和幅度足够,配合软件平均可提升等效精度
输入阻抗1MΩ ∥ 20pF匹配常规无源探头,兼容10x和1x档
垂直灵敏度10mV/div 至 10V/div覆盖弱信号和电源轨信号
存储深度512K点在较高采样率下保留足够波形细节
触发方式上升沿/下降沿、可调电平满足稳定显示波形的基本需求
供电/续航锂电池,4小时以上现场使用的基本保障
显示3.5寸以上彩屏保证波形可视区域,按键物理操作

有了这张表,器件选型才有边界。便携式数字示波器最核心的三个器件是ADC、主控逻辑和屏幕,它们互相牵制。比如屏幕刷新率决定了你看到的波形是否流畅,而数据量又取决于ADC采样率和存储深度,最终都被电池容量和PCB面积卡着。

1.3 采样率、带宽、存储深度,这三者到底什么关系

很多新手会把"带宽"和"采样率"混为一谈,这是整个项目里最容易出偏差的地方。带宽是模拟前端的频率响应能力,采样率是ADC每秒钟采多少个点,两者必须搭配。理论上按奈奎斯特定理,采样率达到信号最高频率的2倍以上就能重构波形,但实际要"好看",一般取4到5倍。50MHz带宽配200MSa/s,正好是4倍关系,属于性价比比较高、又不至于波形严重失真的组合。

存储深度则是采样率和时间窗口之间的缓冲。举个例子,如果水平时基打到10ms/div,一屏12格就是120ms,以200MSa/s采样,一屏数据量高达24M点。如果存储深度只有512K点,就必须降低采样率到约4MSa/s才能把这一屏存下来。所以真正设计固件的时候,要做"时基自适应采样率":慢时基降低采样率,快时基保持满采样率,让每屏数据量始终不超过存储深度。这一步不做,你就会发现波形要么显示不全,要么细节全丢。

2. 系统架构设计:从探头到屏幕的信号走一遍

2.1 整机信号链拆解

一台便携式数字示波器的信号链路,说穿了就是四段:模拟前端、ADC采集、触发与存储、显示与交互。信号从探头进来,先经过输入保护和阻抗变换,再经过衰减和增益控制变成ADC量程内比较理想的电压,由ADC转换成并行数字信号,数字逻辑做好预触发存储和抽取,最后送屏幕画出来。

按功能模块划分,硬件上需要五块:模拟调理板、采集与存储板(这里是FPGA担当主力)、主控板(MCU或者带GUI能力的高性能处理器)、电源管理板、显示与按键板。为了控制体积,我没做严格的模块化分板,而是把模拟前端单独做了一块小板,数字主控做在一块大板上,模拟和数字之间用排针连接,靠物理隔离来减少数字噪声对模拟信号的耦合。

2.2 为什么模拟前端比数字部分更容易翻车

数字部分的逻辑再复杂,只要时序对了,问题都好定位。模拟前端不一样,它直接决定示波器的带宽、灵敏度和噪声底,而且一旦布局不好,任何软件都救不回来。便携式数字示波器里最常见的败笔就是前端输入电容过大。探头进来经过BNC座和保护电路,到运放输入这段走线的寄生电容、TVS管结电容、运放输入电容,全部并联在一起。如果总输入电容超过20pF太多,配合探头补偿电容就会出现高频过补偿或欠补偿,实测中方波边沿就会变成夸张的振铃。

所以前端设计要遵循一个原则:从BNC座到运放输入的距离尽量短,走线尽量细且不跨分割,保护器件的电容要挑小的。接口处的TVS管虽然能抗静电和过压,但它的结电容通常在几十到几百pF,必须谨慎选型,否则带宽直接塌掉。这类细节决定了你的示波器是标称50MHz实际30MHz,还是标称50MHz实测还能往上一些。

2.3 时钟和基准:时间轴准不准全看这里

采样时钟决定了示波器的水平轴精度。如果用FPGA内部的PLL产生采样时钟,要注意抖动对高频信号的影响。时钟抖动的本质是采样时刻随机提前或滞后,输入信号变化率越大,抖动造成的幅度误差越明显,体现在屏幕上就是高频波形边缘变粗、噪声感增强。

更讲究一点的做法是给ADC专门用一个低抖动晶振作为采样时钟源,而不是用MCU或FPGA分频出来的时钟。便携设备对成本敏感,我最终用的是普通有源晶振加FPGA内部时钟管理,实测下来50MHz以内可接受,但如果你要做100MHz级别的带宽,建议直接上专用采样时钟芯片。另外,ADC的参考电压要独立供电,用低温漂基准源,否则垂直方向读数会漂,做电压测量就不准了。

3. 硬件核心实现:前端调理电路与ADC选型细节

3.1 输入保护与阻抗变换

前端的第一个器件不是放大器,而是保护网络。示波器探头经常被拿去碰高压,如果没有保护,后面所有芯片一次就烧穿。我的方案是:BNC输入先串一个低阻值电阻(几十到几百欧),再并联两个背对背的限幅二极管到电源轨,最后再放一颗TVS管。正常情况下信号被二极管钳位在电源轨之间,异常高压冲击被TVS管吸收。这个顺序有讲究:串联电阻要放在最前面,它既能限制浪涌电流,又能和二极管配合形成第一道钳位。

阻抗变换用高阻输入的结型场效应管或低偏置电流运放搭电压跟随器。示波器标准输入阻抗是1MΩ并联约20pF,跟随器的作用就是把高阻抗信号转换成低阻抗,供后级衰减和增益级使用。这里需要注意运放的输入电容不能太大,压摆率要足够,否则带宽不够,方波边沿会变缓。

3.2 衰减网络与量程切换

垂直灵敏度要覆盖10mV/div到10V/div,不可能靠一级放大器完成,需要灵活的衰减链路。标准做法是使用电阻分压网络,配合继电器或模拟开关切换档位。模拟开关便宜且体积小,但导通电阻存在非线性,会带来幅度误差,高压摆率信号下更明显;继电器线性好,但体积大、切换慢、成本高。

我的折中方案是:低频和高增益档位用模拟开关,高频和大衰减档位用继电器。模拟开关做出来的档位必须靠软件校准表修正,生产或调机时用标准信号源逐档读数,把偏差记录到Flash里。继电器档位的PCB走线要尽量短,引脚焊盘直接压在衰减电阻网络上,减少寄生电感对高频的影响。

3.3 ADC怎么选:采样率、分辨率和接口的权衡

便携式数字示波器的ADC是One Shot的高速并行ADC比较常见,接口多半是8位并行或LVDS。选型时除了采样率和位数,还要看功耗和输入结构。8位200MSa/s的并行ADC,功耗大约几百毫瓦,在电池供电系统里是个大头,但为了性能又绕不开。输入结构上,ADC一般接受差分或单端信号,单端接法简单,但抑制共模噪声差,所以前端最后一级建议有单端转差分能力,或者用差分输出放大器。

如果预算充足,可以考虑带片上采样保持的12位ADC搭配降低采样率使用。但我实测下来,8位在大多数现场场景里完全够用,你只是看波形形态和大致幅度,256个量化等级对应约0.4%的单格电压,配合软件平均已经够判断问题。真正8位不够用的场景是看小信号叠加在大直流上的纹波,这时候可以靠数字上的波形平均技术来弥补。

3.4 PCB布局和接地,差一步就全盘皆输

便携式数字示波器是把模拟、数字、电源塞在一小块板子上的典型场景,布局稍微不合理就会出现"自激噪声"。我的经验是:模拟前端要有一块独立的模拟地平面,用单点或者星形连接方式接回数字地;ADC的数字输出走线要远离模拟输入和参考电压走线;采样时钟要包地;电源芯片尽量放在板边,避免开关噪声辐射到模拟区。

板子层叠上建议至少四层:顶层信号、底层信号、中间完整地平面和电源平面。缺了完整地平面,前端的高频回流路径就会乱掉,输入信号的回路电感增加,屏幕上就会出现一种说不清道不明的"鬼影"。调这种问题很折磨人,因为软件完全正常,探头短路时噪声却一直存在。

4. 数字核心实现:采样控制、触发与波形重构

4.1 采样控制的时序设计

200MSa/s意味着每5ns采一个点,这种速度MCU无论如何扛不住,所以数字核心必须交给FPGA或CPLD来做。我的设计是一个状态机:ADC在每个采样时钟沿把8位数据锁存进FIFO,与此同时触发逻辑监视数据流,一旦检测到满足触发条件的点,就标记当前存储区,随后从特定位置开始把数据搬运到显示缓冲里。

这里有个容易被忽略的问题:触发不能只做"触发后存储",还要有预触发功能。也就是说,你希望屏幕上显示触发点左边的波形,往往需要看触发之前的信号状态。实现方式是用环形缓冲,ADC数据不断写入FIFO,触发事件发生后,再继续写一小段时间,最后读取环形缓冲里所有数据。预触发长度决定了你能回看多少"过去",一般设计成屏幕水平格数的10%到20%可调。

4.2 触发电路设计与抖动处理

触发设计直接决定波形在屏幕上是否稳定。低成本的方案是在模拟前端就做一个硬件比较器,信号与可编程DAC输出的触发电平比较,输出一个干净的边沿作为触发脉冲;另一种是在数字域做触发,直接用ADC数据流里的值和阈值比较。数字触发的优点是灵活、没有额外的模拟电路负担,缺点是延迟大,高频时精度可能不够。

我实际用的是"模拟比较器+数字同步"的混合方案:硬件比较器给出快速触发参考,FPGA再对这个触发脉冲做多级同步,消除跨时钟域的亚稳态问题。实测中最常见的抖动来源是没有加迟滞的比较器:信号缓慢上升时,噪声会在比较器阈值附近抖动多次,导致触发时刻闪烁。解决办法是在比较器上增加一个几十毫伏的迟滞电阻网络,让阈值在临界点附近不那么"敏感"。

4.3 存储深度和抽取逻辑

存储深度节制的核心是"不要用满采样率去记录慢信号"。如果用户把时基调到100ms/div,还以200MSa/s采样,512K点只能覆盖大约2.5ms,屏幕肯定显示不满。固件里必须有分时基的采样率表:比如时基大于1ms/div时自动切到20MSa/s或更低,保证水平窗口内总是有足够但不过量的数据点。

抽取方式也要注意。直接均匀抽取会丢失毛刺和窄脉冲,对现场排查来说非常危险。更好的做法是"峰值检测"模式:在每个显示像素对应的数据段内,只保留最大值和最小值,分别画在屏幕的上下边界。这样即使慢时基,尖峰毛刺也能在屏幕上看出来。这个功能做不做,体验差异非常大。

4.4 波形显示与自动测量

显示部分要考虑刷新效率。如果每次采样完都把上万个点直接丢给屏幕,MCU会被拖死。我的做法是先在FPGA里做降采样,把数据压缩到屏幕像素宽度附近(比如横向640个像素,就让FPGA输出640对最大值/最小值),MCU拿到这组数据后只做简单的坐标映射和画线,刷新率能做到30帧以上。加上触发稳定时每帧波形都几乎重合,屏幕上看起来就会很平滑。

自动测量功能里,频率测量不能单纯依赖触发后的数据。更好的办法是独立设计一个硬件计数通道,对探头的信号整形后做边沿计数,测出来的频率比靠波形倒推要稳定得多。幅值测量则要依赖校准表,软件从ADC原始码反推出电压,再乘上当前衰减和增益系数。

5. 便携化设计:供电、屏幕、外壳,样样都是坑

5.1 锂电池供电与电源噪声

便携设备逃不开电池。我用单节聚合物锂电池加升压和LDO的组合:电池电压经过DC-DC升压到正负5V和5V数字轨,然后模拟部分再用低噪声LDO二次稳压。直接拿DC-DC输出给模拟前端供电,几乎必然会引入开关纹波,屏幕上表现为特定频率的噪声带。LDO虽然效率低,但胜在输出干净。

电源顺序也有讲究:上电时先给模拟前端供电,再给数字逻辑复位;掉电时反向。如果没有这个时序,ADC可能在参考电压还没稳定时就开始采集,产生一堆乱码,甚至锁死。可以用一个简单的电源监控芯片控制复位信号,成本不高但能省很多奇怪问题。

5.2 屏幕和交互方案

屏幕我选了4.3寸IPS屏,分辨率800×480,作为便携设备这个尺寸刚好。屏幕驱动方式上,如果MCU有RGB接口或专用屏幕控制器,显示效果会好很多;如果只有SPI接口,刷新大量像素会严重掉帧。为了兼顾成本和功耗,我采用SPI屏配合FPGA预先压缩数据,实际效果能接受,但如果你追求示波器那种"贴着手感"的实时感,建议还是用带屏幕控制器的方案。

按键布局要贴合单手操作:常用的"时基调节""垂直幅度""触发模式"放在右手拇指覆盖区,电源、菜单、确认放在另一侧。触屏在户外戴手套时几乎没法用,所以物理按键必须保留。我见过很多便携示波器把按键排得太密,戴手套根本按不准,这是设计细节的失败。

5.3 外壳、屏蔽与散热

便携示波器的外壳最好用金属材质,或者塑料外壳内部喷涂导电漆并接地。实测中,不带屏蔽的塑料壳在靠近开关电源时会拾取几十毫伏的感应噪声,前端输入接地时屏幕上都有明显底噪。如果实在要用塑料壳,可以在内部贴一层铜箔胶带,并把铜箔接在数字地上。

散热方面,高速ADC和FPGA是主要热源。便携设备没有风扇,设计时必须考虑功耗预算:ADC和FPGA合起来的功耗尽量控制在1.5W以内,必要时给FPGA加上散热片。整机长时间工作后屏幕偏色也是常见问题,所以屏幕背光驱动要远离电源模块。

5.4 探头补偿与接口

便携示波器没有地方放笨重的BNC线,但BNC接口又是最稳妥的选择。我给样机用的是一体化BNC座,垂直安装,尽量降低探头插座对前端输入电容的影响。探头一定要配10x和1x可切换的常规无源探头,而且必须有一颗小一字螺丝刀来调探头补偿电容。

每次换探头或者重新开机后,先接上1kHz方波自检信号,观察方波边沿是上翘还是下弯,调整探头补偿电容。这个步骤看着基础,实际操作里至少一半的"波形显示不对"其实是探头没校准。可以在机器里内置一个自检方波输出,作为探头的参考标准。

6. 整机调试:从能开机到能测准的关键几步

6.1 先让系统自检,再谈波形

第一次上电测试,优先级顺序应该是:电源电压、MCU运行、屏幕点亮、FPGA配置、ADC数据通路、前端信号链路。别一上来就接信号源,先用万用表把各路电源都量一遍,确认没有短路,再烧一个最简单的LED翻转程序验证MCU,然后是屏幕、FPGA、ADC。

FPGA和MCU之间的通信是容易卡壳的环节。我的做法是先让FPGA输出一个固定的8位累加数,MCU通过并行接口读出来,确认时序无误后再接入真正的ADC数据流。这一步能把"接口时序错误"和"ADC数据错误"分开,否则问题交织在一起会非常难查。

6.2 用已知信号校准系统

调通数据链路之后,接一个标准信号源。先用1kHz、1Vpp正弦波,从屏幕上观察幅度和频率显示值是否和信号源一致。此时做的三个基本校准是:零点校准(输入接地,记录各档位ADC零点)、增益校准(输入已知直流电平,记录每个垂直档位的ADC码对应关系)、带宽校准(用扫频信号测量各频点幅度响应,确认-3dB点)。

校准数据要存到非易失存储器里。这里有个技巧:不要只存一个全局增益系数,因为前端模拟开关在不同档位的导通电阻和寄生参数并不一致,最好每个档位单独存一组校准参数。软件在上电时根据当前档位切换系数。这套方案实测的直流幅度误差可以做到3%以内。

6.3 实测中典型问题排查记录

这是整个项目里最值钱的一段,我把调试过程中遇到过的几类问题列成一张表:

现象可能根因实际解决方式
输入接地时底噪过大电源纹波、地平面回流、参考电压不稳换低噪声LDO,增加π型滤波,调整PCB接地方式
方波边沿振铃明显探头未补偿、输入电容过大校准探头电容,减少前端寄生电容
触发后波形水平抖动比较器无迟滞、触发电平裕量不足增加迟滞网络,调高触发电平精度
慢时基看不到毛刺均匀抽取把窄脉冲丢了改用峰值检测模式,保留极值点
ADC满量程附近读数非线性前端放大器趋近输出轨调整增益余量,ADC满量程匹配到90%
屏幕刷新卡顿数据未压缩,MCU处理压力大在FPGA内做显示降采样,数据量降为像素宽度

这些问题的排查思路都是"先判断问题在模拟段还是数字段"。判断方法很朴素:用一根短路线把前端运放输入直接短路,如果底噪依旧,问题大概率在电源或ADC参考端;如果底噪消失,说明是输入链路自身问题。这种分离定位法能省掉大量瞎猜时间。

6.4 电池续航和整机功耗优化

做完整机测试后,我测了一下功耗:屏幕背光最亮、FPGA满载、ADC满速运行时,整机功耗约2.6W;用一块3000mAh的锂电池,续航大概在4.5到5小时,基本达标。如果想进一步拉长续航,可以考虑在慢时基模式下让ADC降频工作,或者空闲时把FPGA切到低功耗模式,屏幕背光调低。这些优化要围绕"现场使用"来取舍,而不是一味省电导致反应变慢。

散热问题也要在整机测试阶段验证。连续工作2小时,外壳最高温处出现在FPGA和电池充电模块附近,约42度,不算烫手,可以接受。如果超过50度,就要检查是不是有芯片长时间工作在接近极限的状态,该降频就降频。

整台机器做下来,最大的体会是:便携式数字示波器的难点不在某一个点上,而在于所有环节都互相牵制。你把带宽做上去了,ADC功耗和成本上来;你把存储做深了,屏幕刷新和CPU压力上来;你把屏幕做大,续航和便携性就下降。所谓"设计与实现",其实就是不断在这些约束之间找平衡。对多数现场场景来说,稳定、顺手、傻瓜化,往往比参数好看更重要。我最后留了一个小习惯:每次开机先看自检方波,顺手调一下探头补偿电容,这比任何软件校准都更能保证你看到的波形是真实的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询