20
1 / 20 http://www.holychip.cn AN003T 按键触摸库使用 简介 本应用笔记主要讲述如何基于HolyChip提供的触摸库函数例程同时结合实际的应用环境来进行项 目开发,从而缩短用户的项目开发周期。本笔记将以HC89F3541为例介绍触摸库的使用。 触摸库函数例程版本:HC89F3xx1_Touch_Demo_Code_V1.0.3.0HC89F3xx1_Touch_Library_Code V1.0.3.0 HC89F30x_Touch_Demo_Code_V1.0.3.0 HC89F30x _Touch_Library_Code V1.0.3.0 本应用笔记适用芯片:HolyChip 所有触摸芯片。 相关数据手册、工具及技术文档下载网址:http://www.holychip.cn/

AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

  • Upload
    others

  • View
    16

  • Download
    0

Embed Size (px)

Citation preview

Page 1: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

1 / 20http://www.holychip.cn

AN003T按键触摸库使用

简介本应用笔记主要讲述如何基于HolyChip提供的触摸库函数例程同时结合实际的应用环境来进行项

目开发,从而缩短用户的项目开发周期。本笔记将以HC89F3541为例介绍触摸库的使用。

触摸库函数例程版本:HC89F3xx1_Touch_Demo_Code_V1.0.3.0。

HC89F3xx1_Touch_Library_Code V1.0.3.0

HC89F30x_Touch_Demo_Code_V1.0.3.0

HC89F30x _Touch_Library_Code V1.0.3.0

本应用笔记适用芯片:HolyChip所有触摸芯片。

相关数据手册、工具及技术文档下载网址:http://www.holychip.cn/。

Page 2: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

2 / 20http://www.holychip.cn

目录1 Touch开发流程图................................................................................................................................ 3

2 资料获取.................................................................................................................................................4

3 开发环境.................................................................................................................................................4

4 触摸库.....................................................................................................................................................5

4.1 函数介绍......................................................................................................................................... 5

4.2 触摸相关参数配置介绍................................................................................................................. 7

4.3 触摸调试....................................................................................................................................... 14

4.4 注意事项....................................................................................................................................... 19

5 版本说明...............................................................................................................................................20

Page 3: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

3 / 20http://www.holychip.cn

1 Touch开发流程图

图 1-1

Page 4: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

4 / 20http://www.holychip.cn

2 资料获取

前往芯圣官网 http://www.holychip.cn/ →产品中心→HC TOUCH MCU,点击 HC89F3541,在“技术

文档”类中有“HC89F3xx1触摸库及触摸库使用说明”选项,点击下载。

图 2-1

下载完成后,进行压缩文件解压:

图 2-2

3 开发环境

编译环境:Keil C51,uVision4.00及以上版本。

仿真工具:HC-LINK,可进行程序的下载和仿真。

烧录工具:HC-PM51,量产烧录工具。

直接在浏览器地址栏中输入地址:www.holychip.cn进行软件下载。

Page 5: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

5 / 20http://www.holychip.cn

4 触摸库

HolyChip提供的 HC89F3xx1_Touch_Demo_Code触摸例程库已建立了一个完整的项目工程。程序框

架已搭建完成,用户应先根据自己的需要在指定的文件中进行相应的配置,然后调用对应 API函数即可。

用户配置文件:HC89F3xx1_GeneralKey_Touch_Lib_CFG.h。

4.1 函数介绍

4.1.1 CTK_Init

描述:CTK 初始化函数,调用此程序前必须先打开总中断总开关(EA=1),因为 CTK初始化时,

需要 CTK中断配合

C语言原型:void CTK_Init(void)输入参数:无

返回值:无

4.1.2 CTK_ISR_Handle

描述:CTK 中断处理函数,此函数必须在 CTK中断入口中调用,CTK中断优先级默认为最低

C语言原型:CTK_ISR_Handle(void)输入参数:无

返回值:无

4.1.3 Touch_Signal_Handle

描述:扫描完成一轮后,调用一次,对各触摸通道基线进行动态更新

C语言原型:Touch_Signal_Handle(void)输入参数:无

返回值:无

4.1.4 Scan_Pause

描述:CTK 扫描暂停

C语言原型:Scan_Pause(void)输入参数:无

返回值:无

Page 6: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

6 / 20http://www.holychip.cn

4.1.5 Scan_Continue

描述:CTK 扫描继续

C语言原型:Scan_Continue(void)输入参数:无

返回值:无

4.1.6 BaseLineRest

描述:复位所有通道基线值

C语言原型:BaseLineReset(void)输入参数:无

返回值:无

Page 7: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

7 / 20http://www.holychip.cn

4.2 触摸相关参数配置介绍

4.2.1 相关参数配置

启动 Keil软件,加载 HC89F3xx1_Touch_Demo_Code代码。点开文件:

Keil→HC89F3xx1_Touch_Demo_Code→Touch_Lib→HC89F3xx1_GeneralKey_Touch_Lib_CFG.c→HC89F

3xx1_GeneralKey_Touch_Lib_CFG.h,用户相关设置在该.h文件中配置。

4.2.2 IC型号及封装选择

#define HCTouchLib_IC_BODY x

#define IC_BODY_SOP20_DIP20 0 //HC89F3531 SOP20/DIP20

#define IC_BODY_SOP24 1 //HC89F3531 SOP24

#define IC_BODY_SOP28 2 //HC89F3541 SOP28

#define IC_BODY_SOP16 3 //HC89F3421 SOP16

#define IC_BODY_LQFP32 4 // HC89F3541 LQFP32

用户根据自己使用的型号及封装定义 HCTouchLib_IC_BODY

举例:如用户使用 HC89F3541的 SOP28封装进行项目开发,则应将 HCTouchLib_IC_BODY配置

为 2。

4.2.3 设置需要检测的通道

#define HCTouchLib_TK_CH_MASK x

其中 0: 不检测;1: 允许检测。

BIT0: 表示 CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位;

BIT1: 表示 CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

依此类推...

设置时需要对照 HC89F3xx1_GeneralKey_Touch_Lib_CFG.c文件,根据选择的封装型号,对照

不同的数组进行设置。

举例:如使能 TK14、TK15两个触摸通道

在 HC89F3421-SOP16上使能 TK14、TK15两个触摸通道,则应参考数组:

uc8 CODE_INTERNAL_INDEX[TK_CH_MAX] = {2, 7, 11, 12, 13, 14, 15};

那么#define HCTouchLib_TK_CH_MASK 0x0060

Page 8: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

8 / 20http://www.holychip.cn

在 HC89F3531-SOP20/DIP20上使能 TK14、TK15两个触摸通道,则应参考数组:

uc8 CODE_INTERNAL_INDEX[TK_CH_MAX] = { 2, 3, 7, 9, 10, 11, 12, 13, 14, 15};

那么#define HCTouchLib_TK_CH_MASK 0x0300

在 HC89F3541-SOP24上使能 TK14、TK15两个触摸通道,则应参考数组:

uc8 CODE_INTERNAL_INDEX[TK_CH_MAX] = {0, 1, 2, 3, 7, 9, 10, 11, 12, 13, 14, 15};

那么#define HCTouchLib_TK_CH_MASK 0x0C00

在 HC89F3541-SOP28上使能 TK14、TK15两个触摸通道,则应参考数组:

uc8 CODE_INTERNAL_INDEX[TK_CH_MAX] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,

15};

那么#define HCTouchLib_TK_CH_MASK 0xC000

在 HC89F3541-LQFP32上使能 TK14、TK15两个触摸通道,则应参考数组:

uc8 CODE_INTERNAL_INDEX[TK_CH_MAX] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,

15};,

那么#define HCTouchLib_TK_CH_MASK 0xC000

4.2.4 设置触摸相关寄存器

设置触摸检测采样时间

采样时钟个数设置:

#define HCTouchLib_DSCR x

其中 x= 0~255。

采样时钟个数越大,计数值越大。

采样频率设置:

#define HCTouchLib_CTKDS x

其中 x= 0~6, 0->Fosc/2, 1->Fosc/4, 2->Fosc/8, 3->Fosc/16, 4->Fosc/32, 5->Fosc/64, 6->Fosc/128

单个通道扫描时间 ≈ ((HCTouchLib_DSCR+1)*256 - 1)/HCTouchLib_CTKDS

设置充放电频率:

#define HCTouchLib_PRSDIV x

其中 x= 0~7, 0->Fosc/2, 1->Fosc/4, 2->Fosc/8, 3->Fosc/16, 4->Fosc/32, 5->Fosc/64, 6->Fosc/128,

7->Fosc/256

注意:建议设置 CTK采样频率>= 2*充放电频率。

Page 9: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

9 / 20http://www.holychip.cn

设置充电电源电压:

#define HCTouchLib_VD x

其中 x= 0~3,0->2v,1->2.5v,2->3v,3->4v。 必须保证 IC VDD > 设置充电电源电压+0.5V。

充电电源电压越高,计数值越大。

设置放电电阻:

#define HCTouchLib_RBS x

其中 x= 0~7, 0->放电电阻最小, 7->放电电阻最大,方向 0(小)-->7(大)。

放电电阻越小,计数值越小。

设置 CTK扫描补偿是否打开:

#define HCTouchLib_OFFSET_SW x

其中 x= 0关闭, 1->打开,CTK扫描补偿为应对某些特殊情况所设,用户在配置时必须将其配置为

关闭状态。

注:部分版本存在此选项,如使用的库中无此选项可忽略。

4.2.5 设置手指触摸相关阈值参数

主要围绕下图,设置手指触摸相关的一些阈值参数,如迟滞值、触摸阈值、噪声、手指触摸或离开

确认次数等。

图 4-1

Page 10: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

10 / 20http://www.holychip.cn

设置确认手指触摸次数:

#define HCTouchLib_CONFIRM_TOUCH_TIME x

其中 x= 1~255。

该参数为触摸按键的状态由无效转换为有效时进行去抖计数,手指触摸有效信号应连续大于该参数

时才会认为触摸按键有效。该参数对所有使能的触摸按键有效。

设置确认手指离开次数:

#define HCTouchLib_CONFIRM_NOTOUCH_TIME x

其中 x= 1~255。

该参数为触摸按键的状态由有效转换为无效时进行去抖计数,手指触摸无效信号应连续大于该参数

时才会认为触摸按键无效。该参数对所有使能的触摸按键有效。

设置触摸迟滞值:

#define HCTouchLib_Hysteresis x

其中 x= 0~255。

当触摸 Differ值>触摸阈值+触摸迟滞值,且满足确认手指触摸次数时,认为触摸按键有效;

当触摸 Differ值<触摸阈值-触摸迟滞值,且满足确认手指离开次数时,认为触摸按键无效;

该参数对所有使能的触摸按键有效。

触摸阈值设置:

LQFP32 SOP28 SOP24 SOP20/DIP20 SOP16#define HCTouchLib_SET0_F_THRESHOLD x //TK0 //TK0 //TK0 //TK2 //TK2#define HCTouchLib_SET1_F_THRESHOLD x //TK1 //TK1 //TK1 //TK3 //TK7#define HCTouchLib_SET2_F_THRESHOLD x //TK2 //TK2 //TK2 //TK7 //TK11#define HCTouchLib_SET3_F_THRESHOLD x //TK3 //TK3 //TK3 //TK9 //TK12#define HCTouchLib_SET4_F_THRESHOLD x //TK4 //TK4 //TK7 //TK10 //TK13#define HCTouchLib_SET5_F_THRESHOLD x //TK5 //TK5 //TK9 //TK11 //TK14#define HCTouchLib_SET6_F_THRESHOLD x //TK6 //TK6 //TK10 //TK12 //TK15#define HCTouchLib_SET7_F_THRESHOLD x //TK7 //TK7 //TK11 //TK13 //NC#define HCTouchLib_SET8_F_THRESHOLD x //TK8 //TK8 //TK12 //TK14 //NC#define HCTouchLib_SET9_F_THRESHOLD x //TK9 //TK9 //TK13 //TK15 //NC#define HCTouchLib_SET10_F_THRESHOLD x //TK10 //TK10 //TK14 //NC //NC#define HCTouchLib_SET11_F_THRESHOLD x //TK11 //TK11 //TK15 //NC //NC#define HCTouchLib_SET12_F_THRESHOLD x //TK12 //TK12 //NC //NC //NC#define HCTouchLib_SET13_F_THRESHOLD x //TK13 //TK13 //NC //NC //NC#define HCTouchLib_SET14_F_THRESHOLD x //TK14 //TK14 //NC //NC //NC#define HCTouchLib_SET15_F_THRESHOLD x //TK15 //TK15 //NC //NC //NC

其中 x= 0~65535。

Page 11: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

11 / 20http://www.holychip.cn

其中 x 取值需具体应用环境及 CTK SFR 配置共同决定,但触摸阈值至少保证对应通道噪声值 3倍

以上,5倍以上更佳。

设置触摸阈值时,需要注意设置的位与使用的 CTK通道对应。

噪声阈值设置:

LQFP32 SOP28 SOP24 SOP20/DIP20 SOP16#define HCTouchLib_SET0_N_THRESHOLD x //TK0 //TK0 //TK0 //TK2 //TK2#define HCTouchLib_SET1_N_THRESHOLD x //TK1 //TK1 //TK1 //TK3 //TK7#define HCTouchLib_SET2_N_THRESHOLD x //TK2 //TK2 //TK2 //TK7 //TK11#define HCTouchLib_SET3_N_THRESHOLD x //TK3 //TK3 //TK3 //TK9 //TK12#define HCTouchLib_SET4_N_THRESHOLD x //TK4 //TK4 //TK7 //TK10 //TK13#define HCTouchLib_SET5_N_THRESHOLD x //TK5 //TK5 //TK9 //TK11 //TK14#define HCTouchLib_SET6_N_THRESHOLD x //TK6 //TK6 //TK10 //TK12 //TK15#define HCTouchLib_SET7_N_THRESHOLD x //TK7 //TK7 //TK11 //TK13 //NC#define HCTouchLib_SET8_N_THRESHOLD x //TK8 //TK8 //TK12 //TK14 //NC#define HCTouchLib_SET9_N_THRESHOLD x //TK9 //TK9 //TK13 //TK15 //NC#define HCTouchLib_SET10_N_THRESHOLD x //TK10 //TK10 //TK14 //NC //NC#define HCTouchLib_SET11_N_THRESHOLD x //TK11 //TK11 //TK15 //NC //NC#define HCTouchLib_SET12_N_THRESHOLD x //TK12 //TK12 //NC //NC //NC#define HCTouchLib_SET13_N_THRESHOLD x //TK13 //TK13 //NC //NC //NC#define HCTouchLib_SET14_N_THRESHOLD x //TK14 //TK14 //NC //NC //NC#define HCTouchLib_SET15_N_THRESHOLD x //TK15 //TK15 //NC //NC //NC

建议 x取值范围:5=< x <=50

设置噪声阈值时,需要注意设置的位与使用的 CTK通道对应。

Page 12: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

12 / 20http://www.holychip.cn

4.2.6 设置基线更新参数

以下参数的功能及使用原理见本文 4.3.2章节《基准线更新》。

设置触摸自动复位计数值:

#define HCTouchLib_CONFIRM_LONGTOUCH_TIME x

0: 禁用该功能

非 0: 对于设定的触摸自动复位计数而言,当 Differ连续大于正噪声阈值时,将复位触摸基准线

其中 x= 0~65535。

该参数可设定触摸基准线更新的时间:设置为非 0值时,基准线会随时被更新,虽然该设置限制了

触摸按键有效的最长时间(时间由下面的公式可推出),但可以防止以下情况发生:由于某种干扰或故

障,虽然手指未触摸,但触摸计数差值 Differ却突然大于所设的噪声阈值,导致触摸处于异常工作状态。

注意:HCTouchLib_CONFIRM_LONGTOUCH_TIME非 0时,必须大于 HCTouchLib_CONFIRM_TOUCH_TIME。

时间≈HCTouchLib_CONFIRM_LONGTOUCH_TIME * 单个按键扫描时间 * 开启的检测通道个数

设置判断为毛刺的条件:

#define HCTouchLib_LIMIT_FACTOR x

0: 不消除触摸毛刺

非 0: 对于设定的毛刺消除计数次数而言,当 Differ > HCTouchLib_LIMIT_FACTOR *

HCTouchLib_TKx_F_THRESHOULD时判断为毛刺

其中 x= 0~255。

注意:本参数需与毛刺消除复位计数值配合使用,当本参数设置为 0时,设置毛刺消除复位计数值

也将没有意义

设置毛刺消除复位计数值:

#define HCTouchLib_OVERHIGH_TIME x

0: 不消除触摸毛刺

非 0: 对于设定的毛刺消除计数次数而言,当 Differ连续大于触摸毛刺阈值时,将更新触摸基准线

其中 x= 0~65535。

设置低基准线复位计数值:

#define HCTouchLib_OVERLOW_TIME x

Page 13: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

13 / 20http://www.holychip.cn

0: 禁止用该功能

非 0: 对于设定的低基准线复位计数而言,当 Differ连续小于负噪声阈值时,将复位触摸基准线

其中 x= 0~65535。

设置噪声桶容量大小:

#define HCTouchLib_NOISE_BARREL_CAPACITY x

负噪声阈值≤Differ≤正噪声阈值时,系统将对 Differ值进行累加,当累加后的值达到或超过所设的

噪声桶容量时,将对触摸基准线进行更新:+2或者-2。

其中 x= 0~255。

注:设置触摸自动复位计数值、设置毛刺消除计数次数、设置低基准线复位计数值着三个值均可以

转换为对应的时长,详细的计算公式请参考本文 4.3.2.1章节《基准线更新原理》。

Page 14: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

14 / 20http://www.holychip.cn

4.3 触摸调试

HCTouch VLAB是作为芯圣触摸产品的开发调试辅助工具。用户可通过该调试工具,观察触摸实际

工作环境,如下图

图 4-2

4.3.1 阈值设置

为获得最佳触摸效果,建议采用以下设置阈值方式:

触摸阈值:为手指触摸后 Differ(计数差值)的 75%

迟滞值:为手指触摸后 Differ(计数差值)的 10%~15%

噪声阈值:为实际噪声的 1.5倍

其他值:根据设计需要

4.3.2 基准线更新

触摸产品实际工作环境中,由于温度、湿度或外界干扰都会引起触摸计数值的变化。基准线是触摸

测量值的参考计数量,这对于环境影响补偿而言起着重要作用。手指触摸按键的状态(例如,手指触摸

和手指离开状态)是基于基准线建立的参考判断。由于每路触摸通道具有相应的寄生电容,因此所有触

摸通道均有各自的基准线。

Page 15: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

15 / 20http://www.holychip.cn

基准线以基准线更新的对应阈值参数来跟踪计数变化,确保更新速率与预期应用相互匹配。如果更

新速率过快,那么,基准线将补偿手指产生的所有变量,并不予检测手指移动的情况。如果更新速率过

慢,那么,相对较慢的环境变化可能导致手指出错。开发期间,应验证基准线更新阈值的设置情况。

系统在初始化过程中(CTK_Init()函数)已对开启的各触摸通道设定了对应的触摸基线值。当触摸

基线值初始化完成后,要求用户在每次扫描完成后,都要在主程序中调用一次函数 Touch_Signal_Handle(),

该函数会对触摸基线值进行更新。

4.3.2.1 基准线更原理

触摸基准线更新方式有四种,如下图流程图说明了基准线更新方式。

图 4-3

Page 16: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

16 / 20http://www.holychip.cn

毛刺消除复位:使能该功能(即设置毛刺判断条件:HCTouchLib_LIMIT_FACTOR为非 0;设

置毛刺消除复位计数值:HCTouchLib_OVERHIGH_TIME)时,对于已设定的采样数量

(HCTouchLib_OVERHIGH_TIME)而言,当触摸 Differ值大于毛刺判断条件后,基准线会被

更新。

图 4-4

如上图所示,设置了 HCTouchLib_LIMIT_FACTOR,此时 1和 2均为一个偶然性的毛刺,由于这个

毛刺时长并未超过 HCTouchLib_OVERHIGH_TIME设置的时间,算法将其忽略。而毛刺 3则为一个持

续时间较长的毛刺,并且毛刺时长超过了 HCTouchLib_OVERHIGH_TIME设置的时间,于是 Baseline +=

Differ。

触摸自动复位:使能该功能(即将 HCTouchLib_CONFIRM_LONGTOUCH_TIME配置为非 0

值)时,配合噪声阈值(HCTouchLib_TKx_N_THRESHOLD)使用。对于以设定的采样数量

(HCTouchLib_CONFIRM_LONGTOUCH_TIME)而言,当触摸 Differ值高于正噪声阈值后,

基准线会被更新。虽然该设置限制了触摸按键有效的最长时间,但可以防止以下情况发生:由

于某种干扰或故障,虽然手指未触摸,但触摸计数差值 Differ却突然大于所设的噪声阈值,导

致触摸处于异常工作状态。

低基准线自动复位:使能该功能(即将 HCTouchLib_OVERLOW_TIME配置为非 0时),配合

噪声阈值(HCTouchLib_TKx_N_THRESHOLD)使用。当触摸 Differ值低于负噪声阈值后,基

准线会被更新。可以防止以下情况发生:由于某种干扰或故障,虽然手指未触摸,但触摸计数

差值 Differ却突然小于所设的噪声阈值,导致触摸处于异常工作状态。

Page 17: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

17 / 20http://www.holychip.cn

噪声范围内基准线微调:当-噪声<Differ<+噪声时,算法会将 Differ累加至虚拟噪声桶内,如

果虚拟噪声桶的值超过了设置的噪声桶值(HCTouchLib_NOISE_BARREL_CAPACITY),那么

Baseline会进行微调,每次微调的步进为 2。所以如果噪声桶设置的值越大,Baseline更新越慢,

此值可根据用户需求进行调整。

本章节中涉及的以下几个参数转换时长计算方式:

HCTouchLib_CONFIRM_LONGTOUCH_TIME(设置触摸自动复位计数值)

HCTouchLib_OVERHIGH_TIME(毛刺消除复位计数值)

HCTouchLib_OVERLOW_TIME(设置低基准线复位计数值)

其时长的计算方式均相同,如:触摸自动复位时长≈HCTouchLib_CONFIRM_LONGTOUCH_TIME*

单个按键扫描时间*开启的检测通道数。

单通道扫描时间≈((HCTouchLib_DSCR +1)*256 - 1)/HCTouchLib_CTKDS

计算举例:

Fosc = 32Mhz

开启通道数 = 6

HCTouchLib_DSCR = 48

HCTouchLib_CTKDS = Fosc/2

HCTouchLib_CONFIRM_LONGTOUCH_TIME = 1000

单通道扫描时间 ≈((48+1)*256-1)/16000000 ≈ 0.7839ms

触摸自动复位时长 ≈ 0.7839ms * 6 * 1000 ≈ 4.7s

4.3.2.2 抗干扰

对于整个触摸系统而言,遭遇干扰的表现为当前计数值(RawData)突变,这个值可能会突然下降

或者突然上升,用户需要通过配置 HCTouchLib_CONFIRM_LONGTOUCH_TIME、

HCTouchLib_LIMIT_FACTOR 、HCTouchLib_OVERHIGH_TIME、HCTouchLib_OVERLOW_TIME几个

值来确保 Baseline不会再遭遇 RawData突变时随之更新,导致干扰结束后 Baseline无法恢复到正常的值,

从而使得按键触摸无效。

下图为触摸系统遭遇的外部电磁干扰的图形

Page 18: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

18 / 20http://www.holychip.cn

图 4-5

如图所示,整个系统中的干扰区间被大概分成了 5个,其中 1号区间的干扰持续时间最长,那么设

置 HCTouchLib_OVERLOW_TIME的时常就需要超过这个区间的时长即可,这样的话就可以确保这种非

持续性的干扰导致 Baseline 的降低。

但是设置 HCTouchLib_OVERLOW_TIME的时常不可以过长,否则遇到用户手指按在按键上上电后

恢复正常 Baseline 的时间过长,从而导致用户体验较差。

设置 HCTouchLib_OVERHIGH_TIME的方式则与上面相同。

4.3.3 应用开发

一轮扫描完成标志位

extern bit OneCycleScanDone; //扫描一轮置位一次

一轮扫描完成标志位,一轮扫描完成后标志位 OneCycleScanDone置 1,用户需要在一轮扫描完成

后调用 Touch_Signal_Handle()函数,并且将 OneCycleScanDone清 0。

按键响应标志位

extern ux16 TouchKeyFlag; //按键响应标志,每 1BIT对应一个通道,BIT对应位与

HCTouchLib_TK_CH_MASK 相对应

按键响应标志位,每 1BIT对应一个通道,当对应通道确认按下后,对应的 BIT会置 1,BIT对应

位与 HCTouchLib_TK_CH_MASK 相对应,具体对应方式可以参考本文 4.2.3章节《设置需要检测的通

道》。

Page 19: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

19 / 20http://www.holychip.cn

4.4 注意事项

1、当 Fosc ≠ Fcpu,且设置了中断优先级以后,RawData 可能会出现周期性的高毛刺,遇到这种情况

时,建议使用默认中断优先级设置或者将 Fosc和 Fcpu设置成一致。

2、建议在 CTK初始化之前初始化 ADC,并且需要在 ADC初始化内配置好需要使用的 ADC通道,确

保不会和触摸通道产生冲突。另外使能完成 ADC_EN以后建议保持打开,不要关闭。

错误示例:ADC_Init在CTK_Init之前,并且未对ADCC1寄存器进行配置(此时ADC通道默认AN0),

然后使能 CTK,并且使能了 TK0,由于 AN0与 TK0为同一个端口,于是 AN0和 TK0同时打开,

导致初始化的 RawData的数据错误。

3、使用时需要注意任意 IO口上不可以输入比 VDD高的电压或者比 GND低的电压,否则会造成

RawData数据的异常。

4、未使用到的 IO口应设置为固定状态:输入带上/下拉或推挽输出高/低。

5、在进行 Flash做类 EEPROM(IAP)操作进行扇区擦除时,建议先暂停 CTK扫描(Scan_Pause函数),

等到操作完成后再继续进行 CTK扫描(Scan_Continue函数)。

注:更详细的应用注意事项及常见问题分析建议阅读《AN007T_触摸应用注意事项》。

Page 20: AN003T 按键触摸库使用 Ver1.05 cnŒ‰键触摸库...BIT0: 表示CODE_INTERNAL_INDEX[0]对应的通道检测使能控制位; BIT1: 表示CODE_INTERNAL_INDEX[1]对应的通道检测使能控制位;

AN003T

20 / 20http://www.holychip.cn

5 版本说明

版本 日期 描述

V1.00 2018/05/26 初版

V1.01 2018/07/20 增加 2.2.2描述

V1.02 2018/09/07

1、 完善了 3.2章节的描述

2、 修改了 3.3章节的部分描述

3、 增加了 3.4章节描述

V1.03 2018/09/28 3.2.5章节修改部分描述

V1.04 2019/01/11

1、 增加了 1章节

2、 完善了 4.2.3章节的描述

3、 完善了 4.3章节的描述

4、 修改了 4.4章节描述

V1.05 2019/08/05 文档名称修改

HOLYCHIP公司保留对以下所有产品在可靠性、功能和设计方面的改进作进一步说明的权利。

HOLYCHIP不承担由本手册所涉及的产品或电路的运用和使用所引起的任何责任,HOLYCHIP的产品不

是专门设计来应用于外科植入、生命维持和任何HOLYCHIP产品产生的故障会对个体造成伤害甚至死亡

的领域。如果将HOLYCHIP的产品用于上述领域,即使这些是由HOLYCHIP在产品设计和制造上的疏忽

引起的,用户应赔偿所有费用、损失、合理的人身伤害或死亡所直接或间接所产生的律师费用,并且用

户保证HOLYCHIP及其雇员、子公司、分支机构和销售商与上述事宜无关。

芯圣电子

2019年 1月