北京信息科技大學信息獲取與檢測實驗室,北京 100101
計算機技術和電子技術改變著我們的生活生產方式,觸摸屏技術就是其中之一,它逐漸代替按鈕、按鍵等傳統控制輸入裝置,起著人與機器之間交流的橋梁作用。觸摸屏具有的輕便和操作簡單的特點,是傳統鍵盤所不具有的,而電阻式觸摸屏的低價格、高清晰度和高耐久等特點,讓電阻屏成為了人機交互設備中應用最為廣泛的一種觸摸屏[1,2]。
本文對大面積電阻式觸摸屏信號檢測電路進行硬件設計和軟件編程,分析了電阻屏的工作原理,結合電阻屏專用控制芯片,研究了電阻屏的線性化算法;通過藍牙模塊設計計算機接口,實現了下位機與上位機的無線短距離通訊;在MATLab的環境下,應用GUI工具完成串口的數據接收,完成了顯示界面的實時繪圖以及保存功能。
設計方案是通過測量四線式電阻屏的觸點電路參數,把該參數經過A/D轉換,送給單片機,在單片機上實現從數字參數到坐標轉換,然后把坐標通過藍牙送到上位機,上位機接到坐標信息后在上位機界面通過坐標信息作圖[3]。
系統需要用到的硬件部分有:四線式電阻屏、ADS7846芯片、MSP430單片機和藍牙模塊。通過各個模塊的有機連接,組成系統的硬件部分。大面積電阻式觸摸屏用于系統的輸入。由于是電阻屏,可筆觸、手寫等多種輸入法。觸摸屏控制器為ADS7846芯片,一旦筆或手指觸摸在屏上,芯片采集觸摸屏上的坐標。核心控制器MSP430實現對數據的處理,并結合上位機軟件一起實現定位[4]。藍牙模塊代替USB線連接單片機和上位機[5]。
軟件部分分為上位機軟件實現和單片機軟件編程。
上位機軟件主要功能是顯示,應用MATLab的GUI和MATLab自帶的串口通信函數serial,設計一個人機交互可控友好界面,通過藍牙串口模塊,實現數據的實時接收,并利用MATLab的科學計算功能,實時處理接收到的數據并繪圖。
單片機軟件部分主要是算法的設計,控制數據的接收、處理和發送。接收的數據是由電阻屏控制芯片傳送的,處理數據主要是對數據進行轉換和優化,數據發送由單片機控制串口與上位機進行通信。
電阻屏控制器ADS7846具有四線制觸摸屏接口,將電阻屏四根導線與ADS7846的四個數據接口分別對應連接[6]。電阻觸摸屏與ADS7846連接電路圖如圖1所示。對ADS7846芯片的控制由MSP430F149單片機完成。對MSP430F149編程時啟用P1腳中斷功能,P1.0為外部中斷輸入。
單片機與上位機通過藍牙模塊進行數據傳輸。設置好藍牙模塊傳輸波特率,此波特率分別與單片機波特率和上位機波特率一致,設置兩個藍牙模塊一個為主模塊一個為從模塊,分別把兩個模塊與單片機和上位機連接。
無線藍牙模塊采用的是HC-05 嵌入式藍牙串口通訊模塊,它具有兩種工作模式:命令響應工作模式和自動連接工作模式,在自動連接工作模式下模塊又可分為主(Master)、從(Slave)和回環(Loopback)三種工作角色。
在這里我們采用的是自動連接模式,和藍牙連接的MSP430單片機是主角色,和藍牙連接的上位機是從角色,進而根據事先設定的方式進行數據傳輸。
由于藍牙模塊的接口為串口模式,藍牙模塊與單片機可直接串口連接,分別將藍牙模塊的RXD和TXD引腳與單片機的TXD和RXD引腳連接,連接關系表如圖1所示。
藍牙模塊與上位機連接時,需要將串口轉為USB接口,設計用到芯片PL2303將串口轉為USB口。藍牙模塊與上位機連接圖如圖1所示。

軟件實現部分可以分為單片機軟件部分和上位機軟件部分。單片機軟件部分主要是數據的接收、處理和發送,上位機軟件部分在接收數據后主要是顯示[7]。
單片機軟件部分負責數據的接收、處理和發送。
當觸摸屏被觸摸時,單片機產生中斷信號,向ADS7846寫控制字,控制相應I/O口產生測量X、Y坐標的時序,等待A/D轉換完成后讀取數據。
電阻式觸摸屏的電阻分布是近線性的,但不是理想的線性關系,經過A/D轉換后的坐標值不能直接用于顯示坐標,那樣就會出現轉換后的坐標值與實際坐標值差別很大的情況,這時需要用算法處理接收到的數據,就是電阻屏的線性化處理。


設計用到4點定位方法,得到坐標變換公式的算法來減小隨機干擾,然后再對數據結果求算術平均值,進一步減少誤差[8]。
然后將得到的X、Y值再次處理:取N個一組求算術平均值,經測試,可以得出當N等于15時,既能消除誤差又不至于傳輸速度過慢。
MSP430F149有不同的USART通訊端口,可以串口異步或同步通訊,兩種方式具有不同的幀格式和不同的控制寄存器。
本文采用串口異步通訊,波特率為9600。軟件流程圖如圖2所示。
軟件設計利用MATLab的串口通信函數serial函數通過串口接收數據,利用MATLab GUI設計繪圖界面[9]。
MATLab GUI中斷方式的串口通信優點是實現實時處理數據的目的。MATLab中的中斷方式就是事件回調驅動。在編寫程序時,首先設置驅動事件的方式,是字節驅動還是其他方式驅動,然后再設置事件驅動方式的觸發條件。當串口上的數據緩沖區有滿足設置的字節數目的數據或者數據緩沖區內的字節和設定好的字節相同,MATLab會調用回調函數里已設計好的程序。在回調函數里寫好需要回調的內容,這樣當中斷發生時,在回調函數里的函數就會被調用。MATLab實現實時串口通信的流程圖如圖3所示。
首先測試芯片ADS7846,測試過程如下:在觸摸屏上用筆觸摸,如果在LCD1602上有反應,不管數據正確與否,都說明芯片ADS7846可能在工作,然后觸摸另一些點,數據又有所變化,則芯片ADS7846是工作的。圖4為系統應用的電阻式大面積觸摸屏,圖5為部分硬件連接圖。


在下位機測試完成后,然后測試藍牙模塊。在上位機軟件沒有完成前,先用串口助手接收數據,由于串口助手沒有畫圖功能,因此顯示的還是坐標。這時候就可以測試電阻屏線性化的好壞了,雖然不是很精確,但是可以看出大致趨勢。圖6為串口助手接收到的數據,數據是一組一組上傳的,即測一組X、Y坐標上傳一次,括號內第一個數為X坐標,第二個數為Y坐標。此次測量為畫一條垂直于X軸的直線,設計時使觸摸屏的左下角為坐標原點。從測試數據可以看出,測試的直線橫坐標為12,縱坐標從13降到3,從數據可以看出這一段電阻呈線性化。
MATLab GUI顯示模塊可以簡單的設置串口號、波特率、停止位和數據位,另外還具有儲存上一次圖像的功能,以及清除圖像的功能。選擇上位機識別的串口號,設置波特率與下位機一致,然后打開串口就可以接收數據實時作圖,圖7為在電阻屏上書寫數字8和9在GUI界面的顯示效果。由于電阻屏制作工藝比較粗糙,線性化的程度也受到了限制。


本文主要對大面積電阻式觸摸屏檢測信號電路進行了硬件設計和軟件實現。分析了電阻屏的工作原理,結合電阻屏專用控制芯片,研究了電阻屏的線性化算法;通過藍牙模塊設計計算機接口,實現了下位機與上位機的無線短距離通訊;在MATLab的環境下,應用GUI工具完成串口的數據接收,完成了顯示界面的實時繪圖以及保存功能;設計了系統整體硬件電路。
經過系統測試,該系統可以簡單作圖,可實現少量儲存功能,可靠性比較好。限于個人能力,基本完成了系統的硬件設計和軟件實現,但仍有一些不足之處,例如界面功能過于簡單,電阻屏線性化不足,反應速度慢等。