STM32學習心得二十五 光敏感測器原理及實驗

2021-10-06 09:44:36 字數 3661 閱讀 4559

記錄一下,方便以後翻閱~

主要內容:通過adc3_ch6來檢測光敏二極體一端的電壓變化來達到檢測光強的目的(可通過檢測環境光,調節lcd的背光大小)。

官方資料:《stm32中文參考手冊v10》第11章——模擬/數字轉換adc

1. 光敏感測器概述

光敏感測器是最常見的感測器之一,它的種類繁多,主要有:光電管、光電倍增管、光敏電阻、光敏三極體、太陽能電池、紅外線感測器、紫外線感測器、光纖式光電感測器、色彩感測器、ccd和cmos影象感測器等。光感測器是目前產量最多、應用最廣的感測器之一,它在自動控制和非電量電測技術中占有非常重要的地位。

光敏感測器是利用光敏元件將光訊號轉換為電訊號的感測器,它的敏感波長在可見光波長附近,包括紅外線波長和紫外線波長。光感測器不只侷限於對光的探測,它還可以作為探測元件組成其他感測器,對許多非電量進行檢測,只要將這些非電量轉換為光訊號的變化即可。

光敏二極體也叫光電二極體。光敏二極體與半導體二極體在結構上是類似的,其管芯是乙個具有光敏特徵的pn結,具有單向導電性,因此工作時需加上反向電壓。無光照時,有很小的飽和反向漏電流,即暗電流,此時光敏二極體截止。當受到光照時,飽和反向漏電流大大增加,形成光電流,它隨入射光強度的變化而變化。當光線照射pn結時,可以使pn結中產生電子一空穴對,使少數載流子的密度增加。這些載流子在反向電壓下漂移,使反向電流增加。因此可以利用光照強弱來改變電路中的電流。

簡而言之:照射光敏二極體的光強不同,通過光敏二極體的電流大小就不同,所以可以通過檢測電流大小,達到檢測光強的目的。利用這個電流變化,我們串接乙個電阻,就可以轉換成電壓的變化,從而通過adc讀取電壓值,判斷外部光線的強弱。

2. 硬體連線圖

3.相關**解讀

3.1 adc.h標頭檔案**解讀

#ifndef __tsensor_h

#define __tsensor_h

#include

"stm32f10x.h"

void

adc3_init

(void);

//adc3初始化//

u16 get_adc3

(u8 ch)

;//獲得adc3某個通道值//

#endif

3.2 adc.c檔案**解讀

#include

"delay.h"

#include

"sys.h"

#include

"adc.h"

//編寫adc3_init初始化函式//

void

adc3_init

(void

)//編寫get_adc3函式//

u16 get_adc3

(u8 ch)

3.3 lsens.h標頭檔案**解讀

#ifndef __lsens_h

#define __lsens_h

#include

"sys.h"

#include

"adc.h"

//定義兩個常量//

#define lsens_read_times 10

//定義光敏感測器讀取次數,讀10次,然後取平均值//

#define lsens_adc_chx adc_channel_6

//定義光敏感測器所在的adc通道編號,即0x06//

//申明兩個函式//

void

lsens_init

(void);

//初始化光敏感測器函式//

u8 lsens_get_val

(void);

//讀取光敏感測器值的函式//

#endif

3.4 lsens.c檔案**解讀

#include

"lsens.h"

#include

"delay.h"

//初始化光敏感測器函式,即對gpio,pf8初始化引數配置//

void

lsens_init

(void

)//讀取light sens的值,範圍0-100,0最暗;100最亮//

u8 lsens_get_val

(void

) temp_val/

=lsens_read_times;

//計算平均值//

if(temp_val>

4000

)temp_val=

4000

;//當計算後的值大於4000時,強制轉換為4000//

return

(u8)

(100

-(temp_val/40)

);//將temp_val值歸一化到0-100之間//

}

3.5 main.c檔案**解讀

#include

"led.h"

#include

"delay.h"

#include

"sys.h"

#include

"usart.h"

#include

"adc.h"

#include

"lsens.h"

intmain

(void

)}

4. 實驗結果

舊知識點

1)複習如何新建工程模板,可參考stm32學習心得二:新建工程模板;

2)複習基於庫函式的初始化函式的一般格式,可參考stm32學習心得三:gpio實驗-基於庫函式;

3)複習暫存器位址,可參考stm32學習心得四:gpio實驗-基於暫存器;

4)複習位操作,可參考stm32學習心得五:gpio實驗-基於位操作;

5)複習暫存器位址名稱對映,可參考stm32學習心得六:相關c語言學習及暫存器位址名稱對映解讀;

6)複習時鐘系統框圖,可參考stm32學習心得七:stm32時鐘系統框**讀及相關函式;

7)複習延遲函式,可參考stm32學習心得九:systick滴答定時器和延時函式解讀;

8)複習st-link**器的引數配置,可參考stm32學習心得十:在keil mdk軟體中配置st-link**器;

9)複習st-link除錯方法,可參考stm32學習心得十一:st-link除錯原理+軟硬體**除錯方法;

10)複習如何對gpio進行復用,可參考stm32學習心得十二:埠復用和重對映;

11)複習串列埠通訊相關知識,可參考stm32學習心得十四:串列埠通訊相關知識及配置方法;

12)複習adc原理及一般配置步驟,可參考stm32學習心得二十三:adc轉換原理及模數轉換實驗和stm32學習心得二十四:內部溫度感測器原理及實驗。

STM32學習心得(1)

學stm32的目的只是為了可以讓乙個電機轉動起來,哈哈哈是不是感覺沒什麼大目標。但是能讓電機轉起來就覺得很有成就感。我在學之前有的概念就是 pwm,can,輸入輸出啥的,然而卻並不知道是幹什麼的。前一段時間在 上買了一款stmf103的板子,買回來後裝了keil4花了好幾個小時,又花了好幾個小時配置...

STM32學習心得 八 初識中斷

typedef struct nvic type 其中最常用的就是中斷優先順序暫存器。同時,在 misc.h 韌體庫中也實現了部分與中斷相關的函式 void nvic prioritygroupconfig uint32 t nvic prioritygroup void nvic init nvi...

stm32專題二十五 實現基本定時器定時

利用基本定時器定時過程 1 開啟基本定時器的時鐘 2 定義時基初始化結構體,然後只需要配置分頻係數psc和重裝載計數值arr,其他結構體成員不用管 3 開啟定時器中斷,這裡要選擇為定時器更新中斷 4 使能定時器。接下來是配置過程,非常簡單。bsp basictim.c include bsp bas...