一、概述
本文以APT32F1023 为例介绍了触摸按键应用时在程序配置快捷步骤,目前提供的库有STD和CSI两种风格代码,触摸部分参数基本一致,配置方式类似。下面以STD库为例描述触摸配置典型四步骤,四步骤配置完基本满足大部分产品应用,特殊应用或者特殊测试需要再针对性调整其他参数,本文不作详细介绍。
二、配置步骤
第一步:使能触摸引脚
TK_IO_ENABLE=TCH_EN(4)|TCH_EN(5)|TCH_EN(7)|TCH_EN(8);
第二步:选择C0电压(扫描电压配置)
Touch 的扫描电压通过三个变量配置:TK_PSEL_MODE、TK_FVR_LEVEL、TK_EC_LEVEL。
TK_PSEL_MODE 可以配置成芯片的VDD、FVR
TK_FVR_LEVEL 可以配置成FVR_2048、FVR_4096
TK_EC_LEVEL 可以配置成1V、2V、3V、3.6V
TK_PSEL_MODE = TK_PSEL_AVDD;
TK_FVR_LEVEL = TK_FVR_2048V;
TK_EC_LEVEL = TK_EC_3V;
注意:
1.PSEL_MODE 选择FVR 时,PA0.2(TCH3)不能再做触摸输入功能,且必须接一颗104 电容到地。
2.FVR_LEVEL 可以选择2.048V 或者4.096V,如果PSEL_MODE 选择的是VDD,那此参数配置无效。选择的FVR 参考电压必须比VDD 电压小500mV 以上。比如VDD 为3.3V,那FVR 只能选择2.048V。
3. EC_LEVEL 为C0 脚的充放电电压,必须比VDD 电压小500mV 以上。比如VDD 为3.3V,那么EC_LEVEL 只能选择1V、2V。
第三步:配置ICON值
如果补偿电流配置不合理会导致程序在初始化的时候失败卡死在void TK_CONFIG(void)函数中,此时应根据PCB 的布局情况适当调整补偿电流参数,补偿电流值范围0-7,默认为4,如果触摸的走线很长、很绕、离地线近可逐步增加补偿电流值,反之减少补偿电流值。
TK_icon[0] = 4; //TCH0 TK Scan icon range 0~7
TK_icon[1] = 4; //TCH1 TK Scan icon range 0~7
TK_icon[2] = 4; //TCH2 TK Scan icon range 0~7
TK_icon[3] = 4; //TCH3 TK Scan icon range 0~7
TK_icon[4] = 4; //TCH4 TK Scan icon range 0~7
TK_icon[5] = 4; //TCH5 TK Scan icon range 0~7
TK_icon[6] = 4; //TCH6 TK Scan icon range 0~7
TK_icon[7] = 4; //TCH7 TK Scan icon range 0~7
TK_icon[8] = 4; //TCH8 TK Scan icon range 0~7
TK_icon[9] = 4; //TCH9 TK Scan icon range 0~7
TK_icon[10] = 4; //TCH10 TK Scan icon range 0~7
TK_icon[11] = 4; //TCH11 TK Scan icon range 0~7
TK_icon[12] = 4; //TCH12 TK Scan icon range 0~7
TK_icon[13] = 4; //TCH13 TK Scan icon range 0~7
TK_icon[14] = 4; //TCH14 TK Scan icon range 0~7
TK_icon[15] = 4; //TCH15 TK Scan icon range 0~7
TK_icon[16] = 4; //TCH16 TK Scan icon range 0~7
第四步:配置灵敏度参数值
如果按键出现误动作或者触摸不灵敏,通过调节TK_Triggerlevel 参数。可通过Serialplot 工具配合分析,
获取MCU 按键差值和按键采样基准值参数,通过UARTTX 发送实时的触摸数据。灵敏度参数一般设为按键差值(offset_data)的60%,Serialplot 工具使用方法请参考《AN1511 Touch Key 使用串口工具波形分析使用指南》文档。也可以直接逐步增加或者减少灵敏度参数值,此方法简单快捷但比较模糊。
TK_Triggerlevel[0] = 60; //TCH0 TK_Trigger level
TK_Triggerlevel[1] = 60; //TCH1 TK_Trigger level
TK_Triggerlevel[2] = 60; //TCH2 TK_Trigger level
TK_Triggerlevel[3] = 60; //TCH3 TK_Trigger level
TK_Triggerlevel[4] = 60; //TCH4 TK_Trigger level
TK_Triggerlevel[5] = 60; //TCH5 TK_Trigger level
TK_Triggerlevel[6] = 60; //TCH6 TK_Trigger level
TK_Triggerlevel[7] = 60; //TCH7 TK_Trigger level
TK_Triggerlevel[8] = 60; //TCH8 TK_Trigger level
TK_Triggerlevel[9] = 60; //TCH9 TK_Trigger level
TK_Triggerlevel[10] = 60; //TCH10 TK_Trigger level
TK_Triggerlevel[11] = 60; //TCH11 TK_Trigger level
TK_Triggerlevel[12] = 60; //TCH12 TK_Trigger level
TK_Triggerlevel[13] = 60; //TCH13 TK_Trigger level
TK_Triggerlevel[14] = 60; //TCH14 TK_Trigger level
TK_Triggerlevel[15] = 60; //TCH15 TK_Trigger level
TK_Triggerlevel[16] = 60; //TCH16 TK_Trigger level