陈拓 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 运行

用ESP8266_RTOS_SDK v3的I2C控制电容传感器FDC2214相关推荐

  1. 电容传感器FDC2214单通道应用寄存器计算

    陈拓 2021/03/10-2021/03/14 1. 概述 在<FDC系列电容传感器及FDC2214使用要点> https://zhuanlan.zhihu.com/p/35348180 ...

  2. 电容传感器FDC2214计算工具FDC_Tools-development5的使用

    陈拓 2021/03/14-2021/03/15 1. 概述 在 <FDC系列电容传感器及FDC2214使用要点> https://zhuanlan.zhihu.com/p/3534818 ...

  3. python arduino i2c1602_Arduino通过I2C控制1602LCD显示屏

    Arduino通过I2C控制1602LCD显示屏 Arduino通过I2C控制1602LCD显示屏 [var1] 对比度太高,实际输出了文字但是无法看到,需要弄螺丝刀电位器,此外出错原因还有地址不对, ...

  4. ESP8266_RTOS_SDK v3.x 发送温度数据到MQTT服务器

    陈拓 2021/05/13-2021/05/19 1. 概述 我们在<ESP8266与MQTT服务器收发送数据> https://zhuanlan.zhihu.com/p/36792134 ...

  5. 通过i2c控制摄像机马达升降

    项目任务:1. i2c控制摄像头马达升降及查询升降状态:2. i2c控制usb hub复位 一.i2c总线协议简介: ①i2c硬件结构:i2c总线在物理连接上非常简单,分别由SDA(串行数据线)和SC ...

  6. 物联网开发笔记(85)- 使用Micropython开发ESP32开发板之通过I2C控制0.91寸OLED液晶屏

    一.目的 这一节我们学习如何使用我们的ESP32开发板来学习通过I2C控制0.91寸OLED液晶屏. 二.环境 ESP32 + Thonny + 0.91寸 OLED显示液晶屏模块 + 几根杜邦线 + ...

  7. 【51单片机快速入门指南】4.2: SSD1306 OLED屏(0.96寸、1.3寸)的I2C控制详解

    目录 硬知识 SSD1306简介 I2C 接口 从机地址位(SA0) I2C 总线写数据 命令解码器 晶振电路和显示时间发生器 复位 图形显示数据RAM (GDDRAM) 命令表 基本命令表 部分指令 ...

  8. CodeSys WIN V3 x64 PLC控制罗克韦尔的1734 Ethernet/IP远程控制模块

    CodeSys软PLC控制EtherNet/IP远程站 1. CODESYS软PLC 2. 系统组成 2.1 主站配置 2.2 网络配置 2.3 连接1734-AENT/B远程站 3. 配置连接 1. ...

  9. ESP8266_RTOS_SDK v3.x 读DS18B20温度数据

    陈拓 2021/05/05-2021/05/05 1. 概述 在本文中我们使用ESP8266_RTOS_SDK 3.x读取DS18B20的数据. 开发环境: Win10 Linux子系统Ubuntu ...

最新文章

  1. 重磅!中科院白洋研究员加入《宏微名师讲堂》分享高通量分菌技术啦!
  2. libtool: link: `dftables.lo' is not a valid libtool object
  3. 工作总结 Rezor 里面的一些小知识----自定义类型 放在标签值中 会直接跳过去...
  4. [转]Xshell连接win10 Linux子系统
  5. 计算机视觉技术测试物体距离,应用计算机视觉技术检测物体的形变
  6. GLUT教程(八) GLUT场景漫游II
  7. python操控chrome抓网页
  8. JDBC03 利用JDBC实现事务提交与回滚【调用Connection中的方法实现事务管理】
  9. 《算法设计》求单峰数组
  10. mysql 接收中文字符,MYSQL匹配中文字符
  11. java 二进制文件修改_Java读写二进制文件操作
  12. DCDC的PCB布局常见错误及避免方式
  13. 19年的两篇多标签文本分类 + 一篇层级多标签文本分类论文分享
  14. 显卡内存和计算机内存,512M和1GB显卡显示内存大小有什么区别
  15. Centos7修改DNS教程
  16. inveta PLSB 点线面体 示例工程
  17. DotNet 多线程下载
  18. 【网络编程】基于TCP/IP协议的C/S模型
  19. ubuntu赋予当前用户root权限
  20. 比例电磁阀(一)介绍和流量特性

热门文章

  1. 面试官吐槽:“软件测试员就是不行!”网友:我能把你面哭了!——软件测试笔试面试题目完全汇总
  2. 第55篇 Chrome扩展USB开发(一)及PHP研究 Saturday
  3. 【Pytorch】Cycle GAN实战(一):风格转换--真实风景图像转换为VanGogh风格
  4. 三分法求解凸函数的最值
  5. Redis set 类型 查询命令
  6. lazy(懒加载)模式和异步加载模式详解
  7. Windows 下安装 Xdebug 受难记之(3)
  8. bug的生命周期你知道吗?一张图带你看懂它!
  9. 《计算机视觉之三维重建》笔记1-数学基础
  10. 【Eclipse AST】AST与ASTView简介