1.BH1730的内部框架
(图一 BH1730手册)
BH1730采用光敏二极管,经过单反馈积分运算放大电路调整,将输入的光照信号采集静ADC采集,并经过离散、量化处理成16bit的数据存储在内部寄存器。光敏二极管本身光压曲线是非线性光线,可以参考以下的曲线:
(图二 光二极管特性曲线)
上图取自PD333-3B的数据手册的厂家数据,光敏二极管对于不同的波长的感度不同,总体呈现反二次关系,最佳光感带集中在900nm波附近(远远超出人眼感光范围(390nm~700nm))。当然,因为这是一个红外特征管,本身制造就是针对这段人眼无法感知的信号。由于BH1730并未提供关于内部红外管的特性曲线(至少我查看的ROHM的手册没有),所以只能借助其他厂家的手册去解释。恒定电压情况下,光电流与照度在10^1-10^4Lux之间近似直线,该电流与二极管两端电压也正相关。可惜没有查找到某厂家可以体现完整的光二极管的特性曲线图,毕竟制造出来的二极管在特定范围内必然要近似线性。只能借助下面一篇文章来参考
[光敏二极管传感器] https://read.qq.com/read/1000680327/51
光敏二极管本身是光生伏特效应,光子会激发电子能量,形成光电流的关系,所以实际的BH1730电路有很复杂的过程实现光电流到光电压的过程,实际光敏二极管可以近似为非线性电流源,一般经过电阻实现电压转换。由于没有找到具体厂家的数据体现完整的光敏二极管曲线,所以只能在理论层面去解释。光敏二极管与普通二极管的区别主要体现在光伏特效应的介入,在普通二极管的固定电压的基础上,控制变量变成了光照强度,但是并不能改变二极管非线性的特点。但是一段范围内,两者的结合可以近似直线,具体实现原理此处不做解释。
2.控制方法
上图是我从BH17手册中总结出来的BH1730的编程逻辑,包括:控制流程图、指令格式、寄存器地址、物理值换算关系、示例。
BH1730是由作为基本电路的光电二极管、电流电压转换电路、A/D转换器、控制逻辑电路以及接口电路等构成的环境光亮度传感器IC,采用标准的I^2C\ Bus协议与外界传输数据。
3.代码
do{
reVal = BH1730_Write_Command();
vTaskDelay(100);
}while(reVal != kStatus_Success);
reVal = kStatus_Fail;
do{
reVal = BH1730_Read_Data();
vTaskDelay(100);
}while(reVal != kStatus_Success);
读取指令函数 - BH1730_Write_Command()
延时 - vTaskDelay(100),代码本身是搭在FreeRTOS上的,所以采用的是任务延时
读取数据函数 - BH1730_Read_Data()
延时 - vTaskDelay(100)
主机作为I2C,每次I2C的操作都需要判断应答,保证数据传输正常。第二个读取数据的应答主要是判断从设备是否数据处理完成,主机可以调起传输数据过程
具体实现过程可以参考控制方法的下面部分的Example,流程图是依据本段代码编写的。
4.效果图