Lavpasfilter: alt hvad du behøver at vide om dette kredsløb

lavpasfilterkredsløb

Spoler og op-forstærkere giver dig mulighed for at oprette meget interessante kredsløb, såsom den berømte frekvensfiltre. Disse filtre har en lang række applikationer i elektronikindustrien. Som det er tilfældet med lavpasfilter, højpasfilter osv. De er især interessante for visse lydapplikationer, at være i stand til at filtrere lyde eller mere eller mindre alvorlige lyde alt efter deres frekvens. Derfor er de meget nyttige.

Hvis du vil vide mere om lavpasfilter, og andre filtre, og hvordan de kan hjælpe dig i dine projekter med Arduino eller DIY, jeg opfordrer dig til at fortsætte med at læse ...

Elektriske filtre

Som navnet antyder, er et filter et kredsløb, der består af en række spoler og kondensatorer og endda nogle driftsforstærkere med det formål at kun at lade bestemte dele af en frekvens passere. Det vil sige, at af hele spektret af tilgængelige frekvenser filtrerer de en eller flere dele for at forhindre dem i at passere igennem.

Hvis for ejemplo Vi taler om det spektrum, der kan høres af mennesket, og som går fra 20 Hz til 20 Khz, med filtre, som du kan eliminere den laveste eller den højeste for kun at lade de mere eller mindre diskant / baslyde passere. Det er noget, som mange lydoptagelses- eller reproduktionssystemer bruger, såsom mikrofoner, højttalere osv.

Typer

Ifølge filtertypeeller rettere, afhængigt af frekvensen, de blokerer eller den, de slipper igennem, er der forskellige typer kredsløb, der er:

  • Lavpasfilter: de kaldes så fordi de er de filtre, der lader de laveste frekvenser passere og undertrykke eller reducere passet for de højere frekvenser. De består af en eller flere spoler (i serie med strømforsyningen og belastningen) og en eller to shuntkondensatorer med strømforsyningen og belastningen. Husk at belastningen forstås som den enhed, der er tilsluttet filteret, og som opsamler filterets output ... Inden for disse filtre er der også varianter, såsom L, T og π.
  • Højpasfilter: højpasfilteret er det modsatte af lavpas, i dette tilfælde, hvad der filtrerer eller begrænser, er lavfrekvenspas, så de højere frekvenser passerer. I dette investeres de elektroniske elementer, der komponerer det. Det vil sige, her vil kondensatorerne være dem i serie med strømforsyningen og belastningen, mens spolerne shuntes. Der er også de samme undertyper som i tilfælde af lavpasfiltre.
  • Båndpasfilter: Denne type filter udøver to låse på frekvensbåndets hastighed. Det vil sige, de fungerer både som et lavpasfilter og som et højpasfilter, der modsætter sig passagen af ​​de laveste frekvenser og også den højeste på samme tid. Med andre ord tillader det kun de midterste frekvenser at passere.
  • Båndfilter: det er nøjagtigt det modsatte af den forrige, hvad det gør er, at det filtrerer passet for mellemfrekvenserne og kun slipper igennem de laveste og højeste frekvenser.

Husk det induktanser de slipper igennem lave frekvenser og modsætter sig passage af høje frekvenser. I stedet, kondensatorer de slipper igennem høje frekvenser og modsætter sig passage af lave frekvenser.

Jeg vil gerne tilføje disse filtre på et praktisk niveau de er ikke perfekte, og de kan altid passere nogle lave eller høje frekvenser, som du skal blokere. De gør dog deres arbejde ganske godt til de fleste applikationer.

Og endelig vil jeg også gerne afklare en anden ting, og det er, at du helt sikkert har hørt om EMA- og DEMA-filtre. EMA-filtre (eksponentielt glidende gennemsnit) gør det muligt at implementere denne type filter på en enkel måde i indlejrede enheder. Hvad angår DEMA (dobbelt eksponentielt glidende gennemsnit), har de en hurtigere respons end EMA og opretholder en god undertrykkelse af den støj, du vil undgå.

Alfafaktor

El alfafaktor, som du vil se, der vises i Arduino IDE-koder i det næste afsnit, er den parameter, der betinger det eksponentielle filters opførsel. Det er relateret til afskæringsfrekvensen:

  • Alpha = 1: der giver et signal til det ufiltrerede output.
  • Alpha = 0: filterværdien vil altid være 0.
  • Alpha = x: andre værdier kan få andre ændringer i EMA-filteret. Hvis du reducerer Alpha-faktoren, blødgør du det opnåede frekvenssignal mere, og systemets responstid øges også (det tager længere tid at stabilisere sig).

Filtre og Arduino

Arduino I2C bus

For at bruge disse filtre gør det meget lettere at bruge et bibliotek til Arduino IDE. Du kan bruge det samme.

Du skal vide, at det ikke er nødvendigt at oprette kredsløbet højpasfilter eller lavpasfilter at forbinde det til dit Arduino-kort og arbejde med det. Selvom du kan eksperimentere og oprette disse slags enkle filtre, kan du også teste, hvordan en EMA kun fungerer med Arduino-kortet og en simpel kode til Arduino IDE. Det er det eneste, du har brug for for at se, hvordan det har ansvaret for at filtrere nogle frekvenser (i dette tilfælde er handlingen simuleret, og nogle heltal / floats filtreres simpelthen simulere hvad jeg ville gøre filter faktisk).

Her er nogle kodeeksempler, som du kan bruge til at øve.

Eksempel på simpelt digitalt filter i Arduino af typen lavpas:

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

Kodeeksempel for Arduino-typen Høj pas:

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
}

Eksempel på Arduino-kode båndpas:

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

Eksempel på Arduino-kode til band:

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

Husk, at ADC er Arduino Analog Digital-konverter. Brug et interval på 0-5v, opdelt i intervaller på 0-1023. Hvis værdien er 0v, tages en digital værdi på 0, og hvis den er 5v, tages 1023 som signalværdien, 1v kan være 204m, 2v ville være 408 osv.

Jeg råder dig til at ændre og eksperimentere med disse koder. Det resultat, du kan se meget grafisk tak til den serielle plotter af Arduino IDE ... Husk, at hvis du har spørgsmål om Arduino-programmering eller hvordan du bruger IDE, kan du downloade gratis HwLibre-kursus i PDF.


Vær den første til at kommentere

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.