RO 电容检测 : 其原理就是测震荡电路频率, 关键参数在电容 ----C1 的充放电,R5 和 C1 构成一阶 RC 震荡电路 比较器的输入电压时随着输出电压变化而变化的, 而比较器负输入端电压是由 C1 充放电决定 通过计算可以发现, 电容电压在 1/3VCC-2/3VCC 之间反复变化 其震荡

Similar documents
Microsoft Word - MSP430 Launchpad 指导书.docx

MSP430单片机简介

untitled

bingdian001.com

untitled

GH1220 Hall Switch

MSP430 Launchpad 指导书

学习MSP430单片机推荐参考书

邏輯分析儀的概念與原理-展示版

第 1 章 MSP430 快速入门 因为最近转入 MPS430 的技术支持工作, 所以现在开始学习 430 的开发 由于之前用过 51, 也用过 TI 的 ARM CORTEX-M3, 但是就是没有用过 TI 的 430, 所以将 我学习 430 的过程写出来, 给像我一样之前没有 430 开发经验

P4i45GL_GV-R50-CN.p65

BC04 Module_antenna__ doc

(3)ADC12Ó¦Ó÷¶Àý

MSP430x11x1 T A -40 ~ SOWB 20 TSSOP (DW) (PW) MSP430F110IDW MSP430F110IPW MSP430F112IDW MSP430F112IPW + F11x 30kΩ

Microsoft Word - AP1515V02

USB解决方案.ppt

MSP430

议程 介绍 Value Line 系列 Code Composer Studio CPU 与基本时钟模块 中断与 GPIO Timer_A 与 WDT+ MSP430 低功耗设计 ADC10 和 Comparator_A+ 串行通信模块 Grace 电容式触摸按键解决方案

目录

Cube20S small, speedy, safe Eextremely modular Up to 64 modules per bus node Quick reaction time: up to 20 µs Cube20S A new Member of the Cube Family

Microsoft PowerPoint - ATF2015.ppt [相容模式]

Microsoft Word - MSP_430学习笔记.doc

MICROCHIP EVM Board : APP APP001 PICmicro Microchip APP001 40pin PDIP PICmicro Design Tips Character LCM Temperature Sensor Application I/O Pi

SPHE8202R Design Guide Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provi

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L

MSP430F KB+256B flash 10KB RAM 64 Quad Flat Pack QFP MSP430x1xx SLAU049 MSP430 MSP RISC CPU 16 DCO 6 MSP430x15x/16x/161x A/D 12 D/A

1 TPIS TPIS 2 2

ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplica

AN INTRODUCTION TO PHYSICAL COMPUTING USING ARDUINO, GRASSHOPPER, AND FIREFLY (CHINESE EDITION ) INTERACTIVE PROTOTYPING

甄試報告1125.PDF

TX-NR3030_BAS_Cs_ indd

版本说明书

Pin Configurations Figure2. Pin Configuration of FS2012 (Top View) Table 1 Pin Description Pin Number Pin Name Description 1 GND 2 FB 3 SW Ground Pin.

行业

行业

Microsoft Word - MAN2011A_CH_RTT.doc

P4V88+_BIOS_CN.p65

Microsoft PowerPoint - STU_EC_Ch08.ppt

untitled

Microsoft PowerPoint - STU_EC_Ch07.ppt

LH_Series_Rev2014.pdf

P4VM800_BIOS_CN.p65

Chroma 61500/ bit / RMS RMS VA ()61500 DSP THD /61508/61507/61609/61608/ (61500 ) Chroma STEP PULSE : LISTLIST 100 AC DC

Microsoft Word - IRFWX-A124_A_SM59D03G2_SM59D04G2_PCA_ APN_SC_.doc

穨2700使用手冊.doc

audiogram3 Owners Manual

Microsoft Word - ML63S_8.doc

第三章 3.5 Flash 使用的代码样例 #include "msp430g2553.h" /**************************************************** g2553 有 4 个数据段, 每个数据段有 64bytes, 共 256bytes D:0x10

同步网络中的高性能线卡时钟解决方案

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

行业

ESD.xls


Guide to Install SATA Hard Disks

AL-MX200 Series


775i65PE_BIOS_CN.p65

C语言的应用.PDF

STM32 for sensorless vector control

a b c d e f g C2 C1 2

/ 212ºF (100ºC) 2 UL CR2032 DL Wave SoundTouch SoundTouch SoundTouch Bose / 3 Bose Corporation 1999/5/EC 32ºF (0 C) 113

ARM JTAG实时仿真器安装使用指南

行业

PTS7_Manual.PDF

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

FM1935X智能非接触读写器芯片

<4D F736F F D C4EAC0EDB9A4C0E04142BCB6D4C4B6C1C5D0B6CFC0FDCCE2BEABD1A15F325F2E646F63>

P4Dual-915GL_BIOS_CN.p65

FILTRON 1. DC AC AC 220V 50HZ / / / / 4. 1) / DC AC FILTRON DC AC FILTRON DC 12V 12VDC D

Gerotor Motors Series Dimensions A,B C T L L G1/2 M G1/ A 4 C H4 E

V6800/V6600 3D

51 C 51 isp 10 C PCB C C C C KEIL

Measurement Studio Expands Your Test and Measurement Programming Power

SA-DK2-U3Rユーザーズマニュアル

AL-M200 Series

PIC_SERVER (11) SMTP ( ) ( ) PIC_SERVER (10) SMTP PIC_SERVER (event driven) PIC_SERVER SMTP 1. E-

untitled

untitled

2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM

RF & MICROWAVE COMPONENTS

2

iml v C / 0W EVM - pplication Notes. IC Description The iml8683 is a Three Terminal Current Controller (TTCC) for regulating the current flowin

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

作业四:

iml v C / 4W Down-Light EVM - pplication Notes. IC Description The iml8683 is a Three Terminal Current Controller (TTCC) for regulating the cur

1.ai

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

RAID RAID 0 RAID 1 RAID 5 RAID * ( -1)* ( /2)* No Yes Yes Yes A. B. BIOS SATA C. RAID BIOS RAID ( ) D. SATA RAID/AHCI ( ) SATA M.2 SSD ( )

Gerolor Motors Series Dimensions A,B C T L L G1/2 M8 G1/ A 4 C H4 E

行业

K7VT2_QIG_v3

穨良導絡值與驗診壓力之關聯研究

Outline Speech Signals Processing Dual-Tone Multifrequency Signal Detection 云南大学滇池学院课程 : 数字信号处理 Applications of Digital Signal Processing 2

查询 MSP430F110 供应商 捷多邦, 专业 PCB 打样工厂,24 小时加急出货 Low Supply Voltage Range 1.8 V to 3.6 V Ultralow-Power Consumption: Active Mode: 200 µa at 1 MHz, 2.2 V S

Edge-Triggered Rising Edge-Triggered ( Falling Edge-Triggered ( Unit 11 Latches and Flip-Flops 3 Timing for D Flip-Flop (Falling-Edge Trigger) Unit 11

MSP430 MSP430 F149 MSP430F149 P USART MSP430F PWM 63#

FM1935X智能非接触读写器芯片

EK-STM32F

Transcription:

硬件检测电路原理 : Capitiactive Touch Pad 3 种常见电容检测电路介绍 :1.RC 检测, 基本趋于淘汰, 灵敏度低,2.RO 外部震荡, 外围需要一些电阻电容, 加大 PCB 体积,3.PinOsc with internal RO, 外部只需挂一个电容

RO 电容检测 : 其原理就是测震荡电路频率, 关键参数在电容 ----C1 的充放电,R5 和 C1 构成一阶 RC 震荡电路 比较器的输入电压时随着输出电压变化而变化的, 而比较器负输入端电压是由 C1 充放电决定 通过计算可以发现, 电容电压在 1/3VCC-2/3VCC 之间反复变化 其震荡频率和比较器输出频率保持一致, 这样, 通过检查比较器输出波形的频率就可以知道我们输入电容的容值 当输入电容发生变化的同时, 输出频率也会改变 :

利用该原理可以在 MSP430 外搭若干 RC 电路和内部比较器可以完成比较器方波频率的检测 或者利用 PinOsc with internal RO 方式, 只需在 MSP430 IO PIN 外挂一个可变电容来检测方波频率, 其原理利用了一个施密特触发器和一个反相器构成一个震荡电路, 同样是检测电容充放电时间! 电容不一样, 后级输出频率不一样! NE555 内部正好由一个施密特触发器和反相器构成的一个集成芯片, 短接 P2 和 P6 外挂一电容, 并且把 555 输出反馈回输入管脚, 构成一震荡电路,C2 上的波形如下所示 :

从硬件仿真上可看出, 随着外部电容的变化, 内部方波的频率也在变化 MSP430 Pin Oscillator 简介 : 以下是在 MSP430G2542 User Guide 截取的部分说明 : Some MSP430 devices have a pin oscillator function built-in to some pins. The pin oscillator function may be used in capacitive touch sensing applications to eliminate external passive components. Additionally,the pin oscillator may be used in sensor applications.no external components to create the oscillation Capacitive sensors can be connected directly to MSP430 pin Robust, typical built-in hysteresis of ~0.7 V. When the pin oscillator function is enabled, other pin configurations are overwritten. The output driver is turned off while the weak pullup/pulldown is enabled and controlled by the voltage level on the pin itself.the voltage on the I/O is fed into the Schmitt trigger of the pin and then routed to a timer. The connection to the

timer is device specific and, thus, defined in the device-specific data sheet. The Schmitt-trigger output is inverted and then decides if the pullup or the pulldown is enabled. Due to the inversion, the pin starts to oscillate as soon as the pin oscillator pin configuration is selected. Some of the pin-oscillator outputs are combined by a logical OR before routing to a timer clock input or timer capture channel. Therefore, only one pin oscillator should be enabled at a time. The oscillation frequency of each pin is defined by the load on the pin and by the I/O type. I/Os with analog functions typically show a lower oscillation frequency than pure digital I/Os. See the devicespecific data sheet for details. Pins without external load show typical oscillation frequencies of 1 MHz to 3 MHz 这是从 datasheet 上 GPIO 部分截取描述具有电容检测功能 IO 引脚的介绍, 通过配置 Px.xSEL 管脚 (es: 把 P1.6 设置为电容检测引脚 P1SEL &= ~BIT6; P1SEL2 = BIT6; 相应引脚的第二功能设置见 datasheet slas722e P38), 使能电容检测硬件, 到此, 触摸屏的硬件设计工作已经全部完成 软件设计 : MSP430 软件的目的性很明确, 就是测量方波的主频, 怎么检测? 继续看上图, 假设我们硬件已经设计完成, 现在我们也配置好了 MSP430 Pin Oscillator 管脚, 方波的输出在哪里? 下面这张图出自 User guide Timer A 原理说明

首先来下 TIMERA 的时钟源 :TAxCLK 是定时器时钟, 定时器时钟的选择我们可以通过配置寄存器 TASSELx, 一般我们不会用到 INCLK 这路时钟, 而在电容检测上, 使能内部 OSC 输入, 就会在 MSP430 内部史密斯触发器后端产生 INLCK 信号, 其频率即为外部电容和内部上拉电阻构成的 RC 震荡电路的频率 现在我们需要检测这个时钟的频率, 如何做到? Timer A 我们作为一个捕获模块使用,TAR 作为脉冲计数器,INCLK 作为 Timer A 时钟,CCR1 记录电平跳变时 TAR 的值 我们利用另外一个定时器 ( 一般使用看门狗 ), 定一段时间, 定时到后, 人为制造一个由低到高的电平跳变让,CCR1 来记录 TAR 跑了多少,TAR 数字就是这段时间内 INCLK 脉冲的个数, 利用这个办法可以变相记录频率问题!!!! 下面以一个图总结下记录电容频率的过程 :

Caution: 在理解上面的基础之上, 有些东西需要我们思考 : 1. 看门狗定时多长合适, 是否存在 TAR 在从 0-65536 计满数之后又从 0 开始计数才触发捕获 2. 没有触摸时,CCR1 捕获的值是否稳定, 触摸发生时,CCR1 会处于什么数值范围 3. 合适的阈值 4. 按键按下时 CAP 是频率增加还是减少? 相信大家根据上面的东西能设计出自己的触摸按键是没有问题了, 但是如何设计一个稳定, 在各种复杂环境下能使用的的触摸按键, 或者滑轮按键,TI 提供一套完整的解决方案,TI 提供一套触摸按键 lib, 里面的软件完全开源, 而且已经封装成 API 函数, 我们只需调用相应函数即可实现单按键, 多按键, 滑调按键识别过程 Lib 的使用说明见 SLAA490 April 2011, 大家可在 TI 官网上找到 (http://focus.ti.com/docs/toolsw/folders/print/capsenselibrary.html.) 这是 Lib 的层次介绍图, 详细可结合 TI Launchpad touch sense 实验!

下面附上自己编写的触摸按键代码 :( 在 Lauchpad 上需要稍作修改 ) #include "msp430g2102.h" unsigned int counts[2]; unsigned int Count_Baseline[2]; unsigned int threshold[2] = 1000,300; unsigned int TouchFlag[2]; void LED_Test(void) if(touchflag[0]==1) P1OUT = BIT4; else P1OUT &= ~BIT4; if(touchflag[1]==1) P1OUT = BIT5; else P1OUT &= ~BIT5; void Osc_pin(void) P1OUT = 0x00; P1DIR = (BIT0 +BIT4 +BIT5); P2SEL &= ~(BIT6 + BIT7); GPIO P2OUT = 0x00; P2DIR = 0xFF; // Clear Port 1 bits // Set P1.0 as output pin // Configure XIN (P2.6) and XOUT (P2.7) to // Drive all Port 2 pins low // Configure all Port 2 pins outputs // P1SEL &= ~BIT6; // P1.2,P1.6 配置为电容检查引脚 // P1SEL2 = BIT6; void Touch_Init(void)

unsigned int i; for(i=0;i<2;i++) if(i==0) P1SEL &= ~BIT6; P1SEL2 = BIT6; // 触摸管脚选择 //P1.6 配置为电容检查引脚 P1SEL &= ~BIT2; P1SEL2 &= ~BIT2; else if(i==1) P1SEL &= ~BIT2; P1SEL2 = BIT2; //P1.2 配置为电容检查引脚 P1SEL &= ~BIT6; P1SEL2 &= ~BIT6; TA0CTL = TASSEL_3+MC_2; // TACLK, cont mode TA0CCTL1 = CM_3+CCIS_2+CAP; // Pos&Neg,GND,Cap IE1 = WDTIE; // enable WDT interrupt WDTCTL = WDTPW+WDTTMSEL+WDTSSEL+WDTIS1+WDTIS0; // 看门狗作为定时器使用, 时钟设为 ACLK,64 分频 ( 门限 ) TA0CTL = TACLR; // Clear Timer_A TAR bis_sr_register(lpm3_bits+gie); // Wait for WDT interrupt TA0CCTL1 ^= CCIS0; // 人为创造一个由低到高的电平跳变 counts[i] = TA0CCR1; // 捕获计数脉冲数即 RCO 电容振荡次数 WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer void Touch_Update(unsigned int average) unsigned int temp,i; unsigned int Count_Baseline_temp[2]; for(i=0;i<2;i++) // 基值更新

for(temp=0;temp<average;temp++) Touch_Init(); Count_Baseline_temp[i] = counts[i]; Count_Baseline[i] = Count_Baseline[i]/2 + Count_Baseline_temp[i]/2; void Touch_Anys(void) // 有手触摸, 计数器值减小 int tempcnt[2],detal,temp,i; for(i=0;i<2;i++) Touch_Init(); tempcnt[i] = counts[i]; if(tempcnt[i]) // 电容是否起振 detal = tempcnt[i] - Count_Baseline[i]; //detal 记录该次和闸值的差 if( detal >= 0 ) //detal 大于 0 if(detal <= threshold[i]) //detal 小于门限更新闸值基准 Count_Baseline[i] = Count_Baseline[i] + detal/2; TouchFlag[i] = 0; else if (detal > threshold[i]) //detal 大于门限置位标识符 TouchFlag[i] = 1; else if( detal < 0 ) //detal 小于 0 temp = -detal; detal = temp; if(detal <= threshold[i]) Count_Baseline[i] = Count_Baseline[i] - detal/2; TouchFlag[i] = 0; else if (detal > threshold[i]) TouchFlag[i] = 1;

void main(void) // Initialize System Clocks WDTCTL = WDTPW + WDTHOLD; BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; // Stop watchdog timer // Set DCO to 1, 8, 12 or 16MHz BCSCTL2 = DIVS_2; // divide SMCLK by 4 for 250khz UCLK = 250K BCSCTL3 = LFXT1S_2; // LFXT1 = VLO ACLK = LFO = 12K Osc_pin(); Touch_Init(); Count_Baseline[0] = counts[0]; Count_Baseline[1] = counts[1]; Touch_Update(5); while(1) Touch_Anys(); LED_Test(); #pragma vector=wdt_vector interrupt void watchdog_timer(void) bic_sr_register_on_exit(lpm3_bits); 度 // 看门狗定时器长度即为窗口长