Lavpassfilter: alt du trenger å vite om denne kretsen

lavpassfilterkrets

Spoler og op-forsterkere lar deg lage veldig interessante kretser, for eksempel den berømte frekvensfiltre. Disse filtrene har mange bruksområder i elektronikkindustrien. Som tilfellet er med lavpassfilter, høypassfilter osv. De er spesielt interessante for visse lydapplikasjoner, å kunne filtrere støy, eller mer eller mindre alvorlige lyder i henhold til frekvensen. Derfor er de veldig nyttige.

Hvis du vil vite mer om lavpassfilter, og andre filtre, og hvordan de kan hjelpe deg i prosjektene dine med Arduino eller DIY, jeg oppfordrer deg til å fortsette å lese ...

Elektriske filtre

Som navnet antyder, er et filter en krets som består av en serie spoler og kondensatorer, og til og med noen driftsforsterkere, med det formål å la bare visse deler av en frekvens passere. Det vil si at av hele spekteret av tilgjengelige frekvenser, vil de filtrere en eller flere deler for å forhindre at de passerer gjennom.

Ja for ejemplo Vi snakker om spekteret som høres av mennesket, som går fra 20 Hz til 20 Khz, med filtre som du kan eliminere den laveste, eller den høyeste, for bare å la de mer eller mindre diskant / basslydene passere. Det er noe som mange lydopptak eller reproduksjonssystemer bruker, for eksempel mikrofoner, høyttalere, etc.

Type

Ifølge filtertype, eller rettere sagt, avhengig av frekvensen de blokkerer eller den de slipper igjennom, er det forskjellige typer kretser som er:

  • Lavpassfilter: de er såkalte fordi de er de filtrene som lar de laveste frekvensene passere og undertrykke eller redusere passet til de høyere frekvensene. De består av en eller flere spoler (i serie med strømforsyningen og belastningen), og en eller to shuntkondensatorer med strømforsyningen og belastningen. Husk at lasten forstås som enheten som er koblet til filteret og som samler filterets utgang ... Innenfor disse filtrene er det også varianter, som L, T og π.
  • Høypassfilter: høypassfilteret er det motsatte av lavpasset, i dette tilfellet, det som vil filtrere eller begrense er lavfrekvenspasset, slik at de høyere frekvensene passerer. I dette investeres de elektroniske elementene som komponerer den. Det vil si at her vil kondensatorene være de i serie med strømforsyningen og belastningen, mens spolene blir shuntet. Det er også de samme undertypene som for lavpassfilter.
  • Båndpassfilter: Denne typen filter utøver to frekvensbånds passfrekvensblokker. Det vil si at de fungerer både som et lavpassfilter og som et høypassfilter, og motarbeider passering av de laveste frekvensene og også den høyeste samtidig. Med andre ord, det lar bare de midterste frekvensene passere.
  • Båndfilter: det er nøyaktig det motsatte av den forrige, det den gjør er at den filtrerer passet til midtfrekvensene og bare slipper gjennom de laveste og høyeste frekvensene.

Husk det induktanser de slipper gjennom lave frekvenser og motarbeider passering av høye frekvenser. I stedet, kondensatorer de slipper gjennom høye frekvenser og motarbeider passering av lave frekvenser.

Jeg vil gjerne legge til filtrene på et praktisk nivå de er ikke perfekte, og de kan alltid slippe gjennom noen lave eller høye frekvenser som du bør blokkere. Imidlertid gjør de jobben sin ganske bra for de fleste applikasjoner.

Og til slutt vil jeg også avklare en annen ting, og det er at du sikkert har hørt om EMA- og DEMA-filtre. EMA (Exponential Moving Average) filtre tillater å implementere denne typen filtre på en enkel måte i innebygde enheter. Når det gjelder DEMA (Double Exponential Moving Average), har de raskere respons enn EMA, og opprettholder god undertrykkelse av støyen du vil unngå.

Alfafaktor

El alfafaktor, som du vil se som vises i Arduino IDE-kodene i neste avsnitt, er parameteren som betinger oppførselen til det eksponensielle filteret. Det er relatert til avskjæringsfrekvensen:

  • Alpha = 1: som gir et signal til den ufiltrerte utgangen.
  • Alpha = 0: filterverdien vil alltid være 0.
  • Alpha = x: andre verdier kan få andre endringer i EMA-filteret. Hvis du reduserer Alpha-faktoren, vil du myke opp det oppnådde frekvenssignalet, og systemets responstid økes også (det tar lengre tid å stabilisere seg).

Filtre og Arduino

Arduino I2C buss

For bruk av disse filtrene vil bruken av et bibliotek for Arduino IDE gjøre arbeidet ditt mye enklere. Du kan bruke det samme.

Du bør vite at det ikke er nødvendig å lage kretsen høypassfilter eller lavpassfilter for å koble den til Arduino-kortet og jobbe med det. Selv om du kan eksperimentere og lage slike enkle filtre, kan du også teste hvordan en EMA ville fungere med bare Arduino-kortet og en enkel kode for Arduino IDE. Det er det eneste du trenger for å se hvordan det har ansvaret for å filtrere noen frekvenser (i dette tilfellet er handlingen simulert og noen heltall / floats blir ganske enkelt filtrert simulere hva jeg ville gjort filter faktisk).

Her er noen kodeeksempler som du kan bruke til å øve.

Eksempel på enkelt digitalt filter i Arduino av typen lav passering:

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-type Høy pasning:

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 kodeeksempel bandpass:

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 kodeeksempel for 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-omformer. Bruk en rekkevidde på 0-5v, fordelt på områder på 0-1023. Hvis verdien er 0v, tas en digital verdi på 0, og hvis den er 5v, vil 1023 bli tatt som signalverdi, 1v kan være 204m, 2v ville være 408, etc.

Jeg anbefaler deg å endre og eksperimentere med disse kodene. Resultatet kan du se veldig grafisk takket være Serial Plotter av Arduino IDE ... Husk at hvis du har spørsmål om Arduino-programmering eller hvordan du bruker IDE, kan du laste ned gratis HwLibre-kurs i PDF.


Bli den første til å kommentere

Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.