云计算吵起来了

来源:互联网 发布:烯牛数据 李锦香 编辑:程序博客网 时间:2024/04/29 12:11

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);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

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标志位 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

四、实验内容

  本实验所使用的光敏电阻实验模块实物图如图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;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102

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;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

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
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

五、实验思考

1.列出我们身边用到光敏传感器的家电。 
2.调研其他型号的光敏传感器。 
3.写出你认为光敏传感器还可以应用的场合。

 
 
0 0
原创粉丝点击