日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【STM32】光敏传感器示例

發(fā)布時(shí)間:2024/4/24 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【STM32】光敏传感器示例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 光敏傳感器簡(jiǎn)介
    • 02. 硬件模塊
    • 03. 程序設(shè)計(jì)
    • 04. 結(jié)果驗(yàn)證
    • 05. 預(yù)留
    • 06. 附錄
    • 07. 聲明

01. 光敏傳感器簡(jiǎn)介

光敏傳感器是最常見的傳感器之一,它的種類繁多,主要有:光電管、光電倍增管、光敏電阻、光敏三極管、太陽(yáng)能電池、紅外線傳感器、紫外線傳感器、光纖式光電傳感器、色彩傳感器、CCD 和 CMOS 圖像傳感器等。光傳感器是目前產(chǎn)量最多、應(yīng)用最廣的傳感器之一,它在自動(dòng)控制和非電量電測(cè)技術(shù)中占有非常重要的地位。

光敏傳感器是利用光敏元件將光信號(hào)轉(zhuǎn)換為電信號(hào)的傳感器,它的敏感波長(zhǎng)在可見光波長(zhǎng)附近,包括紅外線波長(zhǎng)和紫外線波長(zhǎng)。光傳感器不只局限于對(duì)光的探測(cè),它還可以作為探測(cè)元件組成其他傳感器,對(duì)許多非電量進(jìn)行檢測(cè),只要將這些非電量轉(zhuǎn)換為光信號(hào)的變化即可。

探索者 STM32F4 開發(fā)板板載了一個(gè)光敏二極管(光敏電阻),作為光敏傳感器,它對(duì)光的變化非常敏感。光敏二極管也叫光電二極管。光敏二極管與半導(dǎo)體二極管在結(jié)構(gòu)上是類似的,其管芯是一個(gè)具有光敏特征的 PN 結(jié),具有單向?qū)щ娦?#xff0c;因此工作時(shí)需加上反向電壓。無光照時(shí),有很小的飽和反向漏電流,即暗電流,此時(shí)光敏二極管截止。當(dāng)受到光照時(shí),飽和反向漏電流大大增加,形成光電流,它隨入射光強(qiáng)度的變化而變化。當(dāng)光線照射 PN 結(jié)時(shí),可以使 PN 結(jié)中產(chǎn)生電子一空穴對(duì),使少數(shù)載流子的密度增加。這些載流子在反向電壓下漂移,使反向電流增加。因此可以利用光照強(qiáng)弱來改變電路中的電流。

利用這個(gè)電流變化,我們串接一個(gè)電阻,就可以轉(zhuǎn)換成電壓的變化,從而通過 ADC 讀取電壓值,判斷外部光線的強(qiáng)弱。

02. 硬件模塊

用到的硬件資源有:
1) 指示燈 DS0
2) TFTLCD 模塊
3) ADC
4) 光敏傳感器

LS1 是光敏二極管(實(shí)物在開發(fā)板攝像頭接口右側(cè)),R58 為其提供反向電壓,當(dāng)環(huán)境光線變化時(shí),LS1 兩端的電壓也會(huì)隨之改變,從而通過 ADC3_IN5 通道,讀取LIGHT_SENSOR(PF7)上面的電壓,即可得到環(huán)境光線的強(qiáng)弱。光線越強(qiáng),電壓越低,光線越暗,電壓越高。

03. 程序設(shè)計(jì)

adc.h文件

//----------------------------------- //ADC3通道初始化 void ADC3_Init(void); //獲取ADC3某個(gè)通道的值 u16 Get_Adc3(u8 ch); //獲取某個(gè)通道給定次數(shù)采樣的平均值 u16 Get_Adc3_Average(u8 ch, u8 times);

adc.c文件

//-------------------------ADC3------------------------ //ADC3通道初始化 void ADC3_Init(void) {GPIO_InitTypeDef GPIO_InitStructure;ADC_CommonInitTypeDef ADC_CommonInitStructure;ADC_InitTypeDef ADC_InitStructure;//開啟GPIO時(shí)鐘 PA5RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //開啟ADC1時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE); //GPIO初始化 初始化為模擬功能GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOF, &GPIO_InitStructure);RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3,ENABLE); //ADC1復(fù)位RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3,DISABLE); //復(fù)位結(jié)束 //初始化ADC_CCR寄存器ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;ADC_CommonInit(&ADC_CommonInitStructure);//初始化ADC1ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;ADC_InitStructure.ADC_ScanConvMode = DISABLE;ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfConversion = 1;ADC_Init(ADC3, &ADC_InitStructure);//設(shè)置ADC規(guī)則組通道 一個(gè)序列 采樣時(shí)間//ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_480Cycles);//使能ADCADC_Cmd(ADC3, ENABLE);}//獲取ADC3某個(gè)通道的值 u16 Get_Adc3(u8 ch) {//設(shè)置ADC規(guī)則組通道 一個(gè)序列 采樣時(shí)間ADC_RegularChannelConfig(ADC3, ch, 1, ADC_SampleTime_480Cycles);//開啟ADC3的軟件轉(zhuǎn)換啟動(dòng)功能ADC_SoftwareStartConv(ADC3);//等待轉(zhuǎn)換結(jié)束while(ADC_GetFlagStatus(ADC3, ADC_FLAG_EOC) == RESET);//讀取ADC的值return ADC_GetConversionValue(ADC3);}//獲取某個(gè)通道給定次數(shù)采樣的平均值 u16 Get_Adc3_Average(u8 ch, u8 times) {u32 tmp = 0;u8 i = 0;for (i = 0; i < times; i++){tmp += Get_Adc3(ch);delay_ms(5);}//得到平均值tmp /= times;if (tmp > 4000){tmp = 4000;}return (u16)(100 - (tmp / 40)); }

main.c文件

#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "beep.h" #include "key.h" #include "usmart.h" #include "lcd.h" #include "rtc.h" #include "rng.h" #include "key.h" #include "wkup.h" #include "adc.h"int main(void) { //u16 value = 0;u16 temp = 0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級(jí)分組2delay_init(168);uart_init(115200);//usmart_dev.init(84);LED_Init();LCD_Init();ADC3_Init();POINT_COLOR = RED;LCD_ShowString(30,50,200,16,16,"Explorer STM32F4"); LCD_ShowString(30,70,200,16,16,"LSENS TEST"); LCD_ShowString(30,90,200,16,16,"ATOM@tom");LCD_ShowString(30,110,200,16,16,"2020/09/15"); //設(shè)置字體為藍(lán)色POINT_COLOR = BLUE; LCD_ShowString(30,140,200,16,16,"LSENS VAL:"); while(1){//得到溫度值temp = Get_Adc3_Average(ADC_Channel_5, 10);LCD_ShowxNum(30+10*8,130,temp,3,16,0);//顯示ADC的值printf("Light: %d\r\n", temp);LED1 = !LED1;delay_ms(250);} }

04. 結(jié)果驗(yàn)證

伴隨 DS0 的不停閃爍,提示程序在運(yùn)行。此時(shí),我們可以通過給 LS1 不同的光照強(qiáng)度,來觀察 LSENS_VAL 值的變化,光照越強(qiáng),該值越大,光照越弱,該值越小。

05. 預(yù)留

06. 附錄

6.1 【STM32】STM32系列教程匯總

網(wǎng)址:【STM32】STM32系列教程匯總

07. 聲明

該教程參考了正點(diǎn)原子的《STM32 F4 開發(fā)指南》

總結(jié)

以上是生活随笔為你收集整理的【STM32】光敏传感器示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。