机器人关节防夹与液位检测怎么用一片电容芯片搞定:AD7150/AD7156电容数字转换器七步实战

协作机器人要防夹、水箱要测液位、料仓要测有无,传统做法是微动开关、浮球和光电——会磨损、会卡住、怕污染。电容式检测非接触、无机械磨损、免维护,但难点是"电容太小、环境一漂就误判"。AD7150 这类电容数字转换器(CDC)把两通道、1fF 灵敏度、自适应阈值和 I2C 接口集成到一颗芯片里,一根 I2C 接 STM32 就能读数。本文用四张表讲清选型、输入范围与 CAPDAC 换算、防夹与液位两种配置,附寄存器配置与采集代码。

2026-10-10
电容传感AD7150机器人防夹液位检测I2CSTM32

先说结论:第一,凡是"物体靠近""液面升高""物料有无"这类会导致电极电容发生微小变化的量,都可以用电容式检测,但必须选带自适应阈值的电容数字转换器,否则温湿度漂移会把固定阈值顶穿;第二,AD7150 两通道、分辨率 2fF、响应 10ms,配合片上 CAPDAC 能抵消高达 10pF 的静态寄生电容,是做机器人防夹和物联网液位的主力;第三,防夹用自适应阈值(只认"快速变化"),液位用固定阈值或直接读 12 位 CDC 数据(要的是"绝对量"),两者配置完全不同。下面按"为什么用、怎么选、怎么配、怎么写、怎么落地"五步讲透。

一、为什么防夹和液位适合用电容式检测

先看物理原理。电容式检测的出发点是平板电容公式 C = ε₀εrA / d:电容值随介电常数 εr、极板面积 A、极板距离 d 变化。物体靠近电极会改变电场分布(等效改变 εr 与耦合面积),液面升高会改变电极周围的介电环境——这两件事本质上都是在改变"电极对地电容"。所以同一套电路既能做接近/防夹,也能做液位/料位,只是电极形状和判定策略不同。

把电容式和几种传统方案摆在一起比,各自短板就清楚了。

方案 接触方式 磨损 / 维护 抗污染 输出形式 适合场景
微动开关 机械接触 触点磨损,寿命有限 差(进灰进水易失效) 开关量 机械限位、按键
浮球开关 机械接触 浮球易卡、易结垢 差(黏稠/含杂质介质) 开关量 清水箱高低位报警
光电/红外 非接触 无磨损 差(镜头积灰、结露) 开关量 洁净环境有无检测
电容式(CDC) 非接触 无机械磨损 好(可隔壳、隔膜测量) 数字量(I2C)+ 开关量 机器人防夹、液位、料位、触摸

电容式的优势在"非接触、无磨损、可隔着绝缘壳或薄膜测",但它有一个天生的坑:被测电容的变化量极小,往往只有几个 fF 到几个 pF,而环境温湿度变化带来的漂移可能比信号本身还大。这就是为什么不能自己搭一个简单的 RC 振荡电路了事,而要用带自适应阈值引擎的专用 CDC 芯片——它能把"慢漂移"滤掉、只对"快变化"报警。

二、AD7150 怎么把电容变成数字

AD7150 是 ADI 的一款双通道电容数字转换器,内部是"Σ-Δ 调制器 + 三阶数字滤波器 + 自适应阈值引擎"的架构。被测电容 CX 接在激励源(EXC)和调制器输入(CIN)之间,激励信号是一个 ±VDD/2、约 32kHz 的方波,调制器持续对流过 CX 的电荷采样,数字滤波器把 0/1 密度流还原成电容值,最后输出 12 位 CDC 结果,并可选择性地和阈值比较、驱动两个数字输出脚。

几个关键指标决定它能测什么,先看输入范围与分辨率的对应关系——范围越小、分辨率越高,这是选量程的核心。

CDC 输入范围 分辨率 说明
4 pF 2.0 fF 默认最大范围,配合 CAPDAC 可测 10~14pF
2 pF 1.6 fF 中等灵敏度
1 pF 1.4 fF 较高灵敏度
0.5 pF 1.0 fF 最高灵敏度,适合微小电容变化

再看整体电气与时间指标,这些数字决定了它能不能塞进你的节点。

参数 AD7150 说明
供电电压 VDD 2.7~3.6 V 可直接与 3.3V MCU 共电源
工作电流 IDD 100 µA(典型,最大 120 µA) 两通道连续转换
掉电电流 1 µA(典型,≤25℃) 适合电池节点
转换时间 10 ms(两通道,每通道 5 ms) 决定防夹响应速度上限
灵敏度 可分辨至 1 fF 配合小量程使用
激励频率 / 幅度 约 32 kHz,±VDD/2 带斜率限制,改善 EMC
允许 CIN 对地电容 100 pF 寄生电容容限
允许对地电阻 / 串阻 10 MΩ / 125 kΩ 漏电与走线电阻容限
接口 / 封装 / 温度 I2C(≤400kHz)/ MSOP-10 / −40~+85℃ 7 位地址 0x48
通道隔离 / 电源抑制 60 dB / 4 fF/V 双通道互扰与电源噪声指标

还有一个非常实用的片上功能:CAPDAC。它相当于一个接在 CIN 脚的"负电容",6 位可调、LSB 约 200fF、满量程 12.5pF,能抵消传感器静态电容中高达 10pF 的固定部分。举个例子:如果你的电极静态电容是 11pF,而 CDC 只有 4pF 量程,直接接上去早就饱和了;先用 CAPDAC 把 10pF 偏置"减掉",4pF 窗口就能落在 10~14pF 这段上,剩下的变化量才真正进入高灵敏度区。芯片还带 autoCAPDAC:当 CDC 结果低于量程 25% 或高于 75% 时自动调整 CAPDAC,省去手工标定。

三、AD7150 / AD7156 / CAV424 怎么选

做电容式检测,市面上常见的三颗芯片定位不同:AD7150 和 AD7156 是"数字输出型 CDC",直接给 I2C 数字量;CAV424 是"模拟输出型电容电压转换器",输出差分电压,适合接 4-20mA 变送器或 MCU 的 ADC。选哪个取决于你的后级要数字还是要模拟。

对比项 AD7150 AD7156 CAV424
类型 双通道电容数字转换器(CDC) 双通道电容数字转换器(CDC) 电容-电压转换器(模拟)
供电 2.7~3.6 V 1.8~3.6 V 单电源,外接参考
工作电流 100 µA 典型 70 µA 典型(掉电 2 µA) 由外部电阻设定
灵敏度 至 1 fF 至 3 fF 取决于参考电容与增益
转换时间 10 ms(两通道) 10 ms 每通道 连续(低通滤波决定)
输出 I2C 数字量 + 2 路开关输出 I2C 数字量 + 2 路开关输出 差分电压,最大约 2.8V
可测电容变化 CSENS 0~13 pF CSENS 0~13 pF 参考 10pF~1nF 时,变化 5%~100%
封装 MSOP-10 LFCSP 3×3×0.8 mm DIP/SO 类
适合 防夹、接近、液位,直接进 MCU 空间极小的便携/低功耗节点 工业变送器、4-20mA 输出

一句话选型:要数字量、直接进 MCU、要自适应阈值防夹,选 AD7150;要极致小体积、超低电压 1.8V、超低功耗,选 AD7156;要模拟量、要接 4-20mA 工业变送器或长线传输,选 CAV424。机器人关节这种"板上就有 STM32、要快速判定"的场景,AD7150 最顺手。

四、防夹与液位:两种配置不能混

AD7150 的比较器有两种模式,用哪种直接决定判定行为,这是整篇文章最容易做错的地方。

模式 阈值行为 响应对象 典型用途
自适应阈值(Adaptive) 阈值随输入电容的平均值动态调整 只认"快速变化",忽略温湿度等慢漂移 机器人防夹、接近感应、触摸
固定阈值(Fixed) 阈值是编程写入的常数 任何越过固定阈值的电容变化 液位到某高度报警、料位有无

防夹为什么必须用自适应阈值?因为机器人关节周围的环境温度、湿度、甚至操作者手上的水汽,都会让电极电容缓慢变化。如果阈值写死,这些慢漂移迟早会把阈值顶穿,产生误报;自适应阈值让阈值跟着"平均值"慢慢走,只对"人手快速靠近"这种突变报警,这正是防夹需要的。AD7150 的阈值引擎基于历史 CDC 数据的平均,平均值对阶跃变化的响应是一条指数收敛曲线,收敛速度由 Setup 寄存器里的 ThrSettling 位决定——防夹要快,就把它设小。

液位则相反。液面高度是一个"绝对量",我们恰恰需要读到电容的绝对变化,所以要么用固定阈值做"到某高度报警",要么干脆关掉比较器、直接读 12 位 CDC 数据,自己在 MCU 里换算成液位百分比。此时用自适应阈值反而会把"液面缓慢上升"当成慢漂移滤掉,导致液位到顶了也不报——这是液位场景最常见的错误配置。

一句话记牢:防夹认"快变",用自适应阈值;液位认"绝对量",用固定阈值或直接读数据。同一个芯片,两种配置,选错就是"该报不报、不该报乱报"。

五、STM32 通过 I2C 配置与读取

AD7150 的 7 位 I2C 地址固定为 0x48,寄存器通过"地址指针"寻址。最常用的几个寄存器如下表,写驱动时对着看。

地址指针 寄存器 读/写 用途
0x00 Status R bit3=OUT1、bit5=OUT2 为阈值越限标志;bit0/1 为转换完成 RDY
0x01 / 0x02 Ch1 Data(高/低字节) R 12 位 CDC 结果,只用高 12 位
0x03 / 0x04 Ch2 Data R 第二通道 CDC 结果
0x09 / 0x0A Ch1 灵敏度 / 固定阈值 R/W 自适应模式下为灵敏度,固定模式下为阈值
0x0B / 0x0E Ch1 / Ch2 Setup R/W 量程、迟滞、阈值建立时间
0x0F Configuration R/W 使能通道、阈值模式、功耗模式(默认 0x19)
0x11 / 0x12 Ch1 / Ch2 CAPDAC R/W 抵消静态寄生电容
0x17 Chip ID R 上电自检,确认器件在线

下面这段 STM32 HAL 骨架把"读寄存器、写寄存器、读 CDC 数据、判阈值"四件事写全了。数据寄存器是 16 位、只用高 12 位,所以读回来直接取高 12 位即可;状态寄存器 bit3/bit5 分别是 OUT1/OUT2 的越限标志。

/* AD7150 电容数字转换器:I2C 读取与阈值判定
 * 7 位地址 0x48;数据寄存器 16 位、只用高 12 位
 */
#define AD7150_ADDR       (0x48 << 1)   /* HAL 用 8 位地址 */
#define AD7150_ADDR_RD    (AD7150_ADDR | 0x01)
#define REG_STATUS        0x00
#define REG_CH1_DATA_H    0x01
#define REG_CH1_DATA_L    0x02
#define REG_CONFIG        0x0F
#define REG_CH1_CAPDAC    0x11
#define REG_CHIP_ID       0x17

static uint8_t ad7150_read(uint8_t reg)
{
    uint8_t v = 0;
    HAL_I2C_Master_Transmit(&hi2c1, AD7150_ADDR, &reg, 1, 50);
    HAL_I2C_Master_Receive(&hi2c1, AD7150_ADDR_RD, &v, 1, 50);
    return v;
}

static void ad7150_write(uint8_t reg, uint8_t val)
{
    uint8_t buf[2] = { reg, val };
    HAL_I2C_Master_Transmit(&hi2c1, AD7150_ADDR, buf, 2, 50);
}

/* 上电自检:读 Chip ID 确认器件在线 */
uint8_t ad7150_init(void)
{
    if (ad7150_read(REG_CHIP_ID) == 0x00) return 0;   /* 读不到即异常 */
    /* 两通道使能、自适应阈值、连续转换(与上电默认 0x19 一致) */
    ad7150_write(REG_CONFIG, 0x19);
    /* 若静态电容较大,先写入 CAPDAC 抵消偏置,再交给 autoCAPDAC 微调 */
    ad7150_write(REG_CH1_CAPDAC, 0xC0 | 0x00);        /* DacEn1=1, DacAuto1=1 */
    return 1;
}

/* 读 Ch1 的 12 位 CDC 结果 */
static uint16_t ad7150_read_ch1(void)
{
    uint8_t h = ad7150_read(REG_CH1_DATA_H);
    uint8_t l = ad7150_read(REG_CH1_DATA_L);
    return (uint16_t)(((uint16_t)h << 8) | l) & 0xFFF0;  /* 低 4 位恒为 0 */
}

/* 防夹判定:读状态寄存器的 OUT1 越限标志 */
uint8_t robot_antipinch_check(void)
{
    uint8_t st = ad7150_read(REG_STATUS);
    if (st & 0x08) {          /* bit3 = OUT1,Ch1 越过阈值 */
        return 1;             /* 触发急停 / 反向退出 */
    }
    return 0;
}

代码里有两个点值得强调。其一,CAPDAC 寄存器的高位是使能和自动位,先手工给一个初值、再开 autoCAPDAC,可以让它更快收敛;其二,防夹判定用状态寄存器的 OUT1/OUT2 位最省事,不需要每 5ms 读一次数据寄存器,芯片硬件比较器已经把结果算好了,MCU 只需在中断或轮询里读一个字节。液位场景则相反:关掉比较器,直接调 ad7150_read_ch1() 拿 12 位数据,在 MCU 里做线性换算。

六、电极与 PCB 设计:三个必须守的规矩

芯片选对了、代码写对了,如果电极和布板没做好,信号照样测不准。电容式检测对"寄生电容"极其敏感,下面三条是工程上反复验证的。

另外,激励频率约 32kHz,这个频段既避开了工频干扰,又不至于像高频那样容易辐射,是电容测量比较合适的折中。做液位时如果介质导电(如自来水),电极必须做绝缘处理,否则等效电阻会把测量带偏——这一点和导电式液位开关的注意点是一致的。

七、两个落地案例

案例一,协作机器人末端防夹。在夹爪两片指腹内侧各贴一片铜箔电极,接 AD7150 的两个通道,配置成自适应阈值、ThrSettling 取小值。人手指靠近电极时,电容在几十毫秒内突变,OUT 脚立刻拉高,STM32 在中断里触发急停或反转。因为用的是自适应阈值,车间温度变化、指腹上的油污导致的慢漂移都不会误报——这正是电容式相对机械开关的核心价值。

案例二,物联网液位监测。在非金属水箱外壁贴一条竖直的长条电极,液面上升改变电极对地电容,AD7150 读 12 位 CDC 数据,STM32 按"空箱/满箱"两点标定后线性换算成液位百分比,再经 RTU 角色通过 NB-IoT 用 MQTT 上报云平台。这类节点通常电池供电,AD7150 的 100µA 工作电流和 1µA 掉电电流正好匹配"定时唤醒、测一次、上报、继续睡"的低功耗节奏。

八、总结

用一片电容芯片搞定防夹和液位,落地逻辑就是四步:先判断场景——非接触、无磨损、可隔壳测量才用电容式;再选器件——要数字量进 MCU 用 AD7150,要极小体积用 AD7156,要模拟量接变送器用 CAV424;再配模式——防夹用自适应阈值认快变,液位用固定阈值或直接读数据认绝对量;最后守好电极与布板——电极悬浮、走线短且屏蔽、电源去耦。

工程上还要记住三个数字:分辨率 2fF、响应 10ms、CAPDAC 能抵消 10pF 静态电容。前两个决定了它能测多小的变化、多快报警,后一个决定了它能不能在寄生电容较大的实际板子上正常工作。把这三点和"自适应/固定阈值"的正确选择结合起来,机器人防夹和物联网液位就能用同一颗芯片稳定落地。

一句话收尾

电容式检测的难点从来不是"能不能测",而是"环境一漂就误判"——AD7150 用片上自适应阈值把慢漂移滤掉、用 CAPDAC 把静态寄生电容抵消掉,再用一根 I2C 把 12 位结果交给 STM32,防夹与液位这类"非接触、无磨损"的检测需求就能用一颗芯片干净收尾。

还想接着看

本文基于《AD7150 数据手册(ADI,双通道电容数字转换器)》《AD7156 数据手册(ADI,1.8V 双通道电容转换器)》以及《用于电容传感器信号转换的集成电路 CAV424》等技术资料整理优化,并结合机器人防夹与物联网液位检测的工程实践进行了系统化梳理。

需要定制开发?

沧州艾诺威电子 — 国家高新技术企业,20+项国家专利
嵌入式系统开发 · 物联网方案 · AI智能硬件 · 一站式交付

立即微信咨询

电话:13930711029 | 邮箱:tech@czinv.com | 24小时内响应

🎧 本文已制作播客节目
双主持对话音频,随时随地收听本文内容
收听播客 →