历史上的今天
返回首页

历史上的今天

今天是:2025年03月05日(星期三)

正在发生

2020年03月05日 | STM8S触摸按键固件库详解

2020-03-05 来源:eefocus

由于刚好有小项目需要用到触摸按键,stm8s可以节约一块触摸按键的片子,并且成本比较低。在某些对成本比较敏感的应用还是有价值的。现将自己网上找到的资料与自己学习的心得记下与大家分析。ST的底层库对滚动条也支持,效果还是不错的


一、原理分析

ST的电容式触摸按键方案通过一个电阻和感应电极的电容CX构成的阻容(RC)网络的充电/放电时间来检测人体触摸所带来的电容变化。

如上图所示,当人手按下时相当于感应电极上并联了一个电容Cx,增加了感应电极上的电容,感应电极进行充放电的时间会增加,从而检测到按键的状态。


先用开关将 Cs(或 Cs+Cx)上的电放尽,然后断开开关,让 R 给 Cs(或 Cs+Cx)充电,当没有手指触摸的时候, Cs 的充电曲线如图中的 A 曲线。而当有手指触摸的时候, 手指和 TPAD之间引入了新的电容 Cx,此时 Cs+Cx 的充电曲线如图中的 B 曲线。 从上图可以看出, A、 B两种情况下, Vc 达到 Vth 的时间分别为 Tcs 和 Tcs+Tcx。

其中, 除了 Cs 和 Cx 我们需要计算,其他都是已知的,


根据电容充放电公式:Vc=V0*(1-e^(-t/RC))

其中 Vc 为电容电压, V0 为充电电压, R 为充电电阻, C 为电容容值, e 为自然底数, t 为充电时间。根据这个公式,我们就可以计算出 Cs 和 Cx。 利用这个公式,我们还可以作一个简单的电容计,直接可以测电容容量了,有兴趣的朋友可以捣鼓下。


其实我们只要能够区分 Tcs 和 Tcs+Tcx,就已经可以实现触摸检测了,当充电时间在 Tcs 附近,就可以认为没有触摸,而当充电时间大于 Tcs+Tx 时,就认为有触摸按下( Tx为检测阀值)。

实际应用中感应电极可以直接在PCB板上绘制成按键、滚轮或滑动条的应用样式,也可以做成弹簧件插在PCB板上,即使隔着绝缘层(玻璃、树脂)也不会对其检测性能有所影响。


二、硬件设计

网络标号描述

REF_LOAD:对按键进行充放电的引脚,所有按键必须共用一个LOAD(保证一致性)。也可以用VCC代替。


SH_MCKEY:屏蔽引脚,这个根据实际情况来觉得是否接,一般调试的时候预留着


PD2-PD6 PC6 PC7为用户按键部分


注意:不要将按键检测脚安排在True open drain引脚和OSC1/PA1,OSC2/PA2引脚上(前者无法输出高电平,后者的内部结构与一般IO口不同,不适宜作为按键检测脚使用)



三、软件分析

MCU需要资源


1个16位定时器 (用于采集按键信号: 测量RC充放电时间)

1个8位定时器 (主要作为后处理的时基信号)


资料与固件代码下载地址


主函数(main)

void main(void)

{

    volatile u16 temp;

 

    CLK_HSICmd(ENABLE);//使能HSI

    CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//

    CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);//主频16M

    Delay(10000);  

 

    TSL_Init(); //按键库初始化

    Extra_Init();

 

 

    while(1) 

    { 

        temp = uMainCounting;

        TSL_Action();//获取按键状态

        Runing_Session[0] = uMainCounting - temp;

 

 

        temp = uMainCounting;

        Key_State_Machine();

        Runing_Session[1] = uMainCounting - temp;

    }

}


初始化触摸固件库

void TSL_Init(void)

{

 

  disableInterrupts();

 

  DetectionIntegrator = DETECTION_INTEGRATOR_DEFAULT;

  EndDetectionIntegrator = END_DETECTION_INTEGRATOR_DEFAULT;

  ECSTimeStep = ECS_TIME_STEP_DEFAULT;

  ECSTemporization = ECS_TEMPO_DEFAULT;

  RecalibrationIntegrator = RECALIBRATION_INTEGRATOR_DEFAULT;

  DetectionTimeout = DTO_DEFAULT;

 

  ECS_K_Fast = ECS_IIR_KFAST_DEFAULT;

  ECS_K_Slow = ECS_IIR_KSLOW_DEFAULT;

  ECSTimeStepCounter = ECSTimeStep;

  ECSTempoCounter = 0;

  ECSTempoPrescaler = 0;

 

  TSL_IO_Init();

 

#if (RTOS_MANAGEMENT == 0)

  TSL_Timer_Init();

#endif

 

#if NUMBER_OF_SINGLE_CHANNEL_KEYS > 0

  TSL_SCKey_Init();

#endif

#if NUMBER_OF_MULTI_CHANNEL_KEYS > 0

  TSL_MCKey_Init();

#endif

 

  enableInterrupts();

 

  TSLState = TSL_IDLE_STATE;

 

}

推荐阅读

史海拾趣

DURAKOOL公司的发展小趣事

随着技术的不断进步,DURAKOOL公司不断投入研发,推出了一系列创新产品,如Durakool接触器和电流互感器。这些产品凭借其高可靠性和稳定性,在电力监控和智能计量等领域得到了广泛应用。公司也逐渐扩大了市场覆盖范围,不仅在美国本土取得了成功,还逐步进入国际市场。

ELANTEC (Renesas )公司的发展小趣事

随着全球半导体市场的不断扩大和竞争的加剧,ELANTEC意识到必须加快全球化布局的步伐。因此,公司开始在全球范围内设立研发中心、生产基地和销售网络。目前,Renesas在全球拥有多个研发中心和生产基地,产品覆盖亚洲、欧洲、美洲等多个地区。这种全球化布局不仅使Renesas能够更好地服务全球客户,还为其未来的发展奠定了坚实的基础。

ERA Transformers公司的发展小趣事

随着市场需求的不断增长,ERA Transformers公司面临着扩大生产规模的挑战。为了满足客户需求并保持市场竞争力,公司决定投资建设一个新的生产基地。经过精心规划和筹备,新的生产基地顺利建成并投入使用。这不仅大大提高了公司的生产能力,还进一步提升了产品质量和生产效率。新基地的建成标志着ERA Transformers公司在电子行业中的地位更加稳固。

ALD [Advanced Linear Devices]公司的发展小趣事

随着市场需求的不断增长,ERA Transformers公司面临着扩大生产规模的挑战。为了满足客户需求并保持市场竞争力,公司决定投资建设一个新的生产基地。经过精心规划和筹备,新的生产基地顺利建成并投入使用。这不仅大大提高了公司的生产能力,还进一步提升了产品质量和生产效率。新基地的建成标志着ERA Transformers公司在电子行业中的地位更加稳固。

Danube Enterprise Co Ltd公司的发展小趣事

在稳固了国内市场地位之后,Danube开始将目光投向了全球市场。他们通过设立海外办事处、与当地企业合作等方式,积极开拓国际市场。Danube的产品凭借其卓越的品质和创新的设计,逐渐在国际市场上崭露头角。同时,公司还根据不同国家和地区的市场需求,推出了定制化的产品和服务,进一步增强了其市场竞争力。这些努力让Danube在全球电子行业中逐渐崭露头角,成为了一家备受瞩目的企业。

Cembre SPA公司的发展小趣事

Cembre SPA的创始人,以其对电子行业的深刻理解和远见,于XXXX年创立了这家公司。在初创期,他看到了电气连接和固定技术在工业领域中的巨大潜力,并决定专注于此。公司最初的产品线集中在电缆接头和固定设备上,这些产品以其高质量和易用性迅速获得了市场的认可。

问答坊 | AI 解惑

除了茫然,还是茫然.........

现在自学ARM,自己把接口等看了一遍,觉得自己可以做板子上的DEMO了,C语言的还可以勉强看懂...但是看.h和.inc除了茫然没别的感觉了....可以看懂语法,就不不知道这是什么意义????…

查看全部问答>

2440开发板,修改LCD

之前是3.5寸屏640*480,现在我要换成12.1寸屏(800*600) 需要在哪几个函数进行改动啊?? 谢谢大家了!!…

查看全部问答>

请 ppc , .netcf 开发高手 加我QQ ,谢谢

请 ppc .netcf 开发高手 加我QQ  ,谢谢 有很多问题要请教 qq 27541407…

查看全部问答>

大家帮帮忙,看看这是什么算法

这是依玛士9020喷码机的协议,不知道是什么算法。 例子1: B7h 00h 03h 41h 31h 32h - B7h 最后一位B7是校验码 例子2: A4h 00h 03h 00h 00h 00h - A7h 最后一位A7是校验码 例子3: B1h 00h 01h 00h  - B0h 最后一位B0是校验码 ...…

查看全部问答>

comboBox 控件使用问题

现在做一个wince平台下的应用软件(wince智能设备 基于dialog的),现在使用combobox控件,如设置其属性为dropdown的时候,可以用户自己输入内容,希望这个时候能够自动弹出输入法,但是不希望点击下拉时弹出,也不希望点击属性为droplist的combobo ...…

查看全部问答>

比较一下单片机、DSP、PLC、CPLD、FPGA、嵌入式这几中开发的区别???

最近想学硬件开发,不知道单片机、DSP、PLC、CPLD、FPGA、嵌入式这几中开发有什么区别,请各位大哥指点一下。     先在这里谢过了!!!!!…

查看全部问答>

关于format 的问题

我想format C,但dos提示命令不是内部命令或外部命令,哪位兄弟知道,怎么解决??? …

查看全部问答>

关于中断注册

在4.2平台下注册中断都要改oalintr.h,armint.c 有没有可能直接在驱动内部完成这些操作呢,也就是让用户不重编译内核的情况下自己写驱动时在驱动里注册中断呢 我没有用过5.0和6.0,听说它们就是这样的?直接在驱动内部一个函数全搞定,不知真 ...…

查看全部问答>

今天又在硅片上画画了

首先遇到了个小问题     解决中   最终的成功   不好意思,又来这里发不符合论坛主题的东西啦,哈哈   准备该行做画家了,觉得总会有人拿电子电路来画画的,至少PCB是可以的吧。哈哈…

查看全部问答>