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