《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于嵌入式技術的智能儀器觸摸屏接口設計
基于嵌入式技術的智能儀器觸摸屏接口設計
摘要: 作者在開發(fā)面向機械故障診斷的智能儀表過程中,對觸摸屏輸入接口進行了研究。設計了四線電阻式觸摸屏與PXA255處理器的接口電路,,分析了Linux框架下的字符設備驅動程序設計原理,,完成了觸摸屏的接口驅動程序開發(fā),并設計了用觸摸屏作為輸入設備的MiniGUI用戶程序,。觸摸屏作為儀器的輸入設備,人機交互直截了當,大大方便了現(xiàn)場操作人員的使用
Abstract:
Key words :

0 引言

在現(xiàn)代化生產(chǎn)中,,為了確保機械設備安全可靠地運行,通常要采用適宜的儀器儀表,,利用故障診斷技術及時發(fā)現(xiàn)故障,,并采取合理的維修或保護措施來排除故障,預防和避免事故的發(fā)生,?;趯x器尺寸、便攜性和操作方便性的考慮,,在工業(yè)領域如煤炭,、鋼鐵、冶金,、電力,、化工等行業(yè)中大量的儀器儀表和設備,都逐漸選用觸摸屏作為系統(tǒng)的輸入設備,。

針對這一情況,,作者在開發(fā)面向機械故障診斷的智能儀表過程中,,對觸摸屏輸入接口進行了研究。設計了四線電阻式觸摸屏與PXA255 處理器的接口電路,,分析了Linux框架下的字符設備驅動程序設計原理,,完成了觸摸屏的接口驅動程序開發(fā),并設計了用觸摸屏作為輸入設備的MiniGUI用戶程序,。觸摸屏作為儀器的輸入設備,,人機交互直截了當,大大方便了現(xiàn)場操作人員的使用,。

1 硬件結構和工作原理

依據(jù)工作原理和傳輸介質的不同,,觸摸屏主要分電阻式、電容式,、紅外線式以及表面聲波式等多種類型,。電阻式觸摸屏是一塊4層透明的復合薄膜屏,如圖1所示,。下面是玻璃或有機玻璃構成的基層,;上面是一層外表面經(jīng)過硬化處理從而光滑防刮的塑料層;中間是兩層金屬導電層,,在導電層之間有許多細小的透明隔離點把兩層隔開,。兩個金屬導電層是觸摸屏的工作面,其兩端各涂有一條銀膠,,稱為觸摸屏工作面的一對電極,。四線式觸摸屏的X工作面和Y工作面分別加在兩個導電層上,共有4根引出線,,分別連到觸摸屏的X 電極對和Y 電極對上,。在觸筆觸摸屏幕時,兩導電層在接觸點處接觸,。電阻式觸摸屏作為輸入設備與顯示屏配合使用時,,其工作的實質就是通過測量X、Y兩個方向電阻的分壓,, 確定觸摸屏的觸點坐標,, 并將該坐標映射到顯示屏坐標上,從而實現(xiàn)人機交互,。由于電阻式觸摸屏工作面與外界完全隔離,, 受環(huán)境影響小, 所以具有不怕灰塵和水汽,、穩(wěn)定性高,、不漂移等優(yōu)點, 特別適合工業(yè)現(xiàn)場使用,。

圖1 電阻式觸摸屏結構

圖1 電阻式觸摸屏結構

在設計過程中,, 選用ADS7843 作為觸摸屏接口的AD轉換芯片,,它具有12 位的轉換精度, 最大支持4 096 ×4 096點陣的LCD,, 滿足儀器設計要求,。

儀器系統(tǒng)處理器選用Intel Xscale架構的PXA255處理器,用其GPIO口模擬SPI接口與ads7843進行通信,。其接口原理如圖2所示,。ADS7843完成采集通道的切換和接觸點處電壓的采集, 其操作時序主要由控制字輸入,、電壓采集和模數(shù)轉換組成,, 詳見參考文獻。只要在驅動程序中根據(jù)時序要求向D IN口發(fā)送控制字,, 即可從DOUT處得到相應通道的采集結果,。

圖2 ADS7843與PXA255的接口電路

圖2 ADS7843與PXA255的接口電路

2 觸摸屏接口驅動程序

Linux驅動程序是系統(tǒng)內核的一部分, 它把軟件和硬件分離開來,, 并向上提供應用程序訪問硬件的通信接口,, 向下管理保護系統(tǒng)硬件。觸摸屏在Linux下被定義為字符設備,, 其驅動主要完成觸點電壓的采集,, 并向用戶空間傳遞X 坐標、Y坐標和筆動作(按下,、抬起或拖拽) 數(shù)據(jù)。當觸筆按下時,, ADS7843的11腳輸出低電平,, 觸發(fā)PXA255通用IO口的12腳產(chǎn)生外部中斷, 開啟定時器,, 實現(xiàn)觸摸屏的動作,。觸摸屏的驅動流程如圖3所示。

圖3 觸摸屏驅動程序結構流程

圖3 觸摸屏驅動程序結構流程

2.1 驅動的編寫

觸摸屏驅動在Linux框架下屬于字符設備驅動,。

驅動的入口函數(shù)為ads7843 _ ts_ init ( ) ,, 在該函數(shù)中,初始化I/O口,, 注冊筆中斷和設備節(jié)點,, 完成設備文件系統(tǒng)創(chuàng)建標準字符設備的初始化工作[ 8 - 10 ]。觸摸屏設備操作的結構通過ads7843_ts_fop s定義,。

STatic struct file_operatiONs ads7843_ts_fop s = {

read: ads7843_ts_read,,

poll: ads7843_ts_poll,

ioctl: ads7843_ts_ioctl,,

fasync: ads7843_ts_fasync,,

open: ads7843_ts_open,,

release: ads7843_ts_release,

};

這樣,, 只需根據(jù)實際需要正確定義該結構中的幾個函數(shù)過程,, 就可完成設備驅動的開發(fā)。

當觸摸屏設備被打開時,, 首先執(zhí)行到ads7843_ts_open ( )函數(shù),,并在該函數(shù)中, 初始化一個緩沖區(qū),, 用于存儲坐標數(shù)據(jù),。在觸摸屏被按下后, 系統(tǒng)首先觸發(fā)中斷,, 在ads7843_ts_interrup t ( )中斷程序中,, 判斷in_timehandle全局變量的狀態(tài), in_ timehandle在定時器函數(shù)中被改變,, 也就是說進入中斷后,, 先經(jīng)過定時器延時20ms, 完成觸摸屏的軟件去抖,, 再判斷觸摸屏是否被按下,。然后通過read_xy ()函數(shù)分別切換至X和Y 通道, 完成觸點電壓的AD轉換,, 并讀取12 位坐標值,。

static void ads7843_ ts_ interrup t ( int IRq, void 3 dev_ id,,

struct p t_regs3 regs)

{

sp in_lock_irq (&tsdevlock) ;

if ( in_timehandle 》 0)

{

sp in_unlock_irq (&tsdevlock) ;

return;

}

disable_irq ( IRQ_GPIO_ADS7843) ;

ads7843_ts_starttimer ( ) ;

sp in_unlock_irq (&tsdevlock) ;

}

應用程序調用read ( ) 函數(shù)時,, 進入驅動的ads7843_ts_read ( )接口函數(shù)。在該接口函數(shù)中獲取采樣結果,, 判斷是否要對坐標進行校準,, 將最終結果寫入到緩沖區(qū)中,并通過copy_to_user ( )函數(shù)將其從內核空間復制到用戶空間,, 以使應用程序能夠使用,。在ads7843_ts_read ( )函數(shù)中采用了非阻塞型操作, 使得在沒有數(shù)據(jù)到達的時候立即返回,, 然后用異步觸發(fā)fasync ( )來通知數(shù)據(jù)的到來,。ads7843 _ ts_poll ()函數(shù)用于驅動程序的非阻塞操作, ads7843_ts_fasync ( )函數(shù)用于驅動異步觸發(fā),。ads7843_ts_ioctl ( )函數(shù)中,, 提供了可從用戶態(tài)控制的參數(shù), 如觸摸屏是否在驅動中校準、屏幕的最大最小坐標值等,。ads7843_ts_release( )函數(shù)用來關閉觸摸屏設備,。

2.2 觸摸屏的校準

在儀器開發(fā)過程中,觸摸屏作為輸入設備與LCD配合使用,。為了能使從觸摸屏采樣得到坐標與屏幕的顯示坐標對應,,還需要做一個映射, 也就是要對觸摸屏進行校準,。如圖4所示,, 所用的觸摸屏和液晶屏都是標準的矩形, 只要安裝合理,,可以認為觸摸屏的X 方向坐標只與顯示屏X 方向相關,, Y方向坐標只與顯示屏的Y方向相關。假設顯示屏的分辨率是W ×H,, 顯示區(qū)域的左上角對應的觸摸屏采樣坐標是( x1 ,, y1 ) ,右下角對應的坐標是( x2 ,, y2 ) ,, 那么觸摸屏上任意一點采樣坐標( x, y) 與顯示屏坐標( xd ,, yd )的對應關系可以按照如下公式計算:

這樣,, 在測得( x1 , y1 )和( x2 ,, y2 ) 點觸摸屏的采樣值后,, 利用上述公式編制校準函數(shù),在觸摸屏工作的過程中,, 計算出實際觸摸點對應的顯示坐標,,完成觸摸屏的校準。

圖4

圖4 觸摸屏的校準

 3 觸摸屏用戶應用程序

創(chuàng)建的Linux設備文件系統(tǒng)觸摸屏節(jié)點為/dev/ts.在應用程序中,,可以像打開文件一樣用open函數(shù)打開設備文件, 然后用read ()函數(shù)讀取由驅動傳遞到用戶空間的數(shù)據(jù),。儀器應用程序的開發(fā)采用MiniGU I進行,, MiniGU I是由北京飛漫公司開發(fā), 可應用于實時嵌入式系統(tǒng)中的輕量級圖形用戶界面支持系統(tǒng),。其函數(shù)接口與Windows SDK類似,, 開發(fā)方便。

MiniGU I的輸入抽象層( IAL: Input Abstract Layer)提供了對觸摸屏,、鼠標等輸入設備的豐富支持,, 并支持PXA255處理器平臺。只要經(jīng)過簡單的設置就可以在應用程序中使用觸摸屏。配置安裝MiniGU I時,, 使用22enable2px255bial項,, 由于在安裝MiniGU I時采用了內嵌資源的靜態(tài)編譯方式, 所以在編譯之前,, 需在MiniGU I的src / sysres/目錄下建立mgetc2pxa1c 文件,,并在其中用下面語句設置系統(tǒng)參數(shù), 將觸摸屏設為輸入設備,。

static char * SYSTEM_VALUES[ ] = { “ fbcon” ,,“ PX255B” , “ /dev/ ts” ,, “ none” };

MiniGU I對觸摸屏輸入的處理方式如圖5 所示,。

圖5 MiniGU I中的觸摸屏輸入

圖5 MiniGUI 中的觸摸屏輸入

MiniGUI 通過觸摸屏設備驅動程序接收原始的輸入數(shù)據(jù), 把它轉換為MiniGUI 抽象的觸摸屏事件和數(shù)據(jù),。

相關的底層事件處理例程把這些觸摸事件轉換為上層的觸摸消息,, 放到相應的消息隊列中。應用程序通過消息循環(huán)獲取這些消息,, 交由窗口過程處理,。編制針對觸摸屏的應用程序時,需要做的只是在窗口接收到諸如MSG _LBUTTONDOWN 等觸屏消息時,, 調用相應的語句,, 完成預期操作。

4 結論

嵌入式智能儀器觸摸屏接口增強了儀器系統(tǒng)的人機交互功能,,方便了操作人員的使用,; 接口電路和驅動程序的模塊化方便了儀器的后續(xù)改進和新產(chǎn)品的開發(fā),并可根據(jù)需要移植應用到各種不同場合,。設計的觸摸屏接口已經(jīng)成功應用在故障診斷巡檢儀器中,,其工作穩(wěn)定,運行可靠,,具有很好的實用價值,。

此內容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉載,。