红外LED反向雪崩脉冲信号

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了红外LED反向雪崩脉冲信号相关的知识,希望对你有一定的参考价值。

 

01 LED反向雪崩信号


一、背景介绍

  在昨天搭建了红外LED反向雪崩信号整形电路, 初步测量了它对光电信号的检测性能。 下面利用单片机MEGA8对脉冲信号进行计数。 测试一下红外反向单光子雪崩器件测量光强的一些基本功能。

▲ 图1.1.1 单光子雪崩信号整形电路

二、单片机程序

  通过对于记录雪崩脉冲信号计数MEGA8单片机编程,对其串口输出数据协议进行定义。 命令代码0x1,串口返回100ms之内的脉冲数量。 命令代码0x2,串口返回四个ADC转换数值;这个命令是用于后期辅助模拟量测量。 命令代码0x55,每隔0.5秒自动输出脉冲计数数值。

序号命令代码功能
1获取脉冲读数0x1串口返回在100ms之内的脉冲数量
2获取ADC数值0x2串口返回四个ADC的转换数值
3连续发送脉冲数量0x55串口连续反馈100ms之内的脉冲数量
/*
**==============================================================================
** main.c :             -- by Dr. ZhuoQing, 2007-3-31
**
**   This project is designed for the PumpCnt
**
**==============================================================================
*/

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
void C_task main(void) 
    unsigned int nCount;
    unsigned char ucChar;        
    unsigned int nShowCount;
    unsigned char ucSendFlag;
    unsigned char i;
    
    //--------------------------------------------------------------------------
    Mega8Init();
    ControlInit();    
    //--------------------------------------------------------------------------
    
    //--------------------------------------------------------------------------
    nCount = 0;
    nShowCount = 0;
    TCNT1 = 0;
    ucSendFlag = 0x55;
        
    for(;;) 
        //----------------------------------------------------------------------
        if(++nCount & 0x80) LED_ON;
        else LED_OFF;
        
        WaitTime(1);
        //----------------------------------------------------------------------
        
        if(++nShowCount > 500) 
            nShowCount = 0;
            
            if(ucSendFlag == 0x55) 
                SendInt16(g_nCnt1);            
                SendChar('\\r');
                SendChar('\\n');
            
        
        
        if(ucSendFlag == 1) 
            ucSendFlag = 0;
            SendInt16(g_nCnt1);            
            SendChar('\\r');
            SendChar('\\n');
        
        
        if(ucSendFlag == 2) 
            for(i = 0; i < 4; i ++) 
                ADC_CHANNEL(i);
                ADC_SAMPLE;
                ADC_CHANNEL(i);
                ADC_SAMPLE;
                SendInt16(ADC);            
                SendChar(' ');
            
            SendChar('\\r');
            SendChar('\\n');
            ucSendFlag = 0;
        
        
        //----------------------------------------------------------------------
        if(CAN_RECE) 
            ReceChar(&ucSendFlag);
            
        
        
        //----------------------------------------------------------------------
    


//==============================================================================
//             END OF THE FILE : main.c
//------------------------------------------------------------------------------

D:\\zhuoqing\\window\\Atmel\\test\\2023\\SPADCounter\\main.c

三、测量结果

1、反向电压与脉冲

  将红外LED置于一个黑色纸盒内, 纸盒内部有黑色海绵吸收光线。 测量反向电压从39.5V变化到45V对应的雪崩脉冲数量。 这反应了脉冲数量与红外LED反向电压之间的关系。

▲ 测量LED在无光情况下反向偏置电压与脉冲个数之间的关系

  这里给出了测量结果, 可以看到在41V之前,雪崩脉冲数值非常小。 随着电压的增加,反向单光子雪崩脉冲信号持续增加。 由于黑盒子内无法做到完全没有光线,所以后面脉冲增加也可以看成LED传感器灵敏度增加的结果。

▲ 图1.3.2 无光下反向偏置电压与脉冲数量之间的关系

vdim=[39.50,39.56,39.61,39.67,39.72,39.78,39.83,39.89,39.94,40.00,40.06,40.11,40.17,40.22,40.28,40.33,40.39,40.44,40.50,40.56,40.61,40.67,40.72,40.78,40.83,40.89,40.94,41.00,41.06,41.11,41.17,41.22,41.28,41.33,41.39,41.44,41.50,41.56,41.61,41.67,41.72,41.78,41.83,41.89,41.94,42.00,42.06,42.11,42.17,42.22,42.28,42.33,42.39,42.44,42.50,42.56,42.61,42.67,42.72,42.78,42.83,42.89,42.94,43.00,43.06,43.11,43.17,43.22,43.28,43.33,43.39,43.44,43.50,43.56,43.61,43.67,43.72,43.78,43.83,43.89,43.94,44.00,44.06,44.11,44.17,44.22,44.28,44.33,44.39,44.44,44.50,44.56,44.61,44.67,44.72,44.78,44.83,44.89,44.94,45.00]
pdim=[0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,2.00,2.00,2.00,2.00,2.00,6.00,16.00,12.00,18.00,24.00,26.00,30.00,34.00,44.00,44.00,48.00,81.00,41.00,79.00,70.00,71.00,98.00,94.00,119.00,98.00,132.00,125.00,139.00,181.00,166.00,199.00,228.00,228.00,252.00,275.00,280.00,354.00,323.00,411.00,422.00,458.00,574.00,527.00,686.00,678.00,866.00,1049.00,1167.00,1168.00,1498.00,1608.00,1684.00,1669.00,2122.00,2304.00,2242.00,2547.00,2678.00,2949.00,2937.00,2772.00,3446.00,3587.00,3395.00,3938.00,4311.00,4682.00,4955.00,5192.00,5514.00,5709.00,5837.00,6783.00,7374.00,7242.00,7811.00,7906.00,8631.00,9132.00,9086.00,9386.00,9851.00,10491.00,11170.00,11273.00,11768.00,11767.00,12169.00,12818.00,12835.00]
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. ZhuoQing 2023-01-16
#
# Note:
#============================================================

from headm import *

import serial
from _ast import Or
from serial.serialutil import SerialException
from tsmodule.tsvisa        import *


#------------------------------------------------------------
sport = serial.Serial()
sport.baudrate = 115200
sport.timeout = 0.05
try:
    sport.port = 'COM1'
except:
    printf('Set sport port COM1 error. ')

try:
    sport.open()
except serial.serialutil.SerialException:
    printf('Open sport port COM1 error.')
else:
    printf('Open sport port COM1 Ok.')

sport.setDTR(False)
sport.setRTS(False)

#------------------------------------------------------------
sport.write(bytes((0x1,)))
sport.read(10)

def readPulse():
    sport.write(bytes((0x1,)))

    ret = ''
    for i in range(10):
        time.sleep(.01)
        ret = sport.read(10)
        if len(ret) > 0:
            break

    nstr = ret.decode('utf-8')

    return int(nstr)
#------------------------------------------------------------

vdim = linspace(39.5, 45, 100)
pdim = []

for v in vdim:
    dh1766volt(v)
    time.sleep(.5)

    r = readPulse()
    printff(v, r)
    pdim.append(r)

    tspsave('result', vdim=vdim, pdim=pdim)

dh1766volt(40)

plt.plot(vdim, pdim)

plt.xlabel("Voltage(V)")
plt.ylabel("Number")
plt.grid(True)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
printf('\\a')

#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#============================================================

2、脉冲数与光线之间关系

  在黑色纸盒内固定一个红色LED, 使其与红外LED正对, 测量LED的电流与接收LED反向雪崩脉冲信号数量之间的关系。 测量仍然在无光黑色盒子内进行, 尽量避免外部光线的影响。 LED电流通过测量串联电阻上的电压获得。

▲ 图1.3.3 测量雪崩脉冲数量与光线之间的关系

  在博文 LED的电流与光强之间的关系 工作中测量了红色LED的光强与通过电流之间的关系, 在一定范围内大体上呈现线性关系。

dp1308open(108)
dp1308p6v(3)

R = 220
vdim = linspace(0.5, 5, 100)
idim = []
rdim = []

for v in vdim:
    dp1308p6v(v)
    time.sleep(1.5)
    meter = meterval()
    vr = meter[0]
    i = vr/R*1000                   # unit:mA

    idim.append(i)
    r = readPulse()
    rdim.append(r)

    printff(i, r)

    tspsave('currresult', idim=idim, rdim=rdim)

plt.plot(idim, rdim)

plt.xlabel("Current(mA)")
plt.ylabel("Number")
plt.grid(True)
plt.tight_layout()
plt.show()

  这是测量结果,可以看出整体上随着LED电流增加,光强增加,雪崩脉冲数量也增加。 在2mA之前,脉冲数量与LED电流之间大体呈现线性关系。 随着后面电流增加, 电流逐步趋向饱和状态。 猜测是强光下,雪崩脉冲之间会相互重叠,熄火电路会掩盖部分脉冲,使得脉冲计数下降。

▲ 图1.3.4 LED电流与雪崩脉冲之间的关系

idim=[0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.01,0.03,0.05,0.10,0.18,0.27,0.39,0.51,0.65,0.79,0.94,1.09,1.25,1.41,1.57,1.74,1.90,2.08,2.25,2.42,2.59,2.77,2.95,3.12,3.31,3.48,3.67,3.85,4.03,4.21,4.40,4.49,4.77,4.95,5.14,5.33,5.51,5.70,5.88,6.07,6.26,6.45,6.64,6.83,7.02,7.21,7.40,7.59,7.78,7.97,8.17,8.36,8.55,8.74,8.93,9.13,9.32,9.52,9.71,9.90,10.10,10.29,10.49,10.68,10.88,11.07,11.26,11.46,11.66,11.85,12.05,12.24,12.44,12.63,12.83,13.03]
rdim=[6.00,7.00,8.00,5.00,9.00,8.00,7.00,6.00,6.00,2.00,5.00,6.00,8.00,4.00,7.00,5.00,7.00,10.00,3.00,6.00,3.00,7.00,9.00,13.00,16.00,28.00,69.00,145.00,337.00,542.00,844.00,1177.00,1529.00,1825.00,2196.00,2633.00,2931.00,3238.00,3543.00,3889.00,4265.00,4566.00,4904.00,5158.00,5335.00,5616.00,6020.00,6098.00,6449.00,6631.00,6816.00,7075.00,7180.00,7422.00,7630.00,7754.00,7857.00,8112.00,8200.00,8330.00,8597.00,8690.00,8840.00,8960.00,9027.00,9288.00,9349.00,9418.00,9457.00,9684.00,9680.00,9859.00,9954.00,9978.00,10086.00,10252.00,10357.00,10418.00,10512.00,10486.00,10624.00,10654.00,10717.00,10843.00,10878.00,10927.00,10958.00,11061.00,11081.00,11152.00,11180.00,11221.00,11368.00,11453.00,11468.00,11471.00,11485.00,11594.00,11686.00,11595.00]

▲ 图1.3.5 光强大的时候,脉冲检测器的性能下降

四、光电池发光

  光电池是将光转变成电流的器件, 如果对其通过电流是否可以发光呢?下面使用上面红外LED器件测量光电池的发光。

  将光电池与红外LED放置在黑盒子里面。 调整红外LED方向,使其正对光电池表面。 将它们密封在黑色纸盒子里面。 增加红外LED偏置电压,增加它的灵敏度。 下面测试光电池导通电流与雪崩脉冲信号之间的关系,看是否光电池通过电流之后会发光。

▲ 图A1.4.1 测量光电池发光信号

  这是测量结果,可以看到随着光电池电流增加,红外LED反向雪崩脉冲信号也增加了。 它们之间大体呈现线性关系。 这说明光电池的确发光,而且光线强随着电流增加线性增加。 这个实验也证明了红外LED反向雪崩信号的确可以检测非常微弱的发光。

雪崩电流信号整形电路中的熄火电路

红外LED反向雪崩击穿的几种不同形式

IR(红外遥控)基本原理

IR(红外遥控)基本原理

IR(红外遥控)基本原理

测试一些LED的反向击穿过程中的单光子现象