硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3059|回复: 1
收起左侧

[LTDC] 电阻屏的2点和4点触摸校准原理,基于我们的bsp_ts_touch.c

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2020-7-24 08:53:06 | 显示全部楼层 |阅读模式
2点触摸校准:

    由于不同电阻触摸板的线性度参差不齐,不能直接采用比例关系将电阻触摸芯片STMPE811的返回

    值转换成实际的坐标。比如我们操作的显示屏分辨率是800*480,电阻触摸芯片采用STMPE811(12位ADC,触摸值范围0-4095),获得当前的触摸值是(1024, 2048),按照比例关系转换成坐标值就是(1024*800/4096,2048*800/4096),即(200,400)。采用这种方法效果不好,容易出现点击不准确的问题。

   鉴于此原因,需要通过触摸校准在ADC数值和显示屏分辨率之间建立一个新的线性关系,简单的说就是由比例关系y = ax升级为y = ax + b。如果有了新的触摸ADC数值,代入这个线性关系里面就可以得到当前实际的坐标值,触摸校准的作用就在这里了。
具体实现原理图如下:

   在左上角和右下角分别设置两个坐标点(LcdX0,  LcdY0)和(LcdX1,  LcdY1),然后让用户去点击,会得到两组ADC数值(AdcX0,AdcY0)和(AdcX1,  AdcY1)。

1.png

根据这四个坐标点,可以建立两组方程,一个X轴的,一个Y轴。

将数值(AdcX0, LcdX0)和(AdcX1,  LcdX1)代入方程y = ax + b得到X轴方程 :
y = (x - AdcX0)*(LcdX1 - LcdX0)/(AdcX1 - AdcX0) + LcdX0。

将数值(AdcY0, LcdY0)和(AdcY1,  LcdY1)代入方程y = ax + b得到Y轴方程
y = (x - AdcY0)*(LcdY1 - LcdY0)/(AdcY1 - AdcX0) + LcdY0。

后面采集到的ADC数值直接代入上面公式就可以得到校准后的物理坐标值(实际的分辨率坐标)。


4点触摸校准

4点触摸校准实现,略复杂,实现原理如下(如果理解起来麻烦的话,会用就行,一般情况下2点校准就行):

在LCD的左上角,右上角,左下角和右下角分别标坐标点(LcdX1,  LcdY1),(LcdX4, LcdY4),(LcdX3,  LcdY3)和(LcdX2, LcdY2)。然后让用户去点击,会得到四组ADC数值(AdcX1, AdcY1),(AdcX4,  AdcY4),(AdcX3, AdcY3)和(AdcX2, AdcY2)。

2.png

计算X轴:
1.        将数值(AdcX1,AdcY1)和(AdcX2, AdcY2)代入方程y = ax + b得到一组方程
y = (x - AdcX1)*(AdcY2- AdcY1)/(AdcX2- AdcX1) + AdcY1

2.        这里将AdcX2用AdcX3替换,那么坐标方程就变为
y = (x - AdcX1)*(AdcY2- AdcY1)/(AdcX3- AdcX1) + AdcY1。

3.        同理,将AdcX1用AdcX4替换,那么坐标方程就变为
y = (x - AdcX4)*(AdcY2- AdcY1)/(AdcX3- AdcX4) + AdcY1。
那么将采集的X值代入上面两个方程会得到两个数值,假设数值是x1和x2。

4.        再将(x1,  LcdX1))和(x2,  LcdX2)代入方程y = ax + b得到一组方程
y = (x - x1)*(LcdX2- LcdX1)/(x2- x1) + LcdX1。

将采集的X轴ADC数值再次代入这个方程就得到了最终的物理坐标(实际的分辨率坐标)。

计算Y轴:
1.        将数值(AdcX1, AdcY1)和(AdcX2,  AdcY2)代入方程y = ax + b得到一组方程
y = (x - AdcX1)*(AdcY2- AdcY1)/(AdcX2- AdcX1) + AdcY1

2.        这里将AdcY2用AdcY4替换,那么坐标方程就变为
y = (x - AdcX1)*(AdcY4- AdcY1)/(AdcX2- AdcX1) + AdcY1

3.        同理,将AdcX1用AdcX3替换,那么坐标方程就变为
y = (x - AdcX3)*(AdcY2- AdcY1)/(AdcX2- AdcX3) + AdcY1
那么将采集的X值代入上面两个方程会得到两个数值,假设数值是x1和x2。

4.        再将(x1, LcdY1))和(x2,  LcdY2)代入方程y = ax + b得到一组方程
y = (x - x1)*(LcdY2- LcdY1)/(x2- x1) + LcdY1。

将采集的Y轴ADC数值再次代入这个方程就得到了最终的物理坐标(实际的分辨率坐标)。




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
 楼主| 发表于 2020-7-24 08:55:08 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 20:18 , Processed in 0.282844 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表