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

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开始充电
摘要由CSDN通过智能技术生成

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, &
  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值