1. 项目概述与需求分析:万用表的功能定义、技术指标、系统架构选型

大家好,我是你们的硬件设计讲师。今天咱们正式开干,聊聊嵌入式万用表这个项目。

说实话,我当年刚入行时,第一个独立负责的项目就是一台手持万用表。那会儿踩了不少坑,有些坑到现在想起来还觉得肉疼。所以这一章,我会把需求分析阶段最容易忽略的点,掰开揉碎了讲给你听。

1.1 万用表到底要干什么?——功能定义

万用表,说白了就是「一表多用」。我们这次做的不是那种几十块钱的玩具表,而是一台能真正用于嵌入式调试的实用工具。

我个人习惯,在项目启动前先列一个「必须做」和「最好做」的清单。对于这个项目,核心功能有这些:

  • 直流电压测量:最基础的功能,量程至少覆盖 0-30V
  • 直流电流测量:用于测模块功耗,量程 0-2A 就够用
  • 电阻测量:从 1Ω 到 10MΩ,覆盖常见阻值
  • 通断测试:带蜂鸣器,响应要快
  • 二极管压降测量:这个在维修时特别有用

嗯,这里要注意,我见过不少新手一上来就想做「全功能」,恨不得把电容、电感、频率全塞进去。结果呢?项目拖了半年,连最基本的电压档都没调准。

我的建议:先做减法,把上述 5 个功能做到位,比做 10 个半吊子功能强十倍。

1.2 技术指标——精度、量程、采样率

技术指标这东西,说白了就是「你打算把表做到多好」。我当年第一次做万用表时,天真地以为「精度 0.5% 很容易」,结果被现实狠狠教育了一顿。

精度

精度是万用表的灵魂。我们这次的目标是:

测量项目 目标精度 说明
直流电压 ±(0.5% + 2字) 基本档位,够用
直流电流 ±(1% + 3字) 电流档精度稍低,正常
电阻 ±(1% + 2字) 中低阻值表现更好

为什么会定这个精度?因为对于嵌入式调试来说,0.5% 的电压精度已经能判断电源是否正常了。你想想看,测一个 3.3V 的 LDO 输出,误差 16.5mV,完全够用。

我曾经踩过的坑:一开始选了 16 位的 ADC,觉得精度肯定没问题。结果忽略了参考电压的温漂,温度一变化,读数就飘。后来才明白,精度是「系统精度」,不是 ADC 位数决定的。

量程

量程设计其实是个平衡艺术。量程太少,用起来不方便;量程太多,硬件成本上去了,切换逻辑也复杂。

我个人习惯这样划分:

  • 电压档:200mV、2V、20V、200V(自动量程)
  • 电流档:20mA、200mA、2A(手动切换,安全第一)
  • 电阻档:200Ω、2kΩ、20kΩ、200kΩ、2MΩ、10MΩ

注意电流档,我建议用手动量程。为什么?因为自动量程在电流档容易出事——如果你用 2A 档去测一个毫安级的信号,读数精度很差;反过来,用 20mA 档去测 1A 电流,保险丝直接炸。

采样率

采样率这个指标,很多人会忽略。其实它直接影响使用体验。

对于万用表来说,采样率不需要太高。我们定 10 次/秒,也就是 100ms 刷新一次。为什么?

  • 人眼能分辨的刷新率大约 3-5Hz,10Hz 已经感觉很流畅了
  • 采样率太高,噪声会变大,需要更多的数字滤波
  • MCU 的处理能力有限,10Hz 是个性价比很高的选择

不过,通断测试的响应时间要单独优化。我要求蜂鸣器响应时间小于 1ms,这样才能在快速扫电路时「滴滴滴」地跟得上你的手速。

1.3 系统架构选型——从芯片到方案

架构选型,说白了就是「用什么芯片、怎么搭」。这一步走错了,后面全是坑。

方案一:MCU + 分立 ADC

这是最传统的方案。MCU 用 STM32F103,ADC 用 ADS1115(16位)或 ADS1256(24位)。

  • 优点:灵活,想怎么调就怎么调
  • 缺点:外围电路复杂,需要自己搭信号调理、保护电路
  • 适合:想深入学习的同学

方案二:专用万用表芯片 + MCU

比如 FS9721、ES51922 这类芯片。它们内部集成了 ADC、量程切换、LCD 驱动等。

  • 优点:外围简单,开发快
  • 缺点:灵活性差,精度受限于芯片本身
  • 适合:快速出产品

方案三:MCU 内置 ADC + 前端调理

用 STM32G4 系列,它内置了 12 位 ADC,配合 PGA 和外部基准。

  • 优点:成本低,BOM 简单
  • 缺点:精度有限,12 位 ADC 做 0.5% 精度有点吃力
  • 适合:低成本方案

我个人推荐方案一。为什么?因为咱们是「从零到一」的课程,方案一能让你把每个环节都吃透。我当年就是靠这个方案,把 ADC 的采样、滤波、校准全搞明白了。

最终选型:MCU 用 STM32F103C8T6,ADC 用 ADS1115(16位),前端用 OPA2333 做信号调理,参考电压用 REF3033。

1.4 系统框图——一张图说清楚

画系统框图,我有个习惯:先画功能模块,再画信号流向,最后标接口。这样不容易漏东西。

┌─────────────────────────────────────────────────┐
│                  输入保护电路                      │
│  (PTC + TVS + 压敏电阻 + 保险丝)                  │
└────────────────────┬────────────────────────────┘
                     │
┌────────────────────▼────────────────────────────┐
│                  量程切换                        │
│  (继电器 + 模拟开关 CD4051)                      │
└────────────────────┬────────────────────────────┘
                     │
┌────────────────────▼────────────────────────────┐
│                  信号调理                        │
│  (OPA2333 缓冲 + 分压 + I/V 转换)                │
└────────────────────┬────────────────────────────┘
                     │
┌────────────────────▼────────────────────────────┐
│                  ADC 采样                        │
│  (ADS1115, 16位, I2C接口)                       │
└────────────────────┬────────────────────────────┘
                     │
┌────────────────────▼────────────────────────────┐
│              MCU 主控 (STM32F103)                │
│  数据处理 + 自动量程 + 校准 + 显示驱动            │
└──────┬─────────────────────────────┬────────────┘
       │                             │
┌──────▼──────┐            ┌────────▼────────┐
│   OLED 显示  │            │   按键 + 蜂鸣器   │
│  (128x64)   │            │   (3个按键)      │
└─────────────┘            └─────────────────┘

这个框图看起来简单,但每个模块都有讲究。比如输入保护,我见过有人直接用电阻分压,结果一测高压,ADC 直接冒烟。嗯,保护电路不是「可有可无」,而是「必须做」。

1.5 需求分析阶段最容易犯的错

最后,我总结几个我在项目中踩过的坑,你注意避开:

  1. 忽略输入阻抗:电压档输入阻抗至少 10MΩ,否则测高阻信号时会把电路「拉偏」
  2. 忘记共模电压:差分测量时,共模电压不能超过 ADC 的供电范围
  3. 低估噪声:16 位 ADC 的 LSB 大约 76μV(以 5V 参考计算),电路里随便一个噪声就盖过去了
  4. 不做校准:没有校准的万用表,精度全靠运气

好了,这一章的内容就到这里。下一章咱们开始画原理图,从输入保护电路讲起。到时候我会把每个元件的选型思路、计算过程都讲清楚。

记住一句话:需求分析阶段多花一周,硬件调试阶段少花一个月。别急着动手画板子,先把需求想透。