30. CTSU——电容按键检测¶
30.1. 电容按键介绍¶
电容式感应触摸按键可以穿透绝缘材料外壳 8mm (玻璃、塑料等等)以上,准确无误地侦测到手指的有效触摸。 并保证了产品的灵敏度、稳定性、可靠性等不会因环境条件的改变或长期使用而发生变化,并具有防水和强抗干扰能力。
瑞萨的芯片内部集成高分辨率触摸检测模块CTSU和专用信号处理电路,以保证芯片对环境变化具有灵敏的自动识别和跟踪功能。 芯片还必须满足用户在复杂应用中对稳定性、灵敏度、功耗、响应速度、防水等方面的高体验要求。 电容式触摸按键控制芯片通常广泛适用于遥控器、灯具调光、各类开关以及车载、小家电和家用电器控制界面等应用中。 在芯片应用的开发过程非常简单,可以最大限度的降低方案成本。
30.2. 电容按键原理¶
电容器(简称为电容)就是可以容纳电荷的器件,两个金属块中间隔一层绝缘体就可以构成一个最简单的电容。如 图29_1 (俯视图),有两个金属片,之间有一个绝缘介质,这样就构成了一个电容。这样一个电容在电路板上非常容易 实现,一般设计四周的铜片与电路板地信号连通,这样一种结构就是电容按键的模型。当电路板形状固定之后,该电容的容量也是相对稳定的。
图 29‑1 片状电容器
电路板制作时都会在表面上覆盖一层绝缘层,用于防腐蚀和绝缘,所以实际电路板设计时情况如 图29_2。电路板最上层是绝缘材料,下面一层是导电铜箔,我们根据电路走线情况设计并决定铜箔的形状,再下面一层一 般是FR-4板材。金属感应片与地信号之间有绝缘材料隔着,整个可以等效为一个电容Cx。一般在设计时候,把金属感应片设计成方便手指触摸大小。
图 29‑2 无手指触摸情况
在电路板未上电时,可以认为电容Cx是没有电荷的,在上电时,在电阻作用下,电容Cx就会有一个充电过程,直到电容充满,即Vc电压值为3.3V,这个充电过程的时间长短受到电阻R阻值和电容Cx容值的直接影响。但是在我们选择合适电阻R并焊接固定到电路板上后,这个充电时间就基本上不会变了,因为此时电阻R已经是固定的,电容Cx在无外界明显干扰情况下基本上也是保持不变的。
现在,我们来看看当我们用手指触摸时会是怎样一个情况?如 图29_3,当我们用手指触摸时,金属感应片除了与地信号形成一个等效电容Cx外,还会与手指形成一个Cs等效电容。
图 29‑3 有手指触摸情况
此时整个电容按键可以容纳的电荷数量就比没有手指触摸时要多了,可以看成是Cx和Cs叠加的效果。在相同的电阻R情况下,因为电容容值增大了,导致需要更长的充电时间。也就是这个充电时间变长使得我们区分有无手指触摸,也就是电容按键是否被按下。
现在最主要的任务就是测量充电时间。充电过程可以看出是一个信号从低电平变成高电平的过程,现在就是要求出这个变化过程的时间。我们可以利用定时器输入捕获功能计算充电时间,即设置TIMx_CH为定时器输入捕获模式通道。这样先测量得到无触摸时的充电时间作为比较基准,然后再定时循环测量充电时间与无触摸时的充电时间作比较,如果超过一定的阈值就认为是有手指触摸。
图29_4 为Vc跟随时间变化情况,可以看出在无触摸情况下,电压变化较快;而在有触摸时,总的电容量增大了,电压变化缓慢一些。
图 29‑4 Vc电压与充电时间关系
为测量充电时间,我们需要设置定时器输入捕获功能为上升沿触发, 图29_4 中VH就是被触发上升沿的电压值,也是RA6M5认为是高电平的最低电压值,大 约为1.8V。t1和t2可以通过定时器捕获/比较寄存器获取得到。
不过,在测量充电时间之前,我们必须想办法制作这个充电过程。之前的分析是在电路板上电时会有充电过程,现在我们要求在程序运行中循环检测按键,所以必须可以控制充电过程的生成。我们可以控制TIMx_CH引脚作为普通的GPIO使用,使其输出一小段时间的低电平,为电容Cx放电,即Vc为0V。当我们重新配置TIMx_CH为输入捕获时电容Cx在电阻R的作用下就可以产生充电过程。
30.3. 瑞萨QE在电容按键上面的运用¶
QE for Capacitive Touch 是一种工具,用于协助开发包括使用电容式触摸键在内的嵌入式系统。 此工具简化了触摸用户界面的初始设置和灵敏度的调整。我们可以使用这一个软件进行多个电容式按键组成的滑块从而识别出诸如“滑”和“推”等手势,从而大大减少开发者对于电容式按键开发的难度。
此工具可自动调整电容式触摸传感器的灵敏度。您可以按照弹出消息中的说明在几分钟内完成基本调整。 简单的GUI操作甚至允许初学者创建用于触摸用户界面的配置,通过触摸传感器监控输入状态,并调整参数。
此外,由于该工具还可以调整调谐参数并通过实时显示反映结果,因此对于在各种情况下找到合适的参数非常有用,例如在存在大量静电的情况下或用湿手使用的情况下。
注解
QE for Capacitive Touch 只有在e2 studio上面才有,Keil上面是没有的,如果使用Keil的话需要下载e2 studio 并通过QE for Capacitive Touch生成文件,然后复制到keil代码里进行使用。
30.4. 电容按键实验¶
电容按键不需要任何外部机械部件,使用方便,成本低,很容易制成与周围环境相密封的键盘,以起到防潮防湿的作用。 电容按键优势突出使得越来越多电子产品使用它代替传统的机械按键。
30.4.1. 硬件设计¶
开发板板载一个电容按键,电容按键电路设计请参考下图。
标示TPAD1在电路板上就是电容按键实体,默认连接到P708,即CTSU单元1的通道TS12。 充电电容的阻值为680欧姆,电阻的大小决定了电容按键充电的时间。
实验还用到调试串口和LED功能,用来打印输入捕获信息和指示电容按键状态,这两个模块电路可参考之前相关章节。
30.4.2. 软件设计¶
30.4.2.1. 新建工程¶
因为本章节的 UART 相关实验例程需要用到板子上的 LED 功能,因此我们可以直接以前面的“11_GPIO_LED”工程为基础进行修改。
- 对于 e2 studio 开发环境:
拷贝一份我们之前的 e2s 工程模板 “11_GPIO_LED”, 然后将工程文件夹重命名为 “CTSU_basic”,最后再将它导入到我们的 e2 studio 工作空间中。
- 对于 Keil 开发环境:
拷贝一份我们之前的 Keil 工程模板 “11_GPIO_LED”, 然后将工程文件夹重命名为 “CTSU_basic”,并进入该文件夹里面双击 Keil 工程文件,打开该工程。
30.4.2.2. FSP配置¶
首先打开 “CTSU_basic” 项目的 FSP 配置界面,接下来我们要在这个界面里配置芯片的引脚及其相应的功能。
双击 configuration.xml 打开配置界面: 然后点开依次点击 Stacks -> New Stack -> CapTouch -> TOUCH 来配置CTSU模块。如 图29_21。
图 29-21 选择CTSU模块
之后选择对应的引脚如 图29_22。
图 29-22 CTSU引脚配置
配置完成之后可以按下快捷键“Ctrl + S”保存, 最后点右上角的 “Generate Project Content” 按钮,让软件自动生成配置代码即可。
30.4.2.3. QE for Capacitive Touch配置¶
使用瑞萨的QE软件进行配置具有简洁、快捷、方便的特性,易于开发者进行开发。 我们点击 e2 studio 上方的 Renesas Views 之后依次点击 Renesas QE -> CapTouch Main (QE)。
注解
如果找不到 CapTouch Main (QE) 我们可以在 Renesas Views -> Renesas Software Installer中搜索安装, 如果是 新版 e2 studio 安装CapTouch工具后,则在 Renesas QE 中选择 CapTouch Workflow(QE)。
打开之后我们进入到电容按键的配置界面,然后我们按着前后顺序依次点击。
To Select a Project 选择项目:
我们点击 To Select a Project 选择我们需要选择项目。
To Prepare a Configuration 准备配置:
我们点击 Modify Configuration 之后我们来到这个界面
我们点击 button 之后移到中间,如图所示。
之后我们双击 button 进行调节, Touch Sensor 选择电容按键, Resistance[ohm] 选择电容按键的电阻值。
Start Tuning开始调谐:
在我们的开发板上面插上J-Link调试器之后,我们点击 Start Tuning 开始调谐。 系统会自动的搭建需要配置的文件最终会来到这样的一个界面。
这个时候我们触碰开发板上的电容按键并且按住不松手,之后我们随便点击键盘上的按键。
后跳转到最后的一个界面,点击 Continue the Tuning Process
这个时候我们的配置文件就配置好了
错误解决
如果Start Tuning后出现下面的错误时:
需要打开调试器设置:
取消勾选后重新调试:
之后如果出现对话框,则点击 “Yes”,调试通过后关闭调试连接,重新点击 Start Tuning 即可。
Output Parameter Files输出参数文件:
我们点击 Output Parameter Files 输出参数文件, 之后会生成如下图一样的文件夹,这个夹就是QE为我们配置好的文件。
它会在左边的项目文件管理中生成一个 qe_gen 文件夹,其中里面包涵一些电容按键配置文件其中包括 qe_touch_define.h 、 qe_touch_config.h 、 ge_touch_config.c 这三个文件。
注解
在我们没有点击 start Tuning 进行调谐此时 Output Parameter Files 按钮显示灰色, 这个时候我们是点击不了 Output Parameter Files 输出参数文件,我们可以先点击 start Tuning 进行调谐后进行参数文件的输出。
Show Sample展示示例:
我们点击 Show Sample 这里面有电容按键的示例代码,之后我们点击 Output to a File, 它会在 qe_gen 文件夹里生成 qe_touch_sample.c 这样的一个文件。 文件 qe_touch_sample.c 也就是我们编写程序代码的地方。
之后我们点击 qe_touch_sample.c 开始我们对电容按键程序的编写
Show Views:
第一步我们在 hal_entry.c 里添加代码,使得我们能在图形化界面正常的显示。
void hal_entry(void)
{
qe_touch_main(); //跳转到电容按键函数
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
第二步我们进行编译和调试。
第三步我们回到 CapTouch Main (QE) 配置界面,之后点击 Show Views 开始我们的监视并且查看我们是否配置好了相应的代码。
当手指触碰开发板上的电容按键时,如果图像能出现手指的模样,说明我们的配置成功了。并且我们可以在右边看到电容按键的阈值和当前电容按键的状态。
之后我们就可以开始对电容按键程序的编写了。
30.4.2.4. qe_gen文件¶
void qe_touch_main(void)
{
fsp_err_t err;
/* 打开触摸中间件 */
err = RM_TOUCH_Open(g_qe_touch_instance_config01.p_ctrl, g_qe_touch_instance_config01.p_cfg);
if (FSP_SUCCESS != err)
{
while (true) {}
}
/* 主循环 */
while (true)
{
/* 电容按键扫描开始 */
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)
{
if(button_status==1)
{
LED3_ON;
}
else
{
LED3_OFF;
}
}
/* 因为这是一个临时进程,所以您可以自己重新创建一个等待进程 */
R_BSP_SoftwareDelay(TOUCH_SCAN_INTERVAL_EXAMPLE, BSP_DELAY_UNITS_MILLISECONDS);
}
}
电容按键点亮LED灯
30.4.2.5. 主函数¶
void hal_entry(void)
{
qe_touch_main(); //跳转到电容按键函数
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
我们通过轮循的方式操作qe_touch_main函数,来完成我们相应对电容按键的操作。
30.4.3. keil–电容按键¶
30.4.3.1. FSP设置¶
首先打开 “CTSU_basic” 项目的 FSP 配置界面,接下来我们要在这个界面里配置芯片的引脚及其相应的功能。
双击 configuration.xml 打开配置界面: 然后点开依次点击 Stacks -> New Stack -> CapTouch -> TOUCH 来配置CTSU模块。
之后选择对应的引脚
配置LED引脚
配置完成之后可以按下快捷键“Ctrl + S”保存, 最后点右上角的 “Generate Project Content” 按钮,让软件自动生成配置代码即可。
30.4.3.2. 复制文件¶
我们在keil里面创建一个 qe_gen 文件夹,将之前在 e2 studio 项目里生成的 qe_gen 文件夹里的文件复制到keil的文件夹里面, 之后我们将文件目录导入到项目里。
第一步我们点击 Options for Target ‘Target 1’ ,将添加的文件夹目录导入到工程里。
第二步我们点击 Manage Project Items ,设置keil的项目文件管理。 这个时候我们的文件目录为:
CTSU_basic
├─ .settings
├─ Listings
├─ Objects
├─ qe_gen
│ ├─qe_touch_config.c
│ ├─qe_touch_config.h
│ ├─qe_touch_define.h
│ └─qe_touch_sample.c
├─ ra
├─ ra_cfg
├─ ra_gen
├─ RTE
└─ scriptsrc
30.4.3.3. 主函数¶
void hal_entry(void)
{
qe_touch_main(); //跳转到电容按键函数
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
总结来说就是将电容按键生成的文件复制到keil工程文件夹里面。
30.4.4. 下载验证¶
用USB线连接开发板的“USB转串口”接口和电脑,把编译好的程序下载到开发板, 我们触摸电容按键并查看LED灯是否有反应。