【正点原子STM32连载】 第三十三章 光敏传感器实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)實驗平臺:正點原子MiniPro H750開發板
2)平臺購買地址:https://detail.tmall.com/item.htm?id=677017430560
3)全套實驗源碼+手冊+視頻下載地址:http://www.openedv.com/thread-336836-1-1.html
4)對正點原子STM32感興趣的同學可以加群討論:879133275
第三十三章 光敏傳感器實驗
本章,我們將學習使用MiniPRO STM32H750開發板板載的一個光敏傳感器。我們還是要使用到ADC采集,通過ADC采集電壓,獲取光敏傳感器的電阻變化,從而得出環境光線的變化,并在TFTLCD上面顯示出來。
本章分為如下幾個小節:
33.1 光敏傳感器簡介
33.2 硬件設計
33.3 程序設計
33.4 下載驗證
33.1 光敏傳感器簡介
光敏傳感器是最常見的傳感器之一,它的種類繁多,主要有:光電管、光電倍增管、光敏電阻、光敏三極管、太陽能電池、紅外線傳感器、紫外線傳感器、光纖式光電傳感器、色彩傳感器、CCD和CMOS圖像傳感器等。光傳感器是目前產量最多、應用最廣的傳感器之一,它在自動控制和非電量電測技術中占有非常重要的地位。
光敏傳感器是利用光敏元件將光信號轉換為電信號的傳感器,它的敏感波長在可見光波長附近,包括紅外線波長和紫外線波長。光傳感器不只局限于對光的探測,它還可以作為探測元件組成其它傳感器,對許多非電量進行檢測,只要將這些非電量轉換為光信號的變化即可。
MiniPRO STM32H750開發板板載了一個光敏二極管(光敏電阻),作為光敏傳感器,它對光的變化非常敏感。光敏二極管也叫光電二極管。光敏二極管與半導體二極管在結構上是類似的,其管芯是一個具有光敏特征的PN結,具有單向導電性,因此工作時需加上反向電壓。無光照時,有很小的飽和反向漏電流,即暗電流,此時光敏二極管截止。當受到光照時,飽和反向漏電流大大增加,形成光電流,它隨入射光強度的變化而變化。當光線照射PN結時,可以使PN結中產生電子一空穴對,使少數載流子的密度增加。這些載流子在反向電壓下漂移,使反向電流增加。因此可以利用光照強弱來改變電路中的電流。
利用這個電流變化,我們串接一個電阻,就可以轉換成電壓的變化,從而通過ADC讀取電壓值,判斷外部光線的強弱。
本實驗利用ADC3的通道11(PC1)來讀取光敏二極管電壓的變化,從而得到環境光線的變化,并將得到的光線強度,顯示在TFTLCD上面。關于ADC的介紹,前面已經有詳細介紹了,這里我們就不再細說了。
33.2 硬件設計
通過ADC3的通道11(PC1)讀取光敏傳感器(LS1)的電壓值,并轉換為0~100的光線強度值,顯示在LCD模塊上面。光線越亮,值越大;光線越暗,值越小。大家可以用手指遮擋LS1和用手電筒照射LS1,來查看光強變化。LED0閃爍用于提示程序正在運行。
1)RGB燈
RED : LED0 - PB4
2)串口1(PA9/PA10連接在板載USB轉串口芯片CH340上面)
3)正點原子2.8/3.5/4.3/7/10寸TFTLCD模塊(僅限MCU屏,16位8080并口驅動)
4)ADC3 :通道11 - PC1
5)光敏傳感器 - PC1
我們主要來看看光敏傳感器和開發板的連接,如下圖所示:
圖33.2.1 光敏傳感器與開發板連接示意圖
圖中,LS1是光敏二極管(實物在開發板5V排針(VOUT2)上面),R28為其提供反向電壓,當環境光線變化時,LS1兩端的電壓也會隨之改變,從而通過ADC3_IN11通道,讀取LIGHT_SENSOR(PC1)上面的電壓,即可得到環境光線的強弱。光線越強,電壓越低,光線越暗,電壓越高。
33.3 程序設計
33.3.1 ADC的HAL庫驅動
本實驗用到的ADC的HAL庫API函數前面都介紹過,具體調用情況請看程序解析部分。下面介紹讀取光敏傳感器ADC值的配置步驟。
讀取光敏傳感器ADC值配置步驟
1)開啟ADCx和ADC通道對應的IO時鐘,并配置該IO為模擬功能
首先開啟ADCx的時鐘,然后配置GPIO為模擬模式。本實驗我們默認用到ADC3通道11,對應IO是PC1,它們的時鐘開啟方法如下:
__HAL_RCC_ADC3_CLK_ENABLE (); /* 使能ADC3時鐘 /
__HAL_RCC_GPIOC_CLK_ENABLE(); / 開啟GPIOC時鐘 */
2)設置ADC3,開啟內部溫度傳感器
調用HAL_ADC_Init函數來設置ADC3時鐘分頻系數、分辨率、模式、掃描方式、對齊方式等信息。
注意:該函數會調用:HAL_ADC_MspInit回調函數來完成對ADC底層的初始化,包括:ADC3時鐘使能、ADC3時鐘源的選擇等。
3)配置ADC通道并啟動AD轉換器
調用HAL_ADC_ConfigChannel()函數配置ADC3通道11,根據需求設置通道、序列、采樣時間和校準配置單端輸入模式或差分輸入模式等。然后通過HAL_ADC_Start函數啟動AD轉換器。
4)讀取ADC值,轉換為光線強度值
這里選擇查詢方式讀取,在讀取ADC值之前需要調用HAL_ADC_PollForConversion等待上一次轉換結束。然后就可以通過HAL_ADC_GetValue來讀取ADC值。最后把得到的ADC值轉換為0~100的光線強度值。
33.3.2 程序流程圖
圖33.3.2.1 光敏傳感器實驗程序流程圖
33.3.3 程序解析
這里我們只講解核心代碼,詳細的源碼請大家參考光盤本實驗對應源碼。LSENS驅動源碼包括兩個文件:lsens.c和lsens.h。本實驗還要用到adc3.c和adc3.h文件的驅動代碼。adc3.c和adc3.h文件前面已經介紹過了,就不再贅述。
lsens.h頭文件定義了一些宏定義和一些函數的聲明,該宏定義如下:
該函數初始化PC1為模擬功能,然后通過adc3_init函數初始化ADC3。
最后是讀取光敏傳感器值,函數定義如下:
lsens_get_val函數用于獲取當前光照強度,該函數通過adc3_get_result_average函數得到通道11轉換的電壓值,經過簡單量化后,處理成0~100的光強值。0對應最暗,100對應最亮。
2. main.c代碼
在main.c里面編寫如下代碼:
該部分的代碼邏輯很簡單,初始化各個外設之后,進入死循環,通過lsens_get_val獲取光敏傳感器得到的光強值(0~100),并顯示在TFTLCD上面。
33.4 下載驗證
將程序下載到開發板后,可以看到LED0不停的閃爍,提示程序已經在運行了。LCD顯示的內容如圖33.4.1所示:
圖33.4.1 光敏傳感器實驗測試圖
我們可以通過給LS1不同的光照強度,來觀察LSENS_VAL值的變化,光照越強,該值越大,光照越弱,該值越小,LSENS_VAL值的范圍是0~100。
總結
以上是生活随笔為你收集整理的【正点原子STM32连载】 第三十三章 光敏传感器实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET MVC Global.c
- 下一篇: win10上编译libharu库