微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > MSP430电容触摸转轮和LED PWM输出设计

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

时间:01-26 来源:3721RD 点击:

驱动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%。

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

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

• TIMERA0中断频率为24X5KHz=120KHz.

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

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

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

图7 TIMERB流程图

图8 TIMERA0流程图

3.2.2 转轮

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

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

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

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

if((WheelPosition-LastPosition)< InterpolationThreshold)
{
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)

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top