ADPD188BI 是完整的光電式測(cè)量系統(tǒng),適合采用光學(xué)雙波長(zhǎng)技術(shù)的煙霧檢測(cè)應(yīng)用。 該模塊集成了高效率光電式測(cè)量前端、藍(lán)光和紅外(IR)發(fā)光二極管(LED)以及一個(gè)光電二極管,這些元件包含在定制封裝中,光線必須先進(jìn)入煙霧檢測(cè)室,而無(wú)法直接從LED到達(dá)光電二極管 。 ADPD188BI與EVAL-CHAMBER煙霧室配合使用,可創(chuàng)建一套完整的光學(xué)煙霧檢測(cè)解決方案,適用于住宅和工業(yè)煙霧探測(cè)器。 EVAL-CHAMBER可通過(guò)訂購(gòu)EVAL-ADPD188BIZ-S2購(gòu)買(mǎi)。
本應(yīng)用筆記說(shuō)明如何使用已寫(xiě)入片內(nèi)非易失性存儲(chǔ)器(NVM)的校準(zhǔn)系數(shù)來(lái)校準(zhǔn)ADPD188BI,從而將器件之間的差異降低至±10%以下。
對(duì)于特定的LED驅(qū)動(dòng)器設(shè)置和測(cè)試/應(yīng)用環(huán)境,ADPD188BI的LED響應(yīng)會(huì)表現(xiàn)出器件間差異。 LED響應(yīng)的斜率(增益)和截距(失調(diào))隨器件而異,導(dǎo)致不同器件對(duì)同一環(huán)境的響應(yīng)存在差異,這可以利用增益和失調(diào)校準(zhǔn)系數(shù)進(jìn)行校準(zhǔn)。 這種校準(zhǔn)的主要應(yīng)用是可以對(duì)最終應(yīng)用中實(shí)例化的多個(gè)器件的輸出進(jìn)行更有效的比較。 此校準(zhǔn)可顯著減少器件之間的光學(xué)變化帶來(lái)的測(cè)量差異,并簡(jiǎn)化對(duì)應(yīng)用環(huán)境特定的變化的觀測(cè)。
校準(zhǔn)ADPD188BI
測(cè)試方法
每對(duì)LED/驅(qū)動(dòng)器會(huì)有多個(gè)LED電流進(jìn)入反射器,反射器的響應(yīng)由ADPD188BI模塊內(nèi)部的光電二極管測(cè)量。 針對(duì)每對(duì)LED/驅(qū)動(dòng)器計(jì)算響應(yīng)的斜率,截距從線性回歸得出。 然后計(jì)算校準(zhǔn)系數(shù),并將其存儲(chǔ)在片內(nèi)NVM(也稱為eFuse寄存器)中,以供以后在最終應(yīng)用中使用。 校準(zhǔn)系數(shù)基于特定器件的每脈沖測(cè)量值計(jì)算,歸一化為從不同器件收集到的大量數(shù)據(jù)分布的平均值。 這種歸一化確保了大量器件中器件間的差異較小。
讀取eFuse寄存器
失調(diào)和增益校準(zhǔn)系數(shù)存儲(chǔ)在片內(nèi)eFuse寄存器中。 增益校準(zhǔn)系數(shù)LED1_GAIN_ COEFF和LED3_GAIN_COEFF分別存儲(chǔ)在寄存器0×71和0×72中。 失調(diào)校準(zhǔn)系數(shù)LED1_INT_COEFF和LED3_INT_COEFF分別存儲(chǔ)在寄存器0×73和寄存器0×74中。
要訪問(wèn)eFuse寄存器,請(qǐng)執(zhí)行以下步驟:
- 設(shè)置寄存器0×4B的位7 = 1以使能32 kHz振蕩器。
- 將0×1寫(xiě)入寄存器0×10以強(qiáng)制器件進(jìn)入編程(空閑)模式。
- 將0×1寫(xiě)入寄存器0×5F以使能32 MHz先進(jìn)先出(FIFO)時(shí)鐘。
- 將0×7寫(xiě)入寄存器0×57以使能對(duì)eFuse寄存器的訪問(wèn)。
- 當(dāng)寄存器0×67 = 0×04時(shí),eFuse寄存器的刷新完成,可以隨時(shí)對(duì)其進(jìn)行讀取。
- 應(yīng)用校準(zhǔn)系數(shù)之前,須對(duì)eFuse數(shù)據(jù)應(yīng)用糾錯(cuò)碼(ECC)函數(shù)(參閱使用ECC檢測(cè)和校正EFUSE值的錯(cuò)誤部分)。
- 確認(rèn)模塊ID 30、模塊ID 31、模塊ID 33或以上的寄存器0×70的內(nèi)容分別為0×1E、0×1F、0×21或更大。
- 讀取所需LED/驅(qū)動(dòng)器對(duì)的增益和失調(diào)校準(zhǔn)系數(shù)。 使用eFuse寄存器的內(nèi)容,按照“計(jì)算校準(zhǔn)系數(shù)”部分中所述計(jì)算最終增益校準(zhǔn)系數(shù)。 得出最終增益校準(zhǔn)系數(shù)后,將其載入用戶可訪問(wèn)的存儲(chǔ)器中以備將來(lái)使用。
- 完成對(duì)eFuse寄存器的讀取后,按照以下方式禁用eFuse寄存器:
- 將0×0寫(xiě)入寄存器0×57以禁用對(duì)eFuse寄存器的訪問(wèn)。
- 將0×0寫(xiě)入寄存器0×5F以禁用32 MHz FIFO時(shí)鐘。
計(jì)算模塊ID 30和模塊ID 31的校準(zhǔn)系數(shù)
最終校準(zhǔn)系數(shù)必須使用寄存器0x71至寄存器0x74的內(nèi)容來(lái)計(jì)算,如下式所示:
GAIN_CAL_X = DEVICE_SCALAR/NOMINAL_SCALAR
其中:
DEVICE_SCALAR = x_GAIN × LEDx + x_INTERCEPT。
x_GAIN對(duì)于藍(lán)光通道LED為BLUE_GAIN,對(duì)于IR LED通道為IR_GAIN。
BLUE_GAIN = (17/256)(LED1_GAIN_COEFF ? 112) + 17。
IR_GAIN = (34/256)(LED3_GAIN_COEFF ? 112) + 34。
LEDx是以毫安為單位的LED驅(qū)動(dòng)電流; 例如,若驅(qū)動(dòng)電流 = 200 mA,則輸入200。 LEDx對(duì)于藍(lán)光LED通道為L(zhǎng)ED1,對(duì)于IR LED通道為L(zhǎng)ED3
x_INTERCEPT對(duì)于藍(lán)光LEDBLUE_INTERCEPT,對(duì)于IR_INTERCEPT通道為IR_INTERCEPT。
BLUE_INTERCEPT = 8(LED1_INT_COEFF ? 128)。
IR_INTERCEPT = 5(LED3_INT_COEFF ? 128)。
NOMINAL_SCALAR = x_MEAN_GAIN × LEDx + x_MEAN_INTERCEPT。
x_MEAN_GAIN對(duì)于藍(lán)光LED通道為17,對(duì)于IR LED通道為34。
x_MEAN_INTERCEPT對(duì)于藍(lán)光LED通道為622,對(duì)于IR LED通道為128。
表1.模塊ID 30和ID 31的eFuse寄存器的內(nèi)容| 地址 | 名稱 | 位 | 描述 |
| ------------------------ | ------ | ---- | ------ |
| 0×70 | MODULE_ID | [7:0] | 模塊 ID = 30 或 31 |
| 0×71 | LED1_GAIN_COEFF | [7:0] | 藍(lán)光LED增益系數(shù) |
| 0×72 | LED3_GAIN_COEFF | [7:0] | IR LED增益系數(shù) |
| 0×73 | LED1_INT_COEFF | [7:0] | 藍(lán)光LED截距系數(shù) |
| 0×74 | LED3_INT_COEFF | [7:0] | IR LED截距系數(shù) |
| 0×7E | 等 | [7:0] | 等 |
計(jì)算模塊ID 33的校準(zhǔn)系數(shù)
最終校準(zhǔn)系數(shù)必須使用寄存器0x71至寄存器0x74的內(nèi)容來(lái)計(jì)算,如下式所示:
GAIN_CAL_X = DEVICE_SCALAR/NOMINAL_SCALAR
其中:
DEVICE_SCALAR = x_GAIN × LEDx + x_INTERCEPT。
x_GAIN對(duì)于藍(lán)光LED通道為BLUE_GAIN,對(duì)于IR LED通道為IR_GAIN。
BLUE_GAIN = (21/256)(LED1_GAIN_COEFF ? 112) + 21。
IR_GAIN = (42/256)(LED3_GAIN_COEFF ? 112) + 42。
LEDx是以毫安為單位的驅(qū)動(dòng)電流; 例如,若驅(qū)動(dòng)電流 = 200 mA,則輸入200。 LEDx對(duì)于藍(lán)光LED通道為L(zhǎng)ED1,對(duì)于IR LED通道為 LED3 。
x_INTERCEPT對(duì)于藍(lán)光LED通道為BLUE_INTERCEPT,對(duì)于IR LED通道為IR_INTERCEPT。
BLUE_INTERCEPT = 8(LED1_INT_COEFF ? 80)。
IR_INTERCEPT = 5(LED3_INT_COEFF ? 80)。
NOMINAL_SCALAR = x_MEAN_GAIN × LEDx + x_MEAN_INTERCEPT。
x_MEAN_GAIN對(duì)于藍(lán)光LED通道為21,對(duì)于IR LED通道為42。
x_MEAN_INTERCEPT對(duì)于藍(lán)光LED通道為753,對(duì)于IR LED通道為156。
校準(zhǔn)32 kHz和32 kHz振蕩器以獲得出色的系統(tǒng)性能
校準(zhǔn)32 kHz和32 MHz片內(nèi)振蕩器以獲得出色的性能。 32 kHz振蕩器確定ADPD188BI的整體采樣速率,32 MHz振蕩器則影響ADPD188BI的總增益。 對(duì)于模塊ID = 33的器件,讀取eFuse寄存器(寄存器0×77和寄存器0×78),并將這些值分別寫(xiě)入器件寄存器0×4B和寄存器0×4D。 或者,用戶也可按照ADPD188BI數(shù)據(jù)手冊(cè)中所述的32 kHz和32 MHz時(shí)鐘校準(zhǔn)程序手動(dòng)確定最優(yōu)設(shè)置。
A基于模塊ID應(yīng)用正確的方程
為實(shí)現(xiàn)優(yōu)質(zhì)操作,讀取eFuse寄存器0×70以確定模塊ID并應(yīng)用合適的方程。 下面是用戶軟件一部分的條件語(yǔ)句示例。
檢查模塊 ID 案例(模塊 ID
):
對(duì)于ID 30和31案例30,31
:
GAIN_CAL_BLUE =(使用計(jì)算模塊 ID 30 和模塊 ID 31 的校準(zhǔn)系數(shù)中顯示的方程式)GAIN_CAL_IR =(使用計(jì)算模塊 ID 30 和模塊 ID 31 的校準(zhǔn)系數(shù)中顯示的方程式)
對(duì)于 ID 33
案例 33:
GAIN_CAL_BLUE =(使用計(jì)算模塊 ID 33 的校準(zhǔn)系數(shù)中顯示的公式) GAIN_CAL_IR =(使用計(jì)算模塊 ID 33 的校準(zhǔn)系數(shù)中顯示的公式)
案例待定 1:離開(kāi)以備將來(lái)擴(kuò)展 案例待定 2:離開(kāi)以備將來(lái)擴(kuò)展
默認(rèn)值:引發(fā)錯(cuò)誤
表2.模塊ID 33的eFuse寄存器的內(nèi)容| 地址 | 名稱 | 位 | 描述 |
| ------------------------ | ------ | ---- | ------ |
| 0×70 | MODULE_ID | [7:0] | 模塊ID = 33 |
| 0×71 | LED1_GAIN_COEFF | [7:0] | 藍(lán)光LED增益系數(shù) |
| 0×72 | LED3_GAIN_COEFF | [7:0] | IR LED增益系數(shù) |
| 0×73 | LED1_INT_COEFF | [7:0] | 藍(lán)光LED截距系數(shù) |
| 0×74 | LED3_INT_COEFF | [7:0] | IR LED截距系數(shù) |
| 0×77 | 32kHz_OSC_OPT_ADJUST | [7:0] | 32 kHz振蕩器最優(yōu)調(diào)整設(shè)置 |
| 0×78 | 32MHz_OSC_OPT_ADJUST | [7:0] | 32 MHz振蕩器最優(yōu)調(diào)整設(shè)置 |
| 0×7E | 等 | [7:0] | 等 |
應(yīng)用校準(zhǔn)系數(shù)
要在最終應(yīng)用中應(yīng)用校準(zhǔn)系數(shù),請(qǐng)執(zhí)行以下步驟:
- 根據(jù)需要配置ADPD188BI器件。
- 將0x2寫(xiě)入地址0x10以開(kāi)始正常采樣操作。
- 在所需LED的電平下進(jìn)行測(cè)量并執(zhí)行以下計(jì)算:
歸一化輸出(LSBs) = AFE_OUT/GAIN_CAL_x
其中:
AFE_OUT = LED亮起時(shí)的原始輸出測(cè)量值。
GAIN_CAL_x對(duì)于藍(lán)光LED通道為GAIN_CAL_BLUE,對(duì)于IR LED通道為GAIN_CAL_IR。
應(yīng)用校準(zhǔn)系數(shù)可大大減小器件之間的差異。 圖1和圖2顯示了校準(zhǔn)前后藍(lán)光LED和IR LED的直方圖。 圖1和圖2說(shuō)明,在兩種情況下,器件間差異的分布范圍縮小到±10%以下。
圖2.校準(zhǔn)前后的IR LED響應(yīng)
eFuse內(nèi)容對(duì)器件正常操作的影響
寫(xiě)入ADPD188BI eFuse寄存器的校準(zhǔn)系數(shù)不會(huì)改變器件性能或規(guī)格。 所有數(shù)據(jù)手冊(cè)規(guī)格和器件性能本質(zhì)上不受eFuse寄存器編程的影響。
校準(zhǔn)系數(shù)旨在用于采樣數(shù)據(jù)的后處理,以便校準(zhǔn)器件之間的光學(xué)特性差異。 無(wú)論對(duì)eFuse寄存器進(jìn)行編程與否,ADPD188BI的性能都沒(méi)有差異。 在eFuse寄存器寫(xiě)有校準(zhǔn)系數(shù)的情況下,只有在軟件中對(duì)采樣數(shù)據(jù)實(shí)施后處理校準(zhǔn)程序時(shí),eFuse寄存器中存儲(chǔ)的數(shù)據(jù)才會(huì)對(duì)最終數(shù)據(jù)產(chǎn)生影響。
使用ECC檢測(cè)并校正eFuse值的錯(cuò)誤
“ECC的C代碼”部分中顯示的C代碼包含了使用漢明碼檢測(cè)和校正存儲(chǔ)的eFuse寄存器值中錯(cuò)誤的例程。 這些函數(shù)使用傳統(tǒng)的127120海明碼,截?cái)酁?19112。 其中添加了一個(gè)額外的全局奇偶校驗(yàn)位,以實(shí)現(xiàn)2位故障檢測(cè)以及1位校正。 最終形式是120,112,它將8位奇偶校驗(yàn)碼添加到每個(gè)112位(14字節(jié))塊中。
此代碼可100%檢測(cè)并修復(fù)每個(gè)數(shù)據(jù)塊中的1位錯(cuò)誤,并能100%檢測(cè)到每個(gè)數(shù)據(jù)塊中的2位故障。
方法如下:將eFuse數(shù)據(jù)和奇偶校驗(yàn)字節(jié)讀入本地存儲(chǔ)器。 用戶必須讀取寄存器0×70至寄存器0×7E。 寄存器至寄存器0×7D與輸入指針和數(shù)據(jù)相關(guān)聯(lián),必須將其讀入數(shù)據(jù)數(shù)組。 寄存器與輸入指針和奇偶校驗(yàn)相關(guān)聯(lián),必須作為奇偶校驗(yàn)值讀入。 使用命令驗(yàn)證該塊。 此函數(shù)會(huì)在原位修復(fù)單個(gè)損壞的位。 如果fix_hamm_parity命令返回錯(cuò)誤,則將器件標(biāo)記為已損壞。
此過(guò)程可修復(fù)所有1位故障,檢測(cè)到所有2位故障和約6%的3位故障,并檢測(cè)到大多數(shù)偶數(shù)故障。
回流焊對(duì)校準(zhǔn)系數(shù)的影響
在氧含量不受控制的回流爐中進(jìn)行回流焊時(shí),可能導(dǎo)致光電二極管對(duì)藍(lán)光LED的響應(yīng)降低。 平均而言,每次回流,光電二極管對(duì)藍(lán)光LED的響應(yīng)會(huì)有約7%的偏移。 校準(zhǔn)系數(shù)是在最終測(cè)試時(shí)寫(xiě)入的,先于ADPD188BI的任何回流。 因此,如果ADPD188BI在含氧量不受控制的爐中進(jìn)行回流焊,藍(lán)光系數(shù)便不再準(zhǔn)確。
圖3顯示了在氧含量不受控制的烤箱中回流后的原始藍(lán)光響應(yīng)和校準(zhǔn)后的響應(yīng)。 這組器件經(jīng)過(guò)了三次回流。 數(shù)據(jù)包括每次回流后的測(cè)試數(shù)據(jù)。 從數(shù)據(jù)中可以看出,每次回流后,藍(lán)光LED響應(yīng)約有7%的偏移。

圖3.回流焊期間,不受控制的氧含量引起的藍(lán)光LED響應(yīng)的偏移
為避免響應(yīng)偏移,應(yīng)使用通過(guò)氮?dú)饨档蜖t中氧含量的回流爐。 當(dāng)使用氮?dú)饪刂频幕亓鳡t將氧含量控制在1000 ppm以下時(shí),藍(lán)光LED響應(yīng)不會(huì)因?yàn)榛亓骱赴l(fā)生偏移。
圖4中的數(shù)據(jù)顯示了已在爐中回流三次的器件的原始藍(lán)光LED響應(yīng)值和校準(zhǔn)后的響應(yīng)值,該爐使用氮?dú)獯祾撸鹾拷档椭?000 ppm以下。 數(shù)據(jù)包括每次回流后的測(cè)試數(shù)據(jù)。 如圖所示,在這些情況下,響應(yīng)沒(méi)有因回流而發(fā)生偏移。
無(wú)論爐中的氧含量是否受到控制,IR響應(yīng)都不受回流影響。
!
圖4回流焊期間,通過(guò)氮?dú)獯祾呖刂蒲鹾康那闆r下藍(lán)光LED響應(yīng)的偏移
ECC的C代碼
int generate_hamm_block_parity( data )
int data[ ];
{
// Define parity mapping for parity byte generation/testing
// traditional hamming coding for 127,120 truncated to 120,112
// plus extra parity to make 120,112 code for SECDED.
//
// this table determines which parity bits are involved in each data bit.
// MSB is global "all data parity"
// this function does not include the parity bits in the global bit
// so it can be added differently in the generate_hamm_parity
// and generate_hamm_syndrome functions as needed
const int paritymap [112]={
131, 133, 134, 135, 137, 138, 139, 140, 141, 142,
143, 145, 146, 147, 148, 149, 150, 151, 152, 153,
154, 155, 156, 157, 158, 159, 161, 162, 163, 164,
165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
185, 186, 187, 188, 189, 190, 191, 193, 194, 195,
196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
226, 227, 228, 229, 230, 231, 232, 233, 234, 235,
236, 237, 238, 239, 240, 241, 242, 243, 244, 245,
246, 247 };
//
int bit,byte; // pointers
int h; // parity byte
h=0; // init parity byte
// calculate parity for the 112 data bits according to map
for (byte=0; byte < 14; byte++) {
for (bit=0x0; bit < 8 ; bit++) {
if( (data[byte] & (1< } } } int data[ ],*parity_in; { h=generate_hamm_block_parity(data); // get parity byte for 112 bits // add the parity of the 7 input parity bits into the global if ((*parity_in&(1< } int data[ ]; int *parity; { int calculated_parity; calculated_parity=generate_hamm_syndrome(data,parity); if (syn==0) return(0); // no errors (no fix needed) else return(3); // double error (can't fix) } if (syn>=120) return(3); // also double error // if it gets here there is a single bit data error syn = byte = syn >> 3; } } } 審核編輯:郭婷
return(h); // return the parity byte for the 112bit block only
}
//
//
int generate_hamm_syndrome( data, parity_in )
//
// generate final hamm parity using two steps
// - generate parity for 112 bit data block
// - include input parity into global parity bit
//
int bit; // pointer
int h; // parity byte
for(bit=0;bit<6;bit++) {
return(h); // return the final parity
}
//
// This function checks the data and parity byte
// for consistency and corrects single bit problems
// Return Values:
// - 0 if the data/parity is correct. (NO REPAIR DONE)
// - 1 if there is a single bit error in the data region (REPAIRED)
// - 2 if there is a single bit error in the parity byte (REPAIRED)
// - 3 if there are multiple errors (NO REPAIR DONE)
//
int fix_hamm_parity (data, parity)
int syn, glob;
int bit, byte;
syn=(*parity^calculated_parity)&0x7f;
glob=(*parity^calculated_parity)&0x80;
if(glob==0) {
else {
switch (syn) { // error in lower parity (fix the bit)
case 0: *parity=*parity ^ 0x80; return(2);
case 1: *parity=*parity ^ 0x01; return(2);
case 2: *parity=*parity ^ 0x02; return(2);
case 4: *parity=*parity ^ 0x04; return(2);
case 8: *parity=*parity ^ 0x08; return(2);
case 16: *parity=*parity ^ 0x10; return(2);
case 32: *parity=*parity ^ 0x20; return(2);
case 64: *parity=*parity ^ 0x40; return(2);
default: // error in data block (fix it)
// first adjust the address to account for the
// parity bits being outside the data region
(syn>64) ? syn - 8 :
(syn>32) ? syn - 7 :
(syn>16) ? syn - 6 :
(syn>8) ? syn - 5 :
(syn>4) ? syn - 4 : 0;
bit = syn & 0x7;
data[byte]=data[byte]^(1<
-
探測(cè)器
+關(guān)注
關(guān)注
15文章
2754瀏覽量
75629 -
測(cè)量系統(tǒng)
+關(guān)注
關(guān)注
2文章
575瀏覽量
43179 -
光電二極管
+關(guān)注
關(guān)注
10文章
432瀏覽量
37473
發(fā)布評(píng)論請(qǐng)先 登錄
集成光學(xué)模塊ADPD188BI在火災(zāi)煙霧探測(cè)中的應(yīng)用是什么?
基于多種特征的煙霧檢測(cè)方法
煙霧和氣霧劑檢測(cè)
利用ADPD188BI光學(xué)模塊實(shí)現(xiàn)煙霧和氣霧劑檢測(cè)和減少誤報(bào)現(xiàn)象
支持煙霧和氣霧劑檢測(cè)的光學(xué)檢測(cè)技術(shù)
ADPD188BI:用于煙霧檢測(cè)數(shù)據(jù)手冊(cè)的集成光學(xué)模塊(修訂版0)
AN-2033:校準(zhǔn)ADPD188BI光學(xué)煙霧和氣溶膠探測(cè)模塊
AnalogMAX:具有煙霧和氣溶膠探測(cè)功能的全功能傳感器融合FPGA板
DC2033A DC2033A評(píng)估板
使用Surilli GSM進(jìn)行煙霧和氣體檢測(cè)
煙霧和氣體探測(cè)器開(kāi)源項(xiàng)目
校準(zhǔn)ADPD188BI光學(xué)煙霧和氣溶膠檢測(cè)模塊
光學(xué)傳感器模塊在煙霧報(bào)警器的應(yīng)用方案
利用ADPD188BI光學(xué)煙霧和氣霧劑檢測(cè)模塊進(jìn)行煙霧測(cè)試說(shuō)明
利用ADPD188BI光學(xué)煙霧和氣霧劑檢測(cè)模塊來(lái)進(jìn)行煙霧測(cè)試
AN-2033: 校準(zhǔn)光學(xué)煙霧和氣霧劑檢測(cè)模塊
評(píng)論