【致敬未来的攻城狮计划】— 连续打卡第二十七天:瑞萨RA RA2E1 的 BTN触摸按键

本文详细介绍了如何在瑞萨RA2E1微控制器上开发电容触摸按键,包括其工作原理、开发步骤、Keil工程配置和代码编写。文章特别强调了电容触摸按键的CTSU模块配置和使用,以及借助RenesasQE工具进行调谐和参数生成的过程。
摘要由CSDN通过智能技术生成


文章目录

         由于一些特殊原因:

系列文章链接:(其他系列文章,请点击链接,可以跳转到其他系列文章)或者参考我的专栏“ 瑞萨MCU ”,里面是 瑞萨RA2E1 系列文章。

        24.RA2E1的 DMAC——数据传输 

        25.RA2E1的 DTC传输模式

        26.瑞萨RA Cortex-M 内核RA2E1 & RT-Thread BSP 启蒙知识


文章目录


前言

        电容式感应触摸按键可以穿透绝缘材料外壳 8mm (玻璃、塑料等等)以上,准确无误地侦测到手指的有效触摸。 并保证了产品的灵敏度、稳定性、可靠性等不会因环境条件的改变或长期使用而发生变化,并具有防水和强抗干扰能力。


一、电容触摸按键是什么?原理?

         瑞萨的芯片内部集成高分辨率触摸检测模块CTSU和专用信号处理电路,以保证芯片对环境变化具有灵敏的自动识别和跟踪功能。 芯片还必须满足用户在复杂应用中对稳定性、灵敏度、功耗、响应速度、防水等方面的高体验要求。 电容式触摸按键控制芯片通常广泛适用于遥控器、灯具调光、各类开关以及车载、小家电和家用电器控制界面等应用中。 在芯片应用的开发过程非常简单,可以最大限度的降低方案成本。

原理:

        在开发板未上电时,可以认为电容Cx是没有电荷的,在上电时,在电阻作用下,电容Cx就会有一个充电过程,直到电容充满,即Vc电压值为3.3V,这个充电过程的时间长短受到电阻R阻值和电容Cx容值的直接影响。但是在我们选择合适电阻R并焊接固定到电路板上后,这个充电时间就基本上不会变了,因为此时电阻R已经是固定的,电容Cx在无外界明显干扰情况下基本上也是保持不变的。

        此时整个电容按键可以容纳的电荷数量就比没有手指触摸时要多了,可以看成是Cx和Cs叠加的效果。在相同的电阻R情况下,因为电容容值增大了,导致需要更长的充电时间。也就是这个充电时间变长使得我们区分有无手指触摸,也就是电容按键是否被按下。

        现在最主要的任务就是测量充电时间。充电过程可以看出是一个信号从低电平变成高电平的过程,现在就是要求出这个变化过程的时间。我们可以利用定时器输入捕获功能计算充电时间,即设置TIMx_CH为定时器输入捕获模式通道。这样先测量得到无触摸时的充电时间作为比较基准,然后再定时循环测量充电时间与无触摸时的充电时间作比较,如果超过一定的阈值就认为是有手指触摸。


二、开发步骤

1.硬件图

        电容按键不需要任何外部机械部件,使用方便,成本低,很容易制成与周围环境相密封的键盘,以起到防潮防湿的作用。


2.新建工程

对于 Keil 开发环境:

        拷贝一份我们之前的 Keil 工程模板 “RA_UART”, 然后将工程文件夹重命名为 “RA_BTN”,并进入该文件夹里面双击 Keil 工程文件,打开该工程。


3.FSP配置

        依次点击 Stacks -> New Stack -> CapTouch -> TOUCH 

        点击模块  CTSU 模块

        配置CTSU模块引脚

        打开e2-stdio,配置QE for Capacitive Touch:

如图所示(我们并没有找到 QE for Capacitive Touch )

        点击 e2 studio 上方的 Renesas Views 之后依次点击 Renesas QE -> CapTouch Main (QE)

        解决以上没有   CapTouch Main (QE)。 这个问题如下:

选择如图所示的  “瑞萨软件安装程序”  进去之后   安装QE for Capacitive Touch:

        正常安装之后,重启软件,会发现多了很多选项:

        Renesas QE -> CapTouch Workflow(QE)。即可打开如下图所示:

注意:

有些版本打开之后  不是CapTouch Workflow(QE) 而是 CapTouch Main(QE) 这是等同效果

如果安装之后啥也没有,建议重新换e2-stdio版本重新安装,反复重试,一定会有。

        在Select a Prodect 中选择自己的工程:

        在 Prepare a Configuration   中设置按键:

双击可以选中,修改按键的属性:如下图所示

        下一步:点击Start Turning:

 

         点击完之后,就会出现如上图所示,现在提示将您的小爪子,按在你初始化过的触摸按键上,按上不要放开哦,然后在电脑键盘上随便按个键,就会得到如下图所示:

         点击  “ Continue the Tuning Process ”  即 这个时候我们的配置文件就配置好了

可以发现前三个已经初始化好了,现在可以点击第四个“Output Parameter Files”

 会生成如图文件:

注意:在我们没有点击 start Tuning 进行调谐此时 Output Parameter Files 按钮显示灰色, 这个时候我们是点击不了 Output Parameter Files 输出参数文件,我们可以先点击 start Tuning 进行调谐后进行参数文件的输出。

 下一步:“Output to a file”:

 此时就会发现:

到达此步,说明你已经配置好了,触摸按键。再进行调试。

将函数调入此处。

void hal_entry(void)
{
    /* TODO: add your own code here */
    qe_touch_main();     //跳转到电容按键函数
#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif
}

        继续打开,CapTouch Status 窗口如下,可以通过Touch I/F 选择触摸通道。

        通过 Renesas View -> Renesas QE -> CapTouch Multi Status Chart,打开多路触摸检测窗口。同理可以打开CapTouch Pad Monitor检测窗口。

 
 点击按键,即可看到按键的阈值,和测量值。

以上,就可以那e2-stdio控制触摸按键了。


四、keil的触摸按键设置

        总结来说就是将电容按键e2-stdio生成的文件复制到keil工程文件夹里面。

        双击 configuration.xml 打开配置界面: 然后点开依次点击 Stacks -> New Stack -> CapTouch -> TOUCH 来配置CTSU模块。

之后选择对应的引脚

配置LED引脚

配置完成之后可以按下快捷键“Ctrl + S”保存, 最后点右上角的 “Generate Project Content” 按钮,让软件自动生成配置代码即可。

复制文件

        我们在keil里面创建一个 qe_gen 文件夹,将之前在 e2 studio 项目里生成的 qe_gen 文件夹里的文件复制到keil的文件夹里面, 之后我们将文件目录导入到项目里。

第一步我们点击 Options for Target ‘Target 1’ ,将添加的文件夹目录导入到工程里。

五、代码编写

主函数

void hal_entry(void)
{
   qe_touch_main();     //跳转到电容按键函数

   #if BSP_TZ_SECURE_BUILD
      /* Enter non-secure code */
      R_BSP_NonSecureEnter();
   #endif
}

qe_sample_main

/***********************************************************************
*
* FILE : qe_sample_main.c
* DATE : 2022-02-14
* DESCRIPTION : Main Program for RA
*
* NOTE:THIS IS A TYPICAL EXAMPLE.
*
***********************************************************************/
#include "qe_touch_config.h"
#define TOUCH_SCAN_INTERVAL_EXAMPLE (20)    /* milliseconds */

void qe_touch_main(void);


uint64_t button_status;
#if (TOUCH_CFG_NUM_SLIDERS != 0)
uint16_t slider_position[TOUCH_CFG_NUM_SLIDERS];
#endif
#if (TOUCH_CFG_NUM_WHEELS != 0)
uint16_t wheel_position[TOUCH_CFG_NUM_WHEELS];
#endif






void qe_touch_main(void)
{
    fsp_err_t err;




    /* Open Touch middleware */
    err = RM_TOUCH_Open(g_qe_touch_instance_config01.p_ctrl, g_qe_touch_instance_config01.p_cfg);
    if (FSP_SUCCESS != err)
    {
        while (true) {}
    }



    /* Main loop */
    while (true)
    {


        /* for [CONFIG01] configuration */
        err = RM_TOUCH_ScanStart(g_qe_touch_instance_config01.p_ctrl);
        if (FSP_SUCCESS != err)
        {
            while (true) {}
        }
        while (0 == g_qe_touch_flag) {}
        g_qe_touch_flag = 0;

        err = RM_TOUCH_DataGet(g_qe_touch_instance_config01.p_ctrl, &button_status, NULL, NULL);
        if (FSP_SUCCESS == err)
        {
            /* TODO: Add your own code here. */
            if ( button_status & CONFIG01_MASK_BTN1)
            {
                 R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_02, BSP_IO_LEVEL_HIGH);
                 R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_LOW);
            }
            else if ( button_status & CONFIG01_MASK_BTN2)
            {
                 R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_02, BSP_IO_LEVEL_LOW);
                 R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_HIGH);
            }
            else if ( button_status & CONFIG01_MASK_BTN3)
            {
                R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_02, BSP_IO_LEVEL_HIGH);
                R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_HIGH);
            }
            else
            {
                R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_02, BSP_IO_LEVEL_LOW);
                R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_LOW);
        }

        }




        /* FIXME: Since this is a temporary process, so re-create a waiting process yourself. */
        R_BSP_SoftwareDelay(TOUCH_SCAN_INTERVAL_EXAMPLE, BSP_DELAY_UNITS_MILLISECONDS);
    }
}

        终于解决,很多关于一些配置的问题,确实感觉很麻烦,且找不到一些资源学习,希望这篇文章能够帮助到大家。


雨后终现彩虹

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值