4、电容式传感器详解:平行板电容模型、MEMS工艺制造、信号调理电路(CDC)、在触摸屏中的应用
电容式传感器,说白了就是利用电容变化来感知外界物理量的器件。在消费电子里,它无处不在——你手机屏幕的触摸、耳机柄的滑动、甚至某些高端手表的按键,背后都是电容在“说话”。
我最早接触电容传感器是在做一款触控台灯的项目。当时觉得这东西原理简单,不就是两个极板嘛。结果一上手,噪声、温漂、寄生电容……各种问题接踵而至。嗯,今天我们就把它彻底讲透。
4.1 平行板电容模型:一切的基础
电容式传感器的核心,就是平行板电容器。公式很简单:
C = ε₀ * εr * A / d
其中:
- C —— 电容量(单位:法拉 F)
- ε₀ —— 真空介电常数(8.854 × 10⁻¹² F/m)
- εr —— 相对介电常数(空气≈1,玻璃≈4-7,PCB板材≈4.5)
- A —— 极板正对面积(m²)
- d —— 极板间距(m)
从这个公式可以看出,改变电容有三种途径:
- 改变间距 d —— 压力传感器、麦克风常用。我做过一个气压计,就是靠振膜受压变形改变 d,精度能做到 0.1 Pa。
- 改变正对面积 A —— 位移传感器、角度传感器常用。比如滑动变阻器的电容版。
- 改变介电常数 εr —— 液位传感器、湿度传感器常用。手指靠近屏幕,就是改变了局部介电常数。
关键点: 消费电子里,触摸屏用的是“改变介电常数”原理。手指不是导体吗?其实手指靠近时,它和屏幕之间形成了一个新的电容,改变了原有电场分布。这就是互电容和自电容的由来。
我建议你记住一个经验值:人体手指的等效电容大约在 50-150 pF,而触摸屏的基线电容通常在 10-30 pF。检测这个微小变化,就是 CDC 芯片的活。
4.2 MEMS工艺制造:微米级的艺术
电容传感器怎么造出来的?靠 MEMS(微机电系统)工艺。说白了,就是在硅片上用光刻、刻蚀、沉积等方法,做出微米级的机械结构。
我参观过一家 MEMS 代工厂,那洁净度……比手术室还夸张。一颗电容式压力传感器,核心结构就三层:
- 底层 —— 硅衬底,做固定电极
- 中间层 —— 牺牲层(后面会被腐蚀掉,形成空腔)
- 顶层 —— 多晶硅或金属薄膜,做可动电极(振膜)
工艺流程大致是:
- 在硅片上沉积一层二氧化硅(牺牲层)
- 光刻出空腔形状
- 沉积多晶硅(结构层)
- 光刻出振膜和电极
- 用氢氟酸腐蚀掉牺牲层,释放振膜
- 密封封装(真空或参考气压)
避坑指南: 我曾经遇到过一批传感器振膜粘连的问题。原因是牺牲层腐蚀不彻底,残留物导致振膜无法自由运动。后来我们增加了超临界干燥步骤,才彻底解决。记住:MEMS 工艺里,释放和干燥是最容易翻车的环节。
消费电子里,MEMS 电容传感器最典型的代表就是 硅麦克风。它本质上就是一个平行板电容,振膜在声压下振动,电容变化被检测出来。一颗 MEMS 麦克风的振膜直径只有 0.5-1 mm,厚度不到 1 μm。你想想看,这精度有多恐怖。
4.3 信号调理电路(CDC):把电容变成数字
电容变化是模拟量,而且非常微弱——通常只有 fF(10⁻¹⁵ F)级别。要把它变成单片机认识的数字信号,就需要 CDC(电容数字转换器)。
常见的 CDC 架构有几种:
| 架构类型 | 原理 | 精度 | 功耗 | 典型应用 |
|---|---|---|---|---|
| 开关电容积分型 | 用参考电容对被测电容充放电,积分后比较 | 中(10-16 bit) | 低 | 触摸屏、接近感应 |
| Σ-Δ 调制型 | 过采样+噪声整形,数字滤波 | 高(16-24 bit) | 中 | 压力传感器、高精度测量 |
| 谐振型(LC振荡器) | 电容改变振荡频率,测频 | 低(8-12 bit) | 高 | 接近开关、液位检测 |
| 电荷转移型 | 用固定电荷多次转移,累加测量 | 中(12-16 bit) | 极低 | 触控按键、穿戴设备 |
我个人最常用的是 Σ-Δ 调制型 CDC。为什么?因为它抗噪声能力强,而且能直接输出数字信号,省掉外部 ADC。比如 ADI 的 AD7745、TI 的 FDC1004,都是这类芯片的代表。
来看一个实际代码片段,用 I2C 读取 FDC1004 的电容值:
// FDC1004 单通道电容读取示例(伪代码)
#include <Wire.h>
#define FDC1004_ADDR 0x50
void setup() {
Wire.begin();
Serial.begin(115200);
// 配置寄存器:通道0,电容范围 ±15 pF
Wire.beginTransmission(FDC1004_ADDR);
Wire.write(0x08); // 配置寄存器地址
Wire.write(0x0C); // 通道0使能,速率100 S/s
Wire.endTransmission();
}
void loop() {
uint16_t raw;
float capacitance;
// 触发单次测量
Wire.beginTransmission(FDC1004_ADDR);
Wire.write(0x0C); // 命令寄存器
Wire.write(0x01); // 单次测量触发
Wire.endTransmission();
delay(15); // 等待转换完成
// 读取结果(24位数据,高16位+低8位)
Wire.beginTransmission(FDC1004_ADDR);
Wire.write(0x00); // 结果寄存器
Wire.endTransmission();
Wire.requestFrom(FDC1004_ADDR, 2);
raw = (Wire.read() << 8) | Wire.read();
// 转换为电容值(单位 pF)
capacitance = (raw / 32768.0) * 15.0;
Serial.print("电容值: ");
Serial.print(capacitance, 3);
Serial.println(" pF");
delay(100);
}
注意: 实际项目中,CDC 的 PCB 布局非常关键。我曾经因为走线太长,寄生电容直接干掉了 5 pF,导致传感器信号被淹没。记住几条铁律:
- 传感器到 CDC 的走线尽量短(< 10 cm)
- 周围用地线包围隔离
- 避免与高频信号(如 SPI、时钟)平行走线
- 电源要加 LC 滤波
4.4 在触摸屏中的应用:从单点到多维
触摸屏是电容传感器在消费电子里最成功的应用。没有之一。从 iPhone 初代开始,电容触摸就取代了电阻触摸,成为主流。
触摸屏的工作原理分两种:
- 自电容(Self Capacitance):每个电极对地测电容。手指靠近,电容增大。优点是实现简单,支持单点触摸。缺点是没法区分两个手指。
- 互电容(Mutual Capacitance):行和列电极交叉处形成电容。手指靠近,改变了交叉点的电场,电容减小。优点是支持多点触摸,精度高。缺点是驱动复杂。
我做过一个项目,客户要求用自电容实现两点触摸。折腾了两个月,最后发现根本做不到——自电容的“鬼点”问题无解。后来老老实实换了互电容方案。嗯,有些坑真的没必要自己踩。
现在的触摸屏控制器(Touch Controller)已经高度集成。一颗芯片内部集成了:
- 高压驱动电路(驱动行电极)
- CDC 阵列(同时检测多个列电极)
- 数字滤波和基线跟踪
- 手势识别算法(滑动、缩放、长按)
- I2C/SPI 接口输出坐标
下图是电容触摸屏的核心逻辑框图:
实际项目中,触摸屏最头疼的问题是 噪声。充电器噪声、LCD 驱动噪声、甚至人体静电,都会导致误触。我见过一个案例,用户把手机放在无线充电器上,屏幕疯狂乱跳。最后发现是无线充电的 100 kHz 磁场耦合到了触摸屏的 RX 电极。
解决方案是什么?
- 频率跳变:触摸控制器自动避开噪声频点
- 差分检测:用相邻电极做差分,共模噪声被抵消
- 屏蔽层:在 LCD 和触摸屏之间加一层 ITO 屏蔽,接地
- 软件滤波:中值滤波+卡尔曼滤波,平滑坐标输出
我的经验: 调试触摸屏时,别急着调算法。先把硬件噪声底噪测清楚。用示波器看 CDC 输出,如果噪声峰峰值超过 1 pF,那算法再牛也救不了。先查电源、查布局、查屏蔽,把底噪压到 0.3 pF 以下,再开始调灵敏度。
好了,电容传感器这块就讲到这里。从平行板模型到 MEMS 工艺,从 CDC 芯片到触摸屏应用,其实核心就一句话:电容变化很小,但检测方法很成熟。你只要把寄生电容控制好,把噪声抑制住,剩下的就交给芯片去处理。
公众号:蓝海资料掘金营,微信deep3321