点击上方“嵌入式从0到1”,选择“星标公众号”
干货福利,第一时间送达!
大家好,我是程序员小哈。
我们之前分享过一款基于TTP223芯片的点动触摸传感器模块,利用它可以实现单点按键的触摸。
最近调试的板子上画了一个TTP229芯片,这个芯片可以实现16路触摸按键,今天我们就分享一下这个。
TTP229-BSF芯片简介
TTP229-BSF芯片,封装为SSOP-28,是一款电容式16键触摸感应IC,专为触摸板控制而设计。主要应用是替换机械开关或按钮,芯片一次性可以读取出16个按键的状态数据。
工作电压:2.4V-5.5V。
应用电路
官方手册上的推荐电路为:
上面参考电路中有6个灵敏度调节电容,每个电容对应功能如下表所示:
CJ0~CJ3 和 CJWA-CJWB 的电容值可用于调节对应键的灵敏度。
电容值越小,灵敏度越高。灵敏度的调节必须是根据实际应用的 PCB 来做决定。电容值的取值范围是 1pF ≦ CJ0~CJ3 ≦ 50pF ,1pF ≦ CJWA~CJWB ≦ 50pF。
原理图
实际加工之后的PCB板,建议先通过调节 C21~C24 的容值来调节 TP0~TP15 的灵敏度,再调节 C25 和 C26 的容值来调节唤醒灵敏度。
板子上画了五个按键,分别为TP0、TP1、TP2、TP3、TP8,我的PCB板上使用的电容值都为10pF。
模式选择
由上面的原理图,我们知道:TP1=0,TP2=0 。
当 TP1=0,TP2=0 ,我们查询手册知道,设置为16按键全使用,SDA高电平触发模式。
TP3=0,TP4=0,对应多键模式,即可以同时按下多个按键。如果TP3和TP4悬空,即不焊接1M电阻,那么即为全部单键有效。
这五个选项端口具体定义如下:
时序分析
由于本实例实际情况, TP1=0,TP2=0 ,所以具体时序图如下:
注意:虽然这个芯片使用了两个引脚来驱动,命名也像I2C总线的命名,但是这个驱动真的跟I2C一点关系没有。
读取16个按键状态的函数实现如下所示:
uint16_t Touch_Read(void)
{
uint8_t i = 0;
uint16_t real_Value = 0;
//发送一个高电平
SDA_OUT();
TTP_SDO = 1;
delay_us(100);
TTP_SDO = 0;
delay_us(20);
SDA_IN();
//循环获取16个触摸按键的状态
for (i = 0; i < 16; i ++)
{
TTP_SCL = 1;
delay_us(100);
TTP_SCL = 0;
delay_us(1);
if (TTP_SDI == 1)
{
real_Value |= (1 << i);
}
}
delay_ms(2);
return real_Value;
}
利用上面函数的返回值,可以与上一次调用的返回值相比,如果一致,可认为是同一次触摸操作,这样可以避免误认为多次动作。
源码获取/素材获取
公众号后台回复关键字:TTP229,获取测试本文Demo。
结果展示
通过上面视频的展示,我们可以看出来,焊盘盖不盖油都是不影响识别的,整体来看,识别的准确度还是很高的,把触摸按键应用到一些需要防水的使用场景还是挺不错的。
参考阅读
欢迎关注
点击名片,发送加群,加入作者优质技术交流群。
【点击名片关注公众号】
如果想了解小哈哥的知识星球,可以点击“阅读原文”查看球友的福利,我们可以一起交流、一起玩耍。
分享 ? 点赞 ? 在看 ❤️
以“三连”行动支持优质内容!
原文始发于微信公众号(嵌入式从0到1):TTP229触摸模块的STM32单片机驱动分享