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

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

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

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