2、触控屏工作原理:电容屏与电阻屏的区别、触控IC如何检测触摸点、坐标上报机制

好,我们直接进入正题。触控屏的工作原理,说白了就是搞清楚两件事:你手指碰没碰到,以及碰在哪儿。不同技术路线,答案完全不同。

我最早接触触控屏是在功能机时代,那时候电阻屏还是主流。后来转到电容屏项目,第一次调触控IC的坐标,发现数据跳得厉害——嗯,那又是另一个故事了。先看最基础的区别。

2.1 电容屏 vs 电阻屏:核心差异

这两种屏,市面上都还在用。但原理完全不同。

对比维度 电容屏 电阻屏
检测原理 人体电容耦合,改变电极间电场 压力使上下导电层接触,形成回路
输入方式 手指、电容笔(导电) 任何硬物(指甲、触控笔、手套)
多点触控 原生支持(互电容方案) 不支持(单点,模拟)
透光率 高(约90%) 低(约70-80%,多层膜)
耐用性 表面玻璃,耐磨 表面薄膜,易刮花
典型场景 智能手机、平板、车载 工业控制、POS机、旧式导航

一句话总结:电容屏靠“感应”,电阻屏靠“压”。你戴着手套操作不了电容屏,但电阻屏可以——前提是你舍得用力按。

我在一个工控项目里遇到过客户坚持要用电阻屏,理由是工人戴手套。但后来发现电阻屏用久了,表面膜磨损,坐标开始漂移。嗯,这就是选型时没想清楚寿命问题。

2.2 触控IC如何检测触摸点

触控IC,全称Touch Controller IC。它的任务就是扫描传感器,算出坐标,然后上报给主控。不同屏,检测方式完全不同。

2.2.1 电阻屏的检测方式

电阻屏结构很简单:两层透明导电层(ITO),中间用微小隔离点隔开。你按下去,两层接触,形成分压电路。

检测流程:

  1. X轴测量:在左右电极加电压,读取接触点的电压值,换算成X坐标。
  2. Y轴测量:切换上下电极加电压,读取Y坐标。
  3. ADC转换:模拟电压→数字值,通常10位或12位ADC。
  4. 上报:单点坐标,无压力信息(或通过接触电阻估算压力)。

避坑:电阻屏的ADC采样需要稳定时间。我曾经遇到过采样太快导致坐标抖动,最后在驱动里加了50ms的去抖延时才解决。

2.2.2 电容屏的检测方式

电容屏复杂得多。目前主流是互电容(Mutual Capacitance)方案。传感器是行列交叉的电极矩阵。

检测流程:

  1. 发射信号:驱动IC在行电极(Tx)上施加高频脉冲。
  2. 接收信号:列电极(Rx)检测耦合过来的电荷量。
  3. 基线校准:无触摸时,每个交叉点有一个基准电容值。
  4. 差值检测:手指靠近,电容变化(ΔC),接收端信号减弱。
  5. 坐标计算:对多个交叉点的ΔC做加权平均,算出精确坐标。

关键点:电容屏检测的是电容变化量,不是绝对值。所以环境温湿度变化、屏幕老化,都会影响基线。好的触控IC会做动态基线跟踪。

我记得有一次调试,屏幕在充电时坐标乱跳。查了半天,发现是充电器的共模噪声耦合到了触控传感器上。后来在PCB布局上把触控IC的电源和充电回路隔开,问题才解决。

2.3 坐标上报机制

触控IC算出了坐标,怎么告诉主控?这里涉及通信协议和上报策略。

2.3.1 通信接口

接口 速率 典型应用 特点
I²C 400kHz / 1MHz 手机、平板 引脚少,适合短距离
SPI 10MHz+ 大屏、高报点率 全双工,速率高
USB 12Mbps(全速) 外接触控屏 即插即用,HID协议

2.3.2 上报数据格式

以最常见的I²C接口为例,触控IC通常上报以下数据包:

// 典型触控IC上报数据结构(以Goodix GT911为例)
struct touch_report {
    uint8_t  status;       // 0x00: 无触摸, 0x01: 有触摸
    uint8_t  touch_count;  // 触摸点数(0-5)
    struct {
        uint16_t x;        // X坐标(0-屏幕宽度)
        uint16_t y;        // Y坐标(0-屏幕高度)
        uint8_t  size;     // 触摸面积(0-15)
        uint8_t  pressure; // 压力值(0-255,部分IC支持)
    } points[5];
    uint8_t  checksum;     // 校验和
};

注意:很多触控IC上报的坐标是原始ADC值,不是像素坐标。主控需要根据屏幕分辨率和触控传感器分辨率做线性映射。映射公式:pixel_x = raw_x * screen_width / sensor_max_x。这一步做不好,触摸偏移就来了。

2.3.3 上报策略

触控IC不是每时每刻都在发数据。常见策略有三种:

  • 中断触发上报:检测到触摸→拉高INT引脚→主控读取数据。最常用,省电。
  • 轮询上报:主控定时读取。适合低功耗场景,但实时性差。
  • 连续上报:触控IC主动以固定频率(如100Hz)推送数据。适合游戏等高刷新需求。

我个人习惯用中断触发。但要注意,中断服务程序里不要做太多计算,只做数据读取和标记,坐标计算放到任务线程里。否则容易丢中断。

2.4 核心流程总结:一张图看懂

下面这张图,把从触摸发生到坐标上报的完整链路画出来了。你仔细看一遍,后面讲偏移原因时,每个环节都可能出问题。

触控检测与坐标上报流程 触摸发生 手指/触控笔接触 传感器检测 电容/电阻变化 ADC采样 模拟→数字转换 坐标计算 加权平均/插值 数据打包 坐标+状态+校验 中断触发 INT引脚拉高 主控读取 I²C/SPI读取数据 坐标映射 ADC→像素坐标 上报系统 注意 每个环节都可能 引入偏移误差 ADC噪声、基线漂移 映射参数错误等

我的经验:调试触控偏移时,先别急着改算法。用示波器抓一下触控IC的INT引脚和I²C数据,确认数据链路是否正常。我遇到过三次“偏移”问题,最后发现是I²C上拉电阻虚焊导致数据错位。硬件基础不牢,软件再优化也没用。