Nizkoprepustni filter: vse, kar morate vedeti o tem vezju

nizkonapetostni filter

Tuljave in opcijski ojačevalniki omogočajo ustvarjanje zelo zanimivih vezij, na primer slavnih frekvenčni filtri. Ti filtri imajo v elektronski industriji številne aplikacije. Tako kot pri nizkoprepustnem filtru, visokofrekvenčnem filtru itd. Zlasti so zanimive za nekatere zvočne aplikacije, saj lahko filtrirajo šum ali bolj ali manj resne zvoke glede na njihovo frekvenco. Zato so zelo koristni.

Če želite vedeti več o tem nizkoprepustni filterin druge filtre ter kako vam lahko pomagajo pri projektih z Arduino ali DIY, priporočam, da nadaljujete z branjem ...

Električni filtri

Kot že ime pove, je filter vezje, ki je sestavljeno iz vrste tuljav in kondenzatorjev ter celo nekaterih operacijskih ojačevalnikov za namen spuščanje le določenih delov frekvence. To pomeni, da bodo iz celotnega spektra razpoložljivih frekvenc filtrirali enega ali več delov, da jim preprečijo prehod.

Če za ejemplo Govorimo o spektru, ki ga sliši človek, ki se giblje od 20 Hz do 20 Hz, s filtri, ki bi jih lahko odpravili najnižji ali najvišji, da bi lahko prehajali le bolj ali manj visoki / nizki toni. To uporablja nekaj sistemov za snemanje ali reprodukcijo zvoka, kot so mikrofoni, zvočniki itd.

Vrste

Po vrsta filtraali bolje rečeno, odvisno od frekvence, ki jo blokirajo, ali tiste, ki jo prepuščajo, obstajajo različne vrste vezij, ki so:

  • Nizkoprepustni filter: tako se imenujejo, ker gre za tiste filtre, ki prepuščajo najnižje frekvence in zavirajo ali zmanjšujejo prehod višjih frekvenc. Sestavljeni so iz ene ali več tuljav (zaporedno z napajalnikom in obremenitvijo) ter enega ali dveh ranžirnih kondenzatorjev z napajalnikom in obremenitvijo. Ne pozabite, da se pod obremenitvijo razume naprava, priključena na filter, ki zbira izhodne podatke filtra ... Znotraj teh filtrov obstajajo tudi različice, kot so L, T in π.
  • Visokoprepustni filter: visokofrekvenčni filter je nasproten nizkofrekvenčnemu, v tem primeru tisto, kar bo filtriral ali omejil, je nizkofrekvenčni prehod, ki omogoča prehod višjih frekvenc. V to so vloženi elektronski elementi, ki jo sestavljajo. To pomeni, da bodo tukaj kondenzatorji tisti v seriji z napajanjem in obremenitvijo, medtem ko bodo tuljave ranžirane. Obstajajo tudi enaki podtipi kot pri nizkoprepustnih filtrih.
  • Pasovni filter: Ta vrsta filtra ima dve ključavnici pasovnega pasu. Se pravi, delujejo tako kot nizkoprepustni kot visokofrekvenčni filter, ki nasprotujeta prehodu najnižjih frekvenc in hkrati tudi najvišjih. Z drugimi besedami, omogoča le prehod srednjih frekvenc.
  • Pasovni filter: ravno nasprotno od prejšnjega, filtrira prehod srednjih frekvenc in prepušča le najnižje in najvišje frekvence.

Zapomni si to induktivnosti prepuščajo nizke frekvence in nasprotujejo prehodu visokih frekvenc. Namesto tega kondenzatorji prepuščajo visoke frekvence in nasprotujejo prehodu nizkih frekvenc.

Rad bi dodal, da filtri na praktični ravni niso popolniin lahko vedno preidejo nizke ali visoke frekvence, ki bi jih morali blokirati. Vendar svoje delo pri večini aplikacij opravljajo precej dobro.

In na koncu bi rad pojasnil še eno stvar, in sicer to, da ste zagotovo že slišali za EMA in DEMA filtra. Filtri EMA (eksponentno drseče povprečje) omogočajo preprosto uporabo te vrste filtrov v vdelanih napravah. Kar zadeva DEMA (dvojno eksponentno drseče povprečje), imajo hitrejši odziv kot EMA in ohranjajo dobro zatiranje hrupa, ki se mu želite izogniti.

Alfa faktor

El alfa faktor, ki ga boste videli v naslednjem razdelku v kodah Arduino IDE, je parameter, ki določa obnašanje eksponentnega filtra. Povezan je s presečno frekvenco:

  • Alfa = 1: ki daje signal nefiltriranemu izhodu.
  • Alfa = 0: vrednost filtra bo vedno 0.
  • Alfa = x: druge vrednosti lahko dobijo druge spremembe v filtru EMA. Če zmanjšate faktor alfa, boste bolj zmehčali dobljeni frekvenčni signal, povečan pa bo tudi odzivni čas sistema (traja dlje, da se stabilizira).

Filtri in Arduino

Avtobus Arduino I2C

Če želite uporabiti te filtre, vam bo uporaba knjižnice za Arduino IDE močno olajšalo delo. Lahko uporabiš to isto.

Vedeti morate, da vezja ni treba ustvariti visokofrekvenčni ali nizkofrekvenčni filter da ga povežete s ploščo Arduino in z njo delate. Čeprav lahko eksperimentirate in ustvarite tovrstne preproste filtre, lahko tudi preizkusite, kako bi EMA delovala samo s ploščo Arduino in preprosto kodo za Arduino IDE. Edina stvar, ki jo morate videti, kako je zadolžena za filtriranje nekaterih frekvenc (v tem primeru je dejanje simulirano in nekatera cela števila / plovci so preprosto filtrirani simulira, kaj bi počel filter dejansko).

Tu je nekaj vzorcev kode, ki jih lahko uporabite za vadbo.

Primer preprostega digitalnega filtra v Arduinu nizko podajo:

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

Primer kode za tip Arduino Visoka podaja:

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
}

Primer kode Arduino pasovni pas:

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);                              
}

Primer kode Arduino za pas:

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);                                
}

Ne pozabite, da je ADC pretvornik Arduino Analog Digital. Uporabite obseg 0-5v, ki ga delite na območja 0-1023. Če je vrednost 0v, se vzame digitalna vrednost 0, in če je 5v, se kot vrednost signala vzame 1023, 1v je lahko 204m, 2v bi bilo 408 itd.

Svetujem vam, da spremenite in preizkusite te kode. Rezultat, ki ga lahko glej zelo grafično zahvaljujoč serijskemu ploterju Arduino IDE ... Ne pozabite: če imate vprašanja o programiranju Arduino ali kako uporabljati IDE, lahko prenesete brezplačni tečaj HwLibre v PDF.


Bodite prvi komentar

Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.