Niskopropusni filtar: sve što trebate znati o ovom krugu

niskopropusni krug filtra

Zavojnice i opcijska pojačala omogućuju vam stvaranje vrlo zanimljivih sklopova, poput slavnih frekvencijski filtri. Ovi filtri imaju mnoštvo primjena u elektroničkoj industriji. Kao što je slučaj s niskopropusnim filtrom, visokopropusnim filtrom itd. Posebno su zanimljivi za određene zvučne aplikacije, jer mogu filtrirati buku ili više ili manje ozbiljne zvukove prema njihovoj frekvenciji. Stoga su vrlo korisni.

Ako želite znati više o tome niskopropusni filtar, i druge filtre, i kako vam mogu pomoći u vašim projektima s Arduinom ili Uradi sam, potičem da nastavite čitati ...

Električni filtri

Kao što mu samo ime govori, filtar je sklop koji se sastoji od niza zavojnica i kondenzatora, pa čak i nekih operativnih pojačala, u svrhu propuštajući samo određene dijelove frekvencije. Odnosno, od cijelog spektra dostupnih frekvencija filtrirat će jedan ili više dijelova kako bi spriječili njihov prolazak.

Ako za ejemplo Govorimo o spektru koji čuje ljudsko biće, koji ide od 20 Hz do 20 Khz, s filtrima koje biste mogli eliminirati najniži ili najviši, kako biste samo omogućili prolazak više ili manje visokih ili niskih tonova. To je nešto što mnogi sustavi za snimanje ili reprodukciju zvuka koriste, poput mikrofona, zvučnika itd.

Vrsta

Prema tip filtra, odnosno, ovisno o frekvenciji koju blokiraju ili onoj koju propuste, postoje različite vrste sklopova koji su:

  • Niskopropusni filtar: oni su takozvani jer su oni filtri koji propuštaju niže frekvencije i potiskuju ili smanjuju prolaz viših frekvencija. Sastoje se od jedne ili više zavojnica (u seriji s napajanjem i opterećenjem) i jednog ili dva ranžirana kondenzatora s napajanjem i opterećenjem. Imajte na umu da se pod opterećenjem podrazumijeva uređaj spojen na filtar i koji prikuplja izlaz filtra ... Unutar tih filtara postoje i varijante, poput L, T i π.
  • Visokopropusni filtar: visokopropusni filtar je suprotan niskopropusnom, u ovom slučaju ono što će filtrirati ili ograničiti je prolazak niske frekvencije, propuštajući više frekvencije. U to se ulažu elektronički elementi koji ga čine. Odnosno, ovdje će kondenzatori biti oni u seriji s napajanjem i opterećenjem, dok će zavojnice biti ranžirane. Postoje i iste podvrste kao u slučaju niskopropusnih filtara.
  • Opsežni filtar: Ova vrsta filtra koristi dva bloka brzine prolaska frekvencijskog pojasa. Odnosno, djeluju i kao niskopropusni filtar i kao visokopropusni filtar, suprotstavljajući se prolasku najnižih frekvencija, a ujedno i najviših. Drugim riječima, omogućuje samo prolazak srednjih frekvencija.
  • Trakasti filtar: upravo je suprotno od prethodne, ono što radi je da filtrira prolazak srednje frekvencije i propušta samo najniže i najviše frekvencije.

Zapamtite to induktiviteta propuštaju niske frekvencije i protive se prolasku visokih frekvencija. Umjesto toga, kondenzatori propuštaju visoke frekvencije i protive se prolasku niskih frekvencija.

Želio bih dodati da su filtri na praktičnoj razini nisu savršeni, i oni uvijek mogu propustiti neke niske ili visoke frekvencije koje biste trebali blokirati. Međutim, svoj posao rade prilično dobro za većinu aplikacija.

I na kraju, želio bih razjasniti još jednu stvar, a to je da ste sigurno čuli za EMA i DEMA filtri. EMA (eksponencijalni pomični prosjek) filtri omogućuju jednostavnu primjenu ove vrste filtara u ugrađenim uređajima. Što se tiče DEMA-e (dvostrukog eksponencijalnog pokretnog prosjeka), oni imaju brži odziv od EMA-e, održavajući dobro potiskivanje buke koju želite izbjeći.

Alfa faktor

El alfa faktor, koji ćete vidjeti da se pojavljuje u Arduino IDE kodovima u sljedećem odjeljku, parametar je koji određuje ponašanje eksponencijalnog filtra. Povezan je s graničnom frekvencijom:

  • Alfa = 1: koji daje signal nefiltriranom izlazu.
  • Alfa = 0: vrijednost filtra uvijek će biti 0.
  • Alfa = x: ostale vrijednosti mogu dobiti druge izmjene u EMA filtru. Ako smanjite faktor Alpha, više ćete omekšati dobiveni signal frekvencije, a vrijeme odziva sustava također se povećava (potrebno je više vremena da se stabilizira).

Filteri i Arduino

Arduino I2C sabirnica

Za upotrebu ovih filtara, korištenje biblioteke za Arduino IDE znatno će vam olakšati rad. Možeš koristiti ovo isto.

Trebali biste znati da nije potrebno stvarati sklop visokopropusni filtar ili niskopropusni filtar da ga spojite na svoju Arduino ploču i radite s njom. Iako možete eksperimentirati i stvoriti ove vrste jednostavnih filtara, također možete testirati kako bi EMA radila samo s Arduino pločom i jednostavnim kodom za Arduino IDE. To je jedina stvar koju trebate vidjeti kako je ona zadužena za filtriranje nekih frekvencija (u ovom slučaju radnja je simulirana, a neke cijele brojeve / plovke jednostavno filtriraju simulirajući što bih radio filtar zapravo).

Evo nekoliko uzoraka koda koje možete koristiti za vježbanje.

Primjer jednostavnog digitalnog filtra u Arduinu tipa low pass:

float   lowpass_prev_out[LOWPASS_ANALOG_PIN_AMT], 
         lowpass_cur_out[LOWPASS_ANALOG_PIN_AMT];
int        lowpass_input[LOWPASS_ANALOG_PIN_AMT];
 
 
int adcsample_and_lowpass(int pin, int sample_rate, int samples, float alpha, char use_previous) {
  // pin:            Pin analógico de Arduino usado
  // sample_rate:    El ratio adecuado
  // samples:        Samples
  // alpha:          El factor Alpha para el filtro paso bajo
  // use_previous:   Si es true se sigue ajustando hasta el valor más reciente. 
 
  float one_minus_alpha = 1.0-alpha;
  int micro_delay=max(100, (1000000/sample_rate) - 160);  
  if (!use_previous) { 
    lowpass_input[pin] = analogRead(pin);
    lowpass_prev_out[pin]=lowpass_input[pin]; 
  }
  int i;
  for (i=samples;i>0;i--) {
    delayMicroseconds(micro_delay);
    lowpass_input[pin] = analogRead(pin);
    lowpass_cur_out[pin] = alpha*lowpass_input[pin] + one_minus_alpha*lowpass_prev_out[pin];
    lowpass_prev_out[pin]=lowpass_cur_out[pin];
  }
  return lowpass_cur_out[pin];
}
 
int resulting_value;
 
void setup() {
   Serial.begin(9600);
   resulting_value = adcsample_and_lowpass(0, 1000, 300, 0.015, false); 
}
 
void loop() {
   resulting_value = adcsample_and_lowpass(0, 1000, 150, 0.015, true);  
   Serial.println(resulting_value);

Primjer koda za Arduino tip Visoka dodavanja:

int sensorPin = 0;    //pin usado para el ADC
int sensorValue = 0;  //Inicia sensor variable equivalente a EMA Y
float EMA_a = 0.3;    //Inicialización del EMA Alpha
int EMA_S = 0;        //Iniciación del EMA s
int highpass = 0;
 
void setup(){
  Serial.begin(115200);              
  EMA_S = analogRead(sensorPin);     
}
 
void loop(){
  sensorValue = analogRead(sensorPin);              //Lee el valor del sensor ADC
  EMA_S = (EMA_a*sensorValue) + ((1-EMA_a)*EMA_S);  //Ejecuta el filtro EMA
  highpass = sensorValue - EMA_S;                   //Calcula la seña alta
 
  Serial.println(highpass);
   
  delay(20);                                //Espera 20ms
}

Primjer Arduino koda band pass:

int sensorPin = 0;        //Pin para el ADC
int sensorValue = 0;      //Inicia la variable del sensor, equivale a EMA Y
 
float EMA_a_low = 0.3;    //Inicia EMA Alpha
float EMA_a_high = 0.5;
 
int EMA_S_low = 0;        //Inicia EMA S
int EMA_S_high = 0;
 
int highpass = 0;
int bandpass = 0;
 
void setup(){
  Serial.begin(115200);                   
   
  EMA_S_low = analogRead(sensorPin);      
  EMA_S_high = analogRead(sensorPin);
}
 
void loop(){
  sensorValue = analogRead(sensorPin);    //Lee el valor del sensor ADC
   
  EMA_S_low = (EMA_a_low*sensorValue) + ((1-EMA_a_low)*EMA_S_low);  //Ejecuta EMA
  EMA_S_high = (EMA_a_high*sensorValue) + ((1-EMA_a_high)*EMA_S_high);
   
  highpass = sensorValue - EMA_S_low;     
  bandpass = EMA_S_high - EMA_S_low;     
 
  Serial.print(highpass);
  Serial.print(" ");
  Serial.println(bandpass);
   
  delay(20);                              
}

Primjer Arduino koda za bend:

int sensorPin = 0;          //Pin usado para el ADC
int sensorValue = 0;        //Inicio para EMA Y
 
float EMA_a_low = 0.05;     //Inicio de EMA alpha 
float EMA_a_high = 0.4;
 
int EMA_S_low = 0;          //Inicia EMA S
int EMA_S_high = 0;
 
int highpass = 0;
int bandpass = 0;
int bandstop = 0;
 
void setup(){
  Serial.begin(115200);                     
   
  EMA_S_low = analogRead(sensorPin);        
  EMA_S_high = analogRead(sensorPin);
}
 
void loop(){
  sensorValue = analogRead(sensorPin);      //Lee el valor del sensor ADC
   
  EMA_S_low = (EMA_a_low*sensorValue) + ((1-EMA_a_low)*EMA_S_low);          //Ejecuta EMA
  EMA_S_high = (EMA_a_high*sensorValue) + ((1-EMA_a_high)*EMA_S_high);
   
  bandpass = EMA_S_high - EMA_S_low;       
 
  bandstop = sensorValue - bandpass;        
 
  Serial.print(sensorValue);
  Serial.print(" ");
  Serial.print(EMA_S_low);
  Serial.print(" ");
  Serial.println(bandstop);
   
  delay(20);                                
}

Imajte na umu da je ADC Arduino analogni digitalni pretvarač. Upotrijebite opseg 0-5v, podijelivši se u raspone 0-1023. Ako je vrijednost 0v, uzima se digitalna vrijednost 0, a ako je 5v, 1023 će se uzeti kao vrijednost signala, 1v može biti 204m, 2v bi bilo 408 itd.

Savjetujem vam da modificirate i eksperimentirate s ovim kodovima. Rezultat koji možete vidi vrlo grafički zahvaljujući serijskom ploteru Arduino IDE-a ... Imajte na umu da ako imate pitanja o Arduino programiranju ili kako koristiti IDE, možete preuzeti besplatni tečaj HwLibre u PDF-u.


Budite prvi koji će komentirati

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.