嵌入式单片机基础篇(十一)之电容触摸按键

本文详细介绍了STM32F1单片机实现电容触摸按键的工作原理,包括RC充放电电路及其公式,电容触摸按键的原理,以及通过IO口控制实现电容放电和充电的过程。通过理解电容值与充电时间的关系,可以判断按键是否被按下。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

stm32F1电容触摸按键详解

1、RC充放电电路原理:
在这里插入图片描述

(1)如上图所示,当开关关闭时,电容经过电阻R充电,最开始的瞬间电流为最大值V1/R,随后随着Vt越来越大,电流变小,电容充电速度变慢,当V1=Vt时,电流为0
(2)RC电路充放电公式:Vt = V0+(V1-V0)* [1-exp(-t/RC)]
V0 为电容上的初始电压值;
V1 为电容最终可充到或放到的电压值;
Vt 为t时刻电容上的电压值。
R 为充电电阻
C 为电容容值
e 为自然底数
t 为充电时间
如果V0为0,也就是从0V开始充电。那么公式简化为:Vt= V1* [1-exp(-t/RC)]
结论:同样的条件下,电容值C跟时间值t成正比关系,电容越大,充电到达某个临界值的时间越长。
2、电容触摸按键原理:
在这里插入图片描述
在这里插入图片描述
R:外接电容充放电电阻。
Cs:TPAD和PCB间的杂散电容。
Cx:手指按下时,手指和TPAD之间的电容。
开关:电容放电开关,由STM32 IO口代替。
电容触摸按键原理简而言之就是,当手指按下触摸按键的时候,相当于充电电容增大,那么所需的充电时间就变长,根据电容充电时间的差异来判断是否按下了触摸按键
上图的开关作用是,当开关闭合时,电容放电,当开关断开时,电容充电。用IO口代替的话是需要先将IO口配置成推挽输出,再将IO口置低电平0,来实现电容放电,再将IO口配置成浮空输入,相当于断开开关,此时电容开始充电
3、程序实现:

触摸按键程序与原理


#define TPAD_ARR_MAX_VAL 	0XFFFF	//最大的ARR值
vu16 tpad_default_val=0;//空载的时候(没有手按下),计数器需要的时间
第一步:初始化,也就是先放电后充电
void TPAD_Reset(void)
{
   
   
  	GPIO_InitTypeDef  GPIO_InitStructure; 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 //使能PA端口时钟
	
	//设置GPIOA.1为推挽使出
 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;				 //PA1 端口配置
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
 	GPIO_ResetBits(GPIOA,GPIO_Pin_1);						 //PA.1输出0,放电

	delay_ms(5);

	TIM_SetCounter(TIM5,0);		//归0
	TIM_ClearITPendingBit(TIM5, TIM_IT_CC2|TIM_IT_Update); //清除中断标志
	//设置GPIOA.1为浮空输入
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;	 //浮空输入
	GPIO_Init(GPIOA, &GPIO_InitStructure);
}
第二步:输入捕获,上升沿捕获
//定时器2通道2输入捕获配置
void TIM5_CH2_Cap_Init(u16 arr,u16 psc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值