内置触摸调试指南
📎 原始文档:https://www.kdocs.cn/l/cn5FOH0HA7mE 内置触摸调试指南
内置触摸调试指南
一、内置触摸基本原理
- 内置触摸拓扑结构 低功耗内置触摸检测模块,简称lp_ctmu模块,是利用检测人体分布电容对触摸按键电容的影响,通过检测该电容变化,达到按键识别的功能
如上图,整个电路的电容$C_{e}$可以等效为公式:$C_{e}=(C_{S}+C_{p})$,其中:
$C_{S}$为触摸时引起的电容变化值
$C_{p}$为PCB走线,触摸片自身以及其他寄生电容组成的固有电容
由公式可知,当$C_{S}/C_{P}$越大时,触摸按键检测越灵敏,PCB layout建议尽可能减少$C_{p}$增加$C_{S}$以增加触摸按键灵敏度。
触摸调试工具上所看到的触摸数据,由$C_{S}$和$C_{p}$共同影响
2. 内置触摸算法指标
在硬件算法上,存在三个相关阈值配置,cfg0、cfg1、cfg2
cfg0:稳定漂移阈值,由于外界环境变化(温度,湿度等),每次采样值会有微小波动,配置该阈值的大小表示允许采样值在该阈值范围微小变化,该过程会产生一个参考平面
cfg1:平均基础值,无触摸时触摸参数的平均值
cfg2:边沿阈值,在产生新的参考平面后,硬件算法将会产生如下计算
$V_{边沿差值}=abs(V_{新平面采样值}-V_{旧平面采样值})$
当$V_{边沿差值}>cfg2$时,将产生边沿中断
3. 中断方式与硬件交互
当低功耗触摸检测到按键被按下和抬起动作时,会通过中断方式通知软件,以AC700为例主要中断消息有
(1)下降沿中断:当按键被按下时,会有下降沿中断,表示按键被按下
case CTMU_P2M_CH4_FALLING_EVENT:
log_debug("CH%d: FALLING", ch_num);
break;
(2)当按键被按下超过所配置的长按时间是,会有长按中断
case CTMU_P2M_CH4_LONG_KEY_EVENT:
log_debug("CH%d: LONG click", ch_num);
// ctmu_long_click_handle(ch_num);
break;
(3)上降沿中断:当按键被抬起时,会有上降沿中断,表示按键被抬起
case CTMU_P2M_CH4_RAISING_EVENT:
log_debug("CH%d: RAISING", ch_num);
// ctmu_raise_click_handle(ch_num);
break;
4. 按键识别流程
sdk默认按键识别流程,主要利用上升沿中断和长按中断,以AC700为例
(1)多击按键识别逻辑示意图如下
图中的delay time为当按键被抬起后等待下次被按下的时间,配置参数为
#define CTMU_SHORT_CLICK_DELAY_TIME 400 //单击事件后等待下一次单击时间(ms)
(2)长按(long),长按保持(hold),长按抬起(up)按键识别流程如下示意图
图中的时间窗口,配置参数为
#define CTMU_HOLD_CLICK_DELAY_TIME 200 //long事件产生后, 发hold事件间隔(ms)
#define CTMU_LONG_KEY_DELAY_TIME 2000 //从按下到产生long事件的时间(ms)
5. 滑动触摸逻辑
(1)短距离:(手指能够同时触摸到两个触摸点)两触摸点的中心距离(3-4mm);触摸铜柱建议是带蘑菇头的或者两触摸片距离较近。
(2)长距离:(手指不能同时触摸到两个触摸点)两触摸点的中心距离(12-30mm);触摸片的大小建议(12-18毫米平方),实际大小要按照调试确定。长距离的 要支持 ,每个触点 都要实现 单击 和 多击。
(3)PCB-layout上每个触摸通道走线参照单触摸通道走线规则,尽量几个触摸通道的走线做到等长走线。
(4)短距离滑动触摸逻辑如下
注:上图中
T1:表示识别单击的时间,如>190ms后抬起, 则识别为单击
T2:表示播放长按提示音时间,如>250ms
值得注意的是,外挂触摸IC的逻辑也是这样的,是通用的!!!
6. 滑动触摸相关参数
#define FALLING_TIMEOUT_TIME 30 //两个按下边沿的时间间隔的阈值
#define RAISING_TIMEOUT_TIME 30 //两个抬起边沿的时间间隔的阈值
#define FIRST_SHORT_CLICK_TIMEOUT_TIME 190 //只针对首次单击,要满足按够那么长时间。连击时,后面的单击没有该时间要求
#define CLICK_IDLE_TIMEOUT_TIME 500 //如果该时间内,没有单击,那么该时间之后的第一次单击,识别为首次单击
#define SLIDE_CLICK_TIMEOUT_TIME 500 //识别为滑动之后,该时间内,如果有快速短按,也要识别为滑动
#define FAST_SLIDE_CNT_MAX 4 //一来就连续那么多次的快速短按,就会识别为一次滑动。
#define SEND_KEYTONE_TIMEOUT_TIME 250 //长按时的按键音,在按下后的多长时间要响
有下面几条逻辑值得注意,设:
T1:FIRST_SHORT_CLICK_TIMEOUT_TIME
T2:SEND_KEYTONE_TIMEOUT_TIME
T3:CLICK_IDLE_TIMEOUT_TIME
T4:SLIDE_CLICK_TIMEOUT_TIME
TC1:FAST_SLIDE_CNT_MAX
(1)T1只针对首次单击,意味着当第一次按下时,如果不超过T1,则不会识别为单击,如果超过了,则识别为单击,识别为单击后在T3时间内,如果连续按下,则后面的按下不需要达到T1的识别时间要求,如果这次按下和下次按下时间超过T3,则需要从新判断超过T1才算单击
(2)当前一次识别为滑动后,在T4时间内,如果有case7的情况,要把它识别为滑动
(3)如果一开始就来多次case7的情况,当连续达到TC1次时,就识别为一次滑动
(4)T5只是播长按提示音的时间,与长按事件什么的无关,长按事件长按保持事件仍然由原来的参数决定
7. 滑动触摸按键配置
(1)值得注意的是key_value的配置,key_value可以根据实际需求配置,对应按键表
(2)按键数组对应如下
(3)滑动触摸按键对应key_event
二、内置触摸调试步骤
- 检查硬件电路 (1)检查PCB,看触摸走线是否在电感、晶振、RF、MIC、DAC下走线。
(2)检查触摸走线贴的对地电容是多少;对地TVS的结电容是多少。
(3)例如下图错误走线:


2. 检查模具装配
(1)选材原则是:装配触摸片时应尽可能保证面积和厚度一致性,避免触摸片贴在模具发生翘起,贴歪等现象,顶针应保证有足够的行程,与触摸片的中心位置接触。触摸点的表面要光滑且薄不能双层结构,厚度最好是1.0mm以下;如果厚度过厚,要确保有足够大的触摸片。
(2)触摸片的材质要求:建议使用FPC、铜片、导电布等物理性质较好的材质;禁止使用导电棉。由于导电棉材质比较柔软,在装配时比较难控制装配一致性,顶针与导电棉接触的松紧也难以控制,导致批量生产时不同样机的触摸回路的固有电容和触摸时电容变化会不一样,通常表现为时而灵敏时而不灵敏,因此应禁止使用导电棉这种材质作为触摸片
(3)触摸片的面积要求。建议使用触摸片面积在12$mm^{2}$-15$mm^{2}$,实际面积大小按照调试的来
(4)触摸面板的材质和厚度。面板越薄,触摸效果越好,反之越差。用玻璃、微晶板等材质做成的面板,其触摸效果要比用塑料、有机玻璃等材质做成的面板好。而金属材质的面板无法检测触摸按键
3. 检查触摸数据
至少拿10 个样机,如果是 tws 耳机,则至少拿5对耳机,下载程序,对每个样机和用到的每个通道,进行数据采样,样机当然是越多越好!!!
3.1 软件相关配置
(1)在代码班级配置上打开以下宏,并确保以下宏有被编译到
#define TCFG_LP_TOUCH_KEY_BT_TOOL_ENABLE 1
#define USER_SUPPORT_PROFILE_SPP 1
#define APP_ONLINE_DEBUG 1
(2)确保工具链和SDK是最新的,AC697v230、AC700v130以下版本SDK需要打新算法触摸补丁
AC897N_AD697N_earphone_release_V2.3.0_697_触摸新算法_patch.rar
注意:如果是AD6983D2,2M的工程,要用4M工程的btstack.a库替换过程才能用
(3)AD698调试触摸,还要把工具名字改为AD697才能开启完全版
3.2 使用触摸调试工具
(1)从第一个样机开始,连上电脑蓝牙,记住 spp 蓝牙”传出”的端口号
(2)打开SDK中的内置触摸调试工具,会弹出硬件检查确认窗口,就几个选项,每次都会弹,需要仔细确认号每一项
(3)只有全部选择正确,即所有选项变为绿色,则点击确认,可进到下一步
(4)此时会弹出一个窗口,是否需要打开触摸调试工具帮助文档,文档里会有更详细的说明
(5)选对 spp 蓝牙”传出”的端口号,点击”打开”
(6)打开内置触摸在线调试工具后,界面如下,采集各数据时间默认 10s,但都可以配置。触摸相关的模拟挡位也可以配置,显示的挡位是默认推荐的挡位,建议不要改,最后 SDK 程序配置的挡位要跟工具调试时的挡位一致,不然调试毫无意义
特别注意,AD698的充放电电流档位不一样,触摸工具的配置要改成和SDK的一样
AD698v164版本,配置要改成302
(7)选择使用到的触摸通道,如多触摸按键、滑动触摸等,需要用到多个触摸通道的,需要重复下面步骤对用到的每个触摸通道进行单独数据抓取
(8)点击开始采集,会进行触摸数据采集,按提示操作,完成后会生成一个excel表
(9)excel表内保存着触摸数据,可以生成图表分析

3.3 抓取与分析触摸数据
(1)点击“选择音乐文件”, 可以选一份.wav 格式的音乐文件,选择成功,则会有文件路径在左边显示出来。当采集无触摸数据时,在所设时间的后半段时间,工具会自动控制样机播放该音乐文件。目的是检测触摸是否受到播歌干扰。如果没有选择音 乐文件,则采集无触摸数据时,不会播放音乐,也可以自行在电脑播放器播放音乐
- 如果出现图中的现象,说明样机的触摸受到DAC播歌干扰,继续下面验证MIC是否干扰到触摸

- 没有DAC干扰的话,播歌与不播歌时的触摸数据变化不大,波形基本不会有很大差异
(2)当采集无触摸数据时,自行打开电脑录音机,或者打电话进行通话,目的是打开MIC,检查MIC走线是否存在干扰触摸的现象 - 如果出现图中的现象,说明样机的触摸受到MIC干扰,继续下面验证DCDC是否干扰到触摸

- 没有MIC干扰的话,开MIC与不开MIC时的触摸数据变化不大,波形基本不会有很大差异
(3)采集完无触摸数据后,观察整个过程数据和波形 - 如果出现图中的现象,触摸抖动值异常偏大的情况,很可能受到DCDC电感或者RF的干扰

- 软件上改LDO模式进行验证

- 如果改LDO后,触摸数据抖动变小,说明存在DCDC电感的干扰
- 软件上降低蓝牙功率,验证RF干扰问题

- 如果改蓝牙发射功率后,触摸数据抖动变小,说明存在RF的干扰
- 没有DCDC和RF干扰的话,整个过程数据和波形不会有很大的抖动值
至此,根据触摸数据,如果发现样机存在DAC、MIC或DCDC等一个或多个干扰的情况,请回到检查硬件电路部分,寻找并修改硬件设计问题,排除硬件问题才能进行下一步!!!
(4)接着采集长按触摸数据,按照提示开始采集 - 当采集长按触摸数据时,如果此抖动值超过 32,说明触摸片或蘑菇头或壳料等选择不合理
(5)接着采集随机触摸数据,一定要有触摸动作 - 当采集长按触摸数据时,如果长按触摸的平均值与无触摸数据的平均值相差少于 100,说明触摸片或 蘑菇头或壳料等选择不合理
至此,根据触摸数据,如果发现样机存在长按数据抖动异常,长按触摸的平均值与无触摸数据的平均值相差过小的情况,请回到检查模具装配部分,寻找并修改模具装配问题,排除模具装配问题才能进行下一步!!!
3.4 汇总与生成触摸参数
(1)每个通道抓完10份数据后,点击处理触摸数据
(2)选中刚刚每个通道的所有数据(注意如果是处理ch1时就要把ch1的数据全部选完,但是不要选中ch1以外的,以此类推)
(3)如果选择的多份数据,都是数据正常的,那么打开后,就会生成一份 C 文件
(4)打开这份 C 文件,查看触摸数据分析
(5)如果数据有异常,则会有错误报告,不会生成相应数组
(6)“占比数据分散” 的意思是:占比 = 变化量 / 基础值,如果生产的这批样机的一致性非常的好,那么所有的样机的这个占比值都应该相接近。但是如果一致性很差,就会出现占比数据分散
至此,根据占比数据,如果有占比异常的,建议回到检查硬件电路和检查模具装配,结合对比正常机子,对异常样机进行分析,发现问题、改正问题,保证一致性后才进行批量生产!!!
(7)接着工具会弹出一个灵敏度级别选择窗口,每一个灵敏度级别对应二维数组的行号,推荐选 7 或者 6,点击确定
(8)接着工具会弹出按键检测的在线调试界面,有单击,长按,双击,三击等等,人手可以随机触摸样机触发按键,能够识别到对于的按键类型和次数,说明刚才生成的二维数组,和选择的灵敏度可用。反之,如果有误判,则需要重新选择灵敏度或者重新采集数据
3.5 导入触摸数据
(1)在lp_touch_key.c里的触摸数组中,把需要用到的每一个通道的触摸数据替换上
(2)在相应板级文件,根据上面选择的灵敏度档位,单独配置每一个通道的灵敏度
(3)注意电流电压档位也要确认和工具一致
(4)如果 SDK 的版本比较旧,没有使用到复制的模拟挡位的三个宏,那么请根据新的模拟挡位值,检测 SDK 触摸的头文件的模拟挡位配置,是否一致。如果不一致请自行修改触摸头文件里的挡位配置的宏
3.6 触摸参数注意事项
(1)变化值(无触摸数据-触摸的数据)必须大于100;变化率:(变化值/无触摸的数值)%;大于1.5%,小于6%可以生产;最理想的变化率是(2.5%-4.5%);后续会在测试盒上做验证变化率的测试项。
(2)cfg0小于32;最低灵敏度的cfg2大于20倍cfg0;
(3)触摸片的面积12-18毫米平方
(4)滑动触摸两触摸点的距离:短距离(3-4mm,一只手指能够同时触摸两个点);长距离 (12-30mm,一只手指只能触摸一个点)
(5)摸具厚度小于1.5mm
至此,一轮触摸调试基本完成,记得保存调试的触摸数据,如果一致性好,生产基本不会有很大问题,如果有问题,需要拿保存的触摸数据对比分析差异!!!
4. 滑动触摸调试
只要用到多个触摸通道,都要对每一个用到的触摸通道进行上面步骤的触摸数据抓取与分析,保证每一个通道的触摸数据正常,是保证滑动触摸效果的前提!!!
在完成上述步骤,保证触摸参数正常情况下,滑动触摸效果基本上不会有什么大问题,滑动触摸逻辑是固定的,基本上没有大修改空间,遇到问题尽量只能微调几个参数!!!
(1)单击容易误触发概率较大,逐级降低触摸通道灵敏度,测效果
(2)想要单击判断时间长一点,适当修改FIRST_SHORT_CLICK_TIMEOUT_TIME(不建议改短,滑动容易误判单击)
(3)滑动触摸灵敏度偏低,适当调大SLIDE_CLICK_TIMEOUT_TIME
三、触摸问题排查步骤
(1)遇到触摸不良问题,如触摸不灵敏、太灵敏、误触、长按等,先检验程序,看看是否同一个软件
(2)检查软件的触摸数组是否已经是调试的数组还是公版SDK的数组
(3)按照内置触摸调试步骤3.3,抓取触摸数据,如果有明显的数据一直处于按下或者处于一个异常平面的情况,则应该回到内置触摸调试步骤2,检查装配和模具,触摸铜箔等,是否有碰到板子上元器件的风险
(4)如果没有发现一直处于异常平面的情况,则按照内置触摸调试步骤3.3,继续分析DAC,MIC,DCDC、RF等干扰情况,如果发现有干扰,则需要回到内置触摸调试步骤1,检查硬件电路
(5)如果发现触摸基础值和变化率,跟之前调试的情况相差很大,则应该更换所用的触摸材料,重新调整装配,再观察触摸数据
(6)干扰太大的话,只能改板避开干扰源
(7)测试的时候可以调整充放电频率,以及上下限电压,对于板子存在干扰的情况,更改该值可能可以避开干扰,但是最好需要找到干扰源,硬件去处理
四、触摸问题分析案例
问题1:不触摸会触发长按
问题分析:耳机采样值会变0,触摸回路耦合到地,导致误触发长按消息。
问题解决:触摸铜片装配时注意一致性,避免向上突起,导致途中红框内的mic金属外壳接触到触摸铜片耦合到地。
问题2:短按再长按,不管长按多长时间都是短按
问题分析:可以通过修改相关配置宏,使得上述操作长按正常产生长按中断;
问题解决:修改如下
问题3:快速触摸不响应问题
问题分析:按键模块默认采样周期为10ms,如果响应速度不能满足需求,可通过修改触摸触摸采样周期参数5ms;
问题解决:修改如下,注意,只有用到1个通道的情况下可以修改,用到多通道情况下不可修改
问题4:放着会自动开机,提高阈值到触摸不起作用,还是会出现,排除误触问题
问题分析:触摸片材质为导电棉,测试导电棉触摸时的变化率在3%~6%,建议把灵敏度级别4~5,保证检测一致性,另外导电棉的电容容易受形变影响,建议尽量采用铜箔为触摸片,开机问题,客户希望是长按3秒开机,原来改的流程是用软件延时的方式,要求他改硬件的长按开机时间参数来实现
问题解决:修改如下
最优改动方法是把导电棉替换为铜片作为触摸片,详细解释请参考“关于触摸片选材建议”
问题5:样机在多次触摸后会触发关机
问题分析:查看pcb,样机在触摸片上并联了静电管,由于静电管结电容随电压变化,而触摸采样原理是充放电,导致采样值随着静电管的结电容变化出现不稳定,导致按键功能不正常,有时触发关机
问题解决:去掉静电管,内置触摸正常,需要确定是否能过静电认证
问题6:如何测试按键的误触率
问题分析:模块检测被按下和抬起时会有下降沿和上升沿中断
问题解决:可以在中断函数翻转io使用示波器观看检测情况
问题7:直接触摸样机的顶针反应不正常
问题分析:人体本身会产生幅度比较大的正弦波电压,触摸模块采样幅度在300~600mv之间,如果直接触摸,会影响采样电压,影响采样值,波动较大,影响灵敏度
问题解决:建议以组装后的样机测试结果为准