首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >忽略时间范围内的中断arduino (低通滤波器)

忽略时间范围内的中断arduino (低通滤波器)
EN

Stack Overflow用户
提问于 2016-04-04 17:11:12
回答 2查看 965关注 0票数 0

我正在尝试将中断附加到信号的上升沿(PWM)。然而,当它为HIGH时,信号有点嘈杂,这会导致代码在不应该注册另一个中断时注册另一个中断。显然,我试图在我的电路中解决这个问题,但这并不是很有效,所以我转到了软件部分。

问题是如何在给定的频率范围内过滤掉中断?我需要应用一个低通滤波器,以便在信号为HIGH时不会触发中断。我的想法是在给定的时间内分离中断,或者如果中断发生在特定的时间范围内,则干脆忽略它。

我只是不确定如何实现这一点。

这是我的代码:

代码语言:javascript
运行
复制
unsigned long tsend = 0;
unsigned long techo = 0;
const int SEND = 2;
const int ECHO = 3;
unsigned long telapsed = 0;
unsigned long treal = 0;

void setup() {
  Serial.begin(115200);
  Serial.println("Start");

  pinMode(SEND, INPUT);
  pinMode(ECHO, INPUT);

  attachInterrupt(digitalPinToInterrupt(SEND), time_send, RISING);
  attachInterrupt(digitalPinToInterrupt(ECHO), time_echo, RISING);
}

void loop() {
  telapsed = techo - tsend;
  if (telapsed > 100 && telapsed < 10000000) {
    treal = telapsed;
    Serial.println(treal);
  }
}

void time_send() {
  tsend = micros();
}
void time_echo() {
  techo = micros();

}

下面是有很多噪音的信号(黄色)。当信号为HIGH时,我需要忽略中断。这是PWM Signal的图像

EN

回答 2

Stack Overflow用户

发布于 2016-04-04 20:32:27

我会尝试以下几点:

代码语言:javascript
运行
复制
#define DEBOUNCE_TIME 100

void time_send() {
  static long last = micros() ;
  if (last-tsend > DEBOUNCE_TIME)
     tsend = last;
}
void time_echo() {
  static long last = micros() ;
  if (last-techo > DEBOUNCE_TIME)
     techo = last;

}

并调整DEBOUNCE_TIME,直到得到满意的结果。

票数 0
EN

Stack Overflow用户

发布于 2019-09-18 03:51:42

代码语言:javascript
运行
复制
const byte intrpt_pin = 18; 
volatile unsigned int count = 0; 

#define DEBOUNCE_TIME 5000

void isr()
{
  cli();
  delayMicroseconds(DEBOUNCE_TIME);
  sei();

  count++;
}

void setup()
{
  pinMode(intrpt_pin, INPUT_PULLUP);

  attachInterrupt(digitalPinToInterrupt(intrpt_pin), isr, FALLING);
}

void loop()
{
}

cli() :通过清除全局中断掩码来禁用所有中断。

sei() :通过设置全局中断掩码来启用中断。

基本上,这个程序会忽略这两行之间发生的所有中断,也就是DEBOUNCE_TIME中断。检查您的中断反弹时间,并相应地调整DEBOUNCE_TIME以获得最佳结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36398589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档