• 外设驱动库开发笔记37:S13365BQ光敏二极管作为光度计驱动


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

    欢迎关注:

    如果阅读这篇文章让您略有所得,还请点击下方的【好文要顶】按钮。

    当然,如果您想及时了解我的博客更新,不妨点击下方的【关注我】按钮。

    如果您希望更方便且及时的阅读相关文章,也可以扫描上方二维码关注我的微信公众号【木南创智

  • 相关阅读:
    sudo命令 sudoers文件
    sscanf函数
    printf格式化输出
    c文件操作
    string和char*
    c去除空格 小写转大写
    主机序和网络序转换
    ulimit用法
    mysql基础(附具体操作代码)
    ES6 class
  • 原文地址:https://www.cnblogs.com/foxclever/p/15780374.html
Copyright © 2020-2023  润新知