王昱顺 发表于 2024-9-23 14:34:25

LED还能同时发光和感光!如何巧妙利用I/O端口模式实现






相信大家对LED这个器件并不陌生,LED的全称是LightEmitting Diode,即发光二极管。但是,LED除了发光,其实也可以作为感光器件使用,很神奇吧,但这其实是二极管的一种通用特性——PN结可以根据光强度改变漏电流。按照内部结构的不同,感光器件一般分为光敏电阻、光敏二极管、光敏三极管。大家最常见的就是光敏电阻了,但是光敏二极管和光敏三极管好像不是那么的常见。





光敏电阻这是因为,这三者里面,光敏电阻最便宜,反应速度最慢。但是,因为探测光线多数不会有突变的情况,所以光敏电阻应用的也最广泛。不过,如果是需要检测快速变化的亮度信号,一般就会使用光敏三极管或者光敏二极管了。而光敏电阻的反应时间一般在10ms左右,如果光信号的变化速度比光敏电阻的反应时间还要快,那么可能就检测不到有效的信号了。当然,这种应用场景并不是很多,一般场景使用光敏电阻就可以了。但是光敏二极管的反应速度就不一样了,普遍在10ns这个级别左右。这里为什么要提反应速度这个事情呢?因为这是后面能让LED同时高频切换发光和感光的关键特性,如果没有这个高速反应特性,那么就有可能出现感光无法反应过来的问题,也就没法实现这种单LED同时感光和发光的有趣现象了。首先,我们介绍一下LED在发光状态和感光状态的等效电路图。

普通的发光输出就是将两个IO直接设置为推挽输出,一个输出0(低电平),另一个输出PWM来控制亮度。

而这个感光电路就比较有意思了,首先是不改变发光二极管负极型IO的状态,直接将电平给1,同时将另一个IO的模式变成高阻输入,并且打开下拉电阻。此时,在单片机内部形成了一个电压采样回路,R上的电压就是(流过LED的光电流xR的阻值)。使能ADC采样,即可采样到一个随着外部光线强度变化的ADC数值。此时,LED的感光和发光都有了,高频切换两个功能,即可实现同时感光和发光。使用程序映射一下,就得到了一个随着外部光线亮度变弱,发光强度变强的小夜灯了!


soma 发表于 2024-9-23 15:15:39

学习了,原来是这样实现检光的,就是要使用2个io口。

王昱顺 发表于 2024-9-23 15:33:20

wnagming 发表于 2024-9-23 15:21
可以试试正向感光,我记得普通光敏二极管正向感光效果差,但是能用

可是,LED正向通电就该亮了{:4_167:}

DebugLab 发表于 2024-9-23 15:44:24

wnagming 发表于 2024-9-23 15:21
可以试试正向感光,我记得普通光敏二极管正向感光效果差,但是能用

光敏二极管是这样的,但楼主用的是普通LED

邮箱 发表于 2024-9-23 15:58:19

{:4_174:}

mengjun 发表于 2024-9-24 08:26:50

光耦里面是光敏三极管

angalp 发表于 2024-11-2 08:24:57

感谢楼主分享,收藏!{:4_250:}

wlhet 发表于 2024-11-10 18:09:04

这想法 妙啊

山上的风2024 发表于 2024-12-4 09:31:04

学习了。。。。。。。。。。。。。。。

hlt253 发表于 2025-4-23 20:15:51

以前用光敏电阻做了个汽车自动大灯。
页: [1]
查看完整版本: LED还能同时发光和感光!如何巧妙利用I/O端口模式实现