MSP430电容触摸转轮和LED PWM输出设计

2015-03-14编辑:探路者 关键字:MSP430  LED  PWM
简介

电容触摸技术作为一种实用、时尚的人机交互方式,已经被广泛的应用到各种电子产品,小到电灯开关,大到平板电脑、触摸桌等。随之而来的是考验产品设计者如何发挥智慧,在把产品用户界面设计得方便简洁的同时,又能呈现产品绚丽的外观,从而带来良好的用户体验。

LED 显示由于界面友好,可以实时反映触摸的位置信息,在电容触摸产品设计中得到广泛应用。本设计正是利用了大量的LED 来实现呼吸灯、轨迹灯的特效,可以为例如灯光、音量、温度等带有调节功能的产品提供设计参考。

德州仪器的MSP430 系列单片机以低功耗和外设模块的丰富性而著称,而针对电容触摸应用,MSP430 的PIN RO 电容触摸检测方式支持IO 口直接连接检测电极,不需要任何外围器件,极大的简化了电路设计,而本设计文档中使用的MSP430G2XX5 更支持多达 32 个IO 口,可驱动24 个以上的LED 灯,达到理想的显示效果。

1. 电容触摸转轮实现方案

MSP430 电容触摸转轮方案通过4 个IO 口完成4 个通道的电容检测,配合特殊的电极图形,就可实现转轮的设计。

1.1 电容触摸实现原理

MSP430 根据型号的不同支持多种电容触摸检测方式,有RC 震荡、比较器、PIN RO,本设计使用的是PIN Relaxation Oscillator 方式,原理如图1,芯片管脚内部检测电路由施密特触发器、反向器,以及一个电阻组成,震荡信号经过施密特触发器变成脉冲信号,再通过反向器反馈回RC 电路,通过Timer_A对施密特触发器的输出进行记数,再通过设置测量窗口Gate 获得记数的结果。当手指触摸电极,电极上的C 产生变化,导致震荡频率改变,这样在定长的测量窗口就能获得不同的记数结果,一旦差值超过门限,结合一定的滤波算法判断就可以触发触摸事件。

 

 

图 1 PIN RO 原理图

1.2 转轮算法

将4 个按键电极按照图2 锯齿状交叉就形成了一个转轮的电极,转轮的大小根据产品设计的需要可进行适当的缩放,图 2 的图形设计适合30mm 左右直径的转轮。

 

 

图 2 转轮电极设计

当用户在转轮上操作的时候,在手指对应位置的电极会获得最高的信号值,手指临近的通道会有相对高的信号值,离手指最远的通道检测到的信号值最小,如图 3 所示:

 

 

图 3 手指触摸时不同电极上测量到的信号值

这时可以利用不同通道上信号值的不同计算出手指在转轮或滑条上的位置。位置计算步骤如下:

a. 用排序方法找出4 个电极中信号最大的电极

index = Dominant_Element(groupOfElements, &measCnt[0]);

b. 将找到的这个电极的信号加上相邻电极的信号

position = measCnt[index] + measCnt[index+1] + measCnt[index-1];

相加后的结果如果大于门限,就认为有触摸事件产生,继续后续的位置计算。把前后信号相加的原因是手指在操作的过程中有可能处于两个电极中间,这样两个电极上得到的信号都不会很高,需要把信号相加才可以与门限做比较。

c. 计算位置坐标时先根据筛选出的index 值得到一个大约的位置,再根据index 的相邻电极信号强度进行修正,得到最后的坐标值

position = index*(groupOfElements->points/groupOfElements->numElements);

position += (groupOfElements->points/groupOfElements->numElements)/2;

position += (measCnt[index+1]*(groupOfElements->points/groupOfElements->numElements))/100;

position -= (measCnt[index-1]*(groupOfElements->points/groupOfElements->numElements))/100;

d. 针对index 为0 或者3 的情况代码需要另外处理,不过计算方法和上述是一致的。

这里转轮的分辨率,即转轮一圈分为多少个段是根据points 设定的,假设用户只需要区分24 个位置,就可以设points 为24,当然也可以设为64,128,甚至更高,这取决于转轮的大小,电极图形的设计以及电极的多少,例如需要类似1024 这种高精度,需要增加电极数从4 个到8 个或者更多。

2. LED PWM 驱动方案实现

要实现LED 呼吸的效果,就要求LED 进行PWM 调光,而要实现轨迹灯的效果,每一路LED必须是独立的PWM 控制。

本应用由于使用了24 个LED 灯,需要24 路的PWM 输出控制,MSP430G2955 有32 个IO口,通过IO 口配合TIMER 定时器,足够支持24 路的软件PWM 输出。

3. 设计实例

本实例采用德州仪器MSP430G2955 ,通过6 个IO 完成电容触摸检测,24 个IO 驱动24路LED,并预留了通讯口。设计实例如图 4

 

 

图 4 实例演示图

3.1 电路设计

原理图设计如图 4, MCU 通过一个5V 转3.3V 的LDO 给VCC 供电,使用LDO 的目的是为了保证电源的稳定,让触摸电路在检测信号时不会因为电源的噪声产生过大的信号偏差。电极上串的电阻作为ESD 保护器件,如果在产品结构设计合理的情况下可以省去。电路中预留了UART 口与主控系统通讯。

 

 

图 5 MCU 电路

LED 驱动部分电路如图 5, 由于每一个LED 的电流在10mA 左右,24 个LED 如果同时亮就有240mA,无法通过MCU IO 口直接驱动,在每个LED 上加一个三极管以及限流电阻,实现24路LED 的控制。

 

 

图 6 LED 驱动电路

3.2 代码设计

3.2.1 LED驱动

在编写代码控制LED 点亮时序前,先定义好PWM 输出相关的规格:

• PWM 输出占空比设置为50%。

• 频率为5K Hz, 亮度的等级分为24 级,0 级的时候关闭LED, 23 的时候最亮。

• 使用2个TIMER 进行PWM 输出的控制

• TIMERA0 中断频率为24 X 5K Hz = 120K Hz.

• TIMERB中断间隔设为10ms,在TIMERB 中进行LED 亮度等级的改变

通过两个TIMER 的中断配合,就可以完成24 路独立PWM 输出的控制。当有触摸事件产生时,根据触摸位置对对应的LED 进行亮度等级赋值,然后在TIMERB 的中断中让亮度等级慢慢减少至零,这样就可以实现手指离开电极后,对应LED 慢慢变暗的效果。

在两个TIMER 中断里的程序流程图如下图 7 和图 8

 

 

图 7 TIMERB 流程图

 

 

图 8 TIMERA0 流程图

3.2.2 转轮

德州仪器的电容触摸软件库支持电容按键的信号检测以及转轮坐标的计算,通过软件库相关参数的配置以及函数的调用就可以得到当前触摸事件的位置值,可以参考德州仪器的触摸按键软件库( www.ti.com/capacitivetouch )获得详细介绍。

当用户在转轮上做滑动操作,LED 的轨迹显示应该是N 个灯同时被点亮,手指所在位置的灯最亮,之前滑过的轨迹上的灯一个比一个暗,N 的数值由操作者滑动的速度决定,如果滑的速度够快,24 个LED 灯会同时被点亮,只是亮度不同。

在滑动很快的操作时会带来一个问题,电容按键扫描的周期跟不上滑动的速度,导致坐标的变化不是连续的,结果就是LED 的轨迹不连贯,在连续的N 个LED 中有部分没有被点亮。为了解决这个问题需要在转轮坐标计算后加入一个插值算法,在用户操作过快的时候对被漏掉的坐标进行补值,使得LED 的轨迹连续。

插值的方法可以通过当前位置和上一次位置的比较,决定是否要进行插值,这里需要设置一个插值门限InterpolationThreshold,当位置跳动距离超过门限就不进行插值,反正误操作产生。

if((WheelPosition-LastPosition) {

for (j=1;j<=(WheelPosition-LastPosition+1);j++)

{

SetLightLevel(LastPosition+j);

}

}

除此之外,还需要对两个特殊情况做处理,及正向和反向滑动操作经过转轮坐标0 点。

4. 总结

本文介绍了使用MSP430G 系列单芯片实现电容触摸转轮和24 路独立PWM 输出LED 控制方案,在一些需要低成本的产品设计,又要对多种LED 特效控制的场合,有很大的使用价值。

关键字:MSP430  LED  PWM

来源: 互联网 引用地址:http://www.eeworld.com.cn/LED/2015/0314/article_11816.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:功能丰富的 LED 驱动器 IC 可用来实现大功率汽车 LED 前灯
下一篇:MCU学习之按键控制LED

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430G2553电子时钟实验

用msp430g2553控制1602液晶显示时间,并可以通过按键设置时间,我做了正计时和倒计时两种模式/*********************************************************************msp430g2553与1602引脚连接情况* PIN1 --> 地* PIN2 --> VCC(一定要接+5V)* PIN3 -->仿真时悬空,实际电路 2K电阻-->地 (电阻可以是500-2k的,改变电阻可以改变字符显示的亮度,电阻接不好会导致什么都不显示)* PIN4 --> RS --> P1.6* PIN5 --> R/W -->
发表于 2018-07-14

msp430按键控制LED灯

#include "io430.h"/*       按键控制lLED灯的亮灭,有两种方法.       方法一:中断功能.                          方法二:利用 if(P4IN&BIT2)判断即可.       写代码时,尽量按照步骤来,避免因疏忽而浪费大量时间找bug.*/int main( void ){ 
发表于 2018-07-14

MSP430G2553 1602显示字符

代码:# include "msp430G2553.h"# define uchar unsigned char # define uint unsigned int # define LCD1602_RS_H  P2OUT|=BIT0# define LCD1602_RS_L  P2OUT&=~BIT0# define LCD1602_RW_H  P2OUT|=BIT1# define LCD1602_RW_L  P2OUT&=~BIT1# define LCD1602_EN_H  P2OUT|=BIT2# define LCD1602_EN_L
发表于 2018-07-14

MSP430G2253 产生占空比可调的PWM

最近刚刚做了一个用430驱动白光LED的代码   其中用到了以前用到的ADC和PWA这些常用的外设  发现对片子掌握的还是太基础 现在复习一下  以后用到的时候也算有个参考 今天就只学习一点最基本的功能 用430产生一个占空比可调的PWM  先说一下步骤:1:首先我们要知道那个引脚可以作为定时PWM的输出引脚 如果不太熟悉引脚 就去查阅册  2:配置这个IO  这种情况下 无论那个系列的片子 基本作为PWM输出的时候 IO配置为输    出 选择其端口复用功能 详细配置  看手册3:设置PWM的周期  TACCR0 或者CCR0
发表于 2018-07-14

MSP430G2553串口通讯 发送接收

数据发送代码:void UartPutchar(unsigned char c){while(!(IFG2 & UCA0TXIFG));  //待发送为空UCA0TXBUF=c;IFG2 &=~UCA0RXIFG;}只需要将那个buf变量的值改变即可接收数据#pragma vector=USCIAB0RX_VECTOR__interrupt void USCI0RX_ISR(void){while (!(IFG2&UCA0TXIFG));                // 等待发送完成//UCA0TXBUF
发表于 2018-07-14

msp430f149通过蓝牙HC-05与手机通

前面一篇实现蓝牙HC-05、06与单片机的连接及与手机通信的总结中详细介绍了蓝牙与STC系列MCU的连接与配置,这次将msp430f149通过UART1与蓝牙HC-05连接,并实现与手机通信作简单总结。通信效果:发送一段字码,蓝牙接收到后自动返回。             msp430f149是一款比较常用的16位单片机,拥有两个串口模块,UART0(RXD:P11,TXD:P22)和UART1(RXD:P37,TXD:P36)。通常UART0较为常用,可用作BSL下载,或用作串口(蓝牙)通信。最近试了下UART1,觉得将他
发表于 2018-07-14
msp430f149通过蓝牙HC-05与手机通

小广播

颜工专栏

LED专区

现任华润矽威科技(上海)有限公司市场部经理/高工,上海市传感技术学会理事、副秘书长。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved