1. 触摸屏工作原理:电阻屏与电容屏的物理原理、坐标采集方式、ADC转换过程
做触摸校准算法,你得先摸透触摸屏是怎么工作的。说白了,校准算法就是在修正物理层带来的误差。如果连屏怎么报坐标都不清楚,那校准就是瞎调。
我最早接触触摸屏是在一个工控项目上,用的还是四线电阻屏。那时候年轻,觉得不就是点一下嘛,结果被非线性误差折腾了好几个通宵。嗯,从那以后我就养成了一个习惯——先看物理原理,再写代码。
1.1 电阻触摸屏:靠压力吃饭的老将
电阻屏的原理其实很简单。你想想看,它就像个三明治:两层透明导电层中间夹着微小的隔离点。上面那层是软的,下面那层是硬的。你用手指或者笔尖一按,上层就弯下去,跟下层碰在一起了。
核心要点:电阻屏检测的是物理接触,不是手指的电容。所以戴手套、用笔尖、甚至用信用卡都能操作。这在工业环境里特别实用。
坐标是怎么采的?
电阻屏的坐标采集分两步走:
- X轴测量:在左右两端的导电层上加电压(比如5V)。上层作为探针,检测接触点的电压值。电压越高,说明触点越靠右。
- Y轴测量:切换方向,在上下两端加电压。下层作为探针,检测接触点的电压值。电压越高,说明触点越靠下。
我习惯把这个过程叫做「分时复用」。同一套物理结构,通过切换驱动和检测的角色,先后读出X和Y坐标。
ADC转换过程
检测到的电压是模拟量,得转成数字量才能给CPU用。这里就需要ADC(模数转换器)了。
| 参数 | 典型值 | 说明 |
|---|---|---|
| ADC分辨率 | 10位 ~ 12位 | 10位对应0~1023,12位对应0~4095 |
| 参考电压 | 5V 或 3.3V | 决定了电压测量的满量程范围 |
| 采样率 | 100 ~ 500 kHz | 太快了会引入噪声,太慢了跟不上触摸速度 |
举个例子,假设ADC是12位的,参考电压3.3V。如果检测到电压是1.65V,那ADC输出就是2048。这个原始值就是坐标的「生数据」,还没经过校准。
我曾经踩过的坑:电阻屏的ADC采样值会有抖动。尤其是当触摸压力不够或者屏表面有污渍时,连续采样的值能跳几十个LSB。后来我加了个简单的滑动滤波(取5次平均值),问题就解决了。别一上来就上卡尔曼,先试试最土的办法。
1.2 电容触摸屏:靠感应吃饭的新秀
电容屏现在满大街都是,手机、平板、车载屏全是它。它的原理跟电阻屏完全不同——它不靠压力,靠的是电容变化。
你想想看,人体本身就是一个导体。当你手指靠近屏幕时,手指和屏幕之间的导电层会形成一个寄生电容。这个电容虽然很小(几皮法级别),但足够被检测电路捕捉到。
两种主流结构
- 表面电容式:四个角加电压,检测电流变化。结构简单,但只能识别单点触摸。
- 投射电容式:用ITO(氧化铟锡)蚀刻出横竖交错的电极矩阵。每个交叉点就是一个检测单元。这才是现在的主流。
我个人更喜欢投射电容式,因为它支持多点触摸。你在手机上双指缩放,靠的就是这个技术。
坐标采集方式
电容屏的坐标采集比电阻屏复杂一些。它用的是扫描法:
- 驱动芯片逐行给X电极(发射极)施加激励信号。
- Y电极(接收极)逐列检测电容变化。
- 检测到电容变化最大的那个交叉点,就是触摸位置。
- 如果有多个触摸点,芯片会分别记录每个点的坐标。
这里有个关键点:电容屏的原始坐标是「插值」出来的。因为手指接触的是一个区域,不是精确的一个点。芯片会检测到多个相邻交叉点的电容变化,然后通过算法算出重心位置。
避坑指南:电容屏在潮湿环境下容易误报。我曾经在一个户外项目中遇到过——下雨天,屏幕上的水珠被识别成了触摸点。后来我们在软件里加了面积过滤:如果检测到的触摸区域太大(超过正常手指的3倍),就判定为水珠,直接丢弃。
1.3 电阻屏 vs 电容屏:怎么选?
很多刚入行的朋友问我:到底用哪种屏?我的回答是:看场景。
| 对比项 | 电阻屏 | 电容屏 |
|---|---|---|
| 触发方式 | 压力(必须接触) | 感应(可接近) |
| 多点触摸 | 不支持(最多两点) | 支持(10点以上) |
| 耐用性 | 一般(膜层易磨损) | 好(玻璃面板) |
| 成本 | 低 | 高 |
| 适用环境 | 工业、医疗、户外 | 消费电子、车载 |
我个人的经验是:如果设备需要戴手套操作,或者环境有油污、水滴,优先选电阻屏。如果追求用户体验、支持手势操作,那就选电容屏。
1.4 本章知识体系总览
下面这张图把电阻屏和电容屏的核心差异、坐标采集流程、ADC转换关系串起来了。我建议你把它存下来,后面讲校准算法时会反复用到这些概念。
好了,这一章就讲到这里。你只要把电阻屏的「分时复用+ADC采样」和电容屏的「矩阵扫描+插值计算」这两个核心逻辑吃透,后面讲校准算法时就不会觉得突兀了。