1. 项目背景与核心需求
作为一名长期从事嵌入式硬件开发的工程师,我经常需要在现场调试电路时快速捕捉和分析信号。传统台式示波器虽然性能强大,但体积笨重、功耗高,而市面上多数手持示波器要么带宽不足,要么价格昂贵。这促使我萌生了自己设计一款高性价比便携示波器的想法。
经过多次迭代验证,最终实现的这款示波器具有以下核心特性:
- 双通道20MHz带宽:满足大多数嵌入式调试需求(如MCU时钟、PWM、通信总线分析)
- 65MSPS采样率:确保高频信号还原度(遵循Nyquist定理,支持20MHz信号的完整重构)
- 袖珍体积:120×70×25mm的机身尺寸,可轻松放入工具包
- 4小时续航:单节18650锂电池供电,支持全天候工作
设计难点:如何在有限体积和功耗下实现高输入阻抗(1MΩ//15pF)和低噪声(SNR≥70dB)的模拟前端,这是影响测量精度的关键。
2. 系统架构设计解析
2.1 整体架构设计
系统采用分层式架构,各模块通过标准化接口耦合,便于独立调试和功能扩展:
code复制[模拟前端] → [高速采集] → [数据处理] → [人机交互]
↑ ↑ ↑
│ │ │
[程控增益] [FPGA触发控制] [DSP波形运算]
2.1.1 关键器件选型考量
-
主控DSP:TMS320F28033
- 60MHz主频满足实时运算需求(FFT、参数测量)
- 内置12位ADC可用于触摸屏采样
- 低至<10mA的IDLE模式电流
-
FPGA:Xilinx Spartan-6 XC6SLX9
- 足够的Block RAM(576Kb)存储波形数据
- 支持LVDS接口直连高速ADC
- 动态功耗<300mW
-
ADC:ADS62P22
- 双通道12位65MSPS采样
- 70dB信噪比(SNR)
- 差分输入抑制共模噪声
2.2 信号链路设计要点
2.2.1 模拟前端信号流
code复制输入 → TVS保护 → 跟随器 → DC/AC切换 → PGA → 抗混叠滤波器 → ADC
- 输入保护:采用SMBJ5.0A TVS管,配合1kΩ限流电阻,可承受±50V瞬态电压
- 跟随器:OPA365运放(GBW=50MHz),确保高输入阻抗
- 耦合切换:ADG1636模拟开关(导通电阻3Ω),比机械继电器寿命提升100倍
2.2.2 数字信号处理流
code复制ADC → FPGA(触发/缓存) → DSP(校准/运算) → LCD
3. 硬件实现细节
3.1 模拟前端电路设计
3.1.1 程控增益放大电路
采用AD603压控增益放大器构建可编程增益架构:
c复制// DSP通过PWM控制增益(代码片段)
void SetGain(float gain_dB) {
float Vctrl = (gain_dB + 6) / 30 * 3.3; // AD603控制电压范围0-3.3V
PWM_SetDuty(CONFIG_PWM1, Vctrl/3.3*100);
}
增益档位设计:
| 档位 | 灵敏度 | 适用场景 |
|---|---|---|
| ×1 | 1V/div | 功率电路 |
| ×10 | 100mV/div | 数字电平 |
| ×50 | 20mV/div | 小信号测量 |
3.1.2 抗混叠滤波器设计
5阶巴特沃斯滤波器参数计算:
matlab复制% MATLAB计算代码
fc = 20e6; % 截止频率
[b,a] = butter(5, fc/(65e6/2), 'low'); % 65MSPS采样率
实际电路采用Sallen-Key拓扑,使用THS4031高速运放(GBW=100MHz),元件值:
- C1=C2=47pF
- R1=R2=169Ω(E96系列标准值)
3.2 电源管理设计
3.2.1 电源树架构
code复制18650锂电(3.7V)
├─ TPS61090 (Boost to 5V)
│ ├─ TPS7A4700 (LDO to +5V_Analog)
│ └─ TPS7A3301 (LDO to -5V_Analog)
└─ TPS650243 (PMIC)
├─ 1.8V (FPGA Core)
└─ 3.3V (Digital)
3.2.2 低功耗控制策略
c复制// 电源模式切换代码示例
void EnterLowPowerMode() {
FPGA_PowerDown(); // 关闭FPGA时钟
ADC_Shutdown(); // 禁用ADC
DSP_Idle(); // DSP进入IDLE模式
}
实测功耗对比:
| 模式 | 电流 | 唤醒时间 |
|---|---|---|
| 全速运行 | 150mA | - |
| 待机 | 20mA | 50ms |
| 深度睡眠 | 5mA | 200ms |
4. 软件实现关键点
4.1 FPGA触发逻辑实现
4.1.1 边沿触发Verilog实现
verilog复制always @(posedge adc_clk) begin
if (adc_data > trigger_level) begin
if (last_sample <= trigger_level) begin // 上升沿检测
trigger_flag <= 1'b1;
write_ptr <= 0; // 重置存储指针
end
end
last_sample <= adc_data;
end
支持触发类型:
- 边沿触发(上升/下降)
- 视频触发(同步脉冲识别)
- 脉宽触发(>/<设定阈值)
4.2 DSP数字信号处理
4.2.1 波形校准算法
采用两点校准法:
- 偏移校准:短接输入端,测量零点误差Voffset
- 增益校准:输入1Vpp标准信号,计算增益误差系数Gain
校准公式:
math复制V_{corrected} = (V_{raw} - V_{offset}) × Gain
4.2.2 FFT频谱分析优化
利用TMS320F28033的TI DSP库加速运算:
c复制// 1024点FFT示例
#include "DSP28x_Project.h"
#include "DSP_fft.h"
#pragma DATA_SECTION(fft_input, "FFTbuffer")
#pragma DATA_SECTION(fft_output, "FFTbuffer")
float fft_input[1024];
float fft_output[1024];
void DoFFT() {
DSP_fft1024(fft_input, fft_output);
}
4.3 人机交互设计
4.3.1 触摸屏驱动
电阻屏四线制采样流程:
- 施加VCC到X+,GND到X-,测量Y+电压得X坐标
- 施加VCC到Y+,GND到Y-,测量X+电压得Y坐标
- 10次采样中值滤波去抖
4.3.2 界面布局优化
采用分层式UI设计:
- 波形区:顶部80%区域
- 控制区:底部软键盘
- 状态栏:显示触发状态/电池电量
5. 实测性能与优化记录
5.1 关键指标测试数据
| 测试项 | 规格指标 | 实测结果 |
|---|---|---|
| 带宽(-3dB) | 20MHz | 21.3MHz |
| 上升时间 | ≤17.5ns | 16.8ns |
| 底噪(RMS) | <2mV | 1.8mV |
| 增益误差 | ±3% | +1.2% |
| 时基精度 | ±0.01% | ±0.008% |
5.2 典型问题排查案例
问题现象:高频信号测量时波形畸变
排查过程:
- 检查ADC采样时钟抖动(实测<5ps,正常)
- 测量抗混叠滤波器响应(发现20MHz处衰减不足)
- 更换滤波器电容为NP0材质(解决温度漂移问题)
- 重新调谐滤波器参数(最终-3dB点精确落在20.1MHz)
问题现象:触摸屏坐标漂移
解决方案:
- 增加采样点从5次到10次
- 采用加权平均算法(新采样点权重30%)
- 在PCB上增加屏蔽层(降低LCD干扰)
6. 生产优化建议
6.1 可制造性设计(DFM)
-
PCB布局优化:
- 模拟与数字地分割间距≥3mm
- ADC时钟走线长度匹配(±50μm)
- 关键信号线做50Ω阻抗控制
-
元件选型替代:
- AD603可替换为LMH6502(成本降低30%)
- 18650电池座改用Pogo Pin接触(减少机械磨损)
6.2 校准流程简化
开发自动化校准夹具:
- 通过USB注入标准信号
- 自动运行校准脚本
- 将系数写入EEPROM
(校准时间从15分钟缩短到2分钟)
7. 项目演进方向
-
扩展存储深度:
- 外接IS61LV25616 SRAM(256K×16bit)
- 实现波形缩放浏览功能
-
协议解码功能:
- I2C/SPI/UART触发与解码
- 采用状态机实现(FPGA资源占用<10%)
-
无线传输模块:
- 集成ESP32-C3(Wi-Fi 6)
- 支持WebSocket实时传输波形数据
这个项目从最初构想到最后实现历时9个月,期间经历了3次PCB改版和无数次固件调试。最让我自豪的是在保持专业级性能的同时,将整机成本控制在同类产品的1/3左右。对于想要复现的朋友,建议先从简化版单通道设计开始,逐步增加功能复杂度。