【STM32】使用电打火器测试火焰传感器,去掉传感器LED依然亮

项目需求:火焰传感器识别到火焰后,LED灯闪烁,然后熄灭。

现象描述:不需要火焰传感器,当使用电打火器时电路板LED灯也会闪烁。(详情看底部视频)

fire.h

#ifndef __FIRE_H
#define __FIRE_H 	
#include "sys.h"


#define FIRE_PORT	GPIOG	//定义IO接口
#define FIRE	GPIO_Pin_4	
void FIRE_Init(void);

u8 FIRE_Check (void);

#endif

fire.c

#include "fire.h"


#define time 5000000
//DO默认输出高电平,检测到火焰输出低电平
void FIRE_Init(void)
{    	 
  GPIO_InitTypeDef  GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE);  
  //GPIOG4初始化设置
	GPIO_InitStructure.GPIO_Pin = FIRE;//FIRE对应IO口
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)    
	GPIO_Init(FIRE_PORT, &GPIO_InitStructure);
}

u8 FIRE_Check (void){
	//发现火焰输出低电平
   return GPIO_ReadInputDataBit(FIRE_PORT,FIRE)==0;
}

main.c

#include "stm32f10x.h"
#include "led.h"
#include "fire.h"
#include "delay.h"
int main (void){//主程序

	RCC_Configuration(); //系统时钟初始化 
	LED_Init();
	FIRE_Init();
	while(1){
        //发现火焰LED闪烁
		if(FIRE_Check())
		{			
			LED_RED_ON();
			LED_GREEN_ON();
			delay_s(2); 
			LED_RED_OFF();
			LED_GREEN_OFF();  			
		}
    }
}

在测试火焰传感器时,使用的电打火器,最开始一切都正常。

当火焰传感器的D0线松动掉落时,发现每次打火时,LED灯依然闪烁,

继续把火焰传感器的VCC和GND都拔掉,再次打火LED依然亮,

检查电路板元器件有没有关于光敏电阻或相关的元器件有影响到LED灯的,结果是没有

最终原因很简单,就是电打火器打火时,杜邦线用于传输数字信号或对电磁干扰敏感的微弱信号,射频干扰可能会叠加在信号上,导致信号失真。当干扰强度较大时,会使接收端对信号的判断出现错误,将原本的高电平误判为低电平,或者反之。

解决办法:增加一个类似按键防抖动的延时函数,延时20微妙,再次判断引脚状态。

		if(FIRE_Check())
		{
			delay_ms(20);
			if(FIRE_Check()){
				LED_RED_ON();
				LED_GREEN_ON();
				delay_s(2); 
				LED_RED_OFF();
				LED_GREEN_OFF();  
			
			}
		}

电打火器测试火焰传感器,去掉火焰传感器,LED依然亮

去掉杜邦线的后,使用电打火器就不亮。说明点打火器影响的是杜邦线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值