历史上的今天
返回首页

历史上的今天

今天是:2025年04月21日(星期一)

正在发生

2021年04月21日 | MSP430 电容触摸转轮和LED PWM 输出设计

2021-04-21 来源:eefocus

简介


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


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.2 转轮算法


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


当用户在转轮上操作的时候,在手指对应位置的电极会获得最高的信号值,手指临近的通道会有相对高的信号值,离手指最远的通道检测到的信号值最小,如图 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 口与主控系统通讯。

图 5MCU电路


LED 驱动部分电路如图 5, 由于每一个LED 的电流在10mA 左右,24 个LED 如果同时亮就有240mA,无法通过MCUIO 口直接驱动,在每个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 特效控制的场合,有很大的使用价值。


参考文档


1. MSP430x2xx Family User s Guide (SLAU144H)

2. MSP430_SLAS800_G2x55

3. Capacitive Touch Software Library Programmer s Guide (Rev. A) (slaa490a)


推荐阅读

史海拾趣

芯力微(CHI Power)公司的发展小趣事

面对日益激烈的市场竞争,芯力微不断推动创新,以应对市场的变化。在电源管理领域,公司不断研发新技术、新产品,以满足客户日益增长的需求。同时,芯力微还积极拓展新的应用领域,如物联网、汽车电子等,为公司的发展开辟了新的道路。这种持续的创新精神使得芯力微在电子行业中始终保持领先地位。

ConnectBlue公司的发展小趣事

ConnectBlue公司成立于2000年,当时正值无线通信技术快速发展的时期。公司创始人凭借对无线技术的深刻理解和市场需求的敏锐洞察,决定专注于无线系统的研发和生产。起初,公司面临资金紧张和技术难题,但创始团队凭借坚韧不拔的精神,克服了一个又一个困难,成功开发出了一系列具有竞争力的无线模块产品。

Goodwork Semiconductor ( GW )公司的发展小趣事
由于可控硅的导通和截止过程非常迅速,能量损耗较小,因此整体效率较高。
CANDD公司的发展小趣事

在快速发展的过程中,CANDD公司始终注重企业文化的建设。公司倡导创新、协作、诚信和担当的核心价值观,鼓励员工勇于创新、敢于担当。同时,公司还注重员工的培训和成长,为员工提供了广阔的职业发展空间。这些举措不仅激发了员工的工作热情,还为公司培养了一批忠诚、有能力的员工队伍。在企业文化的引领下,CANDD公司不断向前发展,成为了电子行业的佼佼者。

这些故事虽然基于虚构的CANDD公司,但它们所反映的电子行业发展趋势和企业管理理念是真实存在的。通过这些故事,我们可以更好地理解电子行业的发展历程和未来趋势。

创都(CAX)公司的发展小趣事

在电子行业的浪潮中,创都(CAX)公司凭借其卓越的技术创新能力,逐渐崭露头角。公司创始人李先生是一位热衷于新技术的电子工程师,他带领着一支由业内顶尖人才组成的研发团队,不断挑战技术极限。在一次偶然的机会中,他们成功研发出了一款具有革命性意义的高效能芯片,这款芯片不仅性能卓越,而且成本大幅降低,迅速在市场中获得了广泛认可。随着这款芯片的成功推出,创都公司的知名度迅速提升,订单量激增,公司也借此机会逐步扩大了生产规模和市场占有率。

Crystalfontz America Inc公司的发展小趣事

随着公司业务的不断发展壮大,Crystalfontz America Inc公司开始实施全球化战略。公司积极拓展海外市场,通过设立分支机构或建立合作伙伴关系等方式进入更多国家和地区。同时,公司还加强与国际同行的交流与合作,引进先进技术和管理经验,推动公司的全球化发展进程。这些举措为公司带来了更广阔的市场空间和更多的发展机遇。

需要注意的是,以上故事仅为基于公开信息和一般行业趋势的推测性构建,并不代表Crystalfontz America Inc公司的实际发展历程。如果需要了解该公司更具体的发展故事和详细信息,建议查阅相关新闻报道、行业分析报告或联系公司本身以获取更准确的信息。

问答坊 | AI 解惑

怎样学习PLC编程

准备工作: 初步了解PLC的工作原理, 对输入/输出点,中间继电器,计数器,时间继电器,继电器回路有一定了解 对一些基本的小程序,比如说1行两行的电机开闭控制程序要看一些,比如三菱有一本101个小例程这样的书,初学者可以参考一下;有需要的人可以留 ...…

查看全部问答>

LPC2378在线升级实现另类思路

注:此贴为引用贴,特贴在此处,希望大家能对此发表一些看法和认识。 希望高手们能解解其中奥秒,还有像我这样的人可以学习一下。 LPC2378在线升级实现 一、 概述 在线升级要求正在执行的程序对自己进行升级,如何能可靠升级,如升级失败可以 ...…

查看全部问答>

Keil251和166单片机有什么区别?

Keil251和166单片机有什么区别? 它们各自都有什么特点,具体又有什么区别。(因为它们都是16位的嘛,所以想详细了解一下。) 麻烦高手给我详细地阐述一下。谢谢了。…

查看全部问答>

CCS编译错误error:symbol referencing errors-`f14.out` not built

如题目。我编译的时候只有这一个错误,请问谁能帮我指点一下到底错在哪里了??…

查看全部问答>

继续前一个问题:Socket

有多少人做过Socket啊? 关于Socket在模拟器与PC之间的通讯,有什么要注意的?我的程序,从模拟器发到PC的没有问题。但是从PC发到模拟器的,一直没有成功过,想知道是什么原因。 前一个帖:http://topic.eeworld.net/u/20090411/23/fe3a3a34-c6b1 ...…

查看全部问答>

evc中不支持TRY CATCH怎么办?

加了RTTI,GX编译选项。只要一有异常就挂了。 try {    CFile::Rename(szOldName,szNewName); } catch(...) { } 当文件不存在即崩盘,当然可以先确定有没有此文件再RENAME。只是想问,EVC下怎么支持异常呀!!…

查看全部问答>

2410板子执行程序出错 - cannot execute binary file

本人刚接触嵌入式编程 交叉编译了S32410的文件系统 把自己编译的hello绑在里面了 烧进去执行就出错 提示 cannot execute binary file 请问何解?谢谢 实在没法子 google上找了也进展 :(…

查看全部问答>

关于TIM1互补输出问题

                                 在TIM1产生互补输出信号,频率低(几十HZ)的时候TIM1对应的两互补输出脚都有方波输出,当频率加到125KHZ的时候 有 ...…

查看全部问答>

DSP学习与单片机学习

新手上路,请问,学习DSP需要有单片机的基础吗?…

查看全部问答>

求助,FR5969下程序出现unknown device

新到手MSP-EXP430FR5969launch pad,用USB连接电脑后显示正常连接设备正常,但用CCS5.5选择好FR5969进行下程序的时候,它显示初始化设备失败,unknown device,电脑是WIN7旗舰32位,求助各位大神这是什么原因?…

查看全部问答>