新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430電容觸摸轉輪和LED PWM輸出設計

        MSP430電容觸摸轉輪和LED PWM輸出設計

        作者: 時間:2017-06-04 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/201706/348096.htm

        摘要

        本應用文檔介紹了使用微控制器實現和多路獨立LED的PWM軟件驅動技術。方案通過4路I/O 端口實現控制,I/O端口配合三極管驅動LED,實現LED呼吸、軌跡燈等效果。本方案為需要控制和LED跟蹤顯示等絢麗燈效的產品提供了有效的低成本方案。

        簡介

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


        LED顯示由于界面友好,可以實時反映觸摸的位置信息,在電容觸摸產品設計中得到廣泛應用。本設計正是利用了大量的LED來實現呼吸燈、軌跡燈的特效,可以為例如燈光、音量、溫度等帶有調節功能的產品提供設計參考。


        德州儀器的系列單片機以低功耗和外設模塊的豐富性而著稱,而針對電容觸摸應用,的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鋸齒狀交叉就形成了一個轉輪的電極,轉輪的大小根據產品設計的需要可進行適當的縮放,圖2的圖形設計適合30mm左右直徑的轉輪。

        圖2 轉輪電極設計


        當用戶在轉輪上操作的時候,在手指對應位置的電極會獲得最高的信號值,手指臨近的通道會有相對高的信號值,離手指最遠的通道檢測到的信號值最小,如圖3所示:

        圖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口與主控系統通訊。

        圖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 Programmers Guide (Rev. A) (slaa490a)



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 定远县| 武鸣县| 大同市| 简阳市| 安宁市| 上虞市| 乌鲁木齐市| 林甸县| 田阳县| 彭水| 崇明县| 微山县| 天水市| 卫辉市| 潮州市| 雷山县| 岳普湖县| 涞源县| 和静县| 江阴市| 阿荣旗| 永清县| 汉阴县| 边坝县| 万源市| 陆丰市| 苏尼特左旗| 泰来县| 岳普湖县| 万州区| 镇平县| 长白| 通城县| 娄烦县| 渑池县| 且末县| 饶阳县| 庆元县| 沅陵县| 色达县| 新晃|