TTP224

TTP224 是一款使用电容式感应原理设计的触摸 IC,其稳定的感应方式可以应用到各种不同电子类产品;面板介质可以是完全绝源的材料,专为取代传统的机械结构开关或普通按键而设计,提供4个触摸输入端口及4个直接输出端口。

特性

  • 工作电压 2.4V~5.5V。
  • 可以由外部 Option 选择是否启用内部稳压电路功能。
  • 工作电流 @VDD=3V 无负载时:
    • 低功耗模式下典型值 2.5uA
    • 快速模式下典型值9uA
  • @VDD=3V 时,在快速模式下 KEY 最快响应时间为100mS,低功耗模式下为 200mS。
  • 各 KEY 灵敏度可以由外部电容进行调节(0~50pF)。
  • 提供 LPMB 端口选择快速模式或低功耗模式。
  • 提供直接输出模式,触发模式,开漏输出,CMOS 高电平有效或低电平有效输出, 经由 TOG/AHLB/OD 端口选择。
  • 提供两个无二极管保护的输出端口 TPQ0D,TPQ2D 仅限于低电平有效。
  • 提供 MOT1, MOT0 端口选择最大输出时间:120秒/64秒/16秒/无穷大。
  • 上电后约有 0.5 秒的系统稳定时间,在此期间内不要触摸 Touch PAD 且触摸功能无效。
  • 有自动校准功能,当无按键被触摸时,系统重新校准周期约为4.0秒。

引脚说明

yjsm

管脚序号 管脚名称 类型 管脚描述
1 TP0 I/O 触摸输入端口
2 TP1 I/O 触摸输入端口
3 TP2 I/O 触摸输入端口
4 TP3 I/O 触摸输入端口
5 AHLB I-PL 输出高、低有效平选择,默认值:0
6 VDD P 正电源电压
7 VREG P 内部稳压电路输出端口
8 TOG I-PL 输出类型选择,默认值:0
9 LPMB I-PL 低功耗/快速模式选择,默认值:1
10 MOT0 I-PH 最长输出时间选择,默认值:1
11 VSS P 负电源电压,接地
12 DIS13 I-PH TP1、TP3 禁用选择端口,默认值:1
13 REGEN I-PH 内部稳压电路启用/禁用选择,默认值:1
14 OD I-PH 开漏输出选择,默认值:1
15 SM I-PH 单键/多键输出选择,默认值:1
16 TPQ3 O 直接输出端口
17 TPQ1 O 直接输出端口
18 TPQ2D OD 开漏输出口(无二极管保护电路),低电平有效
19 TPQ0 O 直接输出端口
20 TPQ2 O 直接输出端口
21 TPQ1D OD 开漏输出端口(无二极管保护电路),低电平有效

I → 仅作为 CMOS 输入

O → CMOS 输出

I/O → CMOS 输入/输出

I-PH → CMOS 输入带上拉电阻

I-PL → CMOS 输入带下拉电阻

OD → 开漏输出,无二极管保护电路

驱动代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
// ttp224.c
#include "ttp224.h"
/******************************************************************
* 函 数 名 称:TTP224_GPIO_Init
* 函 数 说 明:对电容式触摸芯片TTP224进行初始化
* 函 数 形 参:无
* 函 数 返 回:无
* 作 者:LC
* 备 注:无
******************************************************************/
void TTP224_GPIO_Init(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_TTP, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_IN1|GPIO_IN2|GPIO_IN3|GPIO_IN4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // 下拉输入
GPIO_Init(PORT_TTP, &GPIO_InitStructure);

GPIO_ResetBits(PORT_TTP, GPIO_IN1|GPIO_IN2|GPIO_IN3|GPIO_IN4);
}

/******************************************************************
* 函 数 名 称:Key_IN1_Scanf
* 函 数 说 明:返回触摸键1引脚电平状态
* 函 数 形 参:无
* 函 数 返 回:0=未检测到有触摸 1=检测到触摸
* 作 者:LC
* 备 注:无
******************************************************************/
char Key_IN1_Scanf(void){
return KEY_IN1;
}

/******************************************************************
* 函 数 名 称:Key_IN2_Scanf
* 函 数 说 明:返回触摸键2引脚电平状态
* 函 数 形 参:无
* 函 数 返 回:0=未检测到有触摸 1=检测到触摸
* 作 者:LC
* 备 注:无
******************************************************************/
char Key_IN2_Scanf(void){
return KEY_IN2;
}

/******************************************************************
* 函 数 名 称:Key_IN3_Scanf
* 函 数 说 明:返回触摸键3引脚电平状态
* 函 数 形 参:无
* 函 数 返 回:0=未检测到有触摸 1=检测到触摸
* 作 者:LC
* 备 注:无
******************************************************************/
char Key_IN3_Scanf(void){
return KEY_IN3;
}

/******************************************************************
* 函 数 名 称:Key_IN4_Scanf
* 函 数 说 明:返回触摸键4引脚电平状态
* 函 数 形 参:无
* 函 数 返 回:0=未检测到有触摸 1=检测到触摸
* 作 者:LC
* 备 注:无
******************************************************************/
char Key_IN4_Scanf(void){
return KEY_IN4;
}
=================================================================
//ttp224.h
#ifndef __TTP224_H_
#define __TTP224_H_

#include "stm32f10x.h"

#define RCC_TTP RCC_APB2Periph_GPIOA
#define PORT_TTP GPIOA

#define GPIO_IN1 GPIO_Pin_1
#define GPIO_IN2 GPIO_Pin_2
#define GPIO_IN3 GPIO_Pin_3
#define GPIO_IN4 GPIO_Pin_4

#define KEY_IN1 GPIO_ReadInputDataBit(PORT_TTP, GPIO_IN1)
#define KEY_IN2 GPIO_ReadInputDataBit(PORT_TTP, GPIO_IN2)
#define KEY_IN3 GPIO_ReadInputDataBit(PORT_TTP, GPIO_IN3)
#define KEY_IN4 GPIO_ReadInputDataBit(PORT_TTP, GPIO_IN4)

void TTP224_GPIO_Init(void);//引脚初始化
char Key_IN1_Scanf(void);//触摸按键1的输入状态
char Key_IN2_Scanf(void);//触摸按键2的输入状态
char Key_IN3_Scanf(void);//触摸按键3的输入状态
char Key_IN4_Scanf(void);//触摸按键4的输入状态

#endif
===============================================
// main.c

#include "stm32f10x.h"
#include "board.h"
#include "bsp_uart.h"
#include "stdio.h"
#include "bsp_touchkey.h"

int main(void){

board_init();

uart1_init(115200);

TTP224_GPIO_Init();
printf("ttp224 demo start\r\n");
while(1){
if(Key_IN1_Scanf() == 1)
{
printf("[1]-Touch!\r\n");
}
if(Key_IN2_Scanf() == 1)
{
printf("[2]-Touch!\r\n");
}
if(Key_IN3_Scanf() == 1)
{
printf("[3]-Touch!\r\n");
}
if(Key_IN4_Scanf() == 1)
{
printf("[4]-Touch!\r\n");
}

delay_ms(200);
}

}

https://github.com/TooUpper/SensorDrive