用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 函数
- 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相关推荐
- 电容传感器FDC2214单通道应用寄存器计算
陈拓 2021/03/10-2021/03/14 1. 概述 在<FDC系列电容传感器及FDC2214使用要点> https://zhuanlan.zhihu.com/p/35348180 ...
- 电容传感器FDC2214计算工具FDC_Tools-development5的使用
陈拓 2021/03/14-2021/03/15 1. 概述 在 <FDC系列电容传感器及FDC2214使用要点> https://zhuanlan.zhihu.com/p/3534818 ...
- python arduino i2c1602_Arduino通过I2C控制1602LCD显示屏
Arduino通过I2C控制1602LCD显示屏 Arduino通过I2C控制1602LCD显示屏 [var1] 对比度太高,实际输出了文字但是无法看到,需要弄螺丝刀电位器,此外出错原因还有地址不对, ...
- ESP8266_RTOS_SDK v3.x 发送温度数据到MQTT服务器
陈拓 2021/05/13-2021/05/19 1. 概述 我们在<ESP8266与MQTT服务器收发送数据> https://zhuanlan.zhihu.com/p/36792134 ...
- 通过i2c控制摄像机马达升降
项目任务:1. i2c控制摄像头马达升降及查询升降状态:2. i2c控制usb hub复位 一.i2c总线协议简介: ①i2c硬件结构:i2c总线在物理连接上非常简单,分别由SDA(串行数据线)和SC ...
- 物联网开发笔记(85)- 使用Micropython开发ESP32开发板之通过I2C控制0.91寸OLED液晶屏
一.目的 这一节我们学习如何使用我们的ESP32开发板来学习通过I2C控制0.91寸OLED液晶屏. 二.环境 ESP32 + Thonny + 0.91寸 OLED显示液晶屏模块 + 几根杜邦线 + ...
- 【51单片机快速入门指南】4.2: SSD1306 OLED屏(0.96寸、1.3寸)的I2C控制详解
目录 硬知识 SSD1306简介 I2C 接口 从机地址位(SA0) I2C 总线写数据 命令解码器 晶振电路和显示时间发生器 复位 图形显示数据RAM (GDDRAM) 命令表 基本命令表 部分指令 ...
- 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. ...
- ESP8266_RTOS_SDK v3.x 读DS18B20温度数据
陈拓 2021/05/05-2021/05/05 1. 概述 在本文中我们使用ESP8266_RTOS_SDK 3.x读取DS18B20的数据. 开发环境: Win10 Linux子系统Ubuntu ...
最新文章
- 重磅!中科院白洋研究员加入《宏微名师讲堂》分享高通量分菌技术啦!
- libtool: link: `dftables.lo' is not a valid libtool object
- 工作总结 Rezor 里面的一些小知识----自定义类型 放在标签值中 会直接跳过去...
- [转]Xshell连接win10 Linux子系统
- 计算机视觉技术测试物体距离,应用计算机视觉技术检测物体的形变
- GLUT教程(八) GLUT场景漫游II
- python操控chrome抓网页
- JDBC03 利用JDBC实现事务提交与回滚【调用Connection中的方法实现事务管理】
- 《算法设计》求单峰数组
- mysql 接收中文字符,MYSQL匹配中文字符
- java 二进制文件修改_Java读写二进制文件操作
- DCDC的PCB布局常见错误及避免方式
- 19年的两篇多标签文本分类 + 一篇层级多标签文本分类论文分享
- 显卡内存和计算机内存,512M和1GB显卡显示内存大小有什么区别
- Centos7修改DNS教程
- inveta PLSB 点线面体 示例工程
- DotNet 多线程下载
- 【网络编程】基于TCP/IP协议的C/S模型
- ubuntu赋予当前用户root权限
- 比例电磁阀(一)介绍和流量特性
热门文章
- 面试官吐槽:“软件测试员就是不行!”网友:我能把你面哭了!——软件测试笔试面试题目完全汇总
- 第55篇 Chrome扩展USB开发(一)及PHP研究 Saturday
- 【Pytorch】Cycle GAN实战(一):风格转换--真实风景图像转换为VanGogh风格
- 三分法求解凸函数的最值
- Redis set 类型 查询命令
- lazy(懒加载)模式和异步加载模式详解
- Windows 下安装 Xdebug 受难记之(3)
- bug的生命周期你知道吗?一张图带你看懂它!
- 《计算机视觉之三维重建》笔记1-数学基础
- 【Eclipse AST】AST与ASTView简介