【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依然亮
去掉杜邦线的后,使用电打火器就不亮。说明点打火器影响的是杜邦线。