本帖最后由 shaoziyang 于 2015-1-30 00:05 编辑
i# f" C: Z4 ?& F9 V0 @
$ u I" W5 B9 w* `LED除了可以发光,其实也可以测试光强,因为LED也是二极管。当环境光强变化时,LED上的结电压会发生变化,因此可以通过这个方法测量光强。虽然这种方法精度不是太高,但在有些情况下还是有用的。
9 k- a3 L8 u6 E- s5 F. m
$ {- u) H; x; f+ G, qST Nucleo F072RB上只有一个用户LED,它接在PA_5,它也是ADC_IN5。利用F072带有的12位ADC,可以很灵敏的测出光强变化。下面程序就演示这个方法,程序很简单,但是效果还不错。6 O8 K4 D' G3 m' u3 v* I* A% ]
: ~0 ^( }! e6 I9 T- #include "mbed.h"; D: `! n% Q$ B3 K
+ a! n7 \0 E$ u# Z- c- DigitalOut myled(LED1);( a, _' ?) B5 A( ]
- 1 U+ f; y5 D4 B( i: Z
- AnalogIn Light(LED1);/ t3 q! k# }$ a* \0 r
- # R( `. Q/ X3 @! O; R+ g9 E9 W
- Serial pc(USBTX,USBRX);0 Y3 o. h. q/ `8 a& L
; a9 E! B C) q8 E3 R2 w0 {- int main() {
* d4 c" O2 b7 X! j, L% } - myled = 0;
+ g2 |( F1 M5 E- j' K - while(1) {
3 H5 h7 M- x3 U1 J W! k9 g% t4 d - wait(0.5);, d7 |1 C- v3 u/ T2 m
- pc.printf("%d\r\n", Light.read_u16()>>4);
& Q! v) i5 S" N4 \ - }
6 U7 n \- A4 K' x7 N$ X3 p5 p& @" r/ H - }
复制代码 4 o3 `1 |" {, {# r: U- l$ m O5 b
: f# ?4 _/ O1 d: _( s n, ~* z. v8 [1 w) B+ H/ ]$ f% D) |5 @
测试效果- S# U2 O9 v( R
; _# K, ^0 ^/ ?& _* @/ P5 h5 d: H# H' y
U9 W$ f9 k' }- V2 }1 _
7 V) Q4 |# B w/ ^
ST_Nucleo_F072_TEST.zip
(671.1 KB, 下载次数: 8)
|
当环境光强变化时,LED上的结电压会发生变化,它们存在一个对应关系(非线性),所以可以测光强。
缺点是变化范围较小,一致性不是特别好,所以不适合测光强具体数值,但是测光强变化,或者测大概光强还是不错的,不用增加任何硬件成本。
你试试就清楚了,很容易的。+ r( m* y+ ^, I0 n1 m. s
在要求不高,或者IO不够时,这个方法还是有用的,又不增加任何硬件成本啊。一个LED完成两个功能。
多谢,刚刚去复习了一下PN结