锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

外设驱动库开发笔记37:S1336-5BQ光敏二极管作为光度计驱动

时间:2022-10-31 02:00:01 s接二极管

??光敏二极管可用于光度检测。我们在一些产品中使用过它S1336-5BQ光敏二极管检测光度值。因此,在本文中,我们将讨论如何设计和实现它S1336-5BQ光敏二极管用于光度检测的驱动。

1、功能概述

??根据相关数据,光电二极管S1336-5BQ光谱响应范围为:190~1100nm最敏感的波长是960nm。光电二极管S1336-5BQ每100lx光对应5μA电流。因此,我们可以根据此设计一个电路,将电流的变化变为电压变化,具体原理图如下:

??上图中R5.采样电阻决定测量范围,电源VCC,默认采用5V标准电源。输出电压与光度值的函数关系如下:

??其中lux为光度值,Vo输出电压,Vf为参考电压。所以我们可以看到光度值与输出电压是线性关系,我们检测到输出电压就可以得到光度值。

2.驱动设计与实现

??我们明白了使用光电二极管S1336-5BQ检测光强的原理,然后我们需要实现代码。

2.1、对象定义

??在使用之前,我们必须定义一个LUX因此需要对象LUX对象类型。根据测量原理抽象:

/* 定义光度检测对象类型 */

typedef struct LuxObject {

float isc100lux; ///每100个光度变化对应的电流变化

float rnf; ///采样电阻值

float vref; //参考电压

float lux; //光度值

}LuxObjectType;

??我们不能立即使用对象,必须在使用前初始化对象。因此,我们根据对象编写初始化函数:

/* 初始化光度检测对象 */

void LuxInitialization(LuxObjectType *lm,float isc,float vref,float rnf)

{

if(lm==NULL)

{

return;

}

lm->lux=0.0;

lm->isc100lux=isc;

lm->rnf=rnf;

lm->vref=vref;

}

2.2、对象操作

??我们已经有了一个对象并初始化了它。接下来,我们可以操作对象来获得光度值。根据以前的测量原理,我们可以得到光度值的计算公式:

根据这个公式计算光度值:

/*计算光强*/  float CalcLxIllumination(LuxObjectType *lm,float mVoltage)  {   float lux=0.0;   lux=(mVoltage-lm->vref)*100/(lm->rnf*lm->isc100lux);     lm->lux=lux;   return lux;  } 

??输入电压值是通过采集电路获得的输出电压。

3.使用驱动器

??在我们的应用中,我们的光源波长是254nm最显著的,包括其他600nm内部光波,这正好在S1336-5BQ光电二极管190~1100nm范围测量范围内。

??输入信号接入前测量电路的输出ADC中。在ADC前端增加了一些必要的保护,但不处理信号,如下图所示:

??当然,如果需要,也可以放大缩小,以满足要求ADC输入要求。但不会改变光度值的检测范围。

??我们先用同样的LuxObjectType定义对象变量并初始化。当然,如果有多个也可以使用数组处理。这里只以单个对象为例:

??LuxObjectType lm;

??LuxInitialization(&lm,0.000005,2.5,10000.0);

??在定义和初始化对象完成后,我们可以调用它CalcLxIllumination函数计算光度值:

??CalcLxIllumination(&lm,2.738);

??可得结果:lux=476。

4、应用总结

??使用S1336-5BQ光电二极管的光度测量原理相对简单。在臭氧发生器中,我们也使用它来检测紫外线的强度。

??检测光强的范围完全由采样电阻决定。我们可以在我们的设备中检测0~5000lux光强。如需采用不同范围,可通过调整采样电阻值来实现。

欢迎关注:

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章