光敏二极管能够实现很多应用,用于光度检测即是其一。我们在一些产品中就曾使用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的光强。如果想采用不同的范围则可以通过调整采样电阻的值来实现。

欢迎关注:

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

  1. 外设驱动库开发笔记38:RTD热电阻测温驱动

      我们已经讨论过多种温度检测方式,但我们尚未关注热电阻温度检测,但热电阻测温在工业环境中是非常常见的.尽管有很多集成的数字式的热电阻接口元器件,但这些器件不但成本较高,灵活性也大打折扣.所以我们有时 ...

  2. 外设驱动库开发笔记22:ADXL345三轴数字加速度计驱动

    移动设备的广泛应用增加对移动过程中各种参数的检测需求.ADXL345三轴数字加速度计可以用来检测加速度.进而测量倾斜角度等.在这一篇中,我们将讨论ADXL345三轴数字加速度计驱动程序的设计与实现. ...

  3. 外设驱动库开发笔记46:MAX31855热偶变送器驱动

      一些时候,我们需要通过热电偶获取温度数据.在这里我们将讨论如何实现并使用MAX31855热电偶温度便送去的驱动问题. 1.功能概述   MAX31855是具有冷端补偿,能将K.J.N.T或E型热电 ...

  4. 外设驱动库开发笔记53:MAX31856热偶变送器驱动

      在我们的产品中经常有需要温度检测的地方,而热电偶温度检测电路是我们常用的.热电偶温度检测的方法很多,有时出于简单方便的考虑我们会选择热偶温度变送器来实现,这一篇我们就来讨论使用MAX31856热电 ...

  5. 外设驱动库开发笔记15:DHT11温湿度传感器驱动

    与DS18B20一样DHT11也是采用单总线,但所不同的是DHT11可同时实现温度和湿度的检测.在我们的产品中经常使用它来检测环境的温湿度信息.这一篇我们将设计并封装DHT11的驱动程序,以方便重复使 ...

  6. 外设驱动库开发笔记0:EPD总体设计

    在产品开发过程中,不可避免需要使用很多外部的元件及传感器,这些元器件也许是板载的,也许是板外的,但不管怎样,为其开发驱动程序都是必须的.每次都需要为这些元器件编写驱动程序.但每次重复编写调试很麻烦,于 ...

  7. 外设驱动库开发笔记34:OLED显示屏驱动

      现在OLED显示屏在嵌入式系统中应用的越来越多.对于一些显示信息不太复杂,以显示信息为主的需求,我们一般会选择OLED显示屏.在这一篇中,我们将讨论OLED显示屏驱动的设计与实现. 1.功能概述 ...

  8. 外设驱动库开发笔记16:MS5536C压力变送器驱动

    压力检测也是经常会遇到的需求,比如环境压力或者低压气体等都会用到压力检测.这类检测压力都比较低,一般不会超过大气压,有时甚至是负压.这一篇我们要讨论的MS5536C就属于这类器件.接下来我们将设计并实 ...

  9. 外设驱动库开发笔记13:MLX90614红外温度传感器驱动

    红外温度传感器一般用于非接触式的温度检测.在我们的系统中经常会有这样的需求.所以我们将其设计为通用的驱动库以备复用.这一篇我们将讲述MLX90614红外温度传感器驱动的设计与实现. 1.功能概述 ML ...

最新文章

  1. 【Python】有道翻译的爬虫实现(后篇)
  2. 关于 TStringList.Assign - 回复 u9cm 的问题
  3. ICA独立成分分析—FastICA基于负熵最大
  4. 西北师范大学地理与环境科学学院考研真题汇总(高等数学)持续更新。。。
  5. memcpy执行效率测试,无效测试
  6. linux input输入子系统分析《三》:S3C2440的触摸屏驱动实例
  7. Eclipse 生成WebService客户端代码
  8. C++学习笔记----2.4 C++对象的内存模型
  9. 配置 eNSP 连接VMware虚拟机网络
  10. 人工智能杂记 人工智能简史
  11. 什么是TCP粘包?怎么解决TCP粘包问题?
  12. 程序员幽默:39个奇葩代码注释,每一个都能笑抽
  13. 【年终终结】2021年年末总结
  14. SylixOS的来龙去脉
  15. 一篇联想员工写的:联想不是我的家
  16. 交安ABC考试单选练习题库(1)
  17. 游泳馆馆所以及会员管理系统
  18. 基本的规范和约束(一)
  19. acwing 2. 01背包问题
  20. 分布式定时任务调度中心

热门文章

  1. RNN循环神经网络(吴恩达《序列模型》笔记一)
  2. 不能头脑一热,就布局颠覆性技术、上马未来产业
  3. 用scikit-learn学习主成分分析(PCA)
  4. CONTINUE...? ZOJ - 4033
  5. Solr 访问 403 错误
  6. python学习随笔day3
  7. java数据类型转换和数组总结
  8. hdu2609 How many
  9. 法兰程序CAD开发的进展
  10. JavaScript MSN 弹出消息框