1. 程式人生 > >感測器系列之4.8光敏感測器

感測器系列之4.8光敏感測器

4.8 光敏感測實驗

一、實驗目的

1.掌握LPC2378晶片的程式設計方法
2. 掌握光敏感測器的工作原理
3. 瞭解光敏電阻的用途

二、實驗材料

1.具有USB 串列埠通訊的PC 機1 臺
2.ADS1.2 整合開發軟體1 套
3.J-Link-ARM 模擬器及軟體1 套
4.NXP LPC2378 實驗節點板1 個
5.LCD 顯示實驗板1 個
6.地磁感測器模組1個

三、實驗原理

  光敏感測器實驗環境由PC機(安裝有Windows XP作業系統、ADS1.2整合開發環境和J-Link-ARM-V410i模擬器)、J-Link-ARM模擬器、NXP LPC2378實驗節點板、光敏感測器、實驗模組和LCD顯示實驗模組組成,如圖4.8.1所示。

這裡寫圖片描述
圖4.8.1 感測器實驗環境
1.光敏電阻簡介

  光敏電阻(photocell)又稱光敏電阻器(photoresistor -or light-dependent resistor)或光導管(photoconductor),常用的製作材料為硫化鎘,另外還有硒、硫化鋁、硫化鉛和硫化鉍等材料。這些製作材料具有在特定波長的光照射下,其阻值迅速減小的特性。這是由於光照產生的載流子都參與導電,在外加電場的作用下作漂移運動,電子奔向電源的正極,空穴奔向電源的負極,從而使光敏電阻器的阻值迅速下降。

這裡寫圖片描述
圖4.8.2 光敏電阻實物圖

  光敏電阻器是利用半導體的光電導效應制成的一種電阻值隨入射光的強弱而改變的電阻器,又稱為光電導探測器;入射光強,電阻減小,入射光弱,電阻增大。還有另一種入射光弱,電阻減小,入射光強,電阻增大。
  光敏電阻器一般用於光的測量、光的控制和光電轉換(將光的變化轉換為電的變化)。常用的光敏電阻器硫化鎘光敏電阻器,它是由半導體材料製成的。光敏電阻器對光的敏感性(即光譜特性)與人眼對可見光 的響應很接近,只要人眼可感受的光,都會引起它的阻值變化。設計光控電路時,都用白熾燈泡(小電珠)光線或自然光線作控制光源,使設計大為簡化。
2.光敏電阻的工作原理

  敏電阻的工作原理是基於內光電效應。在半導體光敏材料兩端裝上電極引線,將其封裝在帶有透明窗的管殼裡就構成光敏電阻,為了增加靈敏度,兩電極常做成梳狀。用於製造光敏電阻的材料主要是金屬的硫化物、硒化物和碲化物等半導體。通常採用塗敷、噴塗、燒結等方法在絕緣襯底上製作很薄的光敏電阻體及梳狀歐姆電極,接出引線,封裝在具有透光鏡的密封殼體內,以免受潮影響其靈敏度。入射光消失後,由光子激發產生的電子—空穴對將複合,光敏電阻的阻值也就恢復原值。在光敏電阻兩端的金屬電極加上電壓,其中便有電流通過,受到一定波長的光線照射時,電流就會隨光強的增大而變大,從而實現光電轉換。光敏電阻沒有極性,純粹是一個電阻器件,使用時既可加直流電壓,也加交流電壓。半導體的導電能力取決於半導體導帶內載流子數目的多少。
  
  光電效應半導體探測器可以分為兩大類:結裝置和體效應裝置。結裝置,工作於光電傳導模式,它利用PN接面的反向特徵。在反向偏轉時,PN接面產生一個受光控制的電流訊號。輸出量與觸發照明成正比,而不受供應電源的影響。矽光電管就是這類的產品。而體效應光電半導體沒有結,它的體電阻係數隨照明強度的增強而減小,容許更多的光電流流過。這種阻性特徵使得體效應光電半導體具有很好的品質:通過調節供應電源就可以從探測器上獲得訊號流,且有著很寬的範圍。為了區別,珀金埃爾默光電子將體效應光電半導體稱作為光電半導體單元,簡單的說就叫光敏電阻。光敏電阻是薄膜元件,它是由在陶瓷底襯上覆一層光電半導體材料。金屬接觸點蓋在光電半導體面下部。這種光電半導體材料薄膜元件有很高的電阻。所以在兩個接觸點之間,做的狹小、交叉,使得在適度的光線時產生較低的阻值。

這裡寫圖片描述
圖4.8.3 光敏電阻結構及接線圖
3.光敏電路的應用

3.1光敏電阻的典型模擬應用

  1. 攝像機曝光控制
  2. 幻燈機自動聚焦
  3. 色度測試裝置
  4. 顯像密度計
  5. 電子比例尺-雙單元
  6. 自動後視鏡

3.2光敏電阻的典型數字應用

  1. 自動燈調光器
  2. 液燈控制
  3. 燃油器火焰訊號輸出
  4. 街燈控制
  5. 有無電波斷路器
  6. 位置感測器

3.3光敏電阻應用例項
  
  圖4.8.4是一種典型的光控調光電路,其工作原理是:當週圍光線變弱時引起光敏電阻的阻值增加,使加在電容C上的分壓上升,進而使可控矽的導通角增大,達到增大照明燈兩端電壓的目的。反之,若周圍的光線變亮,則RG的阻值下降,導致可控矽的導通角變小,照明燈兩端電壓也同時下降,使燈光變暗,從而實現對燈光照度的控制。

這裡寫圖片描述
圖4.8.4 光控電路電路圖

  
  上述電路中整流橋給出的是必須是直流脈動電壓,不能將其用電容濾波變成平滑直流電壓,又可使電容C的充電在每個半周從零開始,準確完成對可控矽的同步移相觸發。
以光敏電阻為核心元件的帶繼電器控制輸出的光控開關電路有許多形式,如自鎖亮激發、暗激發及精密亮激發、暗激發等等,下面給出幾種典型電路。
  
  圖4.8.5是一種簡單的暗激發繼電器開關電路。其工作原理是:當照度下降到設定值時由於光敏電阻阻值上升激發VT1導通,VT2的激勵電流使繼電器工作,常開觸點閉合,常閉觸點斷開,實現對外電路的控制。
這裡寫圖片描述
圖4.8.5 簡單暗激發繼電器開關電路電路圖

  
  圖是一種精密的暗激發時滯繼電器開關電路。其工作原理是:當照度下降到設定值時由於光敏電阻阻值上升使運放IC的反相端電位升高,其輸出激發VT導通,VT的激勵電流使繼電器工作,常開觸點閉合,常閉觸點斷開,實現對外電路的控制。
這裡寫圖片描述
圖4.8.6 精密暗激發繼電器開關電路電路圖
4.光敏電阻特性

  根據光敏電阻的光譜特性,可分為三種光敏電阻器:紫外光敏電阻器紅外光敏電阻器可見光光敏電阻器
  光敏電阻的主要引數是:

  1. 光電流、亮電阻。光敏電阻器在一定的外加電壓下,當有光照射時,流過的電流稱為光電流,外加電壓與光電流之比稱為亮電阻,常用“100LX”表示。
  2. 暗電流、暗電阻。光敏電阻在一定的外加電壓下,當沒有光照射的時候,流過的電流稱為暗電流。外加電壓與暗電流之比稱為暗電阻,常用“0LX”表示。
  3. 靈敏度。靈敏度是指光敏電阻不受光照射時的電阻值(暗電阻)與受光照射時的電阻值(亮電阻)的相對變化值。
  4. 光譜響應。光譜響應又稱光譜靈敏度,是指光敏電阻在不同波長的單色光照射下的靈敏度。若將不同波長下的靈敏度畫成曲線,就可以得到光譜響應的曲線。
  5. 光照特性。光照特性指光敏電阻輸出的電訊號隨光照度而變化的特性。從光敏電阻的光照特性曲線可以看出,隨著的光照強度的增加,光敏電阻的阻值開始迅速下降。若進一步增大光照強度,則電阻值變化減小,然後逐漸趨向平緩。在大多數情況下,該特性為非線性。
  6. 伏安特性曲線。伏安特性曲線用來描述光敏電阻的外加電壓與光電流的關係,對於光敏器件來說,其光電流隨外加電壓的增大而增大。
  7. 溫度係數。光敏電阻的光電效應受溫度影響較大,部分光敏電阻在低溫下的光電靈敏較高,而在高溫下的靈敏度則較低。
  8. 額定功率。額定功率是指光敏電阻用於某種線路中所允許消耗的功率,當溫度升高時,其消耗的功率就降低。
5.光敏電阻分類
  1. 按半導體材料分:本徵型光敏電阻、摻雜型光敏電阻。後者效能穩定,特性較好,故大都採用它。
  2. 根據光敏電阻的光譜特性,可分為三種光敏電阻器:
    1. 紫外光敏電阻器:對紫外線較靈敏,包括硫化鎘、硒化鎘光敏電阻器等,用於探測紫外線。
    2. 紅外光敏電阻器:主要有硫化鉛、碲化鉛、硒化鉛。銻化銦等光敏電阻器,廣泛用於導彈制導、天文探測、非接觸測量、人體病變探測、紅外光譜,紅外通訊等國防、科學研究和工農業生產中。
    3. 可見光光敏電阻器:包括硒、硫化鎘、硒化鎘、碲化鎘、砷化鎵、矽、鍺、硫化鋅光敏電阻器等。主要用於各種光電控制系統,如光電自動開關門戶,航標燈、路燈和其他照明系統的自動亮滅,自動給水和自動停水裝置,機械上的自動保護裝置和“位置檢測器”,極薄零件的厚度檢測器,照相機自動曝光裝置,光電計數器,煙霧報警器,光電跟蹤系統等方面。
6.光敏電阻模組

6.1模組引腳接線
  實驗板JP2的晶片引腳接線如圖所示。

這裡寫圖片描述
圖4.8.7光敏電阻模組JP2引腳接線

6.2運放電路
  實驗所用模組採用OPA336晶片作為運算放大電路,對A/D轉換後的訊號進行放大,其電路圖如圖所示。
這裡寫圖片描述
圖4.8.8 光敏電阻運放電路圖
7.主要程式說明

7.1感測器型別檢測

 //感測器模組型別檢測
ClearRect(3);
DispAscStr(0,100,"Module Code:",12,&xpos,&ypos);
      if((FIO2PIN&(1<<5))>>5)    
{
    DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
}
else
{
    DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
}
if((FIO2PIN&(1<<6))>>6)  
{
    DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
}
else
{
    DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
}
if((FIO2PIN&(1<<7))>>7)  
{
    DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
}
else
{
    DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
}
if((FIO2PIN&(1<<8))>>8)  
{
    DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
}
else
{
    DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
}

7.2AD取樣初始化程式

//  AD採初始化程式
 void AD_init(void)
 {
    uint32 data,i;

    PCONP=PCONP|(1<<12); /*ADC上電 */
    PINSEL1 |= (1<<14); /* AD0.0 *//*引腳功能配置設定為輸入狀態*/
    AD0CR=(1<<0)            |//SEL=1,選擇通道0
    ((Fpclk/1000000-1)<<8)  |//轉換時鐘為1MHZ
    (0<<16)                 |//BURST=0,軟體控制轉換操作
    (0<<17)                 |//CLKS=0,使用11clock轉換
    (1<<21)                 |//PDN=1,正常工作模式(非掉電轉換模式)
    (0<<22)                 |//TEST1:0=00,正常工作模式(非測試模式)
    (1<<24)                 |//START=1,直接啟動ADC轉換
    (0<<27);                //EDGE=0(CAP/MAT引腳下降沿觸發ADC轉換)   
    for(i=0;i<5000;i++);    //小段延時
    data = ADDR0;           //讀取ADC結果,並清除DONE標誌位
 }

7.3 讀取AD裝換程式

 //AD讀取函式
 uint32 AD_read(uint8  channels  )
 {
    uint32 Data;
    AD0CR = (AD0CR&0xFFFFFF00) | channels | (1<<24);
    //切換通道並進行第一次轉換
    while((ADDR0&0x80000000)==0);
    //if((ADDR0&0x80000000)==1) //等待轉換結束
     AD0CR = AD0CR | (1<<24);   //再次啟動轉換                    
    while((ADDR0&0x80000000)==0);
   // if((ADDR0&0x80000000)==1)
    Data = ADDR0;               //讀取ADC結果
    Data  =(Data>>6) & 0x3FF;       //進行資料換算
    Data = Data * 3300;
    Data = Data / 1024;
    return(Data);
 }
四、實驗內容

  本實驗所使用的光敏電阻實驗模組實物圖如圖4.7.9所示。

這裡寫圖片描述
圖4.7.9 MAG3110實物圖

  將地磁感測器模組安裝到節點板上(斷電安裝),然後將AK100或者JLINK模擬器的一端用USB介面與電腦相連,一端的20Pin的JTAG引腳與NXP LPC2378節點板的J2相連,並給NXP LPC2378節點板上電。如圖4.7.10所示
這裡寫圖片描述
圖4.7.10實驗電路連線圖
1.光度值採集

  光敏電阻的阻值與光照值成反比例關係。

void main()
{
    char *p;
    int idx;
    int xpos,ypos;
    long count;
    char sndBuf[20];
    unsigned char hbyte,lbyte;

    //通訊板IO控制引腳設定
    IO1DIR &=~(1<<16); //IOZ/A          輸入--接收開關狀態訊號
    delay(10);
    //感測板型別識別CODE0~CODE3,作為輸入端
    FIO2DIR &=~(1<<5);
    FIO2DIR &=~(1<<6);
    FIO2DIR &=~(1<<7);
    FIO2DIR &=~(1<<8);
    Uart1ToUart0=0; 
    //設定LCD螢幕引腳   
    PINSEL3=PINSEL3 & 0x00000000;
    IO1DIR=IO1DIR|0x05700000;

    // 設定串列埠0,P0.2-TXD0 P0.3-RXD0
    //PINSEL0 = PINSEL0 & 0x00000050;   
    //P0.2 P0.3不使用上拉電阻
    PINMODE0 = PINMODE0 & 0x000000A0;   
    PINMODE1 |= 0x00000002;
    //設定引腳方向
    IO0DIR |=1<<15;
    IO0DIR &=~(1<<16);
    //AD光敏採集初始化
    AD_init();

    //螢幕初始化    
    RESET0;     //復位                           
    delay(50);
    RESET1;                     
    delay(100); 
    lcd_init();
    delay(20);
    LCD_Frame();
    DispAscStr(0,12,"  Light",7,&xpos,&ypos);
    DispChnStr(xpos,ypos,"模組測試",4,&xpos,&ypos);
    //感測器模組型別檢測
    ClearRect(3);
    DispAscStr(0,100,"Module Code:",12,&xpos,&ypos);
    if((FIO2PIN&(1<<5))>>5)  
    {
        DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
    }
    else
    {
        DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
    }
    if((FIO2PIN&(1<<6))>>6)  
    {
        DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
    }
    else
    {
        DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
    }
    if((FIO2PIN&(1<<7))>>7)  
    {
        DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
    }
    else
    {
        DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
    }
    if((FIO2PIN&(1<<8))>>8)  
    {
        DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
    }
    else
    {
        DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
    }
    while(1)
    {
        delay(1000);
        count=AD_read(1);
        DispChnStr(0,40,"光照值",3,&xpos,&ypos);
        DispAscStr(xpos,ypos,":",1,&xpos,&ypos);
        idx=0;
        while(count>0)
        {
            sndBuf[idx]=count%10+'0';
            count=count/10;
            idx++;
        }
        for(count=idx-1;count>=0;count--)
        {
            DispAscStr(xpos,ypos,&sndBuf[count],1,&xpos,&ypos);
        }
        for(count=idx;count<6;count++)
        {
            DispAscStr(xpos,ypos," ",1,&xpos,&ypos);
        }
    }
   return 0;
}
2.光控燈實驗

  實驗模擬光控燈,通過監測光照值的大小,自動的控制LED的開光。

DispAscStr(0,12,"  Light",7,&xpos,&ypos);
DispChnStr(xpos,ypos,"模組測試",4,&xpos,&ypos);
DispAscStr(0,100,"ledclosing",10,&xpos,&ypos);
while(1)
{
    delay(1000);
    count=AD_read(1);
    temp_count=count;
    DispChnStr(0,40,"光照值",3,&xpos,&ypos);
    DispAscStr(xpos,ypos,":",1,&xpos,&ypos);
    idx=0;
    while(count>0)
    {
        sndBuf[idx]=count%10+'0';
        count=count/10;
        idx++;
    }
    for(count=idx-1;count>=0;count--)
    {
        DispAscStr(xpos,ypos,&sndBuf[count],1,&xpos,&ypos);
    }
    for(count=idx;count<6;count++)
    {
        DispAscStr(xpos,ypos," ",1,&xpos,&ypos);
    }
    if(temp_count>200&&(tag==1))
    {
        DispAscStr(0,100,"opened led",10,&xpos,&ypos);
        tag=0;
    }
    else if(temp_count<200 &&(tag==0))
    {
        DispAscStr(0,100,"closed led",10,&xpos,&ypos);
        tag=1;
    }
}
3.光電開關實驗

  光電開關(photoelectric switch)監測不同的光照值,選擇不同的開關。

DispAscStr(0,12,"  Light",7,&xpos,&ypos);
DispChnStr(xpos,ypos,"模組測試",4,&xpos,&ypos);
while(1)
{
    delay(1000);
    count=AD_read(1);
    temp_count=count;
    DispChnStr(0,40,"光照值",3,&xpos,&ypos);
    DispAscStr(xpos,ypos,":",1,&xpos,&ypos);
    idx=0;
    while(count>0)
    {
        sndBuf[idx]=count%10+'0';
        count=count/10;
        idx++;
    }
    for(count=idx-1;count>=0;count--)
    {
        DispAscStr(xpos,ypos,&sndBuf[count],1,&xpos,&ypos);
    }
    for(count=idx;count<6;count++)
    {
        DispAscStr(xpos,ypos," ",1,&xpos,&ypos);
    }
    if(temp_count<100)
    {
        DispAscStr(0,100,"pe switch->0",12,&xpos,&ypos);
    }
    else if(temp_count<200)
    {
        DispAscStr(0,100,"pe switch->1",12,&xpos,&ypos);
    }else if(temp_count<500)
    {
        DispAscStr(0,100,"pe switch->2",12,&xpos,&ypos);
    }
    else
    {
        DispAscStr(0,100,"pe switch->3",12,&xpos,&ypos);
    }
}
五、實驗思考

1.列出我們身邊用到光敏感測器的家電。
2.調研其他型號的光敏感測器。
3.寫出你認為光敏感測器還可以應用的場合。