【導讀】本應用筆記討論了Maxim MAX44000接近檢測傳感器在手持式觸摸屏應用中的優勢,介紹了設計中的注意事項。包括如何降低系統中的串擾、改善噪聲抑制、減輕應用處理器的負荷。附錄給出了有關門限滯回設置的C程序代碼。
為什么使用接近檢測傳感器?
觸摸屏已普遍用于各種手持式電子設備,不僅僅局限于智能手機。觸摸屏在大大改善設備功能性的同時,也帶來了諸多新的挑戰,包括知道如何以及何時響應觸摸屏操作。例如,當手機靠近用戶臉頰時,屏幕必須了解如何對其做出反應;否則,觸摸屏無意接觸到人耳或臉頰時,可能會被錯誤地解析成用戶輸入。
為了避免這一問題,最常見的方法是在手機上集成一個接近檢測傳感器(同時也增加了設備功能)。當接近檢測傳感器的讀數達到一定的門限要求,而且用戶正在通電話時,傳感器可以關閉觸摸屏。
相對于分立式解決方案,提供數字輸出的紅外接近檢測傳感器芯片(例如MAX44000)大大簡化了這一功能的實施。
Maxim接近檢測傳感器的關鍵優勢
Maxim的接近檢測傳感器具有眾多優勢。舉例來說,紅外發射器配置為吸電流,而非源出電流。便于用戶合理選擇LED的供電電壓,優化LED性能和功耗(圖1)。
圖1. MAX44000典型電路,包括LED。
由于MAX44000系列產品提供I²C接口,可以方便地通過這一靈活的總線將傳感器集成到多數嵌入式系統。此外,器件支持硬件中斷。這兩項功能可確保傳感器無縫集成到大多數手持設備,同時也將傳感器信息處理所占用的處理器資源降至最少。
不僅如此,Maxim的接近檢測傳感器還內置了更多功能。例如,MAX44000在6引腳單芯片內集成了環境光檢測傳感器和接近檢測傳感器。諸如此類的解決方案避免了在實現全部光傳感器功能是使用多個傳感器。
設計考慮
MAX44000采用小尺寸、2mm x 2mm x 0.6mm、UDFN-Opto封裝,有助于用戶節省尺寸敏感應用的空間。此外,傳感器提供LED驅動電路,但需要用戶提供發射二極管的供電電源。吸電流配置下,該電路可驅動0mA至110mA電流流過發射二極管,無需外部電路既可完成這一任務。
圖2. MAX44000典型電路,帶有發射器旁路。
使用該功能時需要謹慎設計,特別是當驅動電流較大時。短時間的大電流驅動脈沖使得電源上出現尖峰電流,可能在MAX44000周圍產生噪聲。有兩種方式解決這一問題:對發射二極管進行去耦,或將MAX44000的電源與發射二極管電源隔離開。去耦電容的優點是價格便宜,但缺點是必須非常靠近MAX44000和發射二極管安裝。由于這一方式多數情況下足以解決上述問題,終端用戶應首先嘗試這一方案,然后再考慮采用替代方案。圖2所示電路同時采用了兩種方案,當然,實際應用中并不需要這樣。
設計者必須仔細考慮玻璃對接近檢測傳感器的影響。絕大多數智能手機屏幕上都帶有一個玻璃罩,而且有些手機使用的是黑色玻璃。玻璃對光傳感器的影響主要表現在兩個方面:首先,應該考慮入射到IC環境光傳感器的光強有所衰減;其次,LED的發射光經過玻璃反射后重新回到傳感器,由此可能引入一定串擾(圖3)。
圖3. 串擾示意圖—無擋光板。
圖4. 簡單擋光板的例子。
緩解這一問題的方法有許多種,一種方式是在發射器和接收器之間安裝擋光板(圖4),可大幅降低反射后注入傳感器的光強;另一種方式是使發射器和接收器盡量靠近玻璃,確保電路板沒有反射。
開/關門限的設置
將接近檢測傳感器集成到系統后,一個經常遇到的問題是如何正確選擇接近檢測的門限,以便在用戶通話期間打開或關閉屏幕。門限設置須確保出現錯誤判斷的幾率非常低,而且能夠支持絕大多數使用者的情況。例如,對于淺色頭發的用戶,當手機的接近檢測傳感器面向頭發的方向靠近時,所反射的信號強度要遠遠高于深色頭發。
MAX44000的接近檢測傳感器對于標準的850nm IR發射器具有出色的靈敏度(2.7nW/cm²/LSB)。這意味著MAX44000不僅可以在黑色玻璃的下方有效檢測信號,對于深色頭發的用戶同樣可以保持有效的信號檢測。此外,MAX44000的接近檢測傳感器能夠抑制高達100,000 lux的直射太陽光強,確保室外環境下的工作性能。
最后一項需要考慮的因素是對傳感器增加一個滯回,采取這一措施的原因與在比較器電路增加滯回的原因相同。當輸入信號恰好位于門限附近時,任何噪聲都會造成輸出信號的隨機切換,這是我們不希望發生的現象。接近檢測傳感器也是如此。
一種簡單(但功耗較大)的軟件實施方案是定期輪詢傳感器,如果超出門限的計數值達到一定限值,而且屏幕是打開的,則關閉屏幕;否則,如果屏幕已關閉,則將其打開。初看起來這種方式是可行的,但用戶握持設備的方式可能造成計數值在門限附近波動,導致屏幕錯誤地打開或關閉。
解決問題的一種方法是在軟件中設置滯回。例如,如果計數值達到150次(假設接近檢測傳感器工作于8位模式)或以上時,控制觸摸屏從“開”至“關”;那么,只有當計數值下降到135次或以下時,才控制觸摸屏從“關”至“開”。此外,在一段時間保持這種電平的相關性非常有用,其作用相當于一個低通濾波器,可以降低噪聲引起的誤操作。
MAX44000的內部寄存器支持這種方法:
如果已經使能中斷(對于接近檢測和ALS,寄存器0x01,1:0位),這些寄存器可以設置芯片使其無需通過I²C不斷輪詢傳感器。如上所述,可利用寄存器0x0A的第2位和第3位設置中斷之前的延遲。延遲可以是通過門限后的1、4、8或16個連續采樣。寄存器0x0B和0x0C設置門限,以及觸發中斷的計數值為高于門限的數值還是低于門限的數值。
附錄提供了增加滯回以及中斷的例程。通過I²C總線進行讀、寫操作時,應注意器件在多次讀/寫操作時不會自動遞增寄存器地址,而是由軟件手動實現,盡管這種方式比較繁瑣。讀取I²C兼容器件的多個寄存器數據時,需要謹慎操作,以免發生錯誤。詳細信息請參閱應用筆記5033:“嚴謹至上(通過I²C接口讀取ADC數據)”。
附錄A:門限滯回例程
#define MAX44000_ADDR 0x94
#define INT_STATUS_REG 0x00
#define OFF_THRESHOLD 4600
#define OFF_DELAY 1
#define ON_THRESHOLD 4000
#define ON_DELAY 3
uint8 screenStatus; // 0 means off, 1 means on
/*
i2cWriteBytes()
Arguments:
uint8 address - device address
uint8 start_reg - register where the first byte is written
uint8 *data - data to write
uint8 nbytes - number of bytes to write
Consecutively writes several bytes to some i2c device starting at some
specified address -- implemented elsewhere
*/
void i2cWriteBytes(uint8 address,uint8 start_reg,uint8 *data,uint8 nbytes);
/*
MAX44000InterruptHandler()
以下代碼用于實現MAX44000 INT引腳的中斷處理,假設MAX44000的接近檢測傳感器設置為14位模式,并已使能中斷。此外,假設屏幕狀態初始化為1或0,詳細信息請參閱數據資料的寄存器說明部分。
*/
void MAX44000InterruptHandler() {
uint8 i2cData[3];
i2cRead1Byte(MAX44000_ADDR,INT_STATUS_REG,&i2cData);
if (i2cData&0x01 != 0)
return; // check to make sure interrupt really fired
// this simultaneously clears the interrupt flag
if (screenStatus) {
i2cData[0] = ON_DELAY;
i2cData[1] = ON_THRESHOLD >> 8 & 0xBF; // set ABOVE = 0
i2cData[2] = ON_THRESHOLD & 0xFF;
} else {
i2cData[0] = OFF_DELAY;
i2cData[1] = OFF_THRESHOLD >> 8 | 0x40; // set ABOVE = 1
i2cData[2] = OFF_THRESHOLD & 0xFF;
} // set the new threshold depending on what the screen status was
// set the delay and threshold after each interrupt
i2cWriteBytes(MAX44000_ADDR,0x0A,i2cData,3);
return;
} // MAX44000InterruptHandler
本文來源于Maxim。
推薦閱讀: