2016-04-04 14 views
0

Bir sinyalin (PWM) yükselen kenarına kesintiler eklemeye çalışıyorum. Bununla birlikte, HIGH sinyali alındığında bu sinyal biraz gürültülüdür; Açıkçası bunu devrememde düzeltmeye çalıştım ama bu pek işe yaramadı, ben de yazılım bölümüne geçtim.Zaman aralığındaki kesintiyi arduino (alçak geçiren filtre)

Belirli bir frekans aralığında kesintileri nasıl filtreleyebilirim? Sinyal, HIGH sinyali olduğunda kesmelerin tetiklenmemesi için bir düşük geçiş filtresi uygulamam gerekiyor. Benim fikrim belirli bir süre için kesintiyi ayırdı ya da belli bir zaman aralığında gerçekleşirse kesmeyi görmezden geliyordu.

Bunun nasıl başarılacağından emin değilim.

Aşağıda
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(); 

} 

(sarı) sinyalidir gürültü bir yeri vardır:

Bu benim kodudur. Sinyal HIGH olduğunda kesmeleri göz ardı etmem gerekiyor. Burada aşağıdakileri deneyin ediyorum PWM Signal

cevap

0

bir resimdir:

#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; 

} 

Ve tatmin edici bir sonuç elde edene kadar DEBOUNCE_TIME ayarlayın.