MSP430電容觸摸轉(zhuǎn)輪
摘要
本文引用地址:http://butianyuan.cn/article/201609/303345.htm本應(yīng)用文檔介紹了使用MSP430微控制器實(shí)現(xiàn)電容觸摸轉(zhuǎn)輪和多路獨(dú)立LED的PWM軟件驅(qū)動(dòng)技術(shù)。方案通過(guò)4路I/O 端口實(shí)現(xiàn)電容觸摸轉(zhuǎn)輪控制,I/O端口配合三極管驅(qū)動(dòng)LED,實(shí)現(xiàn)LED呼吸、軌跡燈等效果。本方案為需要電容觸摸轉(zhuǎn)輪控制和LED跟蹤顯示等絢麗燈效的產(chǎn)品提供了有效的低成本方案。
簡(jiǎn)介
電容觸摸技術(shù)作為一種實(shí)用、時(shí)尚的人機(jī)交互方式,已經(jīng)被廣泛的應(yīng)用到各種電子產(chǎn)品,小到電燈開(kāi)關(guān),大到平板電腦、觸摸桌等。隨之而來(lái)的是考驗(yàn)產(chǎn)品設(shè)計(jì)者如何發(fā)揮智慧,在把產(chǎn)品用戶界面設(shè)計(jì)得方便簡(jiǎn)潔的同時(shí),又能呈現(xiàn)產(chǎn)品絢麗的外觀,從而帶來(lái)良好的用戶體驗(yàn)。
LED顯示由于界面友好,可以實(shí)時(shí)反映觸摸的位置信息,在電容觸摸產(chǎn)品設(shè)計(jì)中得到廣泛應(yīng)用。本設(shè)計(jì)正是利用了大量的LED來(lái)實(shí)現(xiàn)呼吸燈、軌跡燈的特效,可以為例如燈光、音量、溫度等帶有調(diào)節(jié)功能的產(chǎn)品提供設(shè)計(jì)參考。
德州儀器的MSP430系列單片機(jī)以低功耗和外設(shè)模塊的豐富性而著稱,而針對(duì)電容觸摸應(yīng)用,MSP430的PIN RO電容觸摸檢測(cè)方式支持IO口直接連接檢測(cè)電極,不需要任何外圍器件,極大的簡(jiǎn)化了電路設(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)輪方案通過(guò)4個(gè)IO口完成4個(gè)通道的電容檢測(cè),配合特殊的電極圖形,就可實(shí)現(xiàn)轉(zhuǎn)輪的設(shè)計(jì)。
1.1 電容觸摸實(shí)現(xiàn)原理
MSP430根據(jù)型號(hào)的不同支持多種電容觸摸檢測(cè)方式,有RC震蕩、比較器、PIN RO, 本設(shè)計(jì)使用的是PIN Relaxation Oscillator方式,原理如圖1,芯片管腳內(nèi)部檢測(cè)電路由施密特觸發(fā)器、反向器,以及一個(gè)電阻組成,震蕩信號(hào)經(jīng)過(guò)施密特觸發(fā)器變成脈沖信號(hào),再通過(guò)反向器反饋回RC電路,通過(guò)Timer_A對(duì)施密特觸發(fā)器的輸出進(jìn)行記數(shù),再通過(guò)設(shè)置測(cè)量窗口Gate獲得記數(shù)的結(jié)果。當(dāng)手指觸摸電極,電極上的C產(chǎn)生變化,導(dǎo)致震蕩頻率改變,這樣在定長(zhǎng)的測(cè)量窗口就能獲得不同的記數(shù)結(jié)果,一旦差值超過(guò)門(mén)限,結(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)的通道檢測(cè)到的信號(hào)值最小,如圖3所示:
圖3 手指觸摸時(shí)不同電極上測(cè)量到的信號(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é)果如果大于門(mén)限,就認(rèn)為有觸摸事件產(chǎn)生,繼續(xù)后續(xù)的位置計(jì)算。 把前后信號(hào)相加的原因是手指在操作的過(guò)程中有可能處于兩個(gè)電極中間,這樣兩個(gè)電極上得到的信號(hào)都不會(huì)很高,需要把信號(hào)相加才可以與門(mén)限做比較。
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的情況代碼需要另外處理,不過(guò)計(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ì)以及電極的多少,例如需要類(lèi)似1024這種高精度,需要增加電極數(shù)從4個(gè)到8個(gè)或者更多。
評(píng)論