STM32触摸按键原理和电路设计

发布者:Qinghua2022最新更新时间:2024-02-26 来源: elecfans关键字:STM32  触摸按键  RC充放电 手机看文章 扫描二维码
随时随地手机看文章

01触摸按键原理

触摸使用RC充放电原理:

95e3b85c-be98-11eb-9e57-12bb97331649.png

RC电路是指由电阻R和电容C组成的电路,它是脉冲产生和整形电路中常用的电路。

充电过程:

电源通过电阻给电容充电,由于一开始电容两端的电压为0,所以电压的电压都在电阻上,这时电流大,充电速度快。随着电容两端电压的上升,电阻两端的电压下降,电流也随之减小,充电速度小。充电的速度与电阻和电容的大小有关。电阻R越大,充电越慢,电容C越大,充电越慢。衡量充电速度的常数t(tao)=RC。

放电过程:

电容C通过电阻R放电,由于电容刚开始放电时电压为E,放电电流I=E/R,该电流很大,所以放电速度很快。随着电容不断的放电,电容的电压也随着下降。电流也很快减小。电容的放电速度与RC有关,R的阻值越大,放电速度越慢。电容越大,放电速度越慢。

RC电路充放电公式:

Vt = V0+(V1-V0)*[1-exp(-t/RC)]

V0 为电容上的初始电压值;

V1 为电容最终可充到或放到的电压值;

Vt 为t时刻电容上的电压值。

如果V0为0,也就是从0V开始充电。那么公式简化为:

Vt= V1* [1-exp(-t/RC)]

结论:同样的条件下,电容值C跟时间值t成正比关系,电容越大,充电到达某个临界值的时间越长。

02电路设计

电路设计时其实就是个上拉电阻

95ef53ce-be98-11eb-9e57-12bb97331649.png

PCB设计,直接一个圆形,和底层接地覆铜形成杂散电容。

电容触摸按键原理

962c46a8-be98-11eb-9e57-12bb97331649.png

R:外接电容充放电电阻。

Cs:TPAD和PCB间的杂散电容。

Cx:手指按下时,手指和TPAD之间的电容。

开关:电容放电开关,由STM32IO口代替。

03代码设计

检测电容触摸按键过程

①TPAD引脚设置为推挽输出,输出0,实现电容放电到0。

②TPAD引脚设置为浮空输入(IO复位后的状态),电容开始充电。

③同时开启TPAD引脚的输入捕获开始捕获。

④等待充电完成(充电到底Vx,检测到上升沿)。

⑤计算充电时间。

触摸按键初始化

uint8_t Touchpad_Init(void){ uint16_t buf[10]; uint16_t temp; uint8_t j,i; TIM_ICInitTypeDef TIM_ICInitStructure; /* TIM12Configuration */ TIM_Config();

TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM_ICInitStructure.TIM_ICFilter = 0x0;

TIM_ICInit(TIM12, &TIM_ICInitStructure); /* Enablethe CC1 Interrupt Request */ TIM_ITConfig(TIM12,TIM_IT_CC1|TIM_IT_Update, ENABLE); /* TIM enablecounter */ TIM_Cmd(TIM12, ENABLE);

for(i=0;i《10;i++)//连续读取10次 { buf[i]=Touchpad_Get_Val();

SysCtlDelay(10*(SystemCoreClock/3000)); } for(i=0;i《9;i++)//排序 { for(j=i+1;j《10;j++) { if(buf[i]》buf[j])//升序排列 { temp=buf[i]; buf[i]=buf[j]; buf[j]=temp; } } } temp=0; for(i=2;i《8;i++){ temp+=buf[i];//取中间的8个数据进行平均 } Touchpad_default_val=temp/6;

if(Touchpad_default_val》0XFFFF/2) return1;//初始化遇到超过Touchpad_ARR_MAX_VAL/2的数值,不正常! return 0; }

按键复位代码

void Touchpad_Reset(){ GPIO_InitTypeDefGPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_ResetBits(GPIOB,GPIO_Pin_14); SysCtlDelay(5*(SystemCoreClock/3000)); TIM_ClearITPendingBit(TIM12, TIM_IT_Update|TIM_IT_CC1);

TIM_SetCounter(TIM12,0); /* Connect TIM pinsto AF9 */ GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_TIM12); /* TIM12 channel 1 pin (PB14)configuration */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOB, &GPIO_InitStructure);}


关键字:STM32  触摸按键  RC充放电 引用地址:STM32触摸按键原理和电路设计

上一篇:STM32CubeMx之SD卡驱动
下一篇:STM32如何高效接收串口数据?

推荐阅读最新更新时间:2024-11-17 17:46

stm32用什么语言编程 STM32单片机原理
STM32可以使用多种语言进行编程,包括: 1. C语言:C语言是最常用的STM32编程语言。STMicroelectronics提供了专门的C编译器和开发工具链,使开发者可以使用C语言进行STM32的软件开发。 2. C++语言:除了C语言,STM32也可以使用C++语言进行编程。C++是C的扩展,提供了面向对象的编程能力,可以使STM32的软件更加模块化和可重用。 3. 基于HAL库的C语言:STMicroelectronics还提供了一套称为HAL(Hardware Abstraction Layer)的库,可以方便地进行硬件抽象和驱动开发。使用HAL库,开发者可以使用C语言编写高层次的代码,而不需要直接操作寄存器。 4.
[单片机]
STM32 USB-HID的调试记录
1、使用USB 的鼠标方式进行。HID设备方式,即插即用。在输入端可以看到人体输入端; 2、HID设备,可以使用porthelper调试USB,BUS Hound抓取USB包。 资料参考1: http://www.openedv.com/posts/list/41451.htm 2.1 通过Bus Hound软件可以看到连接成功外设USB设备:(如下图所示) 2.2 鼠标按下后获取的数据,左键、右键还有翻页和空键。 2.3 USB调试器可以发现外接的设备。查找后界面如下。但是无法在接收区接收到数据。 将CC1101和USB-HID通信以及串口结合起来,做了简单的演示功能。 测试条件:PC机使用
[单片机]
<font color='red'>STM32</font> USB-HID的调试记录
stm32学习笔记(1):实时时钟RTC
太久没写过像样的文,先从学习笔记开始,之后逐渐补充这个月以来的单片机学习笔记。 -------------------------------------我是分界线你看不见------------------------------------------- 1.RTC简介 (关于stm32的实时时钟RTC的介绍,参考手册甚是详细,自可参考,编程时不懂查阅即可,不必死背硬记。) STM32的实时时钟(RTC)是一个独立的定时器,RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能,修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配置系统(RCC_BDCR寄存器)是在备份区域,即在系统
[单片机]
<font color='red'>stm32</font>学习笔记(1):实时时钟RTC
STM32 GPIO的十大优越功能综述
前几天Hotpower邀请大家讨论一下GPIO的功能、性能和优缺点(STM32的GPIO很强大~~~),等了几天没见太多人发言,但综合来看提到了3点:1)真双向IO,2)速度快,3)寄存器功能重复。关于第3点有说好,有说多余的,见仁见智。 下面我就在做个抛砖引玉,根据ST手册上的内容,简单地综述一下GPIO的功能: 一、共有8种模式,可以通过编程选择: 1. 浮空输入 2. 带上拉输入 3. 带下拉输入 4. 模拟输入 5. 开漏输出——(此模式可实现hotpower说的真双向IO) 6. 推挽输出 7. 复用功能的推挽输出 8. 复用功能的开漏输出 模式7和模式8需根据具体的复用功能决定。 二、专门的寄存器(GPIOx_
[单片机]
一种无线节水滴灌自动控制系统的设计方案
  0 引言   随着人口的增长和农业的发展,随着全球变暖造成的干旱问题日益严重,世界水资源的需求量越来越大,水资源紧缺已成为全世界人民共同关注的问题。滴灌技术是通过干管、支管和毛管上的滴头,在低压下向土壤经常缓慢滴水,可直接向土壤供应已过滤的水分、肥料或其他化学剂等的一种实用技术。大田自动滴灌技术具有大幅度提高水的利用率、减少土壤结构破坏、改善生态环境、提高经济效益的作用,是一种高效节水的新型灌溉技术,目前已经成为实施高效、精准灌溉的重要水资源管理技术措施。近年来,随着无线信息传输技术的发展,ZigBee 无线网络以其低成本、低功耗、低速率、近距离、短延时、高安全等特点,在现代农业发展中得到高度关注 .本设计将传感器技术、ST
[单片机]
一种无线节水滴灌自动控制系统的设计方案
如何开发功能齐全的QSPI驱动
1. 摘要 本篇笔记主要介绍,如何开发稳定可靠,功能齐全的QSPI驱动。 2. 准备工作 1, IAR 8.32.1 2, STM32Cube_FW_H7_V1.6.0 3. QSPI简介 4. QSPI驱动 在项目的开发中,我们经常会使用外挂Flash在做一些应用,而STM32H743带QSPI接口,可以用来外挂QSPI Flash,在之前的推送中我们以winbond华邦的W25Q256为例给大家说明了下QSPI的操作,借助ST的HAL库例程可以快速验证,不同型号的QSPI Flash会有一些参数和命令区别,大家应用时候要注意,例如美光和华邦的有的命令码就不同。ST的驱动里STM32H743的评估板是以美光的MT25T_QL
[单片机]
如何开发功能齐全的QSPI驱动
解决STM32在MDK-ARM(KEIL)编译时出现 已停止工作
若是关闭对话框还可继续编译,只是到最后linking时显示一个error,提示 ..OBJXXX.axf: error: L6002U: Could not open file ..objXXX.o: No such file or directory ..OBJtest.axf - 1 Error(s), 0 Warning(s). 从网上查到很多相同问题,但是回答者都是简简单单说几句是什么原因就走了...这就是大神的通病吧,忙活自己的事去了... 解决: 1、右键我的电脑-管理-本地用户和组-用户 把里面你的中文用户名改成英文。 2、右键我的电脑-属性 右下-计算机名称、域和工作组设置-更改设置 改成
[单片机]
解决<font color='red'>STM32</font>在MDK-ARM(KEIL)编译时出现 已停止工作
STM32单片机学习手记
   STM学习笔记——用定时器实现荧火虫灯   在第6篇笔记中,我用软件延时的方法实现了荧火虫,学了定时器,当然就要用一用定时器了,这里仍是用荧火虫灯为例。   用ST库所带的例子Tim中的TimBase为例来修改,这个例子的位置以及如何建立工程请参考第7篇笔记,这里就不再重复了,下面简述一下修改的过程。   (1) 由于我的板子上的灯是由PD8~PD11来控制的,因此,要将   void RCC_Configuration(void)   中的:   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //打开GPIOC的时钟   改为   RCC_APB
[单片机]
<font color='red'>STM32</font>单片机学习手记
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved