新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430電容觸摸轉(zhuǎn)輪和LED PWM輸出設(shè)計(jì)

MSP430電容觸摸轉(zhuǎn)輪和LED PWM輸出設(shè)計(jì)

作者: 時(shí)間:2017-06-04 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://www.butianyuan.cn/article/201706/348096.htm

摘要

本應(yīng)用文檔介紹了使用微控制器實(shí)現(xiàn)和多路獨(dú)立LED的PWM軟件驅(qū)動(dòng)技術(shù)。方案通過4路I/O 端口實(shí)現(xiàn)控制,I/O端口配合三極管驅(qū)動(dòng)LED,實(shí)現(xiàn)LED呼吸、軌跡燈等效果。本方案為需要控制和LED跟蹤顯示等絢麗燈效的產(chǎn)品提供了有效的低成本方案。

簡介

電容觸摸技術(shù)作為一種實(shí)用、時(shí)尚的人機(jī)交互方式,已經(jīng)被廣泛的應(yīng)用到各種電子產(chǎn)品,小到電燈開關(guān),大到平板電腦、觸摸桌等。隨之而來的是考驗(yàn)產(chǎn)品設(shè)計(jì)者如何發(fā)揮智慧,在把產(chǎn)品用戶界面設(shè)計(jì)得方便簡潔的同時(shí),又能呈現(xiàn)產(chǎn)品絢麗的外觀,從而帶來良好的用戶體驗(yàn)。


LED顯示由于界面友好,可以實(shí)時(shí)反映觸摸的位置信息,在電容觸摸產(chǎn)品設(shè)計(jì)中得到廣泛應(yīng)用。本設(shè)計(jì)正是利用了大量的LED來實(shí)現(xiàn)呼吸燈、軌跡燈的特效,可以為例如燈光、音量、溫度等帶有調(diào)節(jié)功能的產(chǎn)品提供設(shè)計(jì)參考。


德州儀器的系列單片機(jī)以低功耗和外設(shè)模塊的豐富性而著稱,而針對(duì)電容觸摸應(yīng)用,的PIN RO電容觸摸檢測方式支持IO口直接連接檢測電極,不需要任何外圍器件,極大的簡化了電路設(shè)計(jì),而本設(shè)計(jì)文檔中使用的MSP430G2XX5更支持多達(dá)32個(gè)IO口,可驅(qū)動(dòng)24個(gè)以上的LED燈,達(dá)到理想的顯示效果。

1.電容觸摸轉(zhuǎn)輪實(shí)現(xiàn)方案

MSP430電容觸摸轉(zhuǎn)輪方案通過4個(gè)IO口完成4個(gè)通道的電容檢測,配合特殊的電極圖形,就可實(shí)現(xiàn)轉(zhuǎn)輪的設(shè)計(jì)。


1.1 電容觸摸實(shí)現(xiàn)原理

MSP430根據(jù)型號(hào)的不同支持多種電容觸摸檢測方式,有RC震蕩、比較器、PIN RO, 本設(shè)計(jì)使用的是PIN Relaxation Oscillator方式,原理如圖1,芯片管腳內(nèi)部檢測電路由施密特觸發(fā)器、反向器,以及一個(gè)電阻組成,震蕩信號(hào)經(jīng)過施密特觸發(fā)器變成脈沖信號(hào),再通過反向器反饋回RC電路,通過Timer_A對(duì)施密特觸發(fā)器的輸出進(jìn)行記數(shù),再通過設(shè)置測量窗口Gate獲得記數(shù)的結(jié)果。當(dāng)手指觸摸電極,電極上的C產(chǎn)生變化,導(dǎo)致震蕩頻率改變,這樣在定長的測量窗口就能獲得不同的記數(shù)結(jié)果,一旦差值超過門限,結(jié)合一定的濾波算法判斷就可以觸發(fā)觸摸事件。

圖1 PIN RO原理圖


1.2 轉(zhuǎn)輪算法

將4個(gè)按鍵電極按照?qǐng)D2鋸齒狀交叉就形成了一個(gè)轉(zhuǎn)輪的電極,轉(zhuǎn)輪的大小根據(jù)產(chǎn)品設(shè)計(jì)的需要可進(jìn)行適當(dāng)?shù)目s放,圖2的圖形設(shè)計(jì)適合30mm左右直徑的轉(zhuǎn)輪。

圖2 轉(zhuǎn)輪電極設(shè)計(jì)


當(dāng)用戶在轉(zhuǎn)輪上操作的時(shí)候,在手指對(duì)應(yīng)位置的電極會(huì)獲得最高的信號(hào)值,手指臨近的通道會(huì)有相對(duì)高的信號(hào)值,離手指最遠(yuǎn)的通道檢測到的信號(hào)值最小,如圖3所示:

圖3 手指觸摸時(shí)不同電極上測量到的信號(hào)值


這時(shí)可以利用不同通道上信號(hào)值的不同計(jì)算出手指在轉(zhuǎn)輪或滑條上的位置。位置計(jì)算步驟如下:


a.用排序方法找出4 個(gè)電極中信號(hào)最大的電極


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


b.將找到的這個(gè)電極的信號(hào)加上相鄰電極的信號(hào)


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


相加后的結(jié)果如果大于門限,就認(rèn)為有觸摸事件產(chǎn)生,繼續(xù)后續(xù)的位置計(jì)算。 把前后信號(hào)相加的原因是手指在操作的過程中有可能處于兩個(gè)電極中間,這樣兩個(gè)電極上得到的信號(hào)都不會(huì)很高,需要把信號(hào)相加才可以與門限做比較。


c.計(jì)算位置坐標(biāo)時(shí)先根據(jù)篩選出的index 值得到一個(gè)大約的位置,再根據(jù)index 的相鄰電極信號(hào)強(qiáng)度進(jìn)行修正,得到最后的坐標(biāo)值


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.針對(duì)index為0或者3的情況代碼需要另外處理,不過計(jì)算方法和上述是一致的。


這里轉(zhuǎn)輪的分辨率,即轉(zhuǎn)輪一圈分為多少個(gè)段是根據(jù)points設(shè)定的,假設(shè)用戶只需要區(qū)分24個(gè)位置,就可以設(shè)points為24,當(dāng)然也可以設(shè)為64,128,甚至更高,這取決于轉(zhuǎn)輪的大小,電極圖形的設(shè)計(jì)以及電極的多少,例如需要類似1024這種高精度,需要增加電極數(shù)從4個(gè)到8個(gè)或者更多。


2.LED PWM驅(qū)動(dòng)方案實(shí)現(xiàn)

要實(shí)現(xiàn)LED呼吸的效果,就要求LED進(jìn)行PWM調(diào)光,而要實(shí)現(xiàn)軌跡燈的效果,每一路LED必須是獨(dú)立的PWM控制。
本應(yīng)用由于使用了24個(gè)LED燈,需要24路的PWM輸出控制,MSP430G2955有32個(gè)IO口,通過IO口配合TIMER定時(shí)器,足夠支持24路的軟件PWM輸出。

3.設(shè)計(jì)實(shí)例

本實(shí)例采用德州儀器MSP430G2955,通過6個(gè)IO完成電容觸摸檢測,24個(gè)IO驅(qū)動(dòng)24路LED,并預(yù)留了通訊口。 設(shè)計(jì)實(shí)例如圖4

圖4 實(shí)例演示圖


3.1 電路設(shè)計(jì)

原理圖設(shè)計(jì)如圖4, MCU通過一個(gè)5V轉(zhuǎn)3.3V的LDO給VCC供電,使用LDO的目的是為了保證電源的穩(wěn)定,讓觸摸電路在檢測信號(hào)時(shí)不會(huì)因?yàn)殡娫吹脑肼暜a(chǎn)生過大的信號(hào)偏差。電極上串的電阻作為ESD保護(hù)器件,如果在產(chǎn)品結(jié)構(gòu)設(shè)計(jì)合理的情況下可以省去。電路中預(yù)留了UART口與主控系統(tǒng)通訊。

圖5 MCU電路


LED驅(qū)動(dòng)部分電路如圖5,由于每一個(gè)LED的電流在10mA左右,24個(gè)LED如果同時(shí)亮就有240mA,無法通過MCU IO口直接驅(qū)動(dòng),在每個(gè)LED上加一個(gè)三極管以及限流電阻,實(shí)現(xiàn)24路LED的控制。

圖6 LED驅(qū)動(dòng)電路

3.2 代碼設(shè)計(jì)

3.2.1 LED驅(qū)動(dòng)

在編寫代碼控制LED點(diǎn)亮?xí)r序前,先定義好PWM輸出相關(guān)的規(guī)格:


• PWM輸出占空比設(shè)置為50%。


• 頻率為5KHz, 亮度的等級(jí)分為24級(jí),0級(jí)的時(shí)候關(guān)閉LED,23的時(shí)候最亮。


• 使用2個(gè)TIMER進(jìn)行PWM輸出的控制。

• TIMERA0中斷頻率為24X5KHz=120KHz.


• TIMERB中斷間隔設(shè)為10ms,在TIMERB中進(jìn)行LED亮度等級(jí)的改變。


通過兩個(gè)TIMER的中斷配合,就可以完成24路獨(dú)立PWM輸出的控制。當(dāng)有觸摸事件產(chǎn)生時(shí),根據(jù)觸摸位置對(duì)對(duì)應(yīng)的LED進(jìn)行亮度等級(jí)賦值,然后在TIMERB的中斷中讓亮度等級(jí)慢慢減少至零,這樣就可以實(shí)現(xiàn)手指離開電極后,對(duì)應(yīng)LED慢慢變暗的效果。


在兩個(gè)TIMER中斷里的程序流程圖如下圖7和圖8

圖7 TIMERB流程圖

圖8 TIMERA0流程圖



3.2.2 轉(zhuǎn)輪

德州儀器的電容觸摸軟件庫支持電容按鍵的信號(hào)檢測以及轉(zhuǎn)輪坐標(biāo)的計(jì)算,通過軟件庫相關(guān)參數(shù)的配置以及函數(shù)的調(diào)用就可以得到當(dāng)前觸摸事件的位置值,可以參考德州儀器的觸摸按鍵軟件庫獲得詳細(xì)介紹。


當(dāng)用戶在轉(zhuǎn)輪上做滑動(dòng)操作,LED的軌跡顯示應(yīng)該是N個(gè)燈同時(shí)被點(diǎn)亮,手指所在位置的燈最亮,之前滑過的軌跡上的燈一個(gè)比一個(gè)暗,N的數(shù)值由操作者滑動(dòng)的速度決定,如果滑的速度夠快,24個(gè)LED燈會(huì)同時(shí)被點(diǎn)亮,只是亮度不同。


在滑動(dòng)很快的操作時(shí)會(huì)帶來一個(gè)問題,電容按鍵掃描的周期跟不上滑動(dòng)的速度,導(dǎo)致坐標(biāo)的變化不是連續(xù)的,結(jié)果就是LED的軌跡不連貫,在連續(xù)的N個(gè)LED中有部分沒有被點(diǎn)亮。為了解決這個(gè)問題需要在轉(zhuǎn)輪坐標(biāo)計(jì)算后加入一個(gè)插值算法,在用戶操作過快的時(shí)候?qū)Ρ宦┑舻淖鴺?biāo)進(jìn)行補(bǔ)值,使得LED的軌跡連續(xù)。


插值的方法可以通過當(dāng)前位置和上一次位置的比較,決定是否要進(jìn)行插值,這里需要設(shè)置一個(gè)插值門限InterpolationThreshold,當(dāng)位置跳動(dòng)距離超過門限就不進(jìn)行插值,反正誤操作產(chǎn)生。


if((WheelPosition-LastPosition) InterpolationThreshold)
{
for (j=1;j=(WheelPosition-LastPosition+1);j++)
{
SetLightLevel(LastPosition+j);
}
}


除此之外,還需要對(duì)兩個(gè)特殊情況做處理,及正向和反向滑動(dòng)操作經(jīng)過轉(zhuǎn)輪坐標(biāo)0點(diǎn)。

4.總結(jié)

本文介紹了使用MSP430G系列單芯片實(shí)現(xiàn)電容觸摸轉(zhuǎn)輪和24路獨(dú)立PWM輸出LED控制方案,在一些需要低成本的產(chǎn)品設(shè)計(jì),又要對(duì)多種LED特效控制的場合,有很大的使用價(jià)值。

參考文檔

1. MSP430x2xx Family User’s Guide (SLAU144H)
2. MSP430_SLAS800_G2x55
3. Capacitive Touch Software Library Programmers Guide (Rev. A) (slaa490a)



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉