在stm32上对于火焰模块的应用分析

2023-10-26

在stm32上对于火焰模块的应用分析

一.火焰模块
在这里插入图片描述
接线说明:+ 供电(3.3v) G 接地(GND)
AO模拟输入 DO数字输出
以stm32f407举例说明:
AO接入:PF7
在这里插入图片描述
DO接入:PA4(实际上也可以不接,因为本实例没用到)
在这里插入图片描述
二.火焰模块的数据分析;
火焰模块实际是和光敏模块是类似的。都是将模拟量通过adc获取后再通过dac
转化为数字信号量,输出到串口上如图。
在这里插入图片描述
通过对这些数字信号量处理,便可以设置适当的警报。
三.代码示例
头文件

#ifndef _hy_H
#define _hy_H

#include "system.h"
#include "stdio.h"
void Lsens_Init(void);
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc);
u16 Get_Adc3(u32 ch);
u8 Lsens_Get_Val(void);

#endif

程序

#include "hy.h"

ADC_HandleTypeDef ADC3_Handler;//ADC句柄

//初始化光敏(火焰)传感器
void Lsens_Init(void)
{ 
    ADC3_Handler.Instance=ADC3;
    ADC3_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4;   //4分频,ADCCLK=PCLK2/4=84/4=21MHZ
    ADC3_Handler.Init.Resolution=ADC_RESOLUTION_12B;             //12位模式
    ADC3_Handler.Init.DataAlign=ADC_DATAALIGN_RIGHT;             //右对齐
    ADC3_Handler.Init.ScanConvMode=DISABLE;                      //非扫描模式
    ADC3_Handler.Init.EOCSelection=DISABLE;                      //关闭EOC中断
    ADC3_Handler.Init.ContinuousConvMode=DISABLE;                //关闭连续转换
    ADC3_Handler.Init.NbrOfConversion=1;                         //1个转换在规则序列中 也就是只转换规则序列1 
    ADC3_Handler.Init.DiscontinuousConvMode=DISABLE;             //禁止不连续采样模式
    ADC3_Handler.Init.NbrOfDiscConversion=0;                     //不连续采样通道数为0
    ADC3_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START;       //软件触发
    ADC3_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;//使用软件触发
    ADC3_Handler.Init.DMAContinuousRequests=DISABLE;             //关闭DMA请求
    HAL_ADC_Init(&ADC3_Handler);                                 //初始化 
}

//ADC底层驱动,引脚配置,时钟使能
//此函数会被HAL_ADC_Init()调用
//hadc:ADC句柄
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
{
    GPIO_InitTypeDef GPIO_Initure;
    __HAL_RCC_ADC3_CLK_ENABLE();            //使能ADC3时钟
    __HAL_RCC_GPIOF_CLK_ENABLE();			//开启GPIOF时钟
	
    GPIO_Initure.Pin=GPIO_PIN_7;            //PF7
    GPIO_Initure.Mode=GPIO_MODE_ANALOG;     //模拟
    GPIO_Initure.Pull=GPIO_NOPULL;          //不带上下拉
    HAL_GPIO_Init(GPIOF,&GPIO_Initure);
}

//获得ADC值
//ch: 通道值 0~16,取值范围为:ADC_CHANNEL_0~ADC_CHANNEL_16
//返回值:转换结果
u16 Get_Adc3(u32 ch)   
{
    ADC_ChannelConfTypeDef ADC1_ChanConf;
    
    ADC1_ChanConf.Channel=ch;                                   //通道
    ADC1_ChanConf.Rank=1;                                       //第1个序列,序列1
    ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_480CYCLES;        //采样时间
    ADC1_ChanConf.Offset=0;                 
    HAL_ADC_ConfigChannel(&ADC3_Handler,&ADC1_ChanConf);        //通道配置
	
    HAL_ADC_Start(&ADC3_Handler);                               //开启ADC
	
    HAL_ADC_PollForConversion(&ADC3_Handler,10);                //轮询转换
 
	return (u16)HAL_ADC_GetValue(&ADC3_Handler);	        //返回最近一次ADC1规则组的转换结果
}

#define LSENS_READ_TIMES	10	//定义光敏传感器读取次数,读这么多次,然后取平均值

//读取Light Sens的值
//0~100:0,最暗;100,最亮 
u8 Lsens_Get_Val(void)
{
	u32 temp_val=0;
	u8 t;
	for(t=0;t<LSENS_READ_TIMES;t++)
	{
		temp_val+=Get_Adc3(ADC_CHANNEL_5);	//读取ADC值
		delay_ms(5);
	}
	temp_val/=LSENS_READ_TIMES;//得到平均值 
	if(temp_val>4000)temp_val=4000;
	return (u8)(100-(temp_val/40));
}

在这里插入图片描述
源程序:https://download.csdn.net/download/weixin_44386927/13155236

效果显示:
当没有火焰时只有上面一个灯亮。
在这里插入图片描述

当出现强光或者火焰时两个灯都亮。
在这里插入图片描述
当中存在的问题说明,当火焰呈现蓝色或者不明显时灯只会闪烁或者不亮。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在stm32上对于火焰模块的应用分析 的相关文章

  • 解决:c++: internal compiler error: Killed (program cc1plus)

    TOC 解决 c internal compiler error Killed program cc1plus 1 出现问题 博主在VMware虚拟机中安装sophus库 执行make命令时出现错误 如下图所示 2 分析问题 多方查找 确定
  • 文件自动化处理

    文件自动化处理 1 1 读写文件 1 1 1 文件与文件路径 1 1 2 当前工作目录 1 1 3 路径操作 1 1 3 1 绝对路径和相对路径 1 1 3 2 路径操作 1 1 3 3 路径有效性检查 1 1 4 文件及文件夹操作 1 1

随机推荐