普通电阻触摸屏多点触摸低成本解决方 转载

   苹果公司iPhone的成功将多点触摸技术推到了一个前所未有的高度,经典的弹钢琴应用程序可以支持超过5点的同时触摸,虽然这一性能并不见得有太多的实用价值,但绝对带给了用户技术无限领先的震撼感。苹果公司的iPhone采用电容屏和他们的专利技术来实现对多点触摸的支持,价格自然不菲,但一点可以肯定,在支持的点数和性能稳定方面,目前还少有公司能在这方面挑战苹果的权威。

对于消费电子产品来说,流行就是硬道理,在iPhone大行其道的同时,一时间但凡是有触摸屏的产品,都想让自己通过多点触摸等特性与iPhone攀上亲戚关系,尤其是手机、MP4GPS等产品,仿苹果的心理更是急切。

苹果公司的技术虽然在性能方面无可挑剔,但过高的成本使得这项技术只适合iPhone之类的奢侈品,对于更多的触摸屏产品显然无法承受这一成本。正是这个原因,寻找一种更为便宜的多点触摸解决方案,成为众多技术人员的期望,本文在不增加其它硬件成本的前提下,基于普通四线电阻屏,提出一种低成本解决方案,能够在一定限制条件下可实现两点触摸的识别。

 

几种现有的多点触摸方案

1.硬件采用电容屏,通过软件实现多点触摸。优点是灵敏度高,性能稳定,支持的点数可满足绝对大部分应用需求;缺点是成本高,而且苹果有专利保护。

2.硬件采用数字电阻屏,实际上是用电阻屏的材料做成一个透明键盘矩阵,通过行列扫描判断所按下的点。优点是价格便宜,性能可靠,可支持的点数最多;不足是需要比较多的行列连线接口,不能实现手写功能。

3.硬件采用模拟电阻屏,在专用芯片中通过软件计算出多点触摸。优点是既能支持多点触摸,又保持手写功能,另外成本增加不多;缺点是支持的点数最少,方案商在实现细节上大都语焉不详,性能和稳定性尚待验证。

4.采用红外、表面超声波等方式实现触摸检测,实际应用比较少,这里不做探讨。

 

低成本多点触摸方案

毫无疑问,四线模拟电阻屏是触摸屏中成本最低的一种,如果我们能在这种屏的基础上找到一种实现多点触摸的方法,只要控制额外增加的硬件成本,成本上考虑能够有所突破的可能性最大。

虽然现在有不少MCU带有触摸屏接口,因为我们需要识别多点触摸,所以这类MCU的触摸屏接口并不适用,实际上方案的要求更简单,只需要选用MCU能提供4ADC口使用,另外再用4条双向IO进行控制。来看一下这种低成本方案的构成细节,图(一)中(d)部分为方案示意图,并不需要对电阻屏做出过多改动,只是在外围增加了两个电阻,这几乎是可以忽略不计的成本。

 

 

 

 

 

 

 

图(一)中(a)(b)(c)三部分对电阻触摸屏的原理做了简单示意,对单点触摸位置的识别方法这里不做详述,不清楚的朋友请自行查阅相关资料进行了解。单点触摸的识别只需要4条双向IO就可以实现,其中2条需要支持ADC功能,从图(一)中(d)部分可以看出方案做了一点修改,使用的IO口数量增加了一倍,另外还有两个电阻。

为便于分析,我们需要建立一个触摸屏工作的等效电路模型。因为触摸屏XY方向对触摸检测方法是一样的,所以我们只建立一个电路模型,图(二)展示了触摸屏按下一个点和两个点的状态。

 

 

 

 

 

 

 

图(二)标号说明:

R1R2IO口的输出电阻,只要知道它的存在,不用管具体大小;R3R4R5R64ADC口的输入电阻,阻值远大于其它电阻;R7R8R9为触摸屏的分段等效电阻,阻值总和为几百欧;R12R13R14为触摸屏另外一层的分段等效电阻,阻值总和为几百欧;R10R11为按下触摸屏时的接触电阻,阻值动态变化; K1K2表示按下触摸屏的位置。

R15为限流电阻,因为触摸屏的电阻通常为几百欧,普通IO驱动能力可能不够,所以用R15IO输出进行限流,R15对应图(一)中(d)部分R1R2

假定IO1输出高电平,IO2输出低电平, V1~V44ADC口测量到的电压。

触摸屏没有按下时,测量ADC1ADC2得到V1_0V2_0;触摸屏按下一点时,假设此时按下位置为K14ADC测量的电压为Vn_1;触摸屏按下两点时,4ADC测量的电压为Vn_2。忽略ADC口输入电阻的影响,这些电压会满足下面的关系。

V1_0=V1_1V2_0=V2_1

V3_1=V4_1=(V1_1-V2_1)*(R8+R9)/(R7+R8+R9)

(V1_1-V2_1)(V1_2-V2_2)

后一种关系式因为两点按下后会让与R1R2R15串联的触摸屏等效电阻变小,从而使得分在触摸屏两端的电压也变小。现在引入三个新参数L7L8L9,分别表示同标号电阻等效的触摸屏宽度,三者的总和等于触摸屏宽。另外还根据实际引入一个限制条件,当有两点被按下时,只要程序检测速度够快,对于程序来说就不会有同时按下的情况,始终都是依次按下或松开,这一点非常重要。

对于单点位置的检测不存在任何问题,现在我们来处理两点的情况,结合前面引入的限制条件,程序可以检测到中间有一小段时间是单点按下,也就是程序先检测到K1按下,经过一小段时间才检测到K2按下。这个中间过程可以准确得到K1位置,如果我们利用前后变化的比例关系,就可以计算出后面K2按下的位置。

K1单独按下:

L7=(L7+L8+L9)*(V1_1-V3_1) /(V1_1-V2_1)

K1K2同时按下(忽略R10R11的影响)

(V1_2-V3_2)/L7=(V4_2-V2_2)/L9

因为L7+L8+L9为已知条件触摸屏的宽度L,所以有:

L7=L*(V1_1-V3_1)/(V1_1-V2_1)

L9=(V4_2-V2_2)*L7/(V1_2-V3_2)

L9=L*(V4_2-V2_2)*(V1_1-V3_1)/((V1_1-V2_1)*(V1_2-V3_2))

到这里我们已经得到所按两点的具体位置,只要我们依照此方法对触摸屏的XY轴分别处理,就可以在普通电阻屏上实现两点触摸位置的检测。

 

方案的其它说明

前面的公式推导过程忽略了接触电阻R10R11的影响,这两个电阻的大小并不固定,主要由使用者按下的力度决定,按的力越大,其阻值越小。当只按下一个点时,所按力度的大小对K1位置的计算影响可以不用考虑,但对于两点的计算则要考虑其影响,按的力度越小,计算出来的K2位置误差就越大。这样在按下的过程中,会存在一个误差从大变小的过程,不过只要用力足够,最后还是保证误差在允许范围内。另外触摸屏并不是完全线性,这里是简化为线性关系。

该方案在两点按下时最好保持先按下的点位置不变动,这样可以保证计算结果更为精准。如果两点按下后需要移动,虽然通过比例关系也可以计算出运动轨迹,但误差会随之加大,这里也不做过多分析。松开的过程与按下相反,由两点按下变为一点按下,最后全松开。如果在精度上适度降低要求,在此方案的基础还可以利用三角形重心的原理进行第三点的判断,笔者进行的验证实验发现难点是需要考虑的组合情况偏多,从而导致判断程序复杂。

实际应用中还需要进行触摸屏是否按下的检测,这里不详述具体的检测方法,只是要留意为了防止触摸屏悬空状态的影响,可以在两端接一个比较大的电阻到地,建议用470k510k的阻值。

使用该方案除了具备普通电阻屏的基本功能,还可以实现对屏幕的拖动,用手指合分动作实现图像的缩放,对两个游戏功能键的同时控制。从成本上看除了需要另外增加4IO口外并无其它硬件开销,主要是通过软件计算来实现多点检测。该方案虽然性能上相较电容屏存在明显差距,但成本上占有绝对优势,对于一些对精度要求不高的应用还是具有一定的实用价值。

tp_sch.jpg


图(二) 触摸屏等效电路模型示意图

tp1.jpg


图(一) 低成本电阻触摸屏原理及方案示意图

转载于:https://www.cnblogs.com/armlinux/archive/2010/04/28/2397009.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gartner:2018年前沿技术预测

本文转载自科技中国,作者:孟海华(上海市科学学研究所),首发刊载于《科技中国》杂志2018年3月 第3期 预测。一、人工智能全球领先的信息技术研究与顾问公司Gartner认为,2018年将是人工智能大众化应用的开始,将影响到企业…

@font-face

问题描述: 产品展示的界面上有个产品编号,由后台程序动态生成,如图 而"875"的字体是特殊字体,如果客户端系统上没有安装该特殊字体,就达不到原设计效果。 解决办法(我认为的三种):1。通过FLASH实…

扎克伯格|在美国国会数据门听证会上的证词-中英文全文

来源:网络法前哨美国时间2018年4月10日至11日,Facebook公司CEO马克-扎克伯格(Mark Zuckerberg)将在美国国会就“剑桥分析丑闻”作证。4月10日,扎克伯格已经参加了美国参议院司法与商业委员会举行的听证会。4月11日&…

Scrapy-Link Extractors(链接提取器)

Link Extractors 中文文档:https://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/link-extractors.html Link Extractors 英文文档:http://doc.scrapy.org/en/latest/topics/link-extractors.html 利用爬虫Scrapy中的LinkExtractor(链接提取器…

Java8 Stream详解~Stream 创建

Stream可以通过集合数组创建。 1、通过 java.util.Collection.stream() 方法用集合创建流 List<String> list Arrays.asList("a", "b", "c"); // 创建一个顺序流 Stream<String> stream list.stream(); // 创建一个并行流 Strea…

一张图:AI领域里各领风骚的BAT三巨头

来源&#xff1a;网络大数据近日&#xff0c;国内人工智能初创企业商汤科技完成6亿美元融资&#xff0c;由阿里巴巴集团领投&#xff0c;创下目前为止人工智能领域最大的一笔单轮融资。其实在过去两年里&#xff0c;BAT(百度、阿里巴巴、腾讯)就已在人工智能领域里纷纷交出了漂…

Scrapy - Request 和 Response(请求和响应)

Requests and Responses&#xff1a;http://doc.scrapy.org/en/latest/topics/request-response.html Requests and Responses&#xff08;中文版&#xff09;&#xff1a;https://scrapy-chs.readthedocs.io/zh_CN/latest/topics/request-response.html 请求 和 响应 通常&am…

一篇文章了解生物特征识别六大技术

来源&#xff1a;赵松科学网博客生物识别技术&#xff0c;通过计算机与光学、声学、生物传感器和生物统计学原理等高科技手段密切结合&#xff0c;利用人体固有的生理特性&#xff08;如指纹、脸象、虹膜等&#xff09;和行为特征&#xff08;如笔迹、声音、步态等&#xff09;…

Java8 Stream详解~遍历/匹配(foreach/find/match)

Stream也是支持类似集合的遍历和匹配元素的&#xff0c;只是Stream中的元素是以Optional类型存在的。Stream的遍历、匹配非常简单。 // import已省略&#xff0c;请自行添加&#xff0c;后面代码亦是public class StreamTest {public static void main(String[] args) {List<…

Scrapy-Item Pipeline(项目管道)

Item Pipeline&#xff08;英文版&#xff09;&#xff1a;http://doc.scrapy.org/en/latest/topics/item-pipeline.html Item Pipeline&#xff08;中文版&#xff09;&#xff1a;https://scrapy-chs.readthedocs.io/zh_CN/latest/topics/item-pipeline.html Scrapy 1.3 文…

Java8 Stream详解~筛选:filter

筛选&#xff0c;是按照一定的规则校验流中的元素&#xff0c;将符合条件的元素提取到新的流中的操作。 「案例一&#xff1a;筛选出Integer集合中大于7的元素&#xff0c;并打印出来」 public class StreamTest {public static void main(String[] args) {List<Integer>…

《全球人工智能产业地图》发布(附PPT图片)

来源&#xff1a;中国信息通信研究院CAICT摘要&#xff1a;工业和信息化部、电子信息企业、人工智能企业、互联网企业、电信运营商、研究机构、社团组织、高校等代表参会&#xff0c;一致对《全球人工智能产业地图》表示高度肯定和认可。2018年4月10日&#xff0c;在工业和信息…

Java8 Stream详解~聚合(max/min/count)

max、min、count这些字眼你一定不陌生&#xff0c;没错&#xff0c;在mysql中我们常用它们进行数据统计。Java stream中也引入了这些概念和用法&#xff0c;极大地方便了我们对集合、数组的数据统计工作。 「案例一&#xff1a;获取String集合中最长的元素。」 public class S…

为何学习新知识这么难?因为大脑可能比你想象中更死板

来源&#xff1a;科研圈撰文 John Rennie 翻译 齐睿娟 审校 魏潇某些情况下&#xff0c;大脑的适应能力似乎是用之不竭的。但通过观察学习状态下的大脑活动&#xff0c;科学家们发现&#xff0c;这一过程中大脑的神经元网络功能出乎意料地死板和低效。学习能力是人类智力的…

vs2010 学习Silverlight学习笔记(8):使用用户控件

概要&#xff1a; 这个类似于封装控件样式。不过封装的是整个或是多个控件罢了&#xff0c;然后用的时候就可以直接引用过来了。 创建用户控&#xff1a; 这个也很简单&#xff0c;不过有几个地方需要注意下。这个就不照抄了&#xff0c;咱们也自己写一个。  步骤&#xff1a…

群雄逐鹿,谁将赢得5G时代的物联网战争?

来源&#xff1a;IT港摘要&#xff1a;5G时代的物联网机遇&#xff0c;是一次重大产业变革机会&#xff0c;谁都不想错过&#xff0c;但谁能享受到这波红利&#xff0c;我们还需拭目以待。日本首富&#xff0c;软银集团创始人孙正义是全球科技界的传奇&#xff0c;他曾投资了两…

Java8 Stream详解~映射(map/flatMap)

映射&#xff0c;可以将一个流的元素按照一定的映射规则映射到另一个流中。分为map和flatMap&#xff1a; map&#xff1a;接收一个函数作为参数&#xff0c;该函数会被应用到每个元素上&#xff0c;并将其映射成一个新的元素。 flatMap&#xff1a;接收一个函数作为参数&…

Scrapy-redis 源码分析 及 框架使用

From&#xff1a;https://blog.csdn.net/weixin_37947156/article/details/75044971 From&#xff1a;https://cuiqingcai.com/6058.html Scrapy-redis github&#xff1a;https://github.com/rmax/scrapy-redis scrapy-redis分布式爬虫框架详解&#xff1a;https://segmentfa…

Java8 Stream详解~归约(reduce)

归约&#xff0c;也称缩减&#xff0c;顾名思义&#xff0c;是把一个流缩减成一个值&#xff0c;能实现对集合求和、求乘积和求最值操作。 「案例一&#xff1a;求Integer集合的元素之和、乘积和最大值。」 public class StreamTest {public static void main(String[] args) …

人工智能除了创造新材料还能预测化学反应性能

来源&#xff1a; 材料牛摘要&#xff1a; 在材料化学领域人工智能也在发挥着越来越重要的作用&#xff0c;往往研究人员想尽脑汁做不出来的东西它可以经过成千上万次的计算给出最优答案。【引言】机器学习方法正在成为众多学科科学探究的一部分。 机器学习&#xff08;ML&…