Madalpääsfilter: kõik, mida peate selle vooluringi kohta teadma

madalpääsfiltri ahel

Mähised ja opvõimendid võimaldavad luua väga huvitavaid vooluringe, näiteks kuulsad sagedusfiltrid. Nendel filtritel on elektroonikatööstuses palju rakendusi. Nagu ka madalpääsfiltril, ülipääsfiltril jne. Need on eriti huvitavad teatud helirakenduste jaoks, kuna nad saavad vastavalt sagedusele filtreerida müra või enam-vähem tõsiseid helisid. Seetõttu on need väga kasulikud.

Kui soovite rohkem teada saada madalpääsfilterja muud filtrid ning kuidas need aitavad teil Arduino või DIY projektides kaasa aidata, soovitan teil jätkata lugemist ...

Elektrilised filtrid

Nagu nimigi ütleb, on filter vooluahel, mis koosneb spiraalide ja kondensaatorite seeriast ning isegi mõnest operatsioonivõimendist lastes läbida ainult teatud sageduse osi. See tähendab, et kogu saadaolevate sageduste spektrist filtreerivad nad ühe või mitu osa, et vältida nende läbimist.

Kui selleks ejemplo Me räägime inimese kuuldavast spektrist, mis ulatub 20 Hz-lt 20 Khz-ni filtritega, mille võiksite kõrvaldada madalaimast või kõige kõrgemast, et võimaldada ainult enam-vähem kõrgete / madalamate helide läbimist. See on midagi, mida paljud helisalvestus- või taasesitussüsteemid kasutavad, näiteks mikrofonid, kõlarid jne.

Liigid

Vastavalt filtri tüüpvõi õigemini, sõltuvalt blokeeritud sagedusest või läbilaskvast, on erinevat tüüpi ahelaid, mis on:

  • Madalpääsfilter: neid nimetatakse nii, kuna need on filtrid, mis lasevad madalamatel sagedustel läbi ja summutavad või vähendavad kõrgemate sageduste läbimist. Need koosnevad ühest või mitmest rullist (järjestikku koos toiteallika ja koormusega) ning ühest või kahest šundkondensaatorist koos toiteallika ja koormusega. Pidage meeles, et koormuse all mõistetakse filtriga ühendatud seadet ja see kogub filtri väljundi. Nendes filtrites on ka variante, näiteks L, T ja π.
  • Ülipääsfilter: ülipääsufilter on vastupidine madalpääsile, sel juhul filtreerib või piirab madalsagedusläbipääs, lastes kõrgematel sagedustel läbida. Sellesse investeeritakse selle moodustavad elektroonilised elemendid. See tähendab, et siin on kondensaatorid järjestikku toiteallika ja koormusega, samal ajal kui mähised manööverdatakse. Samuti on samad alamtüübid nagu madalpääsfiltrite puhul.
  • Ribapääsfilter: Seda tüüpi filtritel on kaks sagedusriba läbipääsuluku lukku. See tähendab, et nad toimivad nii madalpääsfiltrina kui ka ülipääsfiltrina, vastandades samal ajal madalaimate ja ka kõige kõrgemate sageduste läbipääsu. Teisisõnu võimaldab see läbida ainult keskmisi sagedusi.
  • Ribafilter: see on täpselt vastupidine eelmisele, see on see, et see filtreerib keskmiste sageduste läbipääsu ja laseb läbi ainult madalaima ja kõrgeima sageduse.

Pea meeles, et induktiivsused nad lasevad läbi madalad sagedused ja on vastu kõrgete sageduste läbimisele. Selle asemel kondensaatorid nad lasevad kõrged sagedused läbi ja on vastu madalate sageduste läbimisele.

Tahaksin lisada, et filtrid on praktilisel tasemel nad pole täiuslikudja nad suudavad alati läbida mõnda madalat või kõrget sagedust, mille peaksite blokeerima. Kuid nad teevad oma tööd enamiku rakenduste jaoks üsna hästi.

Ja lõpuks tahaksin selgitada veel ühte asja - see on see, et olete kindlasti sellest kuulnud EMA ja DEMA filtrid. EMA (eksponentsiaalse liikuva keskmise) filtrid võimaldavad teil seda tüüpi filtrit manustatud seadmetes lihtsal viisil rakendada. Mis puutub DEMA-sse (kahekordne eksponentsiaalne liikuv keskmine), siis neil on kiirem reageerimine kui EMA-l, säilitades müra, mida soovite vältida, hea summutamise.

Alfafaktor

El alfafaktor, mida näete järgmise jaotise Arduino IDE-koodides, on parameeter, mis tingib eksponentsiaalfiltri käitumise. See on seotud piirsagedusega:

  • Alpha = 1: see annab signaali filtreerimata väljundile.
  • Alpha = 0: filtri väärtus on alati 0.
  • Alpha = x: muud väärtused võivad EMA-filtris saada muid muudatusi. Kui vähendate alfa-tegurit, pehmendate enam saadud sagedussignaali ja pikeneb ka süsteemi reageerimisaeg (stabiliseerumine võtab kauem aega).

Filtrid ja Arduino

Arduino I2C buss

Nende filtrite kasutamiseks muudab Arduino IDE jaoks teegi kasutamine teie töö palju lihtsamaks. Sa võid kasutada sama.

Peaksite teadma, et vooluringi pole vaja luua ülipääsufilter või madalpääsfilter selle ühendamiseks oma Arduino tahvliga ja sellega töötamiseks. Kuigi saate katsetada ja luua selliseid lihtsaid filtreid, saate ka testida, kuidas EMA töötaks ainult Arduino plaadi ja Arduino IDE lihtsa koodiga. See on ainus asi, mida peate nägema, kuidas see vastutab mõne sageduse filtreerimise eest (sel juhul simuleeritakse toimingut ja mõned täisarvud / ujukid lihtsalt filtreeritakse simuleerides, mida ma teeksin filter tegelikult).

Siin on mõned koodinäidised, mida saate harjutamiseks kasutada.

Näide lihtsast Arduino tüüpi digitaalsest filtrist madalpääs:

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

Koodinäide Arduino tüübile Kõrge läbipääs:

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
}

Arduino koodi näide bändipass:

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

Arduino koodi näide bändile:

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

Pidage meeles, et ADC on Arduino Analog Digital muundur. Kasutage vahemikku 0-5v, jagades vahemikeks 0-1023. Kui väärtus on 0v, võetakse digitaalne väärtus 0 ja kui see on 5v, võetakse signaali väärtuseks 1023, 1v võib olla 204m, 2v oleks 408 jne.

Soovitan teil neid koode muuta ja katsetada. Tulemus, mida saate vaata väga graafiliselt tänu Arduino IDE jadaplotterile ... Pidage meeles, et kui teil on küsimusi Arduino programmeerimise või IDE kasutamise kohta, võite alla laadida tasuta HwLibre kursus PDF-is.


Ole esimene kommentaar

Jäta oma kommentaar

Sinu e-postiaadressi ei avaldata. Kohustuslikud väljad on tähistatud *

*

*

  1. Andmete eest vastutab: Miguel Ángel Gatón
  2. Andmete eesmärk: Rämpsposti kontrollimine, kommentaaride haldamine.
  3. Seadustamine: teie nõusolek
  4. Andmete edastamine: andmeid ei edastata kolmandatele isikutele, välja arvatud juriidilise kohustuse alusel.
  5. Andmete salvestamine: andmebaas, mida haldab Occentus Networks (EL)
  6. Õigused: igal ajal saate oma teavet piirata, taastada ja kustutada.