什么是单片机去抖?

在单片机开发经常需要去抖,那么什么是去抖?

去抖动是一个通用术语,并不指定任何特定的控制器芯片。

在微控制器中使用按钮时(尤其是弹片按钮),比如需要使用边沿触发来执行某些操作(例如切换 LED 状态、计数、中断)。

由于机械设计限制和老化效应…… 这些按钮可能没有良好的接触,按下按钮时发生多次接触与断开,因此它可能会在一次按下时产生多个上升沿(当然也是下降沿..)。

它也发生在释放按钮时......这可能导致控制器被误解为多次按下......。它会多次切换 LED 状态(或执行多次中断子程序),导致控制器错误操作。

如果发生在涉及计数器的过程将产生更麻烦的问题…。它将一次按压计算为几次按压,而这“几次”造成的后果是不可预测的。

按钮和控制器引脚之间涉及的这种不良现象称为抖动(弹跳)。

我们用来避免因抖动而引起的麻烦的方法称为去抖。

常用的去抖方法被归类为:硬件去抖动和软件去抖动

硬件去抖:

在开关的端子上使用电容器绕过高频脉冲序列(由弹跳引起),使其像单步信号一样发送给控制器。

软件去抖:

编写程序,当引脚实现上升沿时,进入延迟程序一段时间(比如200-500ms)并再次检查引脚是否处于高电平或低电平状态(以确认是否有意按下按钮)。

如果此检查完成,处理器将进行按钮按下操作。

//开关状态
#define SWITCH_PRESSED 1
#define SWITCH_BOUNCE 0
//检查Switch状态的函数
int Switch_Debounce(void)
{
  int status = SWITCH_BOUNCE;
  if(Switch == 0) // 按下开关
  {
    DebounceDelay(); 
    if(Switch == 0) 
    {
       status = SWITCH_PRESSED;
    }
  }
   return status ;
}


void DebounceDelay(void)
{
  int i = 0;
  for(i=0; i < DEBOUNCE_VALUE; i++)
}

200-500 毫秒的延迟时间为发光所有伪上升沿(下降)。因此避免了引发引发的问题。

猜你喜欢

转载自blog.csdn.net/m0_67034740/article/details/124087474