觸摸屏 如圖1,典型觸摸屏的工作部分一般由三部分組成:兩層透明的阻性導體層、兩層導體之間的隔離層、電極。阻性導體層選用阻性材料,如銦錫氧化物(ITO)涂在襯底上構成,上層襯底用塑料,下層襯底用玻璃。隔離層為粘性絕緣液體材料,如聚脂薄膜。電極選用導電性能極好的材料(如銀粉墨)構成,其導電性能大約為ITO的1000倍。 圖1 觸摸屏 觸摸屏工作時,上下導體層相當于電阻網絡。當某一層電極加上電壓時,會在該網絡上形成電壓梯度。如有外力使得上下兩層在某一點接觸,則在電極未加電壓的另一層可以測得接觸點處的電壓,從而知道接觸點處的坐標。比如,在頂層的電極(X+,X-)上加上電壓,則在頂層導體層上形成電壓梯度,當有外力使得上下兩層在某一點接觸,在底層就可以測得接觸點處的電壓,再根據該電壓與電極(X+)之間的距離關系,知道該處的X坐標。然后,將電壓切換到底層電極(Y+,Y-)上,并在頂層測量接觸點處的電壓,從而知道Y坐標。四線制電阻觸摸屏也是目前最常用的觸摸屏產品。本系統中選用AMT9502。 觸摸屏控制器硬件設計 Atmega128 單片機是Atmel公司的8位RISC單片機,片內有128Kflash、4K RAM、4K EEPROM、兩個可編程的USART、1個可工作在主機/從機的SPI串行接口。此外還有豐富的I/O接口,8通道10位分辨率ADC轉換器等硬件資源。 單片機最小系統設計如圖2所示。低電壓版本的 Atmega 128支持3.3V、5V兩種供電電壓,本系統采用5V供電,便于供電電壓統一。晶振采用常規直插晶振7.373800M,選用標準晶振的目的主要是為了提高USART通訊波特率的準確性,使單片機能夠使用于比較高的通訊波特率。復位電路采用常規的RC復位,沒有使用特殊的復位器件,Atmega 128已經內置了看門狗,并且可以通過編程使看門狗在程序啟動前啟動,即上電后程序啟動前,看門狗已經啟動,這樣系統的可靠性可以得到保證,看門狗最高分頻系數是2048K,最小分頻系統是16K。系統中PB0(SS)已經直接接到+5V,這樣硬件配置了單片機為主機,下面所有外掛的均為從機,本系統外掛只有一個就是ADS7843。單片機和觸摸屏控制器連接如圖3所示,PB1(CLK) 為SPI時鐘,PB2(MOSI)為SPI主機輸出從機輸入, PB3(MISO)SPI主機輸入從機輸出。這三根線為SPI總線。 圖2 單片機最小系統圖 圖3 單片機和觸摸屏控制器連接圖 ADS7843是TI公司的觸摸屏控制器芯片 專門應用于四線電阻式觸摸屏,最高達到125K的轉換率 8位或者12位可編程精度。外部參考電壓范圍從1V到VCC均可,VCC最高電壓為5V,高速低功耗使得ADS7843非常適合于使用電阻觸摸屏的手持設備。寬溫度設計使得它很適用于大量的工業現場。 ADS7843連接觸摸屏的示意圖如圖4所示。 圖4 ADS7843和觸摸屏連接圖 觸摸屏是一個四線電阻屏幕,可以示意出兩個電阻,測量X方向的時候,將X+,X-之間加上參考電壓Vref,Y-斷開,Y+作為A/D輸入,進行A/D轉換獲得X方向的電壓,同理測量Y方向的時候,將Y+,Y-之間加上參考電壓Vref,X-斷開,X+作為A/D輸入,進行A/D轉換獲得Y方向的電壓,之后再完成電壓與坐標的換算。整個過程類似一個電位器,觸摸不同的位置分得不同的電壓。 以上所需要的加參考電壓斷開A/D轉換等工作都是ADS7843直接完成的,只需要將相應的命令傳輸到ADS7843即可,等待轉換周期完成,檢測到BUSY信號不再忙,即可以獲得相應電壓的數據。 此外PENIRQ一般需要一個上拉電阻,因為ADS7843是一個OC門輸出結構,本系統中直接使用Atmega 128內部的上拉電阻。單片機中斷系統中將INT0分配給觸摸屏控制器,并且設定成低電平觸發,這樣可以檢測按鍵時間,可以用按鍵長短處理不同的功能。 觸摸屏控制器驅動程序 驅動程序的編寫與硬件的設計是直接相關,驅動程序是以上面所設計的硬件為基礎的。 表1 ADS7843的控制字及數據傳輸格式 根據ADS7843的Datasheet,ADS7843的控制字及數據傳輸格式如表1。其中S為數據傳輸起始標志位,該位必為“1”。A2~A0進行通道選擇。MODE用來選擇A/D轉換的精度,“1”選擇8位,“0”選擇12位。SER/選擇參考電壓的輸入模式。PD1、PD0選擇省電模式:“00”省電模式允許,在兩次A/D轉換之間掉電,且中斷允許;“01”同“00”,只是不允許中斷;“10”保留;“11”禁止省電模式。 為了完成一次電極電壓切換和A/D轉換,需要先通過串口往ADS7843發送控制字,轉換完成后再通過串口讀出電壓轉換值。標準的一次轉換需要24個時鐘周期。由于串口支持雙向同時進行傳送,并且在一次讀數與下一次發控制字之間可以重疊,所以轉換速率可以提高到每次16個時鐘周期。如果條件允許,CPU可以產生15個CLK的話(比如FPGA和ASIC),轉換速率還可以提高到每次15個時鐘周期。 所以我們選擇控制字 : 0x94-----X+輸入得到Y AD值 0xe4----Y+輸入得到X AD值 SPI初始化程序: void spi_init(void) { SPCR = 0x53; //setup SPI SPSR = 0x00; //setup SPI } SPI主機傳輸函數: void SPI_MasterTransmit(char cData) { SPDR = cData; /* 啟動數據傳輸 */ while(!(SPSR & (1< } 讀取ADS7843的模擬量值; unsigned int Get_Touch_Ad(unsigned char channel) { unsigned int ad_tem; SPI_MasterTransmit(channel);//發送控制字 if(PING&&0x08==0) ; //判斷busy delayms(1); SPI_MasterTransmit(0); delayms(1); //等待發送完畢 ad_tem=SPDR; ad_tem=ad_tem<<8; SPI_MasterTransmit(0); //啟動spi傳送 delayms(1); //等待發送完畢 ad_tem|=SPDR; ad_tem=ad_tem>>4; return(ad_tem); //返回的參數 } 不同的用戶還需根據自己設計的系統,做一個簡單的四點校正程序,這樣可以獲得一個精確度較高的觸摸屏坐標體系。 結語 本系統已經在國家重點建設項目揚州二電廠工程2×600MW發電機組的自動化設備中得到應用,共使用了64套,運行一年以來使用情況良好。 |