历史上的今天
返回首页

历史上的今天

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

正在发生

2021年03月03日 | MSP430电容触摸转轮和LED PWM输出

2021-03-03 来源: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 PIN RO 原理图


1.2 转轮算法


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



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


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


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 特效控制的场合,有很大的使用价值。


推荐阅读

史海拾趣

EMI Filter Company公司的发展小趣事

Murata是一家历史悠久的电子元器件公司,他们早在电子设备发展的初期就认识到了EMI滤波器的重要性。随着电子产品的不断小型化,Murata看到了小型化EMI滤波器的巨大市场需求。他们通过与多家科研机构和高校合作,成功研发出了一系列高性能、小型化的EMI滤波器。这些滤波器不仅性能优越,而且体积小巧,非常适合用于现代电子设备中。Murata因此赢得了大量的市场份额,并成为了EMI滤波器领域的佼佼者。

Digi International公司的发展小趣事

Digi International成立于1985年,最初是一家位于明尼苏达州的公司。随着业务的不断发展,公司于1989年进行了首次公开募股,并随后重组为特拉华州的公司。Digi International在纳斯达克全球精选市场上交易,股票代码为DGII。这一转型不仅为公司带来了更多的资金支持,也为其后续的发展奠定了坚实的基础。

CIF公司的发展小趣事

D公司始终坚持品质至上的经营理念,以提供高品质的电子产品为己任。在CIF交易模式下,D公司严格控制产品质量,从原材料采购到生产流程中的每一个环节都进行严格把关。凭借出色的产品质量和良好的售后服务,D公司赢得了客户的信任和好评。

Ericsson公司的发展小趣事

在19世纪70年代,Ericsson公司主要以修理电报机和其他电器仪表为主要业务。然而,随着电话技术的引入和普及,Ericsson敏锐地捕捉到了这一新技术带来的商机。公司创始人Lars Magnus Ericsson通过购买、拆解和维修电话机,迅速掌握了电话机制造技术。1878年,Ericsson公司成功推出了自己的电话机,并凭借其经济耐用的特点迅速赢得了市场认可,为公司的发展奠定了坚实的基础。

HB公司的发展小趣事

背景:Fritz Hartmann Gerätebau KG成立于1961年,起初专注于电子元器件的研发与生产。随着技术的不断积累和市场的逐步拓展,公司业务逐渐壮大,并更名为Hartmann Codier GmbH。这一时期,公司凭借对开关技术的深刻理解,逐步在行业内建立了良好的声誉。

发展:在初创阶段,Hartmann Codier GmbH致力于提升产品质量和技术水平,通过不断的技术创新和产品优化,逐渐在旋转编码开关和微动开关领域占据了一席之地。同时,公司也积极拓展国内外市场,为后续的快速发展奠定了坚实的基础。

CETC公司的发展小趣事

随着电子行业的快速发展,CETC意识到单打独斗难以应对市场的快速变化。于是,公司积极寻求与其他企业的合作,共同推动产业的发展。在与某知名通信设备制造商的合作中,CETC提供了先进的电子元件和解决方案,双方共同开发出了多款畅销产品,实现了市场的共赢。这种合作模式不仅提升了CETC的市场竞争力,也促进了整个电子行业的健康发展。

问答坊 | AI 解惑

面向MFC造型的汽车覆盖件模具设计

4.在汽车覆盖件模具设计中引入并行工程思想  4.1.并行工程的概念      并行工程是相对于以往串行生产技术而提出的一种新的产品设计、制造模式,美国防务分析研究所在1988年12月提出了对并行工程的定义 ...…

查看全部问答>

NVE公司产品指导书!与大家分享!

NVE公司产品指导书!与大家分享!美国NVE品牌采用尖端巨磁阻技术研发的超高速数字隔离器资料,相比传统得光耦器件,美国NVE产品在传送波特率、封装体积、使用寿命上都有了阶越性的提高。     2007年诺贝尔物理学奖颁给了GMR技术 ...…

查看全部问答>

请问大家是如何选择存储芯片的.

我现在想做一个设备记录现场温度的. 正在选择数据存储芯片. 每条数据的格式大概是:年月日时分秒温度。一天大概需要记录300条数据。要求数据要保存30天以上。请大家帮忙。…

查看全部问答>

实验六、模数转换

实验六、模数转换一、实验目的 1、掌握模数转换芯片TLC5620的接口技术。 2、掌握模数转换芯片TLC5620的编程方法。 二、实验内容 编写程序实现下列要求: 1、 通过SW输入8位数值,由TLC5620变为模拟电压输出,记录数值与对应的对应关系。 2 ...…

查看全部问答>

PB编译错误

Error: Module USB.exe built for I386, kernel built for Thumb Fatal error hit, exiting... makeimg: FATAL ERROR: Command returned non-zero exit code 1 (dec). makeimg: FATAL ERROR: Command returned non-zero exit code 1 (dec). 请 ...…

查看全部问答>

ARM汇编向存储器保存数据

程序实现对DCD申请的一片数组内的数据进行冒泡排序 但是在程序内循环截止向存储保存数据时出现了差错 首地址的数值一直不能被保存住,也就是说单步时能看见它的变化,但是在执行下一行时就不行了,数据又变回来了! ;冒泡排序法实现 N EQU 10 &n ...…

查看全部问答>

請問有關SimWriteMessage這隻程序的問題

請問一下各位高手!! 小弟在調用到這隻程序時 就會一直返回下面的錯誤訊息 E_INVALIDARG   (0x80070057L) 再找了下文章之後 發現像是SimSetLockingStatus 這類的 這也是特權API 所以想請教一下~~   有沒有高手可以 ...…

查看全部问答>

reset要运行的汇编文件是哪个??

我从论坛上得知,系统上电启动,休眠唤醒,和reset引脚来了有效信号,这三种情况下,系统都先运行reset的那段汇编程序,里面有判断是哪种情况下的reset的。 那个汇编文件究竟是哪个文件夹里的哪个文件??谢谢…

查看全部问答>

关于嵌入式C语言的一个语法问题!!请教各位高手!!

#define WrUTXH1(ch) (*(volatile unsigned char *)(0x1d04023))=(unsigned char)(ch) 请各位大侠帮忙解析这语句的结构,我没看懂。帮个忙,谢谢!…

查看全部问答>

带CAN的stm32大概多少钱?

                                 评估一下,看看能不能用…

查看全部问答>