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

  • 4
  • 0
  • 约6.77千字
  • 约 5页
  • 2022-10-01 发布于上海
  • 举报

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

嵌⼊式单⽚机基础篇(⼗⼀)之电容触摸按键 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_InitStructure .GPIO_Speed = GPIO_Speed_50MHz ; GPIO_Init(GPIOA, GPIO_InitStructure ); 输出 放电 GPIO_ResetBit (GPIOA,GPIO_Pin_1); //PA.1 0, delay_m (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) { GPIO_InitTypeDef GPIO_InitStructure ; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure ; TIM_ICInitTypeDef TIM5_ICInitStructure ; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE)

文档评论(0)

1亿VIP精品文档

相关文档