首届测控挑战杯参赛
论文
政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目名称:光强检测仪
参赛队员:测控技术与仪器1004班 xxx
摘要: 本光强检测仪用光敏电阻5506作为测试元件,用双臂电桥作为测试电路,用电压比较器驱动四个发光二极管显示光亮度强弱,用ADC0809芯片做模数转换,经单片机计算并驱动12864液晶显示准确的光亮度值。
关键词: 光敏电阻 电压比较器 ADC0809 单片机
Summary: The light detector with photoresistor 5506 as a test element with double bridge as a test circuit with a voltage comparator drives four LEDs display brightness intensity, using ADC0809 chip to do analog-digital conversion, calculated by the microcontroller and drives 12864 LCD display accurate luminance values.
Keyword: Photoresistor Voltage comparator ADC0809 MCU
1
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
论证与比较 3
1.1 测试元件选择 3
1.2 测试电路选择 3
1.3 显示电路选择 3
2 系统设计 3
2.1 总体设计 3
2.2 电路设计 4
2.2.1 测试电路 4
2.2.2 模拟电路显示部分 4
3 理论
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
与计算 5
4 程序设计 5
5 调试方案与测试结果 6
参考文献: 7
附录1:元器件明细表 8
附录2:电路原理图 9
附录3:程序清单 10
1.方案论证与比较
1.1测试元件选择
测试元件有光敏二极管、光敏三极管、光敏电阻,由于光敏电阻有可靠性好、灵敏度高、反应速度快、光谱特性好的优点,所以选择光敏电阻。
1.2测试电路选择
测试电路有直接分压式、单臂电桥、双臂电桥。双臂电桥的灵敏度比单臂电桥提高一倍,同时非线性误差比单臂电桥小,所以选择双臂电桥。
1.3显示电路选择
方案一:数字电路驱动数码管显示;
方案二:用电压比较器驱动发光二极管显示;
方案三:单片机驱动液晶屏显示;
由于数字电路驱动数码管显示的电路过于复杂,容易出错,所以选择发光二极管显示和液晶屏显示。
2.系统设计
2.1总体设计
由光敏电阻5506组成双臂电桥,形成测试电路。通过电压比较器LM324将电压分为五个档位,由发光二极管显示当前光亮度强弱。通过芯片ADC0809将模拟信号转换为数字信号,经51单片机计算,驱动12864液晶屏显示当前光亮度准确值。
2.2电路设计
2.2.1测试电路
在光强的作用下,光敏电阻的阻值会发生变化,通过双臂电桥,通过分压作用可将对光敏电阻阻值的测量转化为电压的测量,将两臂形成的电压差,输出到下一环节。
2.2.2模拟电路显示部分
图a 图b
选择的电位器阻值为10K,做了4个比较器,图a作为比较电压为3V和4V的电压比较器,图b作为比较电压为1V和2V的电压比较器。
3.理论分析与计算
液晶屏显示是由ADC0809模数转换,单片机驱动显示的,若显示准确的光亮度值必须计算出光敏电阻与模数转换后数字量n的关系。
如右图所示,R2、R3为光敏电阻,R1=R2=10KΩ,输出电压U1=
,模数转换后数字量n=256?
,得到光敏电阻阻值R3与
成正比,
查资料得到部分光源的亮度值:
太阳:1.5E+5 cd/㎡
日光灯:(5—10)E+1 cd/㎡
月光(满月):2.5E-1 cd/㎡
黑白电视机荧光屏:120 cd/㎡
彩色电视机荧光屏:80 cd/㎡
最后确定光亮度的表达式L=
(n为模数转换后数字量)
最后确定测量光亮度的量程为50cd/
-1000cd/
。
4.程序设计
用定时器中断INT0产生频率为500K的脉冲,作为ADC0809的CLK,当单片机
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
200组数字量时取平均值,计算光亮度值,驱动12864液晶屏显示。
5.调试方案与测试结果
调节电位器,使发光二极管显示光亮度为弱、正常、亮、很亮。
本光强检测仪的发光二极管可以显示光亮度的强弱,液晶屏可以显示光亮度值。
当电源电压有变化或温度变化较大时,需重新调节电位器电阻,改变参考电压;编写程序中计算公式的参数。
参考文献:
谭浩强﹒C程序设计﹒清华大学出版社
严忠豪﹒非电量电测技术﹒机械工业出版社
附录1 元器件明细表
元器件
数量
光敏电阻5506
2
1.2K电阻
4
2K电阻
2
10K电阻
4
10K可调电阻
4
发光二极管
4
LM324
1
ADC0809
1
单片机系统板
1
12864液晶
1
附录2 电路原理图
附录3 程序清单
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^4;
sbit rw=P2^5;
sbit E=P2^6;
sbit psb=P2^7;
sbit cp=P2^0;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
uchar table[]="亮度值:";
uchar table1[]="cd/m^2";
uchar table2[]={0,0,0,0};
uchar table3[]="Over range";
uchar table4[]="on work ";
uint a1,b1;
timer0()interrupt 1 using 1
{
TH0=255;
TL0=250;
cp=!cp;
}
void write_12864com(uchar com);
void write_12864dat(uchar dat);
void initinal(void);
void display(void);
void display1(void);
void display2(void);
void display3(void);
void display4(void);
void delay_50us (uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
void delay_50ms (uint t)
{
uchar j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
main()
{
TMOD=0x01;
TH0=255;
TL0=250;
EA=1;
ET0=1;
TR0=1;
cp=1;
a1=0;
b1=0;
initinal();
display();
table2[0]=48;
table2[1]=48;
table2[2]=48;
table2[3]=49;
display2();
display1();
ST=0;
while(1)
{
ST=1;
ST=0;
while(EOC==0)
OE=1;
b1=P1+b1;
OE=0;
a1++;
if(a1==200)
{
b1=b1/200;
if(b1<10||b1>235)
{
table2[3]=63;
table2[2]=63;
table2[1]=63;
table2[0]=63;
display2();
display3();
}
else
{
b1=(b1+254)*43/(254-b1);
table2[3]=b1%10+48;
table2[2]=b1%100/10+48;
table2[1]=b1%1000/100+48;
table2[0]=b1/1000+48;
display2();
display4();
}
b1=0;
a1=0;
}
}
}
void write_12864com(uchar com)
{
rw=0;
rs=0;
delay_50us (1);
P0=com;
E=1;
delay_50us (10);
E=0;
delay_50us (2);
}
void write_12864dat(uchar dat)
{
rw=0;
rs=1;
delay_50us (1);
P0=dat;
E=1;
delay_50us (10);
E=0;
delay_50us (2);
}
void initinal(void)
{
delay_50ms(3);
write_12864com(0x30);
delay_50us(5);
write_12864com(0x30);
delay_50us(5);
write_12864com(0x0f);
delay_50us(5);
write_12864com(0x01);
delay_50us(300);
write_12864com(0x06);
delay_50us(2);
}
void display(void)
{
char i;
write_12864com(0x80);
delay_50us(1);
for(i=0;i<8;i++)
{
write_12864dat(table[i]);
delay_50us(1);
}
}
void display1(void)
{
char i;
write_12864com(0x94);
delay_50us(1);
for(i=0;i<6;i++)
{
write_12864dat(table1[i]);
delay_50us(1);
}
}
void display2(void)
{
char i;
write_12864com(0x92);
delay_50us(1);
for(i=0;i<4;i++)
{
write_12864dat(table2[i]);
delay_50us(1);
}
}
void display3(void)