当前位置: 首页 > news >正文

基于Microchip单片机的触摸感应技术

 Microchip提供两种电容式触摸感应解决方案,一种为张驰振荡器方式,即通过检测触摸感应电容充放电的频率变化,来检测是否有键按下,根据单片机集成的硬件资源不同,另一种通过Microchip单片机集成的片上充电时间检测单元(CTMU)实现。

本文引用地址:http://www.eepw.com.cn/article/96101.htm

  简单RC振荡方式

  这种方式比较适合一个按键情况,通过集成模拟比较器的PIC10F204或PIC10F206实现触摸感应功能,用到的硬件资源为模拟比较器和Timer0定时器。图1为电路图,上电时,触摸感应电容Cp没有充电,比较器输出高电平,通过D1给电容迅速充电至接近VDD,之后比较器翻转,输出低电平,Cp通过R1放电,直至低于内部参考电压0.6V,比较器翻转输出高,进入下一个振荡周期。将比较器输出送给Timer0,作为时基,经过固定的软件延时,读出Timer0的值,可以计算出比较器输出频率。当手指接触按键时,电容值改变,随之比较器输出频率改变,读出的Timer0的值发生变化,从而检测到有触摸动作。

  带SR锁存器的比较器方式

  利用PIC16F61X、PIC16F690和PIC16F88X系列内部集成的模拟比较器具有SR锁存器功能,配合Timer0和Timer1,可以方便的实现触摸感应检测。这类器件在不进行外部模拟通道扩展情况下,可以直接支持4路触摸感应检测。

  如图2所示,Cs表示触摸感应对地电容,触摸感应直接与单片机片内比较器反相输入端相连,比较器C1采用内部大约2/3VDD作为参考电压,C2采用外部电阻分压,获得1/4VDD电压。当上电时,Cs上电压为0,C2输出为1,C1输出为0,SR锁存器反相端输出为1,通过电阻对Cs充电;当Cs电压超过1/4VDD,C2输出为0,SR锁存器保持原来输出状态。当Cs充电超过2/3VDD时,C1输出为1,SR锁存器反相端输出由1变为0,Cs通过电阻放电,当Cs放电电压低于2/3VDD时,C1输出为0,SR锁存器保持原来输出状态。当Cs放电电压低于1/4VDD时,C2输出为1,SR锁存器反相端输出为1,通过电阻对Cs充电,开始一个新的周期。这样Cs反复充放电,电容电压为锯齿波,SR锁存器输出为同频率方波。

  有触摸时,Cs变大,改变了RC电路的时间常数,SR锁存器输出的方波频率随之发生改变。将SR锁存器输出的方波信号送给Timer1作为时基,每一次Timer0溢出中断,中断程序中读出Timer1寄存器的值即代表对应频率,频率是否变化即代表是否有触摸动作。

  容性传感模块(CSM)方式

  PIC16F72X系列集成了CSM,这个模块具有恒定的拉灌电流能力,能够直接驱动容性负载(PCB焊盘),在触摸感应电容上形成连续振荡的三角波,CSM输出同频率的方波,方波信号可以提供给Timer0或Timer1做时基,通过Timer2中断读出相对应的计数值,即代表对应频率。这种方式电路非常简单,可以直接将焊盘连接到CSM输入对应的引脚。

相关文章:

  • 11g 新特性IGNORE_ROW_ON_DUPKEY_INDEX提示
  • sed-awk-正则表达式
  • CSS 漂亮搜索框美化代码
  • UVA136 Ugly Numbers
  • nginx反向代理目录及动静分离
  • 一个C#语言编写Windows服务的例子:强制杀死高内存占用的进程
  • 实用的dhcp及dhcp中继服务案例实现
  • Android初级进阶之Shape
  • BUG1 解决java compiler level does not match the version of the installed java project facet
  • RHEL7/CentOS7 NTP开机无法启动的解决方法
  • 学习Css补充知识点
  • 磁盘目录占用空间计算排序工具 - ncdu
  • [ERROR]-Error: failure: repodata/filelists.xml.gz from addons: [Errno 256] No more mirrors to try.
  • 系统负载:如何判断Linux load的值是否过高
  • 数据操作类 SQLHelper.cs
  • centos安装java运行环境jdk+tomcat
  • Java 多线程编程之:notify 和 wait 用法
  • mysql_config not found
  • nodejs:开发并发布一个nodejs包
  • Rancher-k8s加速安装文档
  • Redis在Web项目中的应用与实践
  • Twitter赢在开放,三年创造奇迹
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • webpack入门学习手记(二)
  • 解决iview多表头动态更改列元素发生的错误
  • 设计模式 开闭原则
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 突破自己的技术思维
  • 新手搭建网站的主要流程
  • 用简单代码看卷积组块发展
  • const的用法,特别是用在函数前面与后面的区别
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​flutter 代码混淆
  • ​决定德拉瓦州地区版图的关键历史事件
  • #宝哥教你#查看jquery绑定的事件函数
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (day6) 319. 灯泡开关
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (汇总)os模块以及shutil模块对文件的操作
  • (转) Face-Resources
  • (转)负载均衡,回话保持,cookie
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 表达式计算:Expression Evaluator
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • @ComponentScan比较
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [Android] 240204批量生成联系人,短信,通话记录的APK