简易光照度计的设计.docx

上传人:b****6 文档编号:4172622 上传时间:2022-11-28 格式:DOCX 页数:11 大小:513.35KB
下载 相关 举报
简易光照度计的设计.docx_第1页
第1页 / 共11页
简易光照度计的设计.docx_第2页
第2页 / 共11页
简易光照度计的设计.docx_第3页
第3页 / 共11页
简易光照度计的设计.docx_第4页
第4页 / 共11页
简易光照度计的设计.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

简易光照度计的设计.docx

《简易光照度计的设计.docx》由会员分享,可在线阅读,更多相关《简易光照度计的设计.docx(11页珍藏版)》请在冰豆网上搜索。

简易光照度计的设计.docx

简易光照度计的设计

简易照度计设计

1实验任务

1.1实验目的

1,了解光敏二极管的基本特性。

2,设计和制作简易照度计。

1.2实验要求

1,根据参考电路,分析照度计的基本工作原理。

2,测量光敏二极管的基本资料。

3,根据光敏二极管的基本特性,设计和制作1000LUX的简易照度计。

1.3实验所需器材

电阻,电位器,运算放大器,正负12V电源,负9V电源,51单片机,数码管,高压汞灯,连接线照度计设计模板(电路板),光敏二极管(日光型,响应波长在5000埃到6000埃),万用表。

1.4设计内容

1,根据电路图制作照度计实验模板。

2,调节照度计旋钮使光敏二极管处的照度为100LUX,并保持该照度不变,然后将光敏二极管接入IC1的输入端,并将K置于1的位置使光敏二极管处于0偏压的状态,测量该照度下光敏二极管的光电流。

3,测量不同照度下(200,300,400,500,600700,800LUX)光敏二极管的光电流,并做出照度—电流曲线。

4,将K置于2,3的位置给光敏二极管的正极加上一个负偏压并测量出该电压的大小,重复2,3步的内容,做出照度计—电流曲线,并比较。

5,根据不同照度计下的输出电压设计制作简易照度计。

2设计原理

2.1基本理论

硅光电池是一种能将光能直接转换成电能的半导体器件,它实质上是一个大面积的半导体PN结,其工作原理是光生伏特效应。

当光照射在硅光电池的PN结区时,会在半导体中激发出光生电子-空穴对。

PN结两边的光生电子-空穴对在内电场作用下,多数载流子的不能穿越阻挡层,而少数载流子却能穿越阻挡层,结果,P区的光生电子进入N区,N区的光生空穴进入P区,使每个区中的光生电子-空穴对分割开来。

光生电子在N区的集结使N区带负电,光生电子在P区的集结使P区带正电。

P区和N区之间产生光生电动势。

当硅光电池接入负载后,光电流从P区经负载流至NE,负载中就会有功率输出。

利用AT89C51芯片实现控制电路,用ADC0809模数转换器实现模拟信号和数字信号的转换。

当光电池接入负载,将输出的信号通过三极管放大,通过模数转换器ADC0809转换为数字信号,通过单片机控制电路将信号输入LCD显示屏,在显示屏上显示当前的照度值。

 

2.2系统框图系统框图如下:

 

图1照度计设计系统框图

 

2.3程序设计流程图

程序流程图如下:

 

图2程序设计流程图

3实现方案

3.1硬件电路图

 

3.2原理图说明

3.2.1光电前置放大电路

利用三级管的的放大作用,将带负载的光电池电路输出的电流放大,为了保证信号有更好的线性关系,所以将三极管接成电流转换为电压的形式。

经过测量,电压放大的范围大概为0.2V到2.3V。

3.2.2AD转换电路

采用ADC0809模数转换芯片和AT89C51单片机,将光电池接收的光信号转换后放大的电压模拟信号转换为数字信号,然后通过单片机的控制电路将数字信号送到LCD显示屏。

3.2.3显示电路

此处显示电路采用了1602A液晶显示模块。

当光直射光电池时,放大的电压信号通过三极管的发射极送入AD转换器的IN0端口。

因为AD的ADDA、ADDB、ADDC都接地,所以ADC0809就采集IN0端口的信号。

模拟信号经过转换后向OUT-1~OUT8传送数字信号。

数字信号经过总线传送到AT89C51的P1口,并读入累加器A,经过AT89C51计算后通过P0端口输出,然后控制LCD显示屏的输出。

3.3硬件程序

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitlcden=P2^1;

sbitlcdrs=P2^0;

sbitlcdrw=P2^2;

sbitadwr=P3^7;

//sbitadcs=P3^0;//oe==gnd

sbiteoc=P2^3;

ucharcodetable[]="theillustionis";

ucharcodetable1[]="lx";

uintnum,a,d,qian,bai,shi,ge,num1;

uintillusion,temp;

voidinit(void);//初始化函数

voiddelay(uinta);//延时函数

voidwrite_com(ucharcom);//写指令函数

voidwrite_data(uchardate);//写数据函数

voiddisplay(uintd);//显示函数

voidmain()

{

voidinit();//初始化

EA=1;//开总中断

ET0=1;//开定时器中断

TR0=1;//启动定时器

lcden=0;

/***********对1602液晶的模式进行设置***************/

write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口

write_com(0x0c);//设置开显示,不显示光标

write_com(0x06);//写一个字符后地址指针加一

write_com(0x01);//显示清零,数据指针清零

while

(1)

{

/*******开始不断扫描P1引脚是否有信号,并且对信号进行计算和显示********/

if(P1!

=0)

{

delay(10);

if(P1!

=0)//防止误判

{

adwr=0;

delay(5);

adwr=1;

delay(5);

adwr=0;

while(oec);

for(a=10;a>0;a--)

{temp=illusion*4;

temp=1000;

display(temp);//显示照度

}

};

};

}

}

/**********************初始化程序************************/

voidinit(void)

{

TMOD=0x01;//定时器0工作于计数方式1

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;//定时时间为50ms

num=0;

//adcs=0;

//sign=0;

//temp=0;

write_com(0x80);

}

/*************延时函数每次延时50ms********************/

voiddelay(uinta)

{

uintb,c;

for(b=a;b>0;b--)

for(c=110;c>0;c--);

}

/************定时器中断函数*****************/

voidto_time()interrupt1

{

TH0=(65536-5000)/256;//中断函数里重新赋初值

TL0=(65536-5000)%256;

num++;

if(num==20)//每20*50ms计算一次,并且将速度显示

{

num=0;

//标志位

illusion=P1;

}

}

/***********写指令函数************/

voidwrite_com(ucharcom)

{

lcdrs=0;

//lcdrw=0;

P0=com;

//delay(5);

lcden=1;

delay(20);

lcden=0;

}

/*********写数据函数*************/

voidwrite_data(uchardate)

{

lcdrs=1;

//delay(5);

//lcdrw=0;

P0=date;

//delay(5);

lcden=1;

delay(20);

lcden=0;

}

/*************显示函数********************/

voiddisplay(uintillusion)

{

qian=illusion/1000;

bai=illusion%1000/100;

shi=illusion%100/10;

ge=illusion%10;//速度范围为0至9999.

for(num1=0;num1<20;num1++)//显示前面一段字符

{

write_data(table[num1]);

delay(20);

};

write_com(0x80+0x41);//显示光照强度

write_data(0x30+qian);

write_com(0x80+0x42);

write_data(0x30+bai);

write_com(0x80+0x43);

write_data(0x30+shi);

write_com(0x80+0x44);

write_data(0x30+ge);

 

write_com(0x80+0x47);

for(num1=0;num1<2;num1++)

{

write_data(table1[num1]);

delay(20);

}

write_com(0x80);

}

4调试过程及结论

4.1调试过程

 

从图中可看出,输入电压最小为零时,显示屏显示的照度值就为0lx。

 

从上图中可看出,输入电压最大时,显示屏显示的照度值为255lx。

在焊电路板的过程中,开始时用两个控制端控制LCD显示屏,发现效果不太好,后来改为三个端口控制。

在调试过程中,接上电源,发现显示的乱码而且显示很不稳定,检查电路后发现是电路中某些接触点接触不良。

将这些接触点重新焊了一遍,显示屏终于显示了照度值,但数值很不稳定,从十几勒克斯到两百多勒克斯无规律跳变,可能是AD输出出错,检查电路,确实的AD的OUT端与89C51的P1端口接反了,因此出现微弱信号变化就使数值改变很大。

改正此处电路后,终于显示了正常值

4.2光照度与电流曲线

照度(LUX)

200

300

400

500

600

700

800

电流(A)

2.14

2.49

2.89

3.08

3.25

3.30

3.45

 

4.3结论

在Proteus软件中仿真成功,并按电路原理图焊接好电路,将程序烧录到AT89C51芯片中进行调试,LCD显示屏最终可以显示照度值,实验成功。

5参考文献

1、王庆友.光电技术.北京:

电子工业出版社,2011

2、华成英童诗白.模拟电子技术基础.北京:

高等教育出版社,1985

3、戴先金.51单片机开发实例.北京:

清华大学出版社,2006

4、康华光.电子技术基础.北京:

高等教育出版社,2006

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1