简易光照度计的设计.docx
- 文档编号:2773358
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:13
- 大小:941.78KB
简易光照度计的设计.docx
《简易光照度计的设计.docx》由会员分享,可在线阅读,更多相关《简易光照度计的设计.docx(13页珍藏版)》请在冰豆网上搜索。
简易光照度计的设计
目录
1实验任务1
2设计原理1
2.1基本理论1
2.2系统框图1
2.3程序设计流程图2
3实现方案3
3.1硬件电路图3
3.2原理图说明3
3.2.1光电前置放大电路3
3.2.2AD转换电路4
3.2.2显示电路4
3.3硬件程序4
4调试过程及结论10
4.1调试过程10
4.2结论11
5心得体会13
6参考文献14
利用硅光电池的简易照度计设计
1实验任务
利用硅光电池为信号输入电路,以AT89C51单片机芯片设计控制电路,制作一个简易照度计,可以通过LCD显示屏显示照度值。
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照度计硬件原理图
3.2原理图说明
3.2.1光电前置放大电路
利用三级管的的放大作用,将带负载的光电池电路输出的电流放大,为了保证信号有更好的线性关系,所以将三极管接成电流转换为电压的形式。
经过测量,电压放大的范围大概为0.2V到2.3V。
3.2.2AD转换电路
采用ADC0809模数转换芯片和AT89C51单片机,将光电池接收的光信号转换后放大的电压模拟信号转换为数字信号,然后通过单片机的控制电路将数字信号送到LCD显示屏。
3.2.2显示电路
此处显示电路采用了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调试过程
在仿真过程中为了方便控制放大电路,这里先采用滑动变阻器来代替前置放大电路。
具体的就是将滑动变阻器接电源和地,将滑动端接入AD转换器的IN0端口。
图4电压为零时的仿真图
从图中可看出,输入电压最小为零时,显示屏显示的照度值就为0lx。
图5电压最大时仿真图
从上图中可看出,输入电压最大时,显示屏显示的照度值为255lx。
在焊电路板的过程中,开始时用两个控制端控制LCD显示屏,发现效果不太好,后来改为三个端口控制。
在调试过程中,接上电源,发现LCD没有反应,检查电路发现是LCD的数据输入端和AT89C51的P0接反了。
改正上述错误后,显示屏亮了,可发现显示的乱码而且显示很不稳定,检查电路后发现是电路中某些接触点接触不良。
将这些接触点重新焊了一遍,显示屏终于显示了照度值,但数值很不稳定,从十几勒克斯到两百多勒克斯无规律跳变,可能是AD输出出错,检查电路,确实的AD的OUT端与89C51的P1端口接反了,导致输出数值放大了几百倍,因此出现微弱信号变化就使数值改变很大。
改正此处电路后,终于显示了正常稳定的照度值。
4.2结论
在Proteus软件中仿真成功,并按电路原理图焊接好电路,将程序烧录到AT89C51芯片中进行调试,LCD显示屏最终可以显示照度值,实验成功。
图6焊接好的电路板
图7LCD显示屏上显示的照度值
遮住光电池后,显示的照度值明显减小,如图。
图8遮住光电池后显示的照度值
5心得体会
首先这次课程设计是对以前学过的相关知识的一次综合的运用,是把课本知识转化为生活实际的一次实践性的实验,很大程度上锻炼了我的思考问题解决问题的能力,实验的内容贴近生活实际,使我们可以用自己所学的知识解决实际问题。
这次课程设计在很大程度上调动了我的积极性和对专业浓厚的兴趣。
温故而知新。
课程设计开始,对知识系统而全面进行了梳理,遇到难处先是苦思冥想再向同学请教,终于熟练掌握了基本理论知识,而且领悟诸多平时学习难以理解掌握的较难知识,学会了如何思考的思维方式,找到了设计的灵感。
总的来说这次课程设计相对比较顺利,但是也遇到了一些问题,遇到问题并不是什么坏事,通过
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 光照度 设计