基于单片机的光功率计设计.docx
《基于单片机的光功率计设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的光功率计设计.docx(9页珍藏版)》请在冰豆网上搜索。
一、设计题目:
光功率计的制作
2、设计要求:
1、设计一个频率可变的交流光源
2、测试不同频率的光源功率
3、利用51单片机,针对不同频率的光源可测试它的平均光功率,并用数码管显示
3、分析设计:
1、光功率计设计思想
测量光功率是光纤通信测量一个重要步骤,测量光功率有热学法和光电法和其他的特殊方法。
由于我们所学知识的限制,我们通过自己所熟悉的光电法来实现功率计的制作。
光电法就是用光电检测器检测光功率,设计中使用PIN光电二极管作为光电检测器。
实质上是测量PIN在受光辐射后产生的微弱电流,根据光功率P与PIN生成电流I的关系式;
I=RP
此电流与入射到光敏面上的光功率成正比,R为光电检测器的响应度。
检测到的电流经过I/V变换,波长矫正后,再经过A/D转换模块,把模拟的电信号转化成数字信号通过数码管显示出来。
因此,光功率计实际上是光电检测器PIN、I/V变换、A/D转换电路、数字显示电路这四个模块的结合。
PIN
I-V
变换
波长选择
A-D
变换
数字显示
被测光
2、模块分解与功能
实现光功率计主要有两大模块即光源调制电路与模数转换电路。
(1)光源调制电路:
题目要求光源的频率在100KHz到1MHz的正弦信号或方波信号,因缺少可变电容因此频率最高能达350KHz。
光源调制电路图:
XMM1
VCC
5VR5
VCC
6
30W
R2
4.02kW
R6
R310.0W
XSC1
4.02kW
3
G
T
C1
Q1
7
A
B
1
100pF
V1
2N2222A
4
5
1V
2MHz
0Deg
R1 R4
6.04kW 10W
0
(2)模数转换电路:
此模块主要利用51单片机与ADC0809来实现将输入的模拟电信号转换成数字信号并显示在数码管上。
在Proteus中仿真结果如下:
AD转换部分电路图
3、所需器件:
LD激光二极管 1个
共阴极数码管 4个
电路板 1个
直流稳压电源 1个
万用表 1个
电容22UF 1个
导线 若干
钳子,镊子 1把
晶振 12M
4、元件参数:
PIN(型号:
PDDM981)技术指标:
光敏面直径:
60um 光谱响应范围:
1.1~1.6um 响应度(波长
=1.3um):
0.94A/W
工作电压:
-5V 暗电流(-5V):
〈=1nA 结电容(-5V):
〈1pF上升时间:
〈0.5ns 下降时间:
〈0.5ns 工作温度:
-20~+70摄氏度
4、实验调试:
功率计的核心是对检测电流经转化后电压的放大,使之适合在A/D转化器上转化成数字信号并放大.但是由于放大对直流来说仅用足值的电阻串联可一并实现电流向电压的转化,和小信号的直接放大,因此在实际的设计过程中的光功率计的决定性部分是转化为模数转换芯片的正确应用和调试。
调试过程及问题的解决:
(1)单片机P0口驱动能力有限使用时应接上拉电阻。
为了节约电阻使用我们改用P1口来直接驱动数码管。
(2)ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连,初始化时,使ST和OE信号全为低电平。
(3) 在ST端给出一个至少有100ns宽的正脉冲信号为此我们利用P3.3
口输出脉冲控制ST。
是否转换完毕,我们根据EOC信号来判断。
当
EOC变高电平时,这时给OE为高电平,转换的数据就输出给单片机了。
五、设计结果:
最终测试结果分两部分
(1)光源调制部分测试
改变信号发生器的输出频率,用示波器观察调制电路波形及频率数据的纪录:
次数
信号源示数(KHz)
实验数据(KHz)
1
150
153.2
2
180
183.4
3
200
202.3
4
300
303.7
5
350
354.9
(2)模数转换部分测试
调节滑动变阻器阻值,用万用表测此时输入模拟电压并观察数码管示数数据的纪录:
次数
万用表示数(V)
数码管示数
(V)
1
2.34
2.357
2
2.85
2.868
3
3.57
3.573
4
4.24
4.265
5
5.00
5.000
模数转换部分实际为一数字电压表,此电压表量程为5V。
由以上数据知误差大约为0.02V。
6、体会:
通过这次课程设计,我对单片机的AD转换功能更加熟练,并且在焊接电路板时又增加了我焊接的技术。
总之光功率计的设计很成功,这次设计提高我的动手能力,丰富了我的知识储备。
七、附录:
单片机AD转换部分程序清单:
#include
Unsigned char codedispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedchardispbuf[4];
unsignedinti;unsignedintj;unsignedchargetdata;unsignedinttemp;unsignedinttemp1;unsignedcharcount;unsignedchard;
sbitST=P3^0;sbitOE=P3^1;sbitEOC=P3^2;sbitCLK=P3^3;sbitP20=P2^0;sbitP21=P2^1;sbitP22=P2^2;sbitP23=P2^3;sbitP17=P1^7;
voidTimeInitial();
voidDelay(unsignedinti);
voidTimeInitial()
{TMOD=0x10;TH1=(65536-200)/256;TL1=(65536-200)%256;EA=1;
ET1=1;
TR1=1;
}
voidDelay(unsignedinti)
{
unsignedintj;for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
voidDisplay()
{
P1=dispbitcode[dispbuf[3]];P20=0;
P21=1;P22=1;P23=1;
Delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[2]];P17=1;
P20=1;P21=0;P22=1;P23=1;
Delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[1]];P20=1;
P21=1;P22=0;P23=1;
Delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[0]];P20=1;
P21=1;P22=1;P23=0;
Delay(10);
P1=0x00;
}
voidmain()
{
TimeInitial();while
(1)
{ST=0;OE=0;ST=1;ST=0;
while(EOC==0);//查询转换结束OE=1;
getdata=P0;
OE=0;
temp=getdata*1.0/255*500;dispbuf[0]=temp%10;dispbuf[1]=temp/10%10;dispbuf[2]=temp/100%10;dispbuf[3]=temp/1000;Display();
}
}
voidt1(void)interrupt3using0
{
TH1=(65536-200)/256;TL1=(65536-200)%256;CLK=~CLK;
}