0
信号の立ち上がりエッジ(PWM)に割り込みを付けようとしています。しかし、信号がHIGH
のときに信号が多少雑音があり、コードが別の割り込みを登録してはならないときにそれを登録する原因となります。私は明らかにこれを私の回路で修正しようとしましたが、それはかなり機能していないので、私はソフトウェアの部分に移動しました。時間範囲内の割り込みを無視arduino(ローパスフィルタ)
問題は、特定の周波数範囲内で割り込みをどのようにフィルタリングできますか?信号がHIGH
のときに割り込みがトリガされないように、ローパスフィルタを適用する必要があります。私のアイデアは、一定の時間内に割り込みを切り離すか、それが特定の時間範囲内で発生した場合に割り込みを無視することでした。
これを達成する方法がわかりません。
これは私のコードです:以下
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
の場合、割り込みを無視する必要があります。
#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を調整します。ここで私は次のことをしようとPWM Signal