1. 触摸屏基础原理:电阻屏与电容屏的工作逻辑
做嵌入式UI这么多年,我接触过各种各样的触摸屏。说实话,很多校准问题追根溯源,都是对触摸屏基础原理理解不够深。你想想看,如果连屏幕怎么知道你点在哪都不清楚,那偏移了自然也不知道从何下手。
这一节,我们就从最底层把触摸屏的底牌翻出来看看。
1.1 电阻屏:靠压力吃饭的老将
电阻屏的原理其实特别简单。它有两层导电薄膜,中间用微小的绝缘点隔开。你用手指或者触控笔一按,上层薄膜就压下去,跟下层接触上了。这时候控制器检测到电压变化,就能算出位置。
核心要点:电阻屏检测的是物理接触点,跟你的手指是不是导电没关系。戴着手套、用笔帽、甚至用指甲都能操作。
坐标映射关系是这样的:
- X轴:在左右两端施加电压,通过检测分压点位置得到X坐标
- Y轴:在上下两端施加电压,通过检测分压点位置得到Y坐标
- 原始值通常是0~4095(12位ADC)或0~1023(10位ADC)
我在一个工业手持设备项目里遇到过这种情况——电阻屏用了半年后,屏幕边缘开始出现偏移。拆开一看,是那层导电薄膜边缘被压出了褶皱。嗯,这里要注意,电阻屏的机械结构决定了它一定会磨损,这是物理规律,躲不掉的。
1.2 电容屏:靠电场感应吃饭的新贵
电容屏就不一样了。它表面有一层透明的电极图案,通电后形成静电场。你的手指是导电的,一靠近就会改变局部电场。控制器检测到电容变化,就知道你摸哪了。
说白了,电容屏根本不需要你压下去,轻轻一碰就行。这也是为什么现在手机都是电容屏——体验好太多了。
个人习惯:我一般在项目选型阶段就会问清楚——产品要不要支持手套操作?要不要支持湿手操作?如果答案是“要”,那就老老实实用电阻屏,别在电容屏上死磕。
电容屏的坐标映射比电阻屏复杂一些:
- 原始数据来自多个感应通道的电容变化量
- 控制器内部会做插值算法,算出亚像素级别的坐标
- 输出坐标范围通常跟屏幕分辨率对齐(比如1024×600)
1.3 坐标映射关系:从物理点到像素点
不管电阻屏还是电容屏,触摸控制器输出的原始坐标,跟屏幕像素坐标之间不是一一对应的。这里有个映射关系需要搞清楚。
| 参数 | 电阻屏 | 电容屏 |
|---|---|---|
| 原始坐标范围 | 0~4095(12位) | 与分辨率对齐或更高 |
| 线性度 | 较好,但边缘有非线性 | 出厂已校准,线性度好 |
| 温漂 | 明显,温度变化影响大 | 较小 |
| 老化偏移 | 机械磨损导致 | 几乎无机械磨损 |
映射公式其实就是一个线性变换:
// 触摸坐标到屏幕坐标的线性映射
screen_x = (touch_x - x_min) * screen_width / (x_max - x_min)
screen_y = (touch_y - y_min) * screen_height / (y_max - y_min)
我曾经在一个项目里发现,电阻屏的x_min和x_max会随着温度变化漂移几十个ADC值。如果不做动态校准,屏幕边缘的触摸点就会偏出去。这就是为什么很多设备开机时要你点一下四个角——它在重新标定边界。
1.4 触摸屏接口协议:I2C与SPI
触摸控制器跟主控芯片之间怎么通信?主流方案就两种:I2C和SPI。
I2C接口
- 两根线:SCL(时钟)、SDA(数据)
- 速度:标准模式100kHz,快速模式400kHz,高速模式3.4MHz
- 地址:每个设备有7位或10位地址
- 优点:引脚少,适合引脚紧张的设计
- 缺点:速度相对慢,多设备共享总线时可能有延迟
避坑指南:我曾经在一个项目里把触摸屏的I2C总线和传感器的I2C总线挂在了一起。结果触摸屏频繁报错,查了半天才发现是传感器在批量读取数据时占用了总线太久,导致触摸屏的中断响应超时。后来我学乖了——触摸屏的I2C总线,尽量独立,别跟其他设备共享。
SPI接口
- 四根线:SCLK(时钟)、MOSI(主出从入)、MISO(主入从出)、CS(片选)
- 速度:通常10MHz~50MHz,远快于I2C
- 全双工:可以同时收发数据
- 优点:速度快,适合高刷新率场景
- 缺点:引脚多,占用的GPIO资源多
我个人习惯是:如果屏幕刷新率要求超过60Hz,或者触摸数据量比较大,就选SPI。如果只是普通的界面交互,I2C完全够用,还能省几个引脚。
1.5 知识体系总览
下面这张图把这一节的核心逻辑串起来了。你可以把它当作一个思维导图来看。
这张图把触摸屏的三大核心维度——类型、坐标映射、接口协议——串在了一起。你往后做校准时,不管遇到什么问题,都可以回到这张图上找根因:是类型导致的物理偏移?是映射参数没算对?还是接口通信出了问题?
嗯,基础原理就讲到这里。这些东西看着简单,但真到项目里踩坑的时候,你会发现最值钱的就是这些底层认知。