用ESP8266_RTOS_SDK v3的I2C控制电容传感器FDC2214

陈拓 2021/02/09-2021/02/19

1. 概述

电容式传感是一种低功耗、低成本且高分辨率的非接触式感测技术, 适用于从接近检测、手势识别到远程液位感测的各项应用。电容式传感系统中的传感器可以采用任意金属或导体,因此可实现高度灵活的低成本系统设计。

FDC2214是Ti公司的一款低功耗高精度的电容传感器芯片,使用I2C接口。

  • 特性

  • 官方网址

https://www.ti.com.cn/product/cn/FDC2214?utm_source=baidu&utm_medium=cpc&utm_campaign=asc-null-null-GPN_CN-cpc-pf-baidu-cn&utm_content=Device&ds_k=FDC2214&DCM=yes&gclid=CN6Vy9Lk3O4CFQn2vAodsfwNNQ&gclsrc=ds

下载数据手册:

  • 测量原理

FDC2214采用L-C谐振器作为传感器。通过测量LC谐振器的振荡频率,输出一个与频率成比例的数字值。这个频率测量值可转换为等效电容。FDC2214的功能方框图:

FDC的前端是谐振电路,后面是一个多路复用器,多路复用器的活动通道将传感器频率fSENSOR连接到核心Core。这个核心使用参考频率fREF来测量传感器频率。fREF是内部或外部参考时钟(振荡器)。每个通道的数字化输出是fSENSOR/fREF的比值。I2C接口用于芯片配置和传输结果数据。SD用于设置关机模式,以节省电流。可配置的中断引脚INTB用来通知主机芯片状态的变化。

  • 控制FDC2214的主机

百度了一下,网上的介绍文章基本上都是用STM32或者51单片机控制FDC2214,本文用ESP8266控制FDC2214获取传感器的数据。相比STM32,用ESP8266控制FDC2214性价比更高,支持WiFi,代码更简洁。

如果你对ESP8266的开发工具的使用还不熟悉,可以参考:

《ESP8266_RTOS_SDK v3创建一个新项目使用GPIO》

https://zhuanlan.zhihu.com/p/350165597

https://blog.csdn.net/chentuo2000/article/details/113772591

2. ESP8266引脚

  • ESP8266EX技术规格书

https://www.espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_cn.pdf

  • ESP8266的GPIO管脚

  • 管脚定义

ESP8266的i2c引脚是可以自己选择的。

3. FDC2214引脚

下图为芯片引脚,芯片还需要配一些外围电路,可以在网上购买现成的模块。

  

  • FDC2214引脚功能

4. ESP8266和FDC2214接线表

ESP8266第24脚(GPIO5)- FDC2214第1脚(SCL)

ESP8266第16脚(GPIO4)- FDC2214第2脚(SDA)

ESP8266第9脚(GPIO14)- FDC2214第6脚(SD)

 

FDC2214第4脚(ADDR)接GND这时I2C的地址 = 0x2A

FDC2214第7脚(VDD)接+3.3V

FDC2214第8脚(GND)接GND

5. 传感器配置和目标物体接入

  • 单端配置

FDC支持两种传感器配置。这两种配置都使用LC谐振回路设置振荡频率。典型的选择是一个18μH的屏蔽贴片电感器和一个33pF的电容并联,产生6.5MHz的振荡频率。在图54中的单端配置中,一个导电板(Sensor plate)连接到了IN0A,导电板与目标物体(Target object)一起形成可变电容器。

  • 差分配置

在图55中的差分配置中,一个导电板连接到IN0A,另一个连接到IN0B,它们一起构成可变电容器。

在传感器感应板面积相同的情况下,单端配置比差分配置有更大的感应范围。在要求在近距离处具有高灵敏度的应用中,差分配置比单端配置性能更好。

在我的项目中使用了单端配置,因为我希望有更大的感应范围。

6. FDC2214 I2C基本操作

  • FDC2214 I2C速度

FDC2214 I2C接口的最高速度为400 kbit/s。

  • FDC2214的I2C地址

FDC使用I2C扩展启动序列进行寄存器访问,I2C扩展启动序列之后跟随着标准的I2C 7位从机地址,后面跟随8位指针寄存器字节设置寄存器地址。

当ADDR引脚设置为低位时,FDC的I2C地址为0x2A;当ADDR引脚设置为高时,FDC的I2C地址为0x2B。

我们设置FDC的I2C地址为0x2A。

  • FDC2214初始化

当SD引脚设置为高电平时,FDC将进入关机模式,关机模式是低功耗状态。将SD引脚设置为低电平时FDC退出关机模式。

即将SD拉高可以进入关机模式,再拉低进入正常工作模式。这时所有寄存器都返回其默认值,并清除所有错误条件,取消INTB引脚的中断信号。

  • 设置通道

FDC2214有4个通道,所以在使用的时候有单通道和多通道模式。在我的应用中使用单通道模式。

我使用通道0,所以:

寄存器0X1A[14:15]=00

寄存器0X1B[15]=0

  • 数据采样

单通道模式采样序列

Sensor Activation 传感器激活

Conversion转换,在这个时间段采样

Amplitude Correction振幅修正

  • 采样数据寄存器

数据保存在采样数据寄存器中。

在单通道情况下,通道0只需要读0x00和0x01。FDC2214有28位采样数据,寄存器0x00存放数据的高12位MSB[27:16],寄存器0x01存放数据的低16位LSB[15:0]。

  • 状态寄存器

为了保障在Conversion期间采样,我们需要读状态寄存器

0x18用来读取包含各种状态位[15:0]的12个域。0x19用来配置这些状态位。

这些寄存器可以被配置在INTB引脚为特定的数据触发一个中断

  • 数据准备好

查询状态寄存器 0x18,如果状态为0x0048,表示通道0的数据已经准备好。

相关的Bit:

  • 寄存器设置

推荐的初始化寄存器配置值(多通道)

因为我们使用单通道,寄存器的设置为:

#define RCOUNT_CH0             0x08  // Value = 0x8329
#define SETTLECOUNT_CH0        0x10  // Value = 0x000A
#define CLOCK_DIVIDERS_CH0     0x14  // Value = 0x2002
#define STATUS_CONFIG          0x19  // Value = 0x0001
#define MUX_CONFIG             0x1B  // Value = 0x020D
#define DRIVE_CURRENT_CH0      0x1E  // Value = 0x7C00
#define CONFIG                 0x1A  // Value = 0x1441(内部参考频率) 0x1641(外部参考频率)

7. ESP8266 I2C相关操作

https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/api-reference/peripherals/i2c.html

7.1 头文件

esp8266/include/driver/i2c.h

7.2 函数

  1. i2c_driver_install

说明:

  • i2c_param_config

说明见文档。

  • i2c_driver_delete
  • i2c_master_start
  • i2c_master_write_byte
  • i2c_master_write
  • i2c_master_read
  • i2c_master_stop
  • i2c_master_cmd_begin
  • i2c_cmd_link_delete

7.3 自定义数据类型

  • esp_err_t
  • i2c_cmd_handle_t

7.4 枚举

7.5 结构

  • i2c_config_t

8. 创建新项目

8.1 创建项目i2c

参考《ESP8266_RTOS_SDK v3创建一个新项目使用GPIO》

https://zhuanlan.zhihu.com/p/350165597

https://blog.csdn.net/chentuo2000/article/details/113772591

  • i2c项目目录

  • C程序user_main.c

8.2 程序代码

  • 参考ESP8266_RTOS_SDK带的例子

/home/ccdc/esp/ESP8266_RTOS_SDK/examples/peripherals/i2c/main/user_main.c

  • 编辑C程序

nano main/user_main.c

完整的程序代码见:

《ESP8266_RTOS v3用I2C读FDC2214(附C程序代码).docx》

https://download.csdn.net/download/chentuo2000/15366041

或者

《用ESP8266_RTOS_SDK v3控制电容传感器FDC2214(附C程序).docx》

https://download.csdn.net/download/chentuo2000/15841717

下面这个代码固定了SD引脚为低电平,这样可以节省一个ESP8266引脚。

8.3 编译

make

8.4 烧写

make flash

8.5 运行

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨之清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值