電阻式觸摸屏是一種傳感器,它將矩形區域中觸摸點(X,Y)的物理位置轉換為代表X坐標和Y坐標的電壓。目前,SHARP和其他很多公司生產的LCD模塊都采用了電阻式觸摸屏,這種屏幕可以用四線、五線、七線或八線來產生屏幕偏置電壓,并同時讀回(read back)觸摸點的電壓。
過去,為了將電阻式觸摸屏上的觸摸點坐標讀入微控制器,需要使用一個專用的觸摸屏控制器芯片,或者利用一個復雜的外部開關網絡來連接微控制器的片上(on-chip)模數轉換器(ADC)。夏普公司的LH75400/01/10/11系列和LH7A404等微控制器都帶有一個內建觸摸屏偏置電路的片上ADC,允許觸摸屏傳感器和微控制器之間進行無膠(glue-less)接口。該ADC控制所有的觸摸屏偏置電壓,并在無需CPU干預的情況下記錄全部測量結果。
SHARP微控制器采用了一種逐次逼近寄存器(Successive Approximation Register, SAR)類型的轉換器。
1. SAR結構
雖然SAR的實施方案很多,但它的偏壓結構很簡單,參見圖1。

圖1 簡化的N位SAR結構
該結構將模擬輸入電壓(VIN)保存在一個跟蹤/保持器中,N-bit寄存器被設置為中間值(即100...0,其中最高位被設置為1),以執行二進制查找算法,迫使數模轉換器(DAC)的輸出(VDAC)變為VREF的二分之一,這里VREF為ADC的參考電壓。之后,再執行一個比較操作,以檢查VIN究竟是小于還是大于VDAC:
• 如果VIN小于VDAC,比較器輸出邏輯LOW,N位寄存器的最高位清0。
• 如果VIN大于VDAC,比較器輸出邏輯HIGH(或1),N位寄存器的最高位保持為1。
其后,SAR的控制邏輯移動到下一位,將該位的邏輯強制置于HIGH,再去執行下一次比較。SAR控制邏輯將重復上述順序操作,直到最后一位。當轉換完成時,寄存器中就出現一個N位數碼字符。圖2顯示了一個4位轉換過程的例子,圖中Y軸和粗線表示DAC的輸出電壓。

圖2 4位SAR ADC轉換
在本例中:
• 第一次比較顯示VIN小于VDAC,因此位[3]被置0。隨后DAC被設置為0b0100并執行第二次比較。
• 在第二次比較中,VIN大于VDAC,因此位[2]保持為1。隨后,DAC被設置為0b0110并執行第三次比較。
• 在第三次比較中,位[1]被置0。DAC隨后被設置為0b0101,并執行最后一次比較。
• 在最后一次比較中,由于VIN大于VDAC,位[0]保持為1。
2. SHARP ADC的應用
為了將電阻式觸摸屏上的觸摸點坐標讀入微控制器,需要使用一個專用的觸摸屏控制器芯片,或者利用復雜的外部開關網絡來連接微控制器的片上模數轉換器。SHARP ADC模塊包括:測量結果FIFO的ADC核、正輸入多路復用器、負輸入多路復用器、正參考多路復用器、負參考多路復用器、測量序列發生器,以及一個偏置與控制網絡。
除了LH7A404外,所有微控制器模塊的I/O管腳均穿過GPI MUX。多路復用器允許用戶將每個管腳配置為通用數字輸入或模擬管腳。將ADC模塊I/O管腳配置為數字輸入時,GPI MUX會把一個數字輸入緩沖器連接到這個管腳;而將其配置為模擬管腳時,GPI MUX則把它與數字輸入緩沖器斷開,同時將緩沖器接地。在低功耗應用中,為了盡量減少漏電流,既可以將所有未使用的ADC I/O管腳都接地,也可以將未使用的ADC I/O管腳編程為模擬管腳。本文假設ADC模塊中所有需要的I/O管腳都已被設置為模擬管腳。
對于LH75400/01/10/11系列器件,ADC的正輸入多路復用器可以對所有8個ADC管腳(AN0~AN4、AN6、AN8和AN9)中的任何一個進行采樣;對于LH7A404,ADC的正輸入多路復用器可以對所有10個ADC管腳的任何一個進行采樣。為了節省LH75400/01/10/11的管腳,SHARP只引出了10個管腳中的8個,因此LH75400/01/10/11系列的模擬管腳序號不是完全連續的。在所有的芯片上,負輸入多路復用器可以選擇負參考輸入或VSSA_ADC作為ADC的負輸入,正參考多路復用器可以選擇片上參考或三個外部管腳之一作為正參考,負參考多路復用器則可選擇VSSA_ADC或三個其它外部管腳作為負參考。這些多路復用器將模擬輸入連接到SAR ADC的內核。
通過低阻模擬開關,ADC的偏置與控制網絡可以將模擬管腳切換到VDDA_ADC或VSSA_ADC。另外,偏置與控制網絡也可以將弱上拉電阻切換到AN0和AN4管腳。圖3為偏置與控制網絡結構圖。需要注意的是,LH7A404的11到1多路復用器還有另外兩個模擬輸入。

圖3 LH75400/01/10/11 ADC的偏置與控制網絡
啟動測量后,測量序列發生器將控制整個過程,包括需要激活哪些模擬開關來偏置觸摸屏、什么時候激活這些開關、使用哪些管腳作為ADC內核的模擬輸入、采樣間隔為多長等等。A2DCLK時鐘信號決定序列發生器和ADC內核的時基。A2DCLK頻率通過電源配置寄存器進行編程。
測量序列發生器是一個狀態機,它向偏置與控制網絡、多路復用器和模擬內核發送信息。序列發生器發送的信息稱為控制字(control word),長度為32位。由于ADC的片上數據總線只有16位,所以控制字被分開保存在控制高位字寄存器(control high word register)和控制低位字寄存器(control low word register)中。要查看序列發生器發送給ADC其余部分信號的當前狀態,可以讓程序讀取控制高位字寄存器和控制低位字寄存器。
控制高位字寄存器中包含了正負輸入多路復用器、正參考多路復用器和測量建立時間的當前設置,控制低位字寄存器中則含有負參考多路復用器和偏置與控制網絡的控制位當前狀態。
測量序列發生器狀態機在開始時為IDLE(空閑)狀態。在空閑狀態期間,控制高位字包含了空閑高字節值,控制低字包含空閑低字節值,這意味著空閑低字節設置的是偏置與控制網絡中的開關狀態。當觸摸屏被觸摸而觸發測量時,狀態機將等待空閑高位字寄存器中空閑時間字段所設定的A2DCLK周期數。之后,如果ADC仍然檢測到觸摸屏上有觸摸動作,序列發生器將前進到GET_DATA狀態。
在GET_DATA狀態,測量序列發生器從控制區數組中取出控制字,控制區是一個包含16個控制高位字數值和16個控制低位字數值的數組。序列發生器使用索引號0到15來訪問控制區。電源配置寄存器的NOC字段設定為序列發生器將要從控制區讀取的總次數減1。
序列發生器進入GET_DATA狀態時,控制區索引號為0。序列發生器從控制區高位字加載控制高位字,并從控制區低位字加載控制低位字,控制低位字中的新值使偏置與控制網絡中的開關切換到編程設定的狀態。新的控制字加載完成之后,序列發生器進入WAIT_CONV狀態。在WAIT_CONV狀態,序列發生器將等待控制區高位字建立時間字段中編程設定的A2DCLK周期數,這給觸摸屏的電壓、偏置和控制開關設置提供了穩定時間。隨后,ADC內核執行一次測量操作,測量結束時,ADC內核發出信號,示意測量序列發生器讀取轉換結果。測量序列發生器前進到END_OF_SEQ狀態,讀取轉換結果,保存到結果FIFO,并將控制區索引號加1。
這個以讀出新控制字為開始、保存測量結果為結束的過程重復執行,直到序列發生器進行了電源配置寄存器NOC字段所設定的測量次數為止。當序列所有測量完成之后,序列發生器將設置中斷狀態寄存器中的EOSINTR_UM位。
測量序列發生器可以編程為檢測到觸摸屏被觸摸時觸發,在這種模式下,只要屏幕上檢測到觸摸動作,序列發生器便會自動重新觸發。測量序列發生器也可以設定為由軟件命令觸發或連續觸發。
3. 連接與編程
(1)基本ADC設置
無論要測量哪一種類型的觸摸屏,都應當配置測量序列發生器,執行下列步驟:
• 行觸摸檢測;
• 測量X;
• 測量Y;
• 重復進行觸摸檢測。
其中有一個假設,即如果測量序列開始時你正摸著屏幕,測量序列結束時還在觸摸,就認為整個測量X和Y期間都在觸摸屏幕。
為了測量是否觸摸了屏幕,需要對偏置與控制網絡進行編程,將一個弱上拉電阻連接到AN0管腳,并將一個強下拉電阻連接到AN4管腳(對五線和七線觸摸屏)或AN3管腳(對四線和八線觸摸屏),將參考輸入多路復用器設為使用片上的2.0V參考。 將正輸入多路復用器編程為測量AN0,負輸入與負參考相同。例如,如果選擇的測量閾值為三分之一滿量程,那么當AN0上的電壓為2.0V÷3=0.66V時將會檢測到一次觸摸。在3.3V范圍內,它有足夠的噪聲余量。
用戶可能遇到的問題是,上拉電阻將觸摸屏上拉到VDDA_ADC的過程可能非常緩慢,解決的方法是,在測量觸摸狀態之前,用偏置與控制網絡中的強上拉位2對AN0管腳預先充電。此時如果觸摸面板受到觸摸,測量序列發生器在下一步驟中切換進來的強下拉將很快把AN0拉下來;如果沒有觸摸面板,那么在觸摸檢測測量期間,弱上拉將把AN0管腳保持在VDDA_ADC。
(2)四線觸摸屏的連接與編程
四線觸摸屏的編程步驟如下:
• 將所有的可寫ADC寄存器編程為0;
• 在FIFO狀態寄存器FEMPTY(2)位為0時,通過對結果寄存器進行讀數,沖洗FIFO結果;
• 對芯片寄存器進行編程;
• 使用注冊碼或中斷驅動型算法。
(3)五線觸摸屏的連接與編程
五線觸摸屏的編程步驟如下:
?將所有的可寫ADC寄存器編程為0;
?在FIFO狀態寄存器FEMPTY(2)位為0時,通過對結果寄存器進行讀數,沖洗FIFO結果;
?對芯片寄存器進行編程;
?使用注冊碼或中斷驅動型算法。
(4)七線觸摸屏的連接與編程
七線觸摸屏的編程步驟如下:
• 將所有的可寫ADC寄存器編程為0;
• 在FIFO狀態寄存器FEMPTY(2)位為0時,通過對結果寄存器進行讀數,沖洗FIFO結果;
• 對芯片寄存器進行編程;
• 使用注冊碼或中斷驅動型算法。
(5)八線觸摸屏的連接與編程
八線觸摸屏的編程步驟如下:
• 將所有的可寫ADC寄存器編程為0;
• 在FIFO狀態寄存器FEMPTY(2)位為0時,通過對結果寄存器進行讀數,沖洗FIFO結果;
• 對芯片寄存器進行編程;
• 使用注冊碼或中斷驅動型算法。
(6)將結果FIFO值轉換為電壓和屏幕坐標
通過以下功能,可以將結果FIFO回歸為16位數字:
• 最高位的10個位為ADC結果;
• 測量時,最后4個位為控制區陣列的索引;
• 位4和位5備用;
• 隔離轉換結果時,將從結果FIFO讀取的數值轉化為正好6的倍數;
• 為了將一個測得的FIFO值轉換為電壓值,先將右移的測量結果乘以參考電壓(全量程電壓),再除以0X3FF(全量程轉換)。
• 為了將一個X軸坐標測量結果轉換為屏幕坐標,先將右移結果寄存器的值乘以屏幕寬度,再除以0X3FF。
• 為了將一個Y軸坐標測量結果轉換為屏幕坐標,先將右移結果寄存器的值乘以屏幕高度,再除以0X3FF。
• 將觸摸屏測量結果轉換為LCD像素坐標時,會出現一些問題,其中有些是由ADC引起的,有些是由于觸摸屏與LCD之間的物理連接引起的。
4. 系統優化
系統一旦運行,就必須不斷調整,使系統性能達到最佳。
(1)A2DCLK頻率、IDLE時間及設置時間程序
調整A2DCLK頻率、空閑(IDLE)時間和設置時間的目的,是在測量精度、誤測觸發預防/觸摸靈敏度、能耗之間進行權衡。A2DCLK頻率可以在200KHz與2MHz之間,否則,ADC就不能正常工作。
為了使測量精度最大化,使誤測觸發最小化,程序應該盡可能像A2DCLK一樣慢,像設置時間和空閑時間一樣長。
另一方面,在測量觸摸屏的最大能耗時,ADC應該偏置于阻性層,一邊偏壓為0V,另一邊偏壓為VDD_ADC。由于在整個設置時間內,屏幕始終處于偏壓狀態,最小化的設置時間和最大化的A2DCLK可以使屏幕的偏壓狀態盡可能短。
為了使觸摸到觸發某一測量之間的時間盡可能短,應該使空閑時間盡可能短。
(2)提高信噪比
電阻觸摸屏可能是一個很好的噪聲收集器。當用戶將某一物體拖過屏幕的時候,就能觀察到噪聲的存在,這時即使鋼筆處于完全靜止狀態,也能觀察到屏幕晃動。
由于觸摸屏正好位于LCD的頂部,因此會受到LCD定時信號和背光/前光轉換器噪聲的影響。同時,由于觸摸屏外表面大部分暴露于外界,環境噪聲的影響也非常重要。必須牢記的是,對于一個參考電壓為3.3V的10位ADC來說,只能考慮3.2mV以下的噪聲,測量誤差的增加不能超過1個最小有效位(Least Significant Bit,LSB)。
如果出現噪聲問題,可以在偏壓電路中增加電容和磁珠。由于偏壓線路和測量線路是相互分離的,5線、7線和8線觸摸屏允許在嚴重噪聲環境中,為ADC的輸入端加入動態濾波器。但是,測量線路應用的濾波越多,所需要的設置時間就可能越長。
本文假設對于每一個坐標對,在X軸和Y軸方向分別進行4次測量。由于每一次測量都會耗能,如果環境不是太嘈雜,或者不需要極高的測量精度,最好將X軸和Y軸的測量次數降低為1。