前言
本次实验的目标是利用触摸按键点亮LED灯,以达到扩展按键数量的目的。
本节实验需要用到J-Link仿真器。
如果你在按照e2s时没有勾选安装Renesas QE的话,需要从官网下载e2s安装包再次安装。
硬件部分
1 电容按键介绍
电容式感应触摸按键可以穿透绝缘材料外壳 8mm (玻璃、塑料等等)以上,准确无误地侦测到手指的有效触摸。 并保证了产品的灵敏度、稳定性、可靠性等不会因环境条件的改变或长期使用而发生变化,并具有防水和强抗干扰能力。
瑞萨的芯片内部集成高分辨率触摸检测模块CTSU和专用信号处理电路,以保证芯片对环境变化具有灵敏的自动识别和跟踪功能。 芯片还必须满足用户在复杂应用中对稳定性、灵敏度、功耗、响应速度、防水等方面的高体验要求。 电容式触摸按键控制芯片通常广泛适用于遥控器、灯具调光、各类开关以及车载、小家电和家用电器控制界面等应用中。 在芯片应用的开发过程非常简单,可以最大限度的降低方案成本。
2 电容按键原理
2.1 无手指触摸的情况
在电路板未上电时,可以认为电容Cx是没有电荷的,在上电时,在电阻作用下,电容Cx就会有一个充电过程,直到电容充满,即Vc电压值为3.3V,这个充电过程的时间长短受到电阻R阻值和电容Cx容值的直接影响。但是在我们选择合适电阻R并焊接固定到电路板上后,这个充电时间就基本上不会变了,因为此时电阻R已经是固定的,电容Cx在无外界明显干扰情况下基本上也是保持不变的。
2.2 有手指触摸的情况
此时整个电容按键可以容纳的电荷数量就比没有手指触摸时要多了,可以看成是Cx和Cs叠加的效果。在相同的电阻R情况下,因为电容容值增大了,导致需要更长的充电时间。也就是这个充电时间变长使得我们区分有无手指触摸,也就是电容按键是否被按下。
现在最主要的任务就是测量充电时间。充电过程可以看作是一个信号从低电平变成高电平的过程,现在就是要求出这个变化过程的时间。我们可以利用定时器输入捕获功能计算充电时间,即设置TIMx_CH为定时器输入捕获模式通道。这样先测量得到无触摸时的充电时间作为比较基准,然后再定时循环测量充电时间与无触摸时的充电时间作比较,如果超过一定的阈值就认为是有手指触摸。
软件部分
新建一个项目,命名为07_Touch_Button
1 配置LED引脚
板子上的两颗LED接在P103和P104引脚上,且输出高电平时点亮。因此,在Pins--P1--将这两个引脚配置为输出模式,初始低电平。

2 配置CTSU
开发板的两个触摸按键接在了P109和P110引脚上,对应着TS10和TS11。在Input:CTSU--CTSU0--选择TS10和TS11分别为P109和P110。

在Stacks页面,按如图所示新建Touch(rm_touch)

接着双击CTSU(r_ctsu),将Support for Using DTC
值改为Enabled
。

然后add DTC driver,注意Transmission和Reception都要操作。


一切就绪,生成代码。
3 调试电容按键值
点击瑞萨视图--Renesas QE--CapTouch workflow

选择项目

下一步,选择新建一个配置

在弹出的页面上,点击Button,放置两个按钮,并双击按钮打开配置,分别选择TS10和TS11,电阻配置510ohm,最后点击create。

下一步,连接J-Link与开发板,接线如下:
J-Link |
RA2L1开发板 |
---|
Vref |
3V3 |
SWDIO |
SWDIO |
SWCLK |
SWCLK |
点击Start Tuning,会自动编译、下载。

这期间不要动板子,直到出现下图带黄条的界面

此时用合适的力度按住TS10(注意不要用力过重,否则阈值过高按键不灵敏),当看到黄条到顶后,在键盘上按下任意键。TS11也是如此。
结束后,点击Continue the Tuning Process

回到workflow界面,点击Output Parameter Files,自动生成参数文件。其保存在项目下的qe_gen文件夹内。

点击 Implement Program,点击Show Sample,选择Output to a File,在qe_gen文件夹内就多出一个qe_touch_sample.c

4 测试按键点灯效果
打开qe_touch_sample.c
,在/* TODO: Add your own code here. */
后面写下我自己的测试代码。
if(button_status == 1){
g_ioport.p_api->pinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_03, BSP_IO_LEVEL_HIGH);
}
else if(button_status == 2){
g_ioport.p_api->pinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_04, BSP_IO_LEVEL_HIGH);
}
else if(button_status == 3){
g_ioport.p_api->pinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_03, BSP_IO_LEVEL_HIGH);
g_ioport.p_api->pinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_04, BSP_IO_LEVEL_HIGH);
}
else{
g_ioport.p_api->pinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_03, BSP_IO_LEVEL_LOW);
g_ioport.p_api->pinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_04, BSP_IO_LEVEL_LOW);
}
这段代码功能是检测按键值,1和2分别点亮LED1和LED2,按键值为3时是两个按键同时按下,即同时点亮两个LED。
在hal_entry.c
文件中的hal_entry函数中,加入代码调用触摸测试函数
qe_touch_main();
接下来,启动监测。按下图所示配置,并开始调试。

效果如下图所示,同时可以观察板子上LED亮灭情况。
