記錄一下,方便以後翻閱~
主要內容:通過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...