2、触控屏工作原理:电容屏与电阻屏的区别、触控IC如何检测触摸点、坐标上报机制
好,我们直接进入正题。触控屏的工作原理,说白了就是搞清楚两件事:你手指碰没碰到,以及碰在哪儿。不同技术路线,答案完全不同。
我最早接触触控屏是在功能机时代,那时候电阻屏还是主流。后来转到电容屏项目,第一次调触控IC的坐标,发现数据跳得厉害——嗯,那又是另一个故事了。先看最基础的区别。
2.1 电容屏 vs 电阻屏:核心差异
这两种屏,市面上都还在用。但原理完全不同。
| 对比维度 | 电容屏 | 电阻屏 |
|---|---|---|
| 检测原理 | 人体电容耦合,改变电极间电场 | 压力使上下导电层接触,形成回路 |
| 输入方式 | 手指、电容笔(导电) | 任何硬物(指甲、触控笔、手套) |
| 多点触控 | 原生支持(互电容方案) | 不支持(单点,模拟) |
| 透光率 | 高(约90%) | 低(约70-80%,多层膜) |
| 耐用性 | 表面玻璃,耐磨 | 表面薄膜,易刮花 |
| 典型场景 | 智能手机、平板、车载 | 工业控制、POS机、旧式导航 |
一句话总结:电容屏靠“感应”,电阻屏靠“压”。你戴着手套操作不了电容屏,但电阻屏可以——前提是你舍得用力按。
我在一个工控项目里遇到过客户坚持要用电阻屏,理由是工人戴手套。但后来发现电阻屏用久了,表面膜磨损,坐标开始漂移。嗯,这就是选型时没想清楚寿命问题。
2.2 触控IC如何检测触摸点
触控IC,全称Touch Controller IC。它的任务就是扫描传感器,算出坐标,然后上报给主控。不同屏,检测方式完全不同。
2.2.1 电阻屏的检测方式
电阻屏结构很简单:两层透明导电层(ITO),中间用微小隔离点隔开。你按下去,两层接触,形成分压电路。
检测流程:
- X轴测量:在左右电极加电压,读取接触点的电压值,换算成X坐标。
- Y轴测量:切换上下电极加电压,读取Y坐标。
- ADC转换:模拟电压→数字值,通常10位或12位ADC。
- 上报:单点坐标,无压力信息(或通过接触电阻估算压力)。
避坑:电阻屏的ADC采样需要稳定时间。我曾经遇到过采样太快导致坐标抖动,最后在驱动里加了50ms的去抖延时才解决。
2.2.2 电容屏的检测方式
电容屏复杂得多。目前主流是互电容(Mutual Capacitance)方案。传感器是行列交叉的电极矩阵。
检测流程:
- 发射信号:驱动IC在行电极(Tx)上施加高频脉冲。
- 接收信号:列电极(Rx)检测耦合过来的电荷量。
- 基线校准:无触摸时,每个交叉点有一个基准电容值。
- 差值检测:手指靠近,电容变化(ΔC),接收端信号减弱。
- 坐标计算:对多个交叉点的Δ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 核心流程总结:一张图看懂
下面这张图,把从触摸发生到坐标上报的完整链路画出来了。你仔细看一遍,后面讲偏移原因时,每个环节都可能出问题。
我的经验:调试触控偏移时,先别急着改算法。用示波器抓一下触控IC的INT引脚和I²C数据,确认数据链路是否正常。我遇到过三次“偏移”问题,最后发现是I²C上拉电阻虚焊导致数据错位。硬件基础不牢,软件再优化也没用。