
傳感器APDS9930為具有兩種傳感功能的芯片,一方面能夠反映周圍環(huán)境的亮度,另一方面能根據(jù)紅外測距的原理能夠感應(yīng)物體的靠近。其廣泛應(yīng)用于手機,幫助手機做到根據(jù)環(huán)境光照強度調(diào)節(jié)屏幕背光亮度以及接聽電話自動鎖屏等功能。
APDS9930封裝有8個腳,電和地各一個腳,I2C通信一個數(shù)據(jù)腳一個時鐘腳,還有一個中斷腳,可以根據(jù)用戶設(shè)置的光照強度或者接近閾值來觸發(fā)中斷,還有腳LEDA和LEDK分別為芯片內(nèi)部紅外發(fā)光二極管的陽極和陰極,陰極一般直接連接芯片的最后一個腳:LDR。這個腳會根據(jù)用戶的設(shè)置來產(chǎn)生不同頻率的驅(qū)動信號來驅(qū)動發(fā)光二極管。
使用這個芯片獲取環(huán)境光照強度手冊說的比較清楚了,我們就簡單說一下接近傳感這一部分,芯片使用I2C與MCU通信,我這邊的實現(xiàn)考慮移植性以及功能需求,決定采用IO口模擬的方式來實現(xiàn)與傳感器通信。NXP 半導(dǎo)體(原 Philips半導(dǎo)體)于 30 多年前發(fā)明了一種簡單的雙向二線制串行通信總線,這個總線被稱為現(xiàn)在被稱為I2C 總線。關(guān)于I2C總線的詳細介紹詳見https://www.nxp.com/docs/en/user-guide/UM10204.pdf?fsrch=1&sr=1&pageNum=1。
I2C通信舉個配置 APDS9930的例子簡單說明。首先控制SLC和SDA發(fā)送I2C開始標(biāo)志,然后發(fā)送從機地址(0x39)以及寫入標(biāo)志,然后等待一個數(shù)據(jù)位的ACK。然后發(fā)送8位數(shù)據(jù)COMMAND.這8位數(shù)據(jù)表明寫入的寄存器地址以及操作方式(自增地址模式等),等待ack。然后發(fā)送要寫入的8位數(shù)據(jù)以及等待ack,最后發(fā)送結(jié)束標(biāo)志。
我們需要用I2C總線,去配置寄存器Enable Register,使能接近傳感功能,Proximity Time Control Register寄存器以及Wait Time Register,配置積分轉(zhuǎn)換時間以及狀態(tài)機輪轉(zhuǎn)等待時間,以及Proximity Pulse Count Register和Control Register寄存器,配置紅外二極管的驅(qū)動脈沖數(shù)及電流等。下面列出跟接近傳感功能相關(guān)的參數(shù)的意義。
PTIME:接近傳感器ADC的積分轉(zhuǎn)化時間,以2.73為一個單位時間。他決定了AD輸出的最大Count值,雖然固定積分時間越高,在有效量程的基礎(chǔ)上分辨率會有所提高,但是鑒于其會提升累計誤差的副作用,建議還是將這個參數(shù)設(shè)置為最低的時間2.73ms,對應(yīng)的AD輸出MAX_Count為1023。它并不能使有效量程改變。
PGAIN: 傳感器ADC的積分轉(zhuǎn)化比例。他決定了AD輸出與距離之間的比例,轉(zhuǎn)化比例越大,距離的變化對AD輸出的Count值影響會越明顯紅外的有效量程的起點和終端都會增大,對起點與終點在別的參數(shù)為手冊推薦的時候,增大的比較明顯。有效的量程會有些許增大。但是受干擾的可能性也會變大。
PDRIVE:接近紅外LED驅(qū)動電流大小,分為100mA到12.5mA四個檔位,推薦參數(shù)為100mA,當(dāng)調(diào)整為此參數(shù)更小的時候,有效量程的起點和重點都會明顯的縮短,并且量程會減小。在區(qū)分離傳感器極近距離的mm級別距離變化的時候用到電流值較小。
PPULSE: 在Prox Accum狀態(tài)時,驅(qū)動接近紅外傳感的脈沖數(shù),其對起點與終點有明顯的更改,有效的量程會有些許增大。但是受干擾的可能性也會變大。手冊做的調(diào)整這個參數(shù)的實驗數(shù)據(jù)截圖如下:
由上圖可以看出,傳感器會根據(jù)所射向物體的不同灰度有不同的表現(xiàn)。
我們的接近功能的實現(xiàn)就利用AD輸出滿量程的這段距離。舉個例子,如上圖的8P的配置,灰度在18%~90%之間,其AD從滿量程往下衰減的距離為4cm~8cm,及當(dāng)物品在4cm~8cm之間的距離時,將會從寄存器Proximity DATA Register讀出的AD值為滿量程,用來區(qū)分物體是否接近。