MSP430 電容觸摸轉(zhuǎn)輪和LED PWM 輸出設(shè)計
LED 驅(qū)動部分電路如圖 5, 由于每一個LED 的電流在10mA 左右,24 個LED 如果同時亮就有240mA,無法通過MCU IO 口直接驅(qū)動,在每個LED 上加一個三極管以及限流電阻,實現(xiàn)24路LED 的控制。
圖 6 LED 驅(qū)動電路
3.2 代碼設(shè)計
3.2.1 LED驅(qū)動
在編寫代碼控制LED 點亮時序前,先定義好PWM 輸出相關(guān)的規(guī)格:
• PWM 輸出占空比設(shè)置為50%。
• 頻率為5K Hz, 亮度的等級分為24 級,0 級的時候關(guān)閉LED, 23 的時候最亮。
• 使用2個TIMER 進行PWM 輸出的控制
• TIMERA0 中斷頻率為24 X 5K Hz = 120K Hz.
• TIMERB中斷間隔設(shè)為10ms,在TIMERB 中進行LED 亮度等級的改變
通過兩個TIMER 的中斷配合,就可以完成24 路獨立PWM 輸出的控制。當有觸摸事件產(chǎn)生時,根據(jù)觸摸位置對對應(yīng)的LED 進行亮度等級賦值,然后在TIMERB 的中斷中讓亮度等級慢慢減少至零,這樣就可以實現(xiàn)手指離開電極后,對應(yīng)LED 慢慢變暗的效果。
在兩個TIMER 中斷里的程序流程圖如下圖 7 和圖 8
圖 7 TIMERB 流程圖
圖 8 TIMERA0 流程圖
3.2.2 轉(zhuǎn)輪
德州儀器的電容觸摸軟件庫支持電容按鍵的信號檢測以及轉(zhuǎn)輪坐標的計算,通過軟件庫相關(guān)參數(shù)的配置以及函數(shù)的調(diào)用就可以得到當前觸摸事件的位置值,可以參考德州儀器的觸摸按鍵軟件庫(www.ti.com/capacitivetouch)獲得詳細介紹。
當用戶在轉(zhuǎn)輪上做滑動操作,LED 的軌跡顯示應(yīng)該是N 個燈同時被點亮,手指所在位置的燈最亮,之前滑過的軌跡上的燈一個比一個暗,N 的數(shù)值由操作者滑動的速度決定,如果滑的速度夠快,24 個LED 燈會同時被點亮,只是亮度不同。
在滑動很快的操作時會帶來一個問題,電容按鍵掃描的周期跟不上滑動的速度,導(dǎo)致坐標的變化不是連續(xù)的,結(jié)果就是LED 的軌跡不連貫,在連續(xù)的N 個LED 中有部分沒有被點亮。為了解決這個問題需要在轉(zhuǎn)輪坐標計算后加入一個插值算法,在用戶操作過快的時候?qū)Ρ宦┑舻淖鴺诉M行補值,使得LED 的軌跡連續(xù)。
插值的方法可以通過當前位置和上一次位置的比較,決定是否要進行插值,這里需要設(shè)置一個插值門限InterpolationThreshold,當位置跳動距離超過門限就不進行插值,反正誤操作產(chǎn)生。
if((WheelPosition-LastPosition)
{
for (j=1;j=(WheelPosition-LastPosition+1);j++)
{
SetLightLevel(LastPosition+j);
}
}
除此之外,還需要對兩個特殊情況做處理,及正向和反向滑動操作經(jīng)過轉(zhuǎn)輪坐標0 點。
4. 總結(jié)
本文介紹了使用MSP430G 系列單芯片實現(xiàn)電容觸摸轉(zhuǎn)輪和24 路獨立PWM 輸出LED 控制方案,在一些需要低成本的產(chǎn)品設(shè)計,又要對多種LED 特效控制的場合,有很大的使用價值。
評論