国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32——ADC讀取光敏傳感器控制LED燈,看門狗中斷

這篇具有很好參考價值的文章主要介紹了STM32——ADC讀取光敏傳感器控制LED燈,看門狗中斷。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文介紹兩種使用方法

一、編寫讀取AD值的函數(shù),之后判斷AD值,進行相應(yīng)操作,比如點燈。
二、用ADC讀取光敏傳感器AO口輸出,并配置ADC通道看門狗監(jiān)控這條通道,當(dāng)光線太暗時打開LED燈。
之后會再介紹可編程RGB燈帶WS2812B。

光敏傳感器介紹

光敏傳感器有兩個輸出口,一個是DO(Digital Output),一個是AO(Analog Output),DO是數(shù)字輸出,只會輸出0或1,AO是模擬輸出,可以配合stm32的ADC轉(zhuǎn)換器得到數(shù)值存放在12位的寄存器中,因此AD值的范圍是4095 - 0,即2的12次方-1到2的0次方。
STM32——ADC讀取光敏傳感器控制LED燈,看門狗中斷

程序代碼

#include "LightAD.h"
#include "stm32f10x.h"                  // Device header
#include "LED.h"

#define RCC_LightADC RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA

#define GPIO_LightADC GPIOA
#define PIN_LightADC GPIO_Pin_0
#define Channel_LightADC ADC_Channel_0

unsigned int HighThreshold = 3000;
unsigned int LowThreshold = 0;

//用AD轉(zhuǎn)換配合模擬看門狗 單次轉(zhuǎn)換非掃描

extern char BrightEnough; 

先宏定義引腳和通道,定義三個變量,兩個是看門狗監(jiān)控的高低閾值,一個是main.c中定義的標(biāo)志位,判斷當(dāng)前光線是否夠亮。

void Light_GPIOInit()
{
	GPIO_InitTypeDef GPIO_AD;
	GPIO_AD.GPIO_Mode = GPIO_Mode_AIN;
	GPIO_AD.GPIO_Pin =  PIN_LightADC;		
	GPIO_AD.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIO_LightADC,&GPIO_AD);	
}

配置GPIO口,注意GPIO模式要選擇模擬輸入。

void WatchDog_ADInit()
{
	ADC_AnalogWatchdogSingleChannelConfig(ADC1, Channel_LightADC);
	ADC_AnalogWatchdogThresholdsConfig(ADC1,HighThreshold,LowThreshold);
	ADC_AnalogWatchdogCmd(ADC1,ADC_AnalogWatchdog_SingleRegEnable);
	
	ADC_ITConfig(ADC1,ADC_IT_AWD,ENABLE);
}

配置看門狗,選擇ADC1或2,選擇對應(yīng)通道,這里只有一個光敏傳感器,一般選擇通道0。

void Light_NVICInit()
{
	NVIC_InitTypeDef nvic_struct;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	nvic_struct.NVIC_IRQChannel = ADC1_2_IRQn;
	nvic_struct.NVIC_IRQChannelCmd = ENABLE;
	nvic_struct.NVIC_IRQChannelPreemptionPriority = 3;
	nvic_struct.NVIC_IRQChannelSubPriority = 3;
	
	NVIC_Init(&nvic_struct);
}

開啟NVIC通道,優(yōu)先級隨便填。

void ADC1_2_IRQHandler()
{
	if(ADC_GetITStatus(ADC1,ADC_IT_AWD) == 1)
	{
		BrightEnough = 0;
		LEDOn();
		ADC_ClearITPendingBit(ADC1,ADC_IT_AWD);
	}
}

配置中斷函數(shù),當(dāng)進入中斷,則光線不夠亮,并打開LED燈,最后清除標(biāo)志位,注意中斷標(biāo)志位是ADC_IT_AWD。

void Light_ADInit()
{
	//ADC1通道0在PA0
	RCC_APB2PeriphClockCmd(RCC_LightADC,ENABLE);
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);//最高14Mhz,72 六分頻 12Mhz
	
	Light_GPIOInit();//1
	
	//選擇規(guī)則組的輸入通道
	//通道0,序列1,中等采樣時間
	ADC_RegularChannelConfig(ADC1, Channel_LightADC, 1, ADC_SampleTime_55Cycles5);
	
	//初始化ADC
	ADC_InitTypeDef adc_struct;
	adc_struct.ADC_Mode = ADC_Mode_Independent;
	adc_struct.ADC_DataAlign = ADC_DataAlign_Right;
	adc_struct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	adc_struct.ADC_NbrOfChannel = 1;
	adc_struct.ADC_ContinuousConvMode = DISABLE;
	adc_struct.ADC_ScanConvMode = DISABLE;
	//單次轉(zhuǎn)換非掃描,只有一個通道
	ADC_Init(ADC1,&adc_struct);
	
	//配置看門狗和中斷
	WatchDog_ADInit();//2
	Light_NVICInit();//3
	
	ADC_Cmd(ADC1,ENABLE);
	
	//先復(fù)位校準(zhǔn)
	ADC_ResetCalibration(ADC1);
	while(ADC_GetResetCalibrationStatus(ADC1) == 1);
	//等待復(fù)位校準(zhǔn)完成,當(dāng)寄存器軟件置1開始校準(zhǔn),校準(zhǔn)完硬件置0
	ADC_StartCalibration(ADC1);
	while(ADC_GetCalibrationStatus(ADC1) == 1);
}

配置ADC,選擇規(guī)則組的輸入通道,選擇ADC獨立模式,而不是ADC1和ADC2共同工作的合作模式,后者的優(yōu)勢是轉(zhuǎn)換更快,但是沒必要,ADC轉(zhuǎn)換時間是很短的,下面會有計算。設(shè)置數(shù)據(jù)對齊方式是右對齊。一般都是設(shè)置右對齊,左右對齊的知識大家可以自行搜索。選擇不設(shè)置外部觸發(fā)源,選擇單次觸發(fā),非掃描模式。通道數(shù)量設(shè)置為1條。之后記得復(fù)位校準(zhǔn),否則可能造成數(shù)值漂移。

//可以采用單次掃描更改掃描通道的方式來實現(xiàn)多通道采集,注意修改GPIO初始化引腳
unsigned int Light_GetADVal()
{
	ADC_SoftwareStartConvCmd(ADC1,ENABLE);
	while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == 0);
	//等待規(guī)則組轉(zhuǎn)換完成
	//采樣時間是55.5,轉(zhuǎn)換固定周期是12.5,一共68個周期
	//72MHZ6分頻,12Mhz 68個周期,時間大約是1/12M * 68,約5.6us
	ADC_SoftwareStartConvCmd(ADC1,DISABLE);
	return ADC_GetConversionValue(ADC1);
}

讀取AD值,AD轉(zhuǎn)換周期如程序中注釋所示,得出時間大約為5.6us,時間非常短。同時,如果有多個輸入設(shè)備,可以采用單次非掃描的方式來達到單次連續(xù)掃描的效果,只需要在一個設(shè)備讀取完之后更改下次要讀取的通道,每次讀取完之后更新AD數(shù)值和通道。
方法一只要在主函數(shù)中拿讀取到的AD值判斷后再執(zhí)行功能就行,方法二用上面的看門狗代碼配置后在看門狗中斷中配置函數(shù)即可。

結(jié)語

STM32的ADC功能很多,這里只是簡單介紹基本使用的方法,剩下內(nèi)容留待讀者去探索。文章來源地址http://www.zghlxwxcb.cn/news/detail-417017.html

到了這里,關(guān)于STM32——ADC讀取光敏傳感器控制LED燈,看門狗中斷的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Stm32_標(biāo)準(zhǔn)庫_11_ADC_光敏&熱敏傳感器_測數(shù)值

    Stm32_標(biāo)準(zhǔn)庫_11_ADC_光敏&熱敏傳感器_測數(shù)值

    在測量光敏傳感器數(shù)值得基礎(chǔ)上手動將通道改成熱敏傳感器通道即可 由于溫度傳感器的測量范圍是-20 ~ 105攝氏度,所以輸出溫度得考慮帶上符號這就需要在原有輸出光照強度代碼的基礎(chǔ)上新添加幾個函數(shù) 函數(shù)1: 在獲取模擬電壓函數(shù)最開始寫入通道函數(shù)方便接入GPIO_1或GPIO_

    2024年02月19日
    瀏覽(24)
  • Stm32_標(biāo)準(zhǔn)庫_8_ADC_光敏傳感器_測量具體光照強度

    Stm32_標(biāo)準(zhǔn)庫_8_ADC_光敏傳感器_測量具體光照強度

    ADC簡介 測量方式 采用二分法比較數(shù)據(jù) IO通道 ADC基本結(jié)構(gòu)及配置路線 獲取數(shù)字變量需要用到用到光敏電阻的AO口,AO端口接在PA0引腳即可 測得的模擬數(shù)據(jù)與實際光照強度之間的關(guān)系為 代碼: 完整樸素代碼: 效果: 此代碼的不足之處在于每次寫入數(shù)字都會提前占據(jù)固定位置,

    2024年02月04日
    瀏覽(25)
  • STM32—ADC詳解入門(ADC讀取煙霧傳感器的值)

    STM32—ADC詳解入門(ADC讀取煙霧傳感器的值)

    目錄 一、ADC是什么 二、ADC的性能指標(biāo) 三、ADC特性 四、ADC通道 五、ADC轉(zhuǎn)換順序 六、ADC觸發(fā)方式 七、ADC轉(zhuǎn)化時間 八、ADC轉(zhuǎn)化模式 九、實驗(使用ADC讀取煙霧傳感器的值) 1、配置 2、代碼 ????????ADC是Analog-to-DigitalConverter的縮寫。指模/數(shù)轉(zhuǎn)換器或者模擬/數(shù)字轉(zhuǎn)換器。是指

    2024年02月11日
    瀏覽(33)
  • DIY_實現(xiàn)光敏電阻傳感器簡單控制LED

    DIY_實現(xiàn)光敏電阻傳感器簡單控制LED

    模塊接線圖: 1、VCC 接電源正極 3.3-5V 2、GND 接電源負(fù)極 3、DO TTL 開關(guān)信號輸出 4、AO 模擬信號輸出 模塊特色: 1、工作電壓3.3V-5V 2、使用寬電壓LM393比較器 3、設(shè)有固定螺栓孔,方便安裝 4、采用靈敏型光敏電阻傳感器 5、小板PCB尺寸:3.2cm x 1.4cm 6、配可調(diào)電位器可調(diào)節(jié)檢測光

    2024年02月02日
    瀏覽(23)
  • STM32-光敏傳感器實驗

    STM32-光敏傳感器實驗

    光敏傳感器的主要是光敏二極管,核心是PN結(jié),利用了光電效應(yīng),對光強很敏感,有單向?qū)щ娦?,工作時需要加反向電壓。光照越強,等效電阻越小。 實驗要求通過ADC3通道6(PF8)采集光敏二極管的電壓,然后轉(zhuǎn)換為0~100的光纖強度值并顯示在液晶屏上。 由下圖可知對于的通

    2024年02月05日
    瀏覽(25)
  • STM32F4_光敏傳感器

    STM32F4_光敏傳感器

    目錄 1. 什么是光敏傳感器、光敏電阻 2. 硬件分析 3. 實驗程序 3.1 main.c 3.2 ADC3.c 3.3 ADC3.h 3.4 Lightsensor.c 3.5 Lightsensor.h 光敏傳感器 也稱為光電傳感器。是利用光電器件把光信號轉(zhuǎn)換成電信號的一種傳感器。它的敏感波長在可見光波長附近,包括紅外線波長和紫外線波長。光傳感

    2024年02月05日
    瀏覽(28)
  • STM32學(xué)習(xí)記錄——光敏傳感器的使用

    STM32學(xué)習(xí)記錄——光敏傳感器的使用

    文章目錄 前言 一、學(xué)習(xí)目的 二、模塊介紹 三、代碼記錄 總結(jié) ? ? ? ?只做 學(xué)習(xí)記錄 ,記錄自己如何從零學(xué)會使用一個模塊,僅僅只是會用,缺乏專業(yè)知識。如果需要了解更多原理,可以從我推薦的技術(shù)大佬的文章中獲取。 ? ? ? ?我的學(xué)習(xí)目的就是通過STM32的ADC功能,學(xué)

    2024年02月07日
    瀏覽(55)
  • STM32-風(fēng)速傳感器(ADC)

    STM32-風(fēng)速傳感器(ADC)

    目錄 0 說明 1 傳感器介紹 2 代碼說明 ? ? ?2.1 ADC.c ? ? ?2.2 adc.h ? ? 2.3 main.c ?????????本篇文章主要是說明怎么使用STM32單片機讀取風(fēng)速傳感器采集到的數(shù)據(jù),讀取方式是ADC,并且附帶著STM32所需要的全部代碼,所使用的風(fēng)速傳感器如下圖所示。 附: 使用單片機STM32f103系

    2024年02月15日
    瀏覽(14)
  • STM32開發(fā)——ADC(煙霧傳感器)

    STM32開發(fā)——ADC(煙霧傳感器)

    目錄 1.ADC簡介 2.項目簡介 3.CubeMX設(shè)置 4.函數(shù)代碼 作用:用于讀取電壓值,然后轉(zhuǎn)換為數(shù)字量傳給單片機,單片機再通過計算,可以得到電壓值。 ?ADC的性能指標(biāo) 量程:能測量的電壓范圍 分辨率:ADC能辨別的最小模擬量,通常以輸出二進制數(shù)的位數(shù)表示,比如:8、10、12、1

    2024年02月09日
    瀏覽(18)
  • STM32--ADC數(shù)值采樣/附ADC采集熱敏傳感器使用

    STM32--ADC數(shù)值采樣/附ADC采集熱敏傳感器使用

    目錄 一丶ADC介紹 二丶ADC工作原理及管腳分布 三丶代碼部分詳解 (一)庫函數(shù)介紹 (二)代碼部分整合 ????????ADC模塊中文名為模擬/數(shù)字轉(zhuǎn)換器,是12位逐次逼近型的模擬數(shù)字轉(zhuǎn)換器,一般用于數(shù)值的采樣 ??可以將引腳上連續(xù)變化的模擬電壓轉(zhuǎn)換為內(nèi)存中存儲的數(shù)字變

    2024年02月03日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包