STM32使用光敏传感器计算光照度Lux,而不是仅仅打印个电压值或者电阻值 | 您所在的位置:网站首页 › 勒克斯lx › STM32使用光敏传感器计算光照度Lux,而不是仅仅打印个电压值或者电阻值 |
最近项目中用到了光敏电阻。搜索资料,发现很多人都使用光敏电阻,只是用了AD读取了电压值,或者算出了电阻值,就发送给上位机或者服务器,美其名曰获取了光照度。 搜索一番,也没找到用光敏电阻计算Lux的方法,于是自己做了一些研究,分享一下。 计算光敏电阻值 相信STM32的ADC读者应该会用,教程也一抓一大把,在此不表。接下来先计算电阻值。我的光敏电阻电路图如下: 其中PA6接单片机AD采集引脚,它最大只能输入3.6V电压,而光敏电阻的供电为5V,所以设计了R1与R2两个分压电阻,确保PA6的电压不超过3.6V。 设光敏电阻的阻值为xΩ,PA6的电压为y,可得以下公式: y/1500=5/(x+2500) STM32的ADC精度为12位,则最大值为4096。采集到的AD值与电压成线性对应关系,系统中最高的电压值为3.3V的电源电压,它与4096对应。假设PA6感受到的电压y对应的AD值为z,则: y/z=3.3/4096 联立两式,消去y,得到关于x的表达式: x=10240000/(1.1×z)-2500 使用ADC得到z以后,就可以根据上式算出光敏电阻的值了。 我的代码使用了DMA获取多通道AD值,并且取100个数据求算数平均值滤波,然后打印电阻值的代码如下: //main.c main() while (1) { if(DMA_Flag) { for(int i=0;i GL5528[i].ohm) { lux = GL5528[i].lux; break; } } return lux; }主函数中,打印光照度: //main.c main() while(1) if(DMA_Flag) { unsigned short lux = 0; for(int i=0;i |
CopyRight 2018-2019 实验室设备网 版权所有 |