Nízkopriepustný filter: všetko, čo potrebujete vedieť o tomto okruhu

obvod nízkopriepustného filtra

Cievky a operačné zosilňovače vám umožňujú vytvárať veľmi zaujímavé obvody, napríklad slávne frekvenčné filtre. Tieto filtre majú veľké množstvo aplikácií v elektronickom priemysle. Rovnako ako v prípade dolnopriepustného filtra, hornopriepustného filtra atď. Sú obzvlášť zaujímavé pre určité zvukové aplikácie, ktoré sú schopné filtrovať zvuky alebo viac či menej vážne zvuky podľa ich frekvencie. Preto sú veľmi užitočné.

Ak sa chcete dozvedieť viac o dolnopriepustný filter, a ďalšie filtre a ako vám môžu pomôcť vo vašich projektoch s Arduino alebo DIY, odporúčam vám pokračovať v čítaní ...

Elektrické filtre

Ako naznačuje jeho názov, filter je obvod, ktorý je zložený zo série cievok a kondenzátorov a dokonca aj niektorých operačných zosilňovačov na účely nechať prejsť iba určité časti frekvencie. To znamená, že z celého spektra dostupných frekvencií prefiltrujú jednu alebo viac častí, aby im zabránili v prechode.

Ak pre ejemplo Hovoríme o spektre počuteľnom ľudskou bytosťou, ktoré sa pohybuje od 20 Hz do 20 Khz, s filtrami môžete eliminovať najnižšie alebo najvyššie, aby ste umožnili priechod iba viac či menej vysokých / hlbokých zvukov. Je to niečo, čo používa veľa systémov na nahrávanie alebo reprodukciu zvuku, ako sú mikrofóny, reproduktory atď.

typ

Podľa typ filtra, alebo skôr, v závislosti od frekvencie, ktorú blokujú, alebo od tej, ktorú prepúšťajú, existujú rôzne typy obvodov, ktoré sú:

  • Nízkopriepustný filter: nazývajú sa preto, lebo sú to tie filtre, ktoré umožňujú prechod najnižších frekvencií a potlačenie alebo zníženie priechodu vyšších frekvencií. Skladajú sa z jednej alebo viacerých cievok (v sérii s napájaním a záťažou) a jedného alebo dvoch bočných kondenzátorov s napájaním a záťažou. Pamätajte, že záťažou sa rozumie zariadenie pripojené k filtru, ktoré zhromažďuje výstup filtra ... V rámci týchto filtrov existujú aj varianty, napríklad L, T a π.
  • Hornopriepustný filter: hornopriepustný filter je opakom nízkopriepustného pásma, v tomto prípade bude filtrovať alebo obmedzovať nízkofrekvenčný prechod, ktorý umožní prechod vyšších frekvencií. Do toho sa investujú elektronické prvky, ktoré ju tvoria. To znamená, že tu budú kondenzátory v sérii s napájaním a záťažou, zatiaľ čo cievky budú posunuté. Existujú aj rovnaké podtypy ako v prípade nízkopriepustných filtrov.
  • Pásmový filter: Tento typ filtra vykonáva dva bloky priepustného pásma frekvenčného pásma. To znamená, že fungujú jednak ako dolnopriepustný filter, jednak ako vysokopriepustný filter, pričom bránia prechodu najnižších a súčasne najvyšších frekvencií. Inými slovami, umožňuje to iba prechod stredných frekvencií.
  • Pásový filter: je to presne opačne ako predchádzajúci, robí to, že filtruje prechod stredných frekvencií a prepúšťa iba tie najnižšie a najvyššie.

Pamätajte na to indukčnosti prepúšťajú nízke frekvencie a bránia prechodu vysokých frekvencií. Namiesto toho kondenzátory prepúšťajú vysoké frekvencie a bránia prechodu nízkych frekvencií.

Rád by som dodal, že filtre na praktickej úrovni nie sú dokonalía vždy môžu prepúšťať niektoré nízke alebo vysoké frekvencie, ktoré by ste mali blokovať. Svoju prácu však pre väčšinu aplikácií robia celkom dobre.

A na záver by som rád objasnil ešte jednu vec, a to, že ste o tom už určite počuli Filtre EMA a DEMA. Filtre EMA (Exponential Moving Average) umožňujú implementovať tento typ filtra jednoduchým spôsobom vo vložených zariadeniach. Pokiaľ ide o DEMA (Double Exponential Moving Average), majú rýchlejšiu odozvu ako EMA a zachovávajú dobré potlačenie šumu, ktorému sa chcete vyhnúť.

Alfa faktor

El alfa faktor, ktorý uvidíte v kódoch Arduino IDE v nasledujúcej časti, je parameter, ktorý podmieňuje správanie exponenciálneho filtra. Súvisí to s medznou frekvenciou:

  • Alfa = 1: poskytuje signál nefiltrovanému výstupu.
  • Alfa = 0: hodnota filtra bude vždy 0.
  • Alfa = x: iné hodnoty môžu vo filtri EMA získať ďalšie zmeny. Ak znížite alfa faktor, zjemníte získaný frekvenčný signál viac a tiež sa zvýši čas odozvy systému (stabilizácia trvá dlhšie).

Filtre a Arduino

Zbernica Arduino I2C

Pri použití týchto filtrov vám prácu s knižnicou pre Arduino IDE výrazne uľahčí. Môžeš použiť to isté.

Mali by ste vedieť, že nie je potrebné vytvárať obvod hornopriepustný filter alebo dolnopriepustný filter pripojiť ho k doske Arduino a pracovať s ním. Aj keď môžete experimentovať a vytvárať tieto druhy jednoduchých filtrov, môžete tiež vyskúšať, ako by EMA fungovala, iba s doskou Arduino a jednoduchým kódom pre Arduino IDE. Je to jediná vec, ktorú musíte vidieť, ako je zodpovedný za filtrovanie niektorých frekvencií (v tomto prípade je akcia simulovaná a niektoré celé čísla / plaváky sú jednoducho filtrované. simulovanie toho, čo by som robil filter v skutočnosti).

Tu je niekoľko ukážok kódu, ktoré môžete použiť na precvičenie.

Ukážka jednoduchého digitálneho filtra v Arduine typu 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);

Príklad kódu pre typ Arduino Horný priepust:

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
}

Príklad kódu Arduino 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);                              
}

Príklad kódu Arduino pre kapelu:

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

Pamätajte, že ADC je analógový digitálny prevodník Arduino. Použite rozsah 0-5v s rozdelením na rozsahy 0-1023. Ak je hodnota 0v, bude sa brať digitálna hodnota 0, a ak je 5v, za hodnotu signálu sa bude brať 1023, 1v môže byť 204m, 2v bude 408 atď.

Odporúčam vám tieto kódy upraviť a experimentovať s nimi. Výsledok môžete vidieť veľmi graficky vďaka sériovému plotru Arduino IDE ... Pamätajte, že ak máte otázky týkajúce sa programovania Arduino alebo ako používať IDE, môžete si stiahnuť bezplatný kurz HwLibre v PDF.


Buďte prvý komentár

Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.