K20微控制器TSI模块电容触摸传感:从原理到实战配置与调试
1. 项目概述与核心价值
在嵌入式人机交互领域,电容式触摸传感技术早已不是什么新鲜事,但如何在一块小小的微控制器上,稳定、精准且低功耗地实现它,依然是很多工程师在实际项目中会遇到的挑战。我最近在为一个智能家居面板项目选型和开发时,再次深入研究了飞思卡尔(现恩智浦)K20系列微控制器的触摸感应接口模块。这个看似简单的“触摸”功能,背后涉及从模拟电路设计、寄存器配置到软件滤波算法的完整链路,任何一个环节的疏忽都可能导致用户体验的灾难——比如误触发、反应迟钝或者功耗飙升。
K20微控制器集成的TSI模块,其设计思路非常典型,它没有采用外置专用触摸芯片常见的互电容检测方案,而是基于电荷转移和弛张振荡器的自电容检测原理。这种集成方案的最大优势在于,它把高精度的模拟前端、灵活的扫描控制逻辑和低功耗管理单元都塞进了MCU内部,让你用最少的额外成本(通常只需要一个电极和一颗电阻)就能实现可靠的触摸或接近感应。这对于成本敏感且空间受限的嵌入式设备,比如智能开关、便携式医疗设备或者工业手持终端来说,是极具吸引力的。
本文将结合K20的数据手册和我的实际调试经验,为你彻底拆解TSI模块的工作原理、电气特性、配置方法以及那些手册上不会写的“坑”。无论你是刚开始接触电容触摸,还是正在为某个产品的触摸灵敏度调优而头疼,相信这些从一线项目中总结出的细节都能给你带来直接的帮助。我们会从最基础的“为什么电容能感应触摸”说起,一直深入到如何根据表40中的那些电气参数来计算出适合你电路板的配置值。
2. TSI模块工作原理深度解析
要玩转TSI,绝不能只停留在“配置个通道、读个计数值”的层面。你必须理解它内部是怎么“数”出电容变化的。K20的TSI模块核心是一个基于弛张振荡器的电容-数字转换器。听起来有点玄乎?我们可以把它想象成一个用电容控制速度的“跑马灯”。
2.1 弛张振荡器与电荷转移的基本模型
TSI模块为每个触摸电极通道都配备了一个相同的核心电路:一个由可编程电流源驱动的弛张振荡器。这个振荡器的工作流程可以简化为“充电-比较-放电”的循环:
- 充电阶段:一个恒流源
IELE向外部电极电容CELE充电。电容电压V_CAP从0开始线性上升。充电电流IELE的大小可以通过寄存器EXTCHRG来配置,这是调节灵敏度的关键参数之一。 - 比较阶段:模块内部有一个电压比较器,它持续将
V_CAP与一个固定的阈值电压VTH(通常为VDD/2或一个内部参考电压)进行比较。 - 放电与计数阶段:当
V_CAP达到VTH时,比较器翻转,触发两个动作:第一,内部开关闭合,电容通过一个低阻抗路径快速放电,V_CAP迅速归零;第二,一个计数器(通常是模块内部的频率计数器或周期计数器)增加1。然后,循环回到步骤1,开始下一次充电。
那么,触摸是如何被检测到的呢?当你的手指接近或触摸电极时,相当于在电极对地之间并联了一个额外的电容(主要是手指与电极间的耦合电容)。这使得总电容CELE增加了。根据电容充电公式Δt = (C * ΔV) / I,在相同的充电电流IELE和电压变化量ΔV(即VTH)下,电容C越大,充电到阈值所需的时间Δt就越长。因此,振荡器的频率会下降。TSI模块并不是直接测量频率,而是在一个固定的时间窗口内,去数这个振荡器完成了多少个“充电-放电”周期。这个计数值被称为“扫描计数值”。手指触摸导致电容增大,周期变长,在固定时间内完成的周期数就变少,所以扫描计数值会减小。这是理解TSI输出逻辑的关键:电容增加,计数值减少。
2.2 参考振荡器的作用与精度保障
如果只有一个电极振荡器,那么计数值会受到电源电压波动、温度漂移和工艺偏差的严重影响。为了解决这个问题,TSI模块引入了一个参考振荡器。它的结构和电极振荡器完全一样,但它连接的是一个精密的、稳定的内部参考电容CREF(典型值1pF)。
模块的实际工作流程是:在一个扫描周期内,它会同时(或交替)对参考振荡器和电极振荡器进行计数。最终输出的结果,往往是一个与两者比值相关的值,或者是在软件中利用参考计数值来校准电极计数值。这种差分或比率测量的方法,可以极大地抑制共模干扰,比如电源噪声和温度变化对两个振荡器的影响是相似的,在比值运算中会被抵消掉。数据手册中fREFmax(参考振荡器最大频率)和fELEmax(电极振荡器最大频率)的指标,就是为了确保这两个振荡器在各种配置下都能稳定工作在设计频率范围内。
2.3 关键电气参数解读与设计影响
现在,我们回过头看数据手册中的表40. TSI electrical specifications,这些枯燥的数字背后都对应着实际的设计约束:
VDDTSI(1.71 – 3.6V):TSI模块的工作电压范围。这意味着即使在MCU核心电压较低时,触摸功能仍可工作,为低功耗设计提供了可能。CELE(1 – 500 pF):目标电极电容范围。这是你PCB设计时必须遵守的黄金法则。电极电容(包括走线寄生电容)最好设计在20pF左右(典型值),绝对不要超过500pF。过大的电极电容会导致振荡频率过低,可能无法满足扫描速率要求,甚至无法正常工作。Pres5,Pres20,Pres100(8.3333 – 38400 fF/count):电容测量精度。这个参数可能有点反直觉,它的单位是飞法每计数。它表示TSI输出值每变化1个数字(1个count),所代表的电容变化量。例如,Pres20的典型值为 8.3333 fF/count,意味着当你的电极电容约为20pF时,模块能分辨出小至 0.00833 pF 的电容变化。这个值越小,灵敏度越高。但请注意,它不是一个固定值,而是随着配置(PS,NSCN,EXTCHRG,REFCHRG)剧烈变化的。后面我们会详细讲解如何计算和配置它。MaxSens(0.008 – 1.46 fF/count):最大灵敏度。这是Pres的另一种表达方式,特指在最优配置下能达到的最高灵敏度(即最小的fF/count值)。0.008 fF/count 意味着理论上的极致灵敏度,但通常需要以牺牲扫描速度和抗噪性为代价。TCon20(8 – 25 μs):在20pF电极下的响应时间。这是完成一次电极电容测量所需的时间。它直接决定了你的触摸扫描速率。如果需要支持快速滑动或多点触摸,这个时间越短越好。ITSI_RUN/ITSI_LP(55 μA / 1.3 μA):运行和低功耗模式下的附加电流。这是评估触摸功能对系统整体功耗影响的关键数据。在低功耗待机模式下,TSI模块可以以极低的电流(1.3μA典型值)维持周期性扫描,实现触摸唤醒功能,这对于电池供电设备至关重要。
理解这些参数是进行硬件设计和软件配置的基础。下一章,我们将把这些原理和参数落实到具体的硬件电路设计和PCB布局上,这是保证触摸性能稳定的物理基石。
3. 硬件电路设计与PCB布局实战要点
很多触摸功能不稳定的问题,根源都在硬件层面。TSI模块虽然集成在MCU内部,但对外的电极电路非常简单,正因如此,PCB布局和外部元件的选择就显得尤为关键。这里没有复杂的运放电路,但每一个细节都关乎噪声和稳定性。
3.1 电极传感电路设计
一个典型的K20 TSI电极接口电路如下图所示(此处用文字描述):
MCU K20 TSI_CHx Pin ——\/\/\/——|——> 到触摸电极(铜箔) Rseries | Cstray (寄生电容) | GND- 触摸电极:这是用户直接交互的部分。形状可以是圆形、方形或任意形状,面积越大,基础电容和触摸带来的电容变化量通常也越大。电极材料通常使用PCB上的铜箔,表面覆盖绝缘介质(如玻璃、塑料外壳、PCB阻焊层)。介质越薄,触摸灵敏度越高。
- 串联电阻
Rseries:这个电阻是必须的,通常取值在1kΩ到10kΩ之间。它的主要作用有两个:第一,限制ESD(静电放电)事件时涌入芯片引脚的能量,保护内部脆弱的CMOS电路;第二,与电极电容构成一个低通滤波器,有助于衰减高频噪声。但这个电阻不宜过大,否则会影响振荡器的充放电速度,从而影响性能。 - 寄生电容
Cstray:这是指从TSI引脚到电极、以及电极对地的所有非意图电容总和,包括PCB走线电容、电极本身对地电容等。我们的设计目标就是让这个Cstray值(即CELE)落在1-500pF的推荐范围内,并且尽可能稳定。Cstray的波动就是噪声的来源。
实操心得:电极电容估算在画板之前,最好估算一下电极电容。一个简单的方法是:使用一个带有电容测量功能的万用表或LCR表,在PCB制板后,直接测量TSI引脚对地的电容(不焊接MCU)。这个值应尽量控制在10pF到50pF之间,为手指触摸带来的2-5pF变化量留出足够的信噪比空间。如果基础电容过大(比如超过100pF),就要检查是不是走线太长、太靠近地平面或电源平面了。
3.2 PCB布局的“军规”
糟糕的PCB布局是触摸传感的“头号杀手”。以下是我用几次调试失败换来的经验:
- 走线尽可能短而直:从MCU的TSI引脚到触摸电极的走线,必须像对待高频时钟线一样谨慎。长走线会引入更大的寄生电容和电感,并成为天线,拾取环境噪声。绝对不要为了布线方便而绕远路。
- 用地线“护卫”敏感走线:在TSI信号线的两侧或背面,布置接地走线或接地铜皮。这构成了一个简单的共面波导或微带线结构,可以有效地屏蔽来自其他数字信号(如SPI、PWM、USB)的耦合干扰。但要注意,这个地线护卫与TSI信号线之间要保持一定距离(至少2倍线宽),避免过度增加对地电容。
- 远离噪声源:让TSI走线远离任何可能产生快速电压变化的信号线,例如开关电源的电感、电机驱动线、高速数字总线(如SPI、I2C在高速模式下)、晶体振荡器电路。如果无法远离,务必垂直交叉走线,而不是平行走线。
- 电极背面铺地:在触摸电极所在PCB层的背面,建议铺设完整的接地铜层。这能形成一个稳定的参考地,并屏蔽来自PCB另一侧的干扰。但要注意,这也会增加电极的基础电容,需要权衡。
- 电源去耦至关重要:为K20的模拟电源(VDDA、VREFH)和数字电源(VDD)提供充足、高质量的去耦电容。每个电源引脚附近都应放置一个0.1μF的陶瓷电容,并尽可能靠近引脚放置。一个干净的电源是保证TSI内部比较器和电流源稳定工作的前提。
- 利用未使用的TSI引脚:如果有些TSI通道暂时不用,不要悬空。最好通过一个1MΩ左右的大电阻将其下拉到地,或者配置为普通的GPIO输出低电平,以防止浮空引脚引入随机噪声。
3.3 电极形状与覆盖介质选择
- 电极形状:对于简单的按钮,圆形或方形是最常见的选择。对于滑条或滚轮,则需要设计一系列互电容耦合或自电容变化的电极图案。面积越大,信噪比通常越好,但基础电容也越大。需要根据面板空间和灵敏度要求折中。
- 覆盖介质:绝缘层的厚度和介电常数直接影响灵敏度。常用的有亚克力、玻璃、PCB阻焊油墨。介电常数越高、厚度越薄,灵敏度越好。在设计外壳时,必须明确标注触摸区域对应的介质厚度公差,过大的厚度变化会导致灵敏度不一致。
- 防水与手套触摸:如果需要支持湿手操作或戴手套操作,挑战在于手指与电极间的耦合电容会显著减小。这通常需要通过增大电极面积、使用更高介电常数的覆盖材料、以及优化TSI软件算法(如降低触发阈值、使用更复杂的基线跟踪算法)来实现。
硬件是地基,软件是建筑。当地基打牢后,我们就可以进入MCU内部,通过配置寄存器来让TSI模块按照我们期望的方式高效工作。
4. 软件驱动配置与参数计算详解
K20的TSI驱动配置,核心在于理解几个关键寄存器:TSI0_GENCS(General Control and Status),TSI0_DATA(Data Register), 以及TSI0_TSHD(Threshold Register)。而配置的精髓,则在于如何根据数据手册的公式和你的应用需求,计算出PS、NSCN、EXTCHRG、REFCHRG这些参数。
4.1 寄存器配置流程
一个典型的TSI初始化流程如下:
- 使能时钟:首先,需要使能TSI模块的时钟(通常通过SIM_SCGC5寄存器)。
- 引脚复用:将对应的GPIO引脚功能复用到TSI通道。例如,使用PTB0作为TSI0_CH0,需要配置PORTB_PCR0寄存器的MUX字段。
- 配置TSI0_GENCS寄存器:
TSIEN: 置1,使能TSI模块。NSCN: 设置每次扫描的扫描次数。增加此值可以提高信噪比,但也会增加单次扫描时间。PS: 预分频器,用于选择电极振荡器和参考振荡器的电流源比例,直接影响灵敏度和扫描速度。EXTCHRG: 电极振荡器充电电流选择。REFCHRG: 参考振荡器充电电流选择。MODE: 选择操作模式,通常选择非噪声检测模式。ESOR: 选择扫描结束是触发中断还是DMA请求。OUTRGF: 设置结果格式(例如,使用差分输出模式可以抑制共模噪声)。
- 配置TSI0_TSHD寄存器:设置触摸阈值(
THRESH)和噪声阈值(NTHRESH),用于在硬件层面判断是否发生触摸事件。 - 启动扫描:将
TSI0_GENCS寄存器中的SWTS位写1,启动一次软件触发扫描。或者,使能定时器触发扫描。 - 等待与读取:等待扫描完成标志
EOSF置位,然后从TSI0_DATA寄存器的CNT字段读取计数值。
4.2 核心参数计算与选型指南
这是最具技术含量的部分。我们如何根据数据手册的公式,为我们的具体应用(比如,一个需要快速响应的游戏手柄按键和一个需要高灵敏度的接近感应灯)配置参数?
核心公式回顾(来自数据手册表40的Note 11):灵敏度Sensitivity (MaxSens)的计算公式为:Sensitivity (fF/count) = (Cref * Iext) / (Iref * PS * NSCN)其中:
Cref: 内部参考电容,典型值1pF。Iext: 电极振荡器电流,由EXTCHRG控制,Iext = 基础电流 * (EXTCHRG + 1)。基础电流典型值为2μA(当EXTCHRG=0时)。Iref: 参考振荡器电流,由REFCHRG控制,计算方式同Iext。PS: 预分频器值(0-7)。NSCN: 扫描次数(1-32)。
我们的目标是:在满足响应时间(TCon)和功耗要求的前提下,获得合适的灵敏度。
设计案例:设计一个响应时间小于10ms,能可靠检测手指触摸(电容变化约2pF)的按键。
- 确定灵敏度需求:我们需要检测2pF的变化。假设我们希望这个变化能引起至少20个计数值的变化(以保证良好的信噪比),那么所需的灵敏度
Sensitivity_needed≤ 2pF / 20 = 100 fF/count。 - 确定扫描时间约束:单次扫描时间
T_scan ≈ TCon * NSCN。TCon在数据手册中给出(例如20pF下为15μs)。如果我们希望10ms内能完成多次扫描以进行软件滤波,假设单次扫描时间控制在1ms以内,那么NSCN最大不能超过 1ms / 15μs ≈ 66。考虑到余量,我们初步选择NSCN = 16。 - 代入公式反推其他参数:我们有公式
100 fF ≥ (1pF * Iext) / (Iref * PS * 16)。简化得(Iext) / (Iref * PS) ≤ 1.6。- 为了简化,通常设置
Iext = Iref,这样电流项抵消,公式变为1 / PS ≤ 1.6,即PS ≥ 0.625。所以PS至少为1。 - 我们选择
PS=2,EXTCHRG = REFCHRG = 4(此时Iext = Iref = 2μA * (4+1) = 10μA)。 - 计算实际灵敏度:
S = (1pF * 10μA) / (10μA * 2 * 16) = 1pF / 32 = 0.03125 pF/count = 31.25 fF/count。 - 这意味着2pF的触摸变化将引起大约
2pF / 0.03125 pF/count ≈ 64个计数值的变化,远高于我们设定的20个计数的目标,信噪比很好。
- 为了简化,通常设置
- 验证扫描时间:
T_scan ≈ 15μs * 16 = 240μs,远小于1ms,满足要求。 - 功耗估算:根据
ITSI_RUN典型值55μA,加上扫描期间的动态电流(与频率和配置相关),整体功耗在可接受范围内。
通过这个计算过程,我们不再是盲目地试凑寄存器值,而是有的放矢地进行配置。下表总结了几种典型应用场景的配置思路:
| 应用场景 | 核心需求 | 配置策略 | 可能参数示例 | 注意事项 |
|---|---|---|---|---|
| 高速按键 | 快速响应,抗抖动 | 低NSCN, 高PS, 适中Iext/Iref | PS=1, NSCN=4, EXTCHRG=2 | 灵敏度较低,需确保触摸带来的电容变化足够大。 |
| 高灵敏度接近感应 | 检测微小电容变化 | 高NSCN, 低PS, 低Iext/Iref | PS=7, NSCN=32, EXTCHRG=0 | 扫描时间长,功耗高,易受噪声干扰,需要强大的软件滤波。 |
| 低功耗唤醒 | 极低待机功耗,周期性扫描 | 极低扫描频率, 优化LPSCNITV | NSCN=1, PS=7, 使用LPOSC时钟 | 牺牲响应速度换取功耗,需配合MCU的低功耗模式。 |
| 湿手指/手套 | 信噪比低 | 提高Iext以增大信号, 增加NSCN滤波 | EXTCHRG=10, NSCN=16 | 基础电容可能变化,需要动态基线调整算法。 |
4.3 基础软件框架与滤波算法
读取到原始的TSI计数值只是第一步,直接使用它几乎一定会导致误触发。一个健壮的触摸检测程序必须包含以下部分:
// 伪代码示例:TSI触摸检测状态机 typedef struct { uint16_t raw_value; // 本次读取的原始值 uint16_t baseline; // 动态基线(无触摸时的平均值) uint16_t baseline_alpha; // 基线平滑因子(如0.95) uint16_t threshold; // 触摸触发阈值 uint16_t hysteresis; // 迟滞值,用于去抖 bool is_touched; // 当前触摸状态 uint32_t touch_timestamp;// 触摸开始时间 } tsi_channel_t; void TSI_ProcessChannel(tsi_channel_t* ch) { // 1. 读取原始CNT值 ch->raw_value = TSI0_DATA & 0xFFFF; // 2. 更新动态基线(低通滤波) // 只有当没有触摸时,才缓慢跟踪原始值作为基线 if (!ch->is_touched) { ch->baseline = (ch->baseline_alpha * ch->baseline + (256 - ch->baseline_alpha) * ch->raw_value) / 256; } // 3. 计算信号差值(Delta) int16_t delta = (int16_t)ch->baseline - (int16_t)ch->raw_value; // 注意:触摸使计数值减小 // 4. 状态判断(带迟滞的比较) if (!ch->is_touched && delta > ch->threshold) { // 从“未触摸”进入“触摸”状态 ch->is_touched = true; ch->touch_timestamp = get_system_tick(); // 触发触摸按下事件 on_touch_down(channel_id); } else if (ch->is_touched && delta < (ch->threshold - ch->hysteresis)) { // 从“触摸”回到“未触摸”状态,使用迟滞防止抖动 ch->is_touched = false; // 触发触摸释放事件 on_touch_up(channel_id); } // 5. 高级处理:触摸持续判断、滑动检测(多通道关联)等 if (ch->is_touched) { // 可以计算触摸强度、持续时间等 // ... } }这个框架包含了触摸检测最核心的动态基线跟踪和带迟滞的比较。动态基线能自动适应环境温湿度变化、电极老化等引起的缓慢漂移。迟滞比较则能有效消除因噪声引起的状态抖动。
5. 高级应用、调试技巧与故障排查
当你完成了基本的触摸功能后,可能会追求更复杂的交互,或者遇到一些棘手的稳定性问题。这一章分享一些进阶内容和实战排坑经验。
5.1 实现滑条与滚轮
单个电极只能做按钮,多个电极组合就能实现滑条(线性位置)和滚轮(旋转位置)。其原理是检测手指在多个相邻电极上引起的电容变化比例。
- 电极设计:滑条通常使用一系列长条形电极,像梳子齿一样交错排列。滚轮则使用多个扇形或三角形电极围成一圈。关键是要保证相邻电极间有足够的耦合,使得手指在移动时,相邻通道的信号能平滑过渡。
- 位置算法:最常用的是重心法。假设有三个相邻通道A、B、C,测得的信号变化量(即
baseline - raw_value)分别为Sa, Sb, Sc。手指在B电极上的位置权重可以粗略计算为Position = (Sa*0 + Sb*1 + Sc*2) / (Sa+Sb+Sc)。更复杂的算法会考虑更多的电极和插值。 - 软件实现要点:
- 所有用于滑条/滚轮的通道必须使用完全相同的TSI配置,以保证灵敏度一致。
- 需要进行通道间的校准,补偿因PCB布局差异导致的基线不同。
- 对计算出的位置进行软件滤波(如移动平均滤波),使输出平滑。
5.2 低功耗触摸唤醒设计
这是TSI模块的一大亮点。你可以让MCU进入深度睡眠模式(如VLPS),而TSI模块依靠低功耗振荡器(LPOSC)供电,以极低的频率(如每秒几次)周期性地扫描电极。
- 配置低功耗扫描:在TSI0_GENCS寄存器中,使能
STPE位(在Stop模式下使能TSI),并配置LPSCNITV寄存器设置扫描间隔。 - 进入低功耗模式:配置好TSI后,让MCU进入支持的深度睡眠模式。
- 中断唤醒:当TSI检测到触摸(计数值超过
THRESH阈值),会产生一个中断,将MCU从深度睡眠中唤醒。唤醒后,MCU可以再进行一次精确扫描来确认触摸事件。
注意事项:低功耗模式下的扫描精度和速度会下降。阈值
THRESH需要设置得比正常模式下更高一些,以防止噪声误唤醒。同时,要仔细评估ITSI_LP电流(典型1.3μA)和扫描间隔对整体平均功耗的影响。
5.3 常见问题与排查实录
即使按照最佳实践设计,调试中也可能遇到各种问题。下面是一个快速排查清单:
| 现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| 完全无反应,计数值为0或恒定 | 1. TSI模块时钟未使能。 2. 引脚复用未配置到TSI功能。 3. 电极开路或短路。 4. 寄存器配置错误,扫描未启动。 | 1. 检查SIM_SCGC5寄存器对应位。 2. 检查PORTx_PCRn寄存器的MUX字段。 3. 用万用表测量电极通路。 4. 单步调试,确认 SWTS位写入后EOSF标志能否置位。 |
| 计数值波动巨大(噪声) | 1. PCB布局不佳,受到数字噪声干扰。 2. 电源噪声大。 3. 覆盖介质太薄或接地不良,引入人体/环境噪声。 4. NSCN设置过小,信噪比不足。 | 1. 检查TSI走线是否远离噪声源,是否有地线护卫。 2. 用示波器观察MCU的VDD和VDDA电源纹波。 3. 尝试增加介质厚度或在电极周围铺设接地环。 4. 逐步增大 NSCN,观察原始数据是否稳定。 |
| 灵敏度不足,触摸变化小 | 1. 电极基础电容(CELE)过大,接近或超过500pF上限。2. PS值设置过大,或Iext设置过小,导致灵敏度(fF/count)过高。3. 覆盖介质过厚。 | 1. 测量电极对地电容,优化PCB布局减小寄生电容。 2. 根据公式重新计算,降低 PS或提高Iext。3. 确认外壳介质厚度,或尝试减小厚度。 |
| 响应速度慢 | 1.NSCN设置过大,单次扫描时间过长。2. 软件扫描间隔太长。 3. 软件滤波算法过于复杂(如过长的移动平均窗口)。 | 1. 在满足信噪比前提下,减小NSCN。2. 提高TSI扫描的触发频率。 3. 优化算法,或使用更高效的滤波器(如IIR)。 |
| 上电后基线漂移 | 1. 电极或PCB材料吸潮。 2. 温度变化。 3. 动态基线算法跟踪速度过快。 | 1. 这是正常物理现象,必须依赖动态基线算法。 2. 确保基线更新只在“确认无触摸”时进行。 3. 适当减慢基线跟踪速度(增大平滑因子alpha)。 |
| 仅在特定环境(如日光灯下)失灵 | 受到特定频率的电磁干扰(如50/60Hz工频及其谐波)。 | 1. 尝试在软件中改变TSI扫描频率,避开干扰频点。 2. 加强电源滤波和PCB屏蔽。 3. 在软件中增加工频陷波滤波。 |
一个高级调试技巧:使用示波器观察电极波形。虽然TSI引脚内部是开关切换,但在电极端的信号(通过串联电阻测量)可以反映振荡器的工作情况。正常情况下,你应该能看到一个频率在几百kHz到1MHz左右的锯齿波。当手指触摸时,锯齿波的频率会明显降低。如果看不到波形或波形畸变,说明硬件电路可能有问题。如果波形频率不稳定、毛刺多,说明噪声干扰严重。
通过将原理、设计、配置和调试串联起来,K20的TSI模块从一个黑盒变成了一个可预测、可设计的友好工具。最终,一个可靠的触摸功能是精细的硬件设计、合理的参数计算和稳健的软件算法三者结合的产物。
