通过光敏电阻获取光照度解析

stm32下通过光敏电阻到底是如何获取光照度呢?

见图如下:RL1为光敏电阻,PC3为芯片引脚

        光敏电阻RL1随着光照度变化而变化,是一个模拟量,电压Y也是一个模拟量,当电压通过PC3引脚输入到芯片时,会交给ADC,转换成一个数字量。所以ADC实际上转换的是电压。

        我这里芯片内部ADC器件是12位的,也就是转换出来的数字用12bit位来存储。所以输出的数字范围为0-4096.
        ADC输入电压范围的确定:当光照强度最强时,RL1电阻最小,小到可以忽约不计,此时输入电压是3.3v;当无光照时,RL1电阻无穷大,此时Y点电压为0,因此输入电压Y的范围位0-3.3V
 

   如上图所示,输入电压为0时,输出也为0,输入为3.3时,输出为4096. 那如果输入的电压是Y,输出值(设为AD)是多少呢?将光敏电阻值随光照变化设为斜率不变的直线,得出如下公式:
          3.3/4096 = Y/AD

 AD值可以调用库函数HAL_ADC_GetValue获取,所以可以计算出Y值。(注意该库函数要在ADC转换完成去调用哦,一般是ADC中断中调用)

         3.3/(RL1+4700) = Y/4700    (根据电流相等)

   两个公式消去Y,可以得到RL1的阻值与AD值关系。

此时得到光敏电阻,那如何获取光照度呢?

一种方式是,使用电阻与光照强度之间的数学关系,通过公式计算出来。往往是非线性的,所以单片机计算速度会很慢;

第二种是通过电阻与光照强度之间建立一张表格,比如把光照强度1到1000lux对应的电阻值,两者之间建立一张表格(厂家提供),通过查表得到。

typedef struct

{

 unsigned short ohm;   //光敏电阻值

unsigned short lux;   //流明

}PhotoRes_TypeDef;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值