在之前的項(xiàng)目文章中,我介紹了使用TI MSP430FR2633定制電容式觸摸接口的基本電路設(shè)計(jì)注意事項(xiàng)。在本文中,我們將仔細(xì)研究PCB設(shè)計(jì)考慮因素和器件編程。
Myinterface由兩塊電路板組成:一塊四層電路板,內(nèi)置微控制器和支持電路,以及帶有電容式觸摸屏和指示燈LED的雙層電路板。
MSP430FR2633的PCB布局注意事項(xiàng)
主電路板是具有內(nèi)部接地平面和陰影電源平面的四層疊層。陰影線有助于減少可能對電容式觸摸感應(yīng)性能產(chǎn)生負(fù)面影響的寄生電容。
除ESD二極管和USB連接器外,元件安裝在電路板的頂部。 USB連接器安裝在電路板的底部,以避免微型USB連接器和CP2102N之間的差分對線路交叉,并利用電路板和外殼之間未使用的空間。
我訂購此板的制造公司,MacroFab,為單面和雙面板充電。
上面顯示的是四個(gè)電路板層的自上而下的圖像。
I關(guān)注電容式觸摸引腳的跡線與下面的層之間的電容耦合。為了最大限度地減小電容效應(yīng),我使用了5密耳的連接和一個(gè)陰影填充,固定的走線寬度和不同的層間空間寬度。
這不是必須這樣做,但我想要抵消陰影填充不同的圖層。不幸的是,這不是我的PCB設(shè)計(jì)程序(Diptrace)的一個(gè)功能,并且手動(dòng)移動(dòng)陰影填充提供了不一致的結(jié)果。在附近的電源層上使用帶陰影填充的最小跡線寬度電容式觸摸感應(yīng)線,意味著降低電容式觸摸引腳上的電容。
電路板的第二層(Vcc)可以看到紅色。陰影填充和細(xì)線跟蹤用于減少電容耦合的影響。
陰影填充連接到與實(shí)心填充相同的網(wǎng)。我在實(shí)心填充中添加了額外的點(diǎn),以創(chuàng)建第二個(gè)陰影銅區(qū)域填充的負(fù)空間。使用Diptrace,定義正負(fù)區(qū)域可防止實(shí)心填充填充陰影區(qū)域。
LED注意事項(xiàng)
電容式控制面板的底部
用于驅(qū)動(dòng)LED的信號狀態(tài)的變化可以被微控制器檢測為電容的變化。為避免意外激活,TI建議將數(shù)字和電容信號線分開至少4 mm。此外,當(dāng)在不同的層上交叉時(shí),它們應(yīng)該以直角交叉。
我選擇使用反向安裝,而不是通過將LED放置在與按鈕和旋轉(zhuǎn)輪相同的層上的過孔來布線。 LED通過電路板上的孔發(fā)光。
CP2102N編程
CP2102N使用Silicon Labs的Simplicity Studio Express配置工具進(jìn)行編程。兩個(gè)GPIO引腳用于指示MSP430FR2633和CP2102N之間的UART數(shù)據(jù)傳輸。這些LED與實(shí)際數(shù)據(jù)傳輸位于不同的網(wǎng)絡(luò)上,LED顯示為發(fā)送的字節(jié)和數(shù)據(jù)串,而不是單個(gè)數(shù)據(jù)位。
請參閱我的另一篇文章,了解如何克服CP2102N的編程難度。
MSP430FR2633編程
正如我在第一篇文章中提到的,CapTIvate Design Center是一個(gè)圖形化軟件工具,可以生成運(yùn)行該項(xiàng)目所需的大部分代碼。它確實(shí)需要知道哪些按鈕和滑塊存在以及它們連接到哪些引腳。該軟件生成運(yùn)行微控制器和電容式觸摸界面所需的所有C源代碼,頭文件和庫。
下載代碼
不幸的是,此時(shí)軟件還不知道我已將指示燈LED添加到我的主板上。所以我很遺憾不能簡單地構(gòu)建代碼并將其上傳到微控制器。我首先需要告訴MSP430FR2633它有一些LED連接,然后想出一種方法來打開和關(guān)閉它們。
我選擇通過bitmasking來做到這一點(diǎn)。我在控制面板的左上角,左下角,中間角,右上角和右下角有五個(gè)LED,我想創(chuàng)建三種方式來控制它們 - 開,關(guān)和切換。
為MSP執(zhí)行此操作的方法是將LED視為內(nèi)存中特定位置的位。寫1并且LED亮;寫一個(gè)0然后它會關(guān)閉;反轉(zhuǎn)該值,您將切換LED狀態(tài)。引腳映射到各種寄存器中的位。這些位位置由微芯片上的引腳排列決定。例如,GPIO引腳P2.3位于寄存器2的第3位。要打開和關(guān)閉LED,只需操作寄存器2的第3位。寄存器位置P2在另一個(gè)特定于微控制器的文件中定義。
幸運(yùn)的是,基本結(jié)構(gòu)包含在Code Composer Studio中MSP430FR2633的示例草圖中。我所要做的只是為我的LED復(fù)制和修改它。
LED_UL代表控制面板左上角的LED。
#defineLED_UL_POUT(P2OUT)
#defineLED_UL_PDIR(P2DIR)
#defineLED_UL_PIN(BIT3)
#defineLED_UL_ON(LED_UL_POUT|=LED_UL_PIN)
#defineLED_UL_OFF(LED_UL_POUT&=~LED_UL_PIN)
#defineLED_UL_TOGGLE(LED_UL_POUT^=LED_UL_PIN)
在main()函數(shù)中,需要插入一個(gè)小命令來禁用GPIO引腳高阻模式。如果您正在為自己的項(xiàng)目進(jìn)行操作,請?jiān)?a href="http://www.xsypw.cn/tags/看門狗/" target="_blank">看門狗定時(shí)器停止或LED永不點(diǎn)亮后插入命令。
Voidmain(void){
WDTCTL=WDTPW|WDTHOLD;//Stopwatchdogtimer
PM5CTL0&=~LOCKLPM5;//DisablePower-OnHigh-Impedancemode
…
}
最后,我需要編寫一個(gè)使用電容式觸摸界面傳感器位置點(diǎn)亮LED的功能。
voidmy_slider_callback(tSensor*pSensor)
{
//FIRSTCHECKIFTHEREISVALIDTOUCH
if(pSensor->bSensorTouch==true)
{
//THENGETTHECURRENTTOUCHPOSITIONONTHESLIDER/WHEEL
position=(uint16_t)((tSliderSensorParams*)pSensor->pSensorParams)->SliderPosition.ui16Natural;
//Eventhoughitisstoringthedataina16-bitinteger,thenumbersneverexceed8bitsinlength
//Usethepositiontogenerateeightcases--illuminateoneoffourcorners,orilluminateoneoffoursides.
//Maskbits5:7thenshiftthemtobecomebits0:2
//case8=(position&0x00E0)>>5;
//addanintegeroffsetiflightsarerotatedfromwheelpositions
case8=((position&0x00E0)>>5)+3)%7
switch(case8)
{
case0://LightUpperLeftCorner
LED_UL_ON;LED_UR_OFF;LED_BR_OFF;LED_BL_OFF;
break;
case1://LightTopSide
LED_UL_ON;LED_UR_ON;LED_BR_OFF;LED_BL_OFF;
break;
case2://LightUpperRightCorner
LED_UL_OFF;LED_UR_ON;LED_BR_OFF;LED_BL_OFF;
break;
case3://LightRightSide
LED_UL_OFF;LED_UR_ON;LED_BR_ON;LED_BL_OFF;
break;
case4://LightBottomRightCorner
LED_UL_OFF;LED_UR_OFF;LED_BR_ON;LED_BL_OFF;
break;
case5://LightBottomSide
LED_UL_OFF;LED_UR_OFF;LED_BR_ON;LED_BL_ON;
break;
case6://LightBottomLeftCorner
LED_UL_OFF;LED_UR_OFF;LED_BR_OFF;LED_BL_ON;
break;
case7://LightLeftSide
LED_UL_ON;LED_UR_OFF;LED_BR_OFF;LED_BL_ON;
break;
Default://TurncornerlightsoffandtogglecenterLED
LED_UL_OFF;LED_UR_OFF;LED_BR_OFF;LED_BL_OFF;LED_C_TOGGLE;
break;
}
}
}
JTAG故障排除
在完美的世界中,我可以立即上傳代碼并開始試驗(yàn)。但這不是一種簡單的方法。
我最初嘗試對電路板進(jìn)行編程失敗,并顯示一條錯(cuò)誤消息,表明沒有連接任何設(shè)備。我開始使用示波器解決問題并看到以下JTAG事務(wù)。
上面顯示的是一個(gè)無效的JTAG事務(wù)。測試,TMS,TCK,TDO,TDI和nRST狀態(tài)在示波器中基于1.51 V閾值定義為低/高。
對于那些對JTAG編程不熟悉的人,根本不是你期望JTAG事務(wù)的樣子。理想情況下,有一個(gè)入口序列,然后是TDO和TDI線上的時(shí)鐘信號和數(shù)據(jù)轉(zhuǎn)換的快速轉(zhuǎn)換。
出于好奇,我決定在我的調(diào)查中添加一個(gè)普通的模擬探頭,看看是什么信號正在更詳細(xì)地進(jìn)行。模擬探針跡線如下所示為黃色。
上面以白色顯示的是MSP430FR2633的完整JTAG事務(wù)。黃色跡線是正常的模擬測量,它復(fù)制了TDI信號線。
現(xiàn)在,我有一些黃色探針跡線的其他有趣信息。信號并不總是處于邏輯高或邏輯低狀態(tài)。還有一些東西正在與信號線相互作用,并保持一個(gè)干擾編程信號的~2 V電位差。
同時(shí),我意識到我選擇用于USB的兩個(gè)引腳 - 串行接口(UCA0TXD,UCA0RXD)分別成為TCK VREF +和TMS的兩倍。因此,當(dāng)連接到JTAG接口時(shí),絕對沒有辦法測試USB到串行接口,并且CP2102N很可能主動(dòng)干擾JTAG編程。
不幸的是,我需要重新設(shè)計(jì)電路板,將CP2102N的Tx/Rx引腳重新定位到UCA1RXD和UCA1TXD線。
MSP430FR2633更好的JTAG交易
收到我的新電路板并掛鉤這取決于我的JTAG程序員,我有最后一個(gè)障礙。我很沮喪地仍然無法編程,直到我對程序員進(jìn)行了固件升級。
但是,畢竟,我終于有一個(gè)項(xiàng)目可以讓我更好地理解和編程電容式環(huán)形滑塊。
德州儀器(TI)MSP430用戶指南演示了多種訪問電容式滑塊和按鈕的方法,而這只是其中之一。但是,這種方法可以幫助您在下一個(gè)設(shè)計(jì)中使用電容式觸摸滑塊開始自己嘗試。我希望你喜歡它。
-
pcb
+關(guān)注
關(guān)注
4319文章
23099瀏覽量
397923 -
電路板
+關(guān)注
關(guān)注
140文章
4961瀏覽量
97854 -
華強(qiáng)pcb線路板打樣
+關(guān)注
關(guān)注
5文章
14629瀏覽量
43045
發(fā)布評論請先 登錄
相關(guān)推薦
評論