历史上的今天
返回首页

历史上的今天

今天是:2024年12月24日(星期二)

正在发生

2020年12月24日 | STM32触摸按键

2020-12-24 来源:eefocus

01、触摸按键原理

触摸使用RC充放电原理:

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、电路设计

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

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

电容触摸按键原理

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);

}

下载代码测试验证:

推荐阅读

史海拾趣

Herth+Buss Fahrzeugteile GmbH & Co KG公司的发展小趣事
定期清洁传感器表面,防止灰尘和污垢影响灵敏度。
杰力(EMC)公司的发展小趣事

为了确保产品质量和客户满意度,杰力建立了一套完善的质量管理体系。公司从原材料采购、生产制造到产品检测等各个环节都实行严格的质量控制和管理。同时,杰力还引进了先进的检测设备和技术手段,对产品质量进行全面检测和评估。这些措施使得杰力的产品在质量上得到了有效保障,并赢得了客户的信赖和好评。

FASTRAX公司的发展小趣事

2012年,瑞士公司u-blox宣布以1300万欧元收购FASTRAX 100%的股权。这一并购事件引起了业界的广泛关注。u-blox看中了FASTRAX在GPS接收模块领域的领先地位和技术实力,希望通过并购加强其在定位市场的竞争优势。并购完成后,FASTRAX成为u-blox集团的重要一员,继续为全球客户提供优质的GPS产品和服务。

Califia Lighting公司的发展小趣事

Califia Lighting公司的创立源于创始人对节能照明技术的深刻理解和前瞻视野。在电子照明行业快速发展的背景下,他们看到了LED照明技术的巨大潜力,并决定投身其中。凭借对技术的热爱和对市场的敏锐洞察,Califia Lighting成功研发出了一系列高性能的LED灯具和模块,为公司的起步奠定了坚实的基础。

EAO公司的发展小趣事

面对全球市场的竞争压力,EAO公司坚定实施全球化战略。公司在全球范围内建立了完善的销售网络和售后服务体系,为客户提供及时、高效的服务。同时,EAO公司还积极寻求与国际知名企业的合作机会,共同开拓市场、分享资源。通过全球化战略的实施,EAO公司不断提升品牌影响力和市场竞争力。

Caltron Devices Ltd公司的发展小趣事

为了进一步提升公司的竞争力和影响力,Caltron Devices Ltd公司积极实施国际化战略。公司加强与国外同行的交流与合作,引进先进的技术和管理经验,不断提升自身的创新能力。同时,Caltron还积极参加国际电子展会和论坛,展示公司的最新产品和技术成果,成功打开了全球市场的大门。

问答坊 | AI 解惑

什么是ESD?

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 简言之,ESD就是电荷的快速中和,电子工业每年花在这上面的费用有数十亿美元之多。我们知道所有的物质都由原子构成,原子中有电子和质子。当物质获得或失去电子时,它将失去电平衡而变成带负电 ...…

查看全部问答>

哪位大哥能给发个rapi.lib

想在pc和device之间通过rapi进行通信,但是找不到rapi.lib 哪位兄弟有给发一个到邮箱guopeixin@yahoo.com.cn中, 先行谢过了…

查看全部问答>

嵌入式操作系统 ecos

应届毕业生,公司要求学ecos,但是从来没有接触过,身边也没有人懂这个,在网上转了一大圈也没找到多少资料,有懂行的朋友能帮忙推荐一两本好点的书吗? 我在淘宝找了下找到了下面3本书: 《嵌入式可配置实时操作系统eCos技术及实现机制》 《嵌 ...…

查看全部问答>

启动程序与引导程序有什么区别呀????

启动程序与引导程序有什么区别呀????…

查看全部问答>

CCS 编译错误

fatal error: file \"C:\\\\CCStudio_v3.3\\\\MyProjects\\\\Motor\\\\rts2800.lib<boot.obj>\"   has a Tag_Memory_Model attribute value of \"1\" that is different than one   previously seen (\"2\"); combining in ...…

查看全部问答>

LauchPad 收到了,为什么没有图片上的那个触摸小板?严重不符啊!

LauchPad 收到了,为什么没有图片上的那个触摸小板?严重不符啊!…

查看全部问答>

MSP430经典讲解,从入门到精通

没什么可说的,最近研究MSP430,在下自己收集的东西。分享下。…

查看全部问答>

USB3.0几大优势

USB可以称得上是目前最为成功,最有优势的外设接口规范,随着时代的发展,外设的进步,USB接口规范也需要有相应的配套升级,于是所谓的“SuperSpeed USB”(超高速USB)出现了,也就是我们今天要重点介绍的USB 3.0的优势。 USB 3.0有两大最能拿得 ...…

查看全部问答>

语言和编程是两码事---从语言进步到编程

从语言进步到编程 1. 语言和编程本是两码事 分不清语言和编程的人,估计很能学得好编程。 1.1 盲从技术只能让你晕的更久 和其它事物一样,软件编程的发展也经历了从低级到高级的各个阶段。从机器代码到汇编语言,从汇编语言到高级 ...…

查看全部问答>

大家编程都用什么仿真器?又一个 Jlink 固件升级后变成 unknow device

在淘宝上买了两个 J-Link V8,现在两个都已经因为固件升级变成了 unknown device. J-Link 功能强大,确实是非常不错的仿真器。 大家有没有比 J-Link 觉得更好用的仿真器呢? …

查看全部问答>