知识门户

返回

第 6 章 输入电路:信号怎么进来

views | comments

本章核心问题:传感器、按键、麦克风……这些外部信号,怎么安全、准确地送进 MCU?

如果把 MCU 比作一个大脑,那”输入电路”就是它的五官。眼睛看光线、耳朵听声音、皮肤感受温度——这些信号在变成数字之前,都要经过一段精心设计的”入口电路”。本章将带你逐一拆解每种输入场景,手把手教你把信号”请”进芯片。


6.1 按键与开关#

6.1.1 最简单的输入:一个按键#

按键是嵌入式系统中最古老、最朴素的人机交互方式。你按一下,MCU 就知道”有人按了”。听起来简单,但如果不注意细节,一个按键就能让你调试一整天。

基本电路:上拉电阻方案

这是你在 90% 的电路图中都会看到的按键接法:

         VCC (3.3V)

         ┌┴┐
         │ │ R1 = 10kΩ (上拉电阻)
         └┬┘

          ├───────── GPIO(MCU 输入引脚)

         ┌┴┐
         │ │ SW1(轻触按键)
         └┬┘

         GND
plaintext

工作原理:

  • 按键松开时:GPIO 通过 10kΩ 电阻被”拉”到 VCC(3.3V),读到高电平
  • 按键按下时:GPIO 直接连到 GND,读到低电平

💡 为什么需要上拉电阻? 如果去掉 R1,按键松开时 GPIO 引脚处于”悬空”状态(既不是高也不是低),极易受到噪声干扰,MCU 可能读到乱七八糟的值。上拉电阻的作用就是:给悬空的引脚一个确定的默认电平

下拉电阻方案(反过来):

GPIO ──┬── SW1 ── VCC

      ┌┴┐
      │ │ R1 = 10kΩ (下拉电阻)
      └┬┘

      GND
plaintext

此时:松开 = 低电平,按下 = 高电平。逻辑是反的,但完全可用。

实际选择上拉还是下拉?

考虑因素上拉电阻(按键接地)下拉电阻(按键接 VCC)
默认电平高(逻辑 1)低(逻辑 0)
抗干扰能力较强(高电平噪声容限大)一般
MCU 内部上拉很多 MCU 内置上拉电阻,可省外部电阻很少有内置下拉
常用程度⭐⭐⭐⭐⭐ 最常用⭐⭐ 偶尔使用

🔧 实用技巧:STM32、ESP32 等 MCU 内部有可配置的上拉/下拉电阻(通常 20kΩ~50kΩ),简单应用中可以省掉外部电阻,直接用内部上拉,简化电路。但如果走线较长、环境噪声大,还是建议加外部 10kΩ 上拉。

6.1.2 按键的”天敌”:抖动#

什么是按键抖动?

机械按键的内部是金属弹片。当你按下按键的瞬间,弹片不会”啪”的一下就稳定接触,而是会像弹簧一样来回弹跳几次,大约在 5ms~20ms 内才能稳定。这个过程在示波器上看起来是这样的:

理想情况(你以为的):
        ┌──────────────────
   ─────┘
        ↑ 按下

实际情况(真实的):
        ┌─┐ ┌┐┌────────────
   ─────┘ └─┘└┘
        ↑ 弹跳!MCU 以为你按了 3 次
plaintext

对于 MCU 来说(处理速度是微秒级的),这 10ms 的弹跳就像你在一秒内疯狂按了十几次按键!后果就是:按一次,触发多次

6.1.3 硬件消抖:RC 低通滤波#

最经典的硬件消抖方案就是在按键旁边加一个电容:

         VCC (3.3V)

         ┌┴┐
         │ │ R1 = 10kΩ
         └┬┘

          ├──┬────── GPIO
          │  │
         ┌┴┐│
     C1  │ ││ SW1(按键)
  100nF └┬┘│
          │ │
          ├─┘

         GND
plaintext

原理:利用电容”电压不能突变”的特性。按键弹跳产生的快速脉冲,会被电容”吸收”——电容通过 R1 缓慢充放电,把尖锐的脉冲”抹平”成一条平滑的曲线。

参数选择

RC 时间常数 τ = R × C:

  • R = 10kΩ,C = 100nF → τ = 1ms
  • 一般要求 τ ≥ 抖动时间的 3~5 倍
  • 抖动典型值 520ms,所以 τ 取 10100ms 较合适
消抖强度R 值C 值τ 值适用场景
轻度10kΩ100nF1ms快速按键,软件配合消抖
中度10kΩ1μF10ms一般场景,推荐
重度100kΩ1μF100ms恶劣环境,按键质量差

⚠️ 注意:RC 值太大,按键反应会变”迟钝”——按下去后要等很久才响应,快速连续按会丢失。所以不要一味加大。

6.1.4 软件消抖#

在实际项目中,软件消抖往往比硬件消抖更常用(因为省钱、省元件):

// 最简单的软件消抖(伪代码)
if (GPIO_Read(KEY_PIN) == LOW) {       // 检测到低电平
    Delay_ms(20);                       // 等 20ms,让弹跳过去
    if (GPIO_Read(KEY_PIN) == LOW) {    // 再次确认还是低电平
        // 确认按键真的按下了!
        Key_Pressed = true;
    }
}
c

核心思路:检测到低电平后,等 10~20ms 再读一次。如果还是低电平,说明不是抖动,是真的按下了。

💡 工程实践:很多成熟产品同时使用硬件 RC 滤波(粗消抖)+ 软件延时(精消抖),双保险。

6.1.5 矩阵键盘(简述)#

当按键数量多(比如 4×4 = 16 个按键)时,如果每个按键占一个 GPIO,需要 16 个引脚,太浪费了。

矩阵键盘的思路:把按键排成行和列的交叉矩阵。4 行 × 4 列只需要 8 个 GPIO 就能检测 16 个按键。

        COL1  COL2  COL3  COL4
         │     │     │     │
ROW1 ── [K1] ─[K2] ─[K3] ─[K4]
         │     │     │     │
ROW2 ── [K5] ─[K6] ─[K7] ─[K8]
         │     │     │     │
ROW3 ── [K9] ─[K10]─[K11]─[K12]
         │     │     │     │
ROW4 ── [K13]─[K14]─[K15]─[K16]
plaintext

扫描原理

  1. 将 ROW1 拉低,其他行拉高
  2. 读取 COL1~COL4,哪个列是低电平,说明对应按键被按下
  3. 再拉低 ROW2,读列……逐行扫描

📌 矩阵键盘在遥控器、计算器、工业键盘中非常常见,但日常小项目中用得不多,了解原理即可。


6.2 ADC 详解#

6.2.1 ADC 是什么?#

ADC(Analog-to-Digital Converter,模数转换器)是 MCU 感知模拟世界的”翻译官”。真实世界的信号——温度、光照、声音、压力——都是连续变化的模拟量,而 MCU 只认识 0 和 1。ADC 的工作就是把连续的电压值翻译成离散的数字

传感器 ──→ [模拟电压 0~3.3V] ──→ ADC ──→ [数字 0~4095] ──→ MCU 处理
plaintext

大部分 MCU(STM32、ESP32、Arduino 等)内部都集成了 ADC,不需要外部芯片。

6.2.2 分辨率:1 LSB 对应多少电压?#

ADC 的分辨率用 位数(bit) 表示。位数越高,能分辨的电压越精细。

ADC 位数量化级数3.3V 参考电压下 1 LSB
8 bit256 级3.3V / 256 ≈ 12.9 mV
10 bit1024 级3.3V / 1024 ≈ 3.2 mV
12 bit4096 级3.3V / 4096 ≈ 0.8 mV
16 bit65536 级3.3V / 65536 ≈ 0.05 mV
24 bit16777216 级3.3V / 16777216 ≈ 0.2 μV

计算公式

其中 是参考电压, 是 ADC 位数。

举例:STM32F103 内置 12 位 ADC,参考电压 3.3V:

  • 如果 ADC 读数为 2048,对应的实际电压 = 2048 × (3.3 / 4096) = 1.65V
  • 如果你想分辨 1mV 的电压变化,12 位 ADC(0.8mV/LSB)刚好够用

💡 直觉理解:ADC 就像一把刻度尺。12 位 ADC 把 0~3.3V 的范围刻成了 4096 个小格。每格 0.8mV。你量的东西比一格还小?那就看不出来了——这就是精度的天花板。

6.2.3 采样率与奈奎斯特定理#

采样率:ADC 每秒钟能采集多少次,单位是 SPS(Samples Per Second)或 kSPS、MSPS。

奈奎斯特-香农采样定理(Nyquist-Shannon Sampling Theorem):

要无失真地还原一个模拟信号,采样频率必须大于信号最高频率的 2 倍

为什么?

想象你在拍一个摆动的钟摆。如果你每秒拍 1 张照片(采样率低),而钟摆每秒摆动 2 次(信号频率高),你拍到的照片可能看起来钟摆在慢慢动甚至反方向动——这就是混叠(Aliasing)

真实信号:~~~~~(高频正弦波)
采样点:  ·   ·   ·   ·   (采样太慢)
采样后看到:~(变成了低频假信号!)
plaintext

工程实例

  • 音频信号最高 20kHz → 采样率至少 40kHz → CD 音质用 44.1kHz
  • 温度信号变化很慢(<1Hz) → 采样 10 次/秒 就够了
  • 心电图信号最高约 100Hz → 采样率至少 200Hz,实际用 500Hz~1kHz

6.2.4 SAR ADC vs Sigma-Delta ADC#

MCU 内部集成的 ADC 大多是 SAR(逐次逼近型),而外部高精度 ADC 芯片很多是 Sigma-Delta(Σ-Δ)型。它们的区别是什么?

SAR ADC —— “二分查找法”#

原理类比:猜数字游戏。

假设 ADC 是 12 位,参考电压 3.3V。输入电压是 1.8V。SAR 的转换过程:

  1. 先试中间值 2048(对应 1.65V):1.8V > 1.65V → 第 1 位 = 1
  2. 再试 2048+1024 = 3072(对应 2.475V):1.8V < 2.475V → 第 2 位 = 0
  3. 再试 2048+512 = 2560(对应 2.063V):1.8V < 2.063V → 第 3 位 = 0
  4. 再试 2048+256 = 2304(对应 1.856V):1.8V < 1.856V → 第 4 位 = 0
  5. ……继续逐位逼近,12 步完成。

特点

  • ✅ 速度快(1 次转换 = 12 个时钟周期),适合中高速采样(100kSPS ~ 10MSPS)
  • ✅ 功耗低,延迟小
  • ✅ MCU 内部集成方便
  • ❌ 精度一般(通常 12~16 位)

Sigma-Delta ADC —— “以时间换精度”#

原理类比:称重时,你不用一个精确的大秤,而是用一个小勺子一勺一勺加水,数加了多少勺。

Σ-Δ ADC 的核心思想:

  1. 过采样:以远高于奈奎斯特频率的速率采样(比如 64 倍、128 倍、256 倍)
  2. 噪声整形:通过特殊的反馈环路,把量化噪声”推”到高频段
  3. 数字滤波:用数字低通滤波器把高频噪声滤掉,留下干净的低频信号

特点

  • ✅ 精度极高(24 位甚至 32 位)
  • ✅ 非常适合缓慢变化的高精度信号(温度、称重、心电)
  • ✅ 内置数字滤波,抗混叠要求低
  • ❌ 速度慢(通常 < 1kSPS)
  • ❌ 延迟大(需要多次采样后才有结果)

对比总结#

特性SAR ADCSigma-Delta ADC
典型分辨率12~16 bit16~32 bit
采样率100kSPS ~ 10MSPS10SPS ~ 100kSPS
延迟低(单次转换)高(需多次过采样)
功耗可低可高
适用场景电机控制、快速传感器温度、称重、音频、心电
典型芯片STM32 内置ADS1256、HX711、ADS1115

6.2.5 ADC 输入范围与保护#

致命错误:输入电压超过参考电压!

MCU 的 ADC 输入引脚通常有一个允许电压范围(一般是 0V ~ Vref)。如果输入电压超过这个范围:

  • 轻则:ADC 读数饱和(永远是最大值 4095),数据不准
  • 重则:内部 ESD 二极管导通,大电流灌入芯片,永久损坏 ADC 甚至 MCU

保护电路设计

              R_lim (100Ω~1kΩ)          到 ADC 引脚
传感器输出 ────/\/\/\─────┬────/\/\/\──────── GPIO_ADC

                    ┌─────┴─────┐
                    │           │
              ┌─────┴───┐ ┌─────┴───┐
              │  TVS/    │ │  滤波   │
              │  钳位    │ │  电容   │
              │  二极管  │ │  100nF  │
              └─────┬───┘ └─────┬───┘
                    │           │
                   GND         GND
plaintext

三重保护

  1. 限流电阻 R_lim(100Ω~1kΩ):限制流入 ADC 引脚的最大电流
  2. 钳位二极管(TVS 管或肖特基二极管):把电压钳在 0V~VCC 之间
    • 当输入 > VCC + 0.3V → 上管导通,把电压拉到 VCC
    • 当输入 < -0.3V → 下管导通,把电压拉到 GND
  3. 滤波电容 C_filter(10nF~100nF):滤除高频噪声,兼做抗混叠

⚠️ 实际案例:很多人用 STM32 的 ADC 测电池电压(4.2V),但 STM32 的 ADC 最大输入只有 3.3V。直接接上去,轻则读数永远是 4095,重则烧坏引脚。必须先分压!

6.2.6 参考电压:内部 vs 外部基准#

ADC 的”尺子”有多长,取决于参考电压

内部参考

  • 大多数 MCU 默认使用 VCC(3.3V)作为参考电压
  • 优点:简单,不需要外部电路
  • 缺点:VCC 本身不稳定(尤其 USB 供电时可能有 ±5% 的波动),ADC 读数会跟着飘

外部基准

  • 使用专用的基准电压芯片(如 REF3033 输出精确的 3.300V、LM4040 输出 2.048V)
  • 优点:精度极高(±0.1%),温漂小(10ppm/°C),读数稳定
  • 缺点:多一个芯片,多一块钱

什么时候需要外部基准?

  • 需要精确的绝对电压测量(如万用表、医疗设备)
  • 传感器信号很小(mV 级),需要参考电压很稳定
  • 产品需要过校准/认证

💡 省钱技巧:如果只是测温度、光照这种”大概值”,内部参考完全够用。如果是做电子秤、血氧仪,必须上外部基准。


6.3 模拟传感器接口#

6.3.1 分压电路:最常见的传感器接法#

很多模拟传感器本质上就是一个可变电阻

  • NTC 热敏电阻:温度↑ → 电阻↓
  • 光敏电阻(LDR):光照↑ → 电阻↓
  • 湿敏电阻:湿度↑ → 电阻↓

MCU 的 ADC 只能测电压,不能直接测电阻。所以需要把电阻变化转成电压变化——最简单的办法就是分压电路

NTC 热敏电阻测温电路#

          VCC (3.3V)

          ┌┴┐
          │ │ R1 = 10kΩ(精密电阻,1%)
          └┬┘

           ├──────── GPIO_ADC

          ┌┴┐
          │ │ NTC(10kΩ @ 25°C,B=3950)
          └┬┘

          GND
plaintext

工作原理

  • NTC 和 R1 组成分压器
  • 分压点电压:
  • 温度变化 → NTC 阻值变化 → 变化 → ADC 读数变化

计算示例

  • 25°C 时,NTC = 10kΩ →
  • 50°C 时,NTC ≈ 3.6kΩ →
  • 0°C 时,NTC ≈ 27.3kΩ →

从 ADC 读数反推温度

// 1. 读 ADC 值,换算电压
float voltage = adc_value * 3.3 / 4096.0;

// 2. 从电压反推 NTC 电阻
float R_ntc = R1 * voltage / (VCC - voltage);

// 3. 用 B 值公式算温度(Steinhart-Hart 简化版)
//    1/T = 1/T0 + (1/B) × ln(R_ntc / R0)
float T0 = 298.15;    // 25°C = 298.15K
float B = 3950;
float R0 = 10000;     // 25°C 时的阻值
float temperature_K = 1.0 / (1.0/T0 + (1.0/B) * log(R_ntc / R0));
float temperature_C = temperature_K - 273.15;
c

💡 R1 怎么选? 一般取与 NTC 在目标温度范围中点的阻值相同。比如测温范围 0~50°C,中点 25°C 时 NTC = 10kΩ,那 R1 就选 10kΩ。这样在中间温度时灵敏度最高。

光敏电阻电路#

完全一样的分压结构,只是把 NTC 换成光敏电阻:

          VCC (3.3V)

          ┌┴┐
          │ │ R1 = 10kΩ
          └┬┘

           ├──────── GPIO_ADC

          ┌┴┐
          │ │ LDR(光敏电阻)
          └┬┘   暗 ≈ 1MΩ, 亮 ≈ 1kΩ

          GND
plaintext
  • 光照强 → LDR 电阻小 →
  • 光照弱 → LDR 电阻大 →

6.3.2 RC 低通滤波(抗混叠)#

传感器信号通常夹杂着各种高频噪声(电源纹波、数字信号串扰、空间电磁干扰)。如果不滤波就直接送进 ADC,这些噪声会被 ADC 一起采样,导致读数跳来跳去。

抗混叠滤波器就是一个放在 ADC 前面的低通滤波器,只让低频的有用信号通过,把高频噪声挡在外面。

                    R_filter
                    100Ω~1kΩ
传感器 ────────────/\/\/\──────┬──── GPIO_ADC

                             ┌─┴─┐
                             │   │ C_filter
                             │   │ 100nF ~ 1μF
                             └─┬─┘

                              GND
plaintext

截止频率

设计举例

  • 测温度(信号变化极慢,< 1Hz):R = 1kΩ, C = 1μF → ≈ 160Hz(绰绰有余)
  • 测音频(信号最高 20kHz):R = 100Ω, C = 1nF → ≈ 1.6MHz

⚠️ 注意:R 不能太大!因为 ADC 采样时会在输入端产生一个瞬态电流(采样电容充电),如果 R 太大,这个电流会在 R 上产生压降,导致采样不准。一般 R_filter ≤ 1kΩ。

6.3.3 接 ADC 前的 Buffer(电压跟随器)#

什么时候需要加 Buffer?

当传感器输出阻抗很高(比如分压电阻用了 100kΩ 以上),或者信号源距离 ADC 很远时,ADC 的采样电容充电需要很长时间。如果信号源”推不动”ADC,采样值就会偏低或不稳定。

解决方案:在传感器和 ADC 之间加一个电压跟随器(运放 Buffer)

传感器 ──→ [高阻抗输出] ──→ 运放 Buffer ──→ [低阻抗输出] ──→ ADC
                            (增益=1)
plaintext

电压跟随器的输入阻抗极高(几乎不从传感器取电流),输出阻抗极低(能轻松驱动 ADC)。就像在传感器和 ADC 之间放了一个”中继放大器”。

📌 详细电路请参考第 3 章(运放)的 3.3 节”电压跟随器”。

6.3.4 惠斯通电桥:微小电阻变化的”放大镜”#

为什么要用电桥?

有些传感器(应变片、压力传感器)的电阻变化非常小——比如一个 350Ω 的应变片,受力后可能只变了 0.1Ω。用简单的分压电路根本测不出来!

惠斯通电桥(Wheatstone Bridge)就是为这种情况量身定做的电路:

平衡条件:当 时,(电桥平衡,输出为零)

工作原理:当 R4 是一个应变片,受力后阻值变化 ΔR:

  • 电桥失去平衡
  • ,产生一个与 ΔR 成正比的微小差模电压
  • 这个电压通常在 mV 级别(比如 2mV/V 灵敏度 × 5V 激励 = 10mV 满量程)

信号调理

电桥输出的 mV 级差分信号,需要:

  1. 仪表放大器放大(如 INA128、AD620,增益 100~1000 倍)
  2. 低通滤波去噪
  3. 送入 ADC
                    仪表放大器
惠斯通电桥 ──→ [差分信号 ±10mV] ──→ [增益 100x] ──→ [0~1V] ──→ ADC
plaintext

典型应用:电子秤

电子秤的核心就是一组应变片组成的惠斯通电桥 + 高精度 ADC:

称重传感器(4 个应变片组成全桥)

    ↓ E+ / E- / S+ / S-(4 根线)

  HX711(24 位 Σ-Δ ADC,内置 PGA 增益 128x)

    ↓ DOUT / SCK(简单的 2 线接口)

  MCU(STM32 / Arduino / ESP32)
plaintext

💡 HX711 是电子秤领域最经典的芯片——它把仪表放大器 + 24 位 ADC + 数字滤波全部集成在一个小芯片里,只需要 2 个 GPIO 就能读到精确的重量数据。淘宝上几块钱一片。


6.4 数字传感器接口#

6.4.1 I²C 传感器:最常用的数字传感器#

与模拟传感器不同,数字传感器内部已经集成了 ADC 和信号处理电路,直接通过数字接口(I²C、SPI 等)输出数字数据。你不需要操心 ADC 分辨率、滤波等问题——传感器自己处理好了。

常见的 I²C 数字传感器

传感器类型典型芯片功能
温湿度SHT30、DHT20、AHT20测环境温湿度
加速度/陀螺仪MPU6050、BMI270测姿态、运动
气压BMP280、BMP390测气压、海拔
环境光BH1750、VEML7700测光照强度
磁力计HMC5883L、QMC5883L电子罗盘

I²C 接口基本电路

              VCC (3.3V)
               │    │
              ┌┴┐  ┌┴┐
         Rp1  │ │  │ │ Rp2     (上拉电阻)
              └┬┘  └┬┘
               │    │
SCL ───────────┼────┼─────────── SCL(传感器)
               │    │
SDA ───────────┼────┼─────────── SDA(传感器)
               │    │
  MCU          │    │          传感器
               │    │
              GND  GND
plaintext

6.4.2 上拉电阻的选择#

I²C 总线使用开漏(Open-Drain)输出——设备只能把线拉低,不能主动拉高。所以必须通过上拉电阻来提供高电平。

上拉电阻不能随便选!选大了选小了都不行:

电阻太大电阻太小
上升沿太慢(RC 充电慢)拉低时电流太大
方波变成三角波超过 GPIO 的灌电流能力
通信速率上不去低电平可能不够低
高速模式无法工作浪费功耗、发热

计算方法

最小值(保证低电平不超标):

  • = 0.4V(I²C 规范要求的最大低电平)
  • = 3mA(I²C 规范要求的最大灌电流)

例如 VCC = 3.3V:

最大值(保证上升沿时间满足要求):

  • = 上升时间要求(标准模式 1000ns,快速模式 300ns)
  • = 总线电容(所有设备引脚电容 + 走线寄生电容之和,一般 10~100pF)

例如快速模式( = 300ns),总线电容 = 50pF:

经验推荐值

总线速率VCC = 3.3V 推荐 RpVCC = 5V 推荐 Rp
标准模式(100kHz)4.7kΩ4.7kΩ
快速模式(400kHz)2.2kΩ ~ 3.3kΩ2.2kΩ ~ 3.3kΩ
高速模式(1MHz+)1kΩ ~ 2.2kΩ1kΩ ~ 2.2kΩ

💡 新手建议:板子不长、设备不多时,4.7kΩ 基本万能。如果跑 400kHz 发现波形不好,降到 2.2kΩ 试试。

6.4.3 I²C 地址冲突问题#

每个 I²C 设备都有一个 7 位地址(比如 BMP280 是 0x76 或 0x77)。如果两个设备地址相同,挂在同一条总线上就会冲突——MCU 不知道该和谁说话。

解决方案

  1. 地址引脚:很多芯片有 A0/A1 地址选择引脚,通过接 GND 或 VCC 来改变地址
    • 比如 INA219 有 A0、A1 两个引脚,可以配置 16 个地址(0x40~0x4F)
  2. I²C 多路复用器:如 TCA9548A,可以把一条 I²C 总线分成 8 条,每条独立寻址
  3. 换芯片:选择地址不同的替代型号

6.5 电流检测#

6.5.1 为什么要检测电流?#

电流检测在很多场景中是刚需:

  • 电池管理:充放电电流监测,估算剩余电量
  • 电机控制:实时电流反馈,做过流保护
  • 电源管理:监测各路负载的功耗
  • USB 充电:检测充电电流是否正常

6.5.2 基本原理:采样电阻 + 测量电压#

电流检测最朴素的方法:在电流路径中串一个小阻值的精密电阻(叫”采样电阻”或”分流电阻”,Shunt Resistor),然后测这个电阻两端的电压。

采样电阻怎么选?

考虑因素说明
阻值通常 1mΩ~1Ω。阻值太小→电压信号太弱;阻值太大→压降和功耗太大
功率,要能承受最大电流的功率
精度至少 1%,高精度场景用 0.1%
封装大电流用 2512 甚至更大的封装

举例:检测 0~2A 的电流,用 50mΩ 采样电阻:

  • 满量程压降 = 2A × 50mΩ = 100mV
  • 最大功耗 = 2² × 0.05 = 0.2W(选 0.5W 封装足够)

6.5.3 高侧采样 vs 低侧采样#

采样电阻放在电路的哪个位置,是一个关键选择:

低侧采样(采样电阻在负载和 GND 之间)#

VCC ──────→ [负载] ──→ [R_shunt] ──→ GND

                         测量电压 → ADC
plaintext

优点

  • 电路简单,采样电阻一端接地,另一端电压很低(mV 级)
  • 对运放要求低,普通运放甚至直接进 MCU ADC 就能用

缺点

  • ⚠️ 负载的”地”不再是真正的 GND,而是会随着电流变化而浮动
  • 如果负载对地敏感(比如电机驱动、通信模块),低侧采样会引入地线噪声
  • 无法检测负载对地短路(如果负载直接短路到 GND,电流不经过采样电阻)

高侧采样(采样电阻在 VCC 和负载之间)#

VCC ──→ [R_shunt] ──→ [负载] ──→ GND

        测量电压 → 差分放大 → ADC
plaintext

优点

  • 负载的地是稳定的真实 GND,不受采样影响
  • 可以检测负载对地短路故障
  • 抗地线噪声能力强

缺点

  • 采样电阻两端都”悬”在高电位上,需要差分放大器专用高侧电流检测芯片
  • 运放/芯片需要承受高共模电压

对比总结#

特性低侧采样高侧采样
电路复杂度⭐ 简单⭐⭐⭐ 较复杂
对运放要求高(需耐高压共模)
负载地稳定性❌ 不稳定✅ 稳定
地短路检测❌ 不能✅ 能
适用场景消费电子、简单应用电机驱动、电源管理、BMS

💡 工程建议:除非成本极其敏感,优先选高侧采样。低侧采样引入的地线扰动在很多场景中是个隐患。

6.5.4 专用电流检测芯片:INA219#

如果你不想自己搭差分放大电路,INA219 是最常用的”傻瓜式”电流检测方案:

核心参数

  • 电压测量范围:0~26V
  • 电流测量:双向,通过 I²C 直接读出数字值
  • 内置 12 位 ADC + PGA(可编程增益放大器)
  • 分辨率:可配置到 mA 级
  • I²C 接口,2 根线搞定

典型电路

VCC(被测)──→ [R_shunt 0.1Ω] ──→ [负载] ──→ GND
              │        │
             IN+      IN-
              │        │
            ┌─┴────────┴─┐
            │   INA219    │
            │             │
            │  SDA ───────┼──→ MCU SDA
            │  SCL ───────┼──→ MCU SCL
            │  VS ── 3.3V │
            │  GND ── GND │
            └─────────────┘
plaintext

INA219 即使自身用 3.3V 供电,也能测量高达 26V 的共模电压上的电流——这就是高侧采样的威力。MCU 通过 I²C 直接读取寄存器,就能得到精确的电流值(mA)、母线电压(V)和功率(mW),非常方便。


6.6 音频输入#

6.6.1 麦克风类型概览#

在嵌入式项目中,最常用的麦克风有两种:

特性驻极体麦克风(ECM)MEMS 麦克风
体积较大(圆柱形 Ø4~10mm)极小(3×4mm 贴片)
需要偏置电压✅ 需要 2~10V✅ 需要(内部集成)
输出类型模拟(需要外部 FET)模拟或数字(PDM/I²S)
一致性差(个体差异大)好(硅工艺,批量一致)
耐温性差(不能过回流焊)好(可 SMT 贴装)
成本低~中
典型型号通用 ECM 模块SPW2430、INMP401、ICS-43434

6.6.2 驻极体麦克风(ECM)电路#

驻极体麦克风内部有一个 JFET(结型场效应管),需要外部提供偏置电压才能工作:

          VCC (2~5V,典型 3.3V)

          ┌┴┐
          │ │ R_bias = 2.2kΩ~10kΩ(偏置电阻)
          └┬┘

           ├─────── C_couple ──────→ 到前置放大器输入
           │         1μF~10μF
          ┌┴┐
          │ │ ECM(驻极体麦克风)
          └┬┘

          GND
plaintext

各元件的作用

  • R_bias(偏置电阻):给麦克风内部的 JFET 提供直流工作点。阻值影响灵敏度和功耗:
    • 2.2kΩ → 灵敏度高,功耗大
    • 10kΩ → 灵敏度略低,功耗小
  • C_couple(耦合电容):隔离直流,只让交流音频信号通过。麦克风输出有直流偏置(约 VCC/2),耦合电容把这个直流挡掉,只输出以 0V 为中心的交流音频信号。

💡 为什么需要耦合电容? 因为后续放大器和 ADC 需要以某个合适的偏置点为中心处理信号。如果不隔直,麦克风的直流偏置会占据 ADC 的动态范围,降低信号的有效幅度。

6.6.3 MEMS 麦克风电路#

MEMS 麦克风内部集成了 MEMS 传感器 + 前置放大器,使用更简单:

模拟输出型 MEMS 麦克风(如 SPW2430):

          VCC (1.8~3.3V)

          ┌┴┐
          │ │ 100nF(去耦电容,必须紧贴芯片)
          └┬┘

     ┌─────┴─────┐
     │  MEMS MIC  │
     │            │
     │ VDD ─ VCC  │
     │ GND ─ GND  │
     │ OUT ───────┼─── C_couple ──→ 到前置放大器
     └────────────┘     1μF~10μF
plaintext

数字输出型 MEMS 麦克风(如 INMP441,I²S 接口):

     ┌─────────────┐
     │  MEMS MIC    │
     │  (I²S 输出)  │
     │              │
     │ VDD ─ VCC    │
     │ GND ─ GND    │
     │ SCK ─────────┼──→ MCU I²S_SCK
     │ WS  ─────────┼──→ MCU I²S_WS(字选择)
     │ SD  ─────────┼──→ MCU I²S_SD(数据)
     │ L/R ─ GND    │    (左/右声道选择)
     └─────────────┘
plaintext

数字输出的 MEMS 麦克风内部已经集成了 ADC,直接输出数字音频数据,省去了模拟放大和 ADC 采样的麻烦。

6.6.4 前置放大电路#

无论 ECM 还是模拟 MEMS 麦克风,输出的音频信号都非常微弱(通常只有 几 mV 到几十 mV),远不足以直接驱动 ADC。需要一个前置放大器把信号放大到 ADC 能处理的范围(比如 0~3.3V)。

这正是第 3 章”运放”中交流放大电路的典型应用:

关键设计要点

  1. 偏置到 VCC/2:单电源供电时,运放的输出只能在 0V~VCC 之间。音频信号是交流的(有正有负),所以需要把信号的”中心点”偏置到 VCC/2(如 1.65V),这样信号可以在 1.65V 上下摆动。

  2. 增益设置

    • 增益 = 1 + Rf/R3 = 1 + 100k/10k = 11 倍
    • 如果麦克风输出 20mVpp,放大后 ≈ 220mVpp
    • 增益可以更高(50~100 倍),但要注意运放的带宽限制
  3. 耦合电容:输入和输出的耦合电容隔离直流,只传递交流音频信号

  4. 高通截止频率(由耦合电容和偏置电阻决定):

    例如 R_bias = 5kΩ(R1//R2),C_couple = 10μF:

    (远低于人耳能听到的 20Hz,完全 OK)

📌 这个电路与第 3 章 3.6 节”交流放大电路”完全对应。运放选型建议使用低噪声、轨到轨运放,如 OPA344、LMV321、AD8605。


本章小结#

输入类型核心电路关键注意事项
按键上拉电阻 + RC 消抖消抖(硬件/软件)不能省
ADC 通用分压 + RC 滤波 + 钳位保护输入不能超 Vref,注意抗混叠
NTC/光敏分压电路固定电阻选中间值,注意精度
电桥传感器惠斯通电桥 + 仪表放大信号微弱,需高增益 + 高精度 ADC
I²C 传感器上拉电阻 + 地址配置上拉电阻按速率和电容计算
电流检测采样电阻 + 差分/专用芯片高侧优于低侧,注意共模电压
音频输入偏置 + 耦合 + 前置放大偏置到 VCC/2,增益匹配 ADC 范围

一句话总结:信号进 MCU 之前,要做好三件事——电平适配(别超量程)、噪声过滤(RC 滤波)、安全保护(钳位/限流)。把这三关守住,你的输入电路就稳了。


参考资料与推荐阅读#

  1. TI 高精度实验室 —— ADC 系列教程(TI 官网免费视频)
  2. NXP I²C 总线规范手册 —— I²C 上拉电阻计算的权威来源
  3. HX711 数据手册 —— 电子秤 ADC 芯片的经典参考
  4. INA219 数据手册(TI) —— 高侧电流检测的标杆方案
  5. TDK/InvenSense 应用笔记 —— MEMS 麦克风电路设计指南
  6. NTC 热敏电阻 B 值计算 —— Steinhart-Hart 方程详解

搜索到的参考图片资源(供学习参考,非直接使用):

主题来源 URL说明
按键抖动波形https://www.cnblogs.com/WIRO/p/19710757RC 硬件消抖电路详解,含抖动波形图
按键消抖电路设计https://m.blog.csdn.net/weixin_75048312/article/details/157808334自锁按键 + RC 去抖电路原理图
按键电路综合设计https://m.blog.csdn.net/m0_69034122/article/details/159172145上拉 + RC + TVS 完整保护电路
SAR vs Sigma-Delta ADChttps://m.blog.csdn.net/m0_49540263/article/details/149710031两种 ADC 架构原理对比
ADC 全面指南https://www.monolithicpower.cn/cn/learning/resources/comprehensive-guide-to-analog-to-digital-convertersMPS 出品的 ADC 入门指南
惠斯通电桥 + 称重传感器https://m.blog.csdn.net/j7k8l/article/details/153552045Arduino + 应变片电子秤实战
HX711 电子秤方案https://developer.aliyun.com/article/1741027STM32 + HX711 高精度电子秤设计
I²C 上拉电阻计算https://m.blog.csdn.net/ChengduLemid/article/details/150265801上拉电阻科学计算方法
I²C 上拉电阻详解https://m.elecfans.com/article/2192207.html含计算公式和推荐值表
INA219 电流检测https://m.blog.csdn.net/Si15166622538/article/details/160447815INA219 实战指南
高侧 vs 低侧采样https://m.elecfans.com/article/7492171.html直流电流采样电路全解析
NTC 温度检测电路https://m.blog.csdn.net/weixin_75048312/article/details/157808218NTC 分压式 + 滤波电路详解
MEMS vs ECM 麦克风https://lp-cn1-wechat-production.merklechina.com/post/digikey/technical_article/726/DigiKey 出品,两种麦克风对比
驻极体麦克风电路https://m.blog.csdn.net/weixin_42005993/article/details/102533065ECM 偏置电阻和噪声处理
ADC 抗混叠滤波器https://m.blog.csdn.net/weixin_31620365/article/details/160964285AAF 设计原理与工程实践
ADC 输入保护电路https://www.elecfans.com/zt/145593/ADC 输入保护方案汇总
Comment seems to stuck. Try to refresh?✨