Mababang pass filter: lahat ng kailangan mong malaman tungkol sa circuit na ito

mababang pumasa sa circuit ng filter

Pinapayagan ka ng mga coil at op amp na lumikha ng mga kagiliw-giliw na mga circuit, tulad ng sikat mga filter ng dalas. Ang mga filter na ito ay may maraming mga application sa industriya ng electronics. Tulad ng kaso sa low pass filter, ang high pass filter, atbp. Lalo na nakakainteres ang mga ito para sa ilang mga tunog na application, nakapag-filter ng mga ingay, o higit pa o hindi gaanong seryosong mga tunog ayon sa kanilang dalas. Samakatuwid, ang mga ito ay napaka kapaki-pakinabang.

Kung nais mong malaman ang higit pa tungkol sa low pass filter, at iba pang mga filter, at kung paano ka nila matutulungan sa iyong mga proyekto sa Arduino o DIY, hinihikayat kita na ipagpatuloy ang pagbabasa ...

Mga pansala sa kuryente

Tulad ng ipinahihiwatig ng pangalan nito, ang isang filter ay isang circuit na binubuo ng isang serye ng mga coil at capacitor, at kahit na ilang mga amplifier na pagpapatakbo, para sa hangarin ng hinahayaan lamang ang ilang mga bahagi ng isang dalas na dumaan. Iyon ay, sa buong spectrum ng mga magagamit na dalas, susuriin nila ang isa o higit pang mga bahagi upang maiwasan ang pagdaan nila.

Oo para sa ejemplo Pinag-uusapan natin ang tungkol sa spectrum na naririnig ng tao, na kung saan ay mula sa 20 Hz hanggang 20 Khz, na may mga filter na maaari mong alisin ang pinakamababa, o ang pinakamataas, upang payagan lamang ang higit pa o mas kaunting mga tunog ng treble / bass na dumaan. Ito ay isang bagay na ginagamit ng maraming mga audio recording o reproduction system, tulad ng mga mikropono, speaker, atbp.

Uri

Ayon sa uri ng filter, o sa halip, depende sa dalas na harangan nila o sa kanilang pinapasa, mayroong iba't ibang uri ng mga circuit na:

  • Mababang pass filter: tinawag sila sapagkat ang mga ito ang mga filter na pinapasa ang pinakamababang frequency na pumasa at pinipigilan o binabawasan ang pass ng mas mataas na mga frequency. Binubuo ang mga ito ng isa o higit pang mga coil (sa serye na may suplay ng kuryente at pag-load), at isa o dalawang shunt capacitor na may power supply at load. Tandaan na nauunawaan ang pagkarga na aparatong nakakonekta sa filter at kinokolekta ang output ng filter ... Sa loob ng mga filter na ito ay mayroon ding mga pagkakaiba-iba, tulad ng L, T at π.
  • HIGH pass filter: ang high pass filter ay ang kabaligtaran ng mababang pass, sa kasong ito, kung ano ang i-filter o limitahan ay ang mababang pass ng dalas, hinahayaan na lumipas ang mas mataas na mga frequency. Dito ay namuhunan ang mga elektronikong elemento na bumubuo nito. Iyon ay, narito ang mga capacitor ay ang mga nasa serye na may supply ng kuryente at karga, habang ang mga coil ay mai-shunted. Mayroon ding mga parehong subtypes tulad ng sa kaso ng mga mababang pass filter.
  • Filter ng band pass: Ang ganitong uri ng filter ay nagbibigay ng dalawang mga bloke ng rate ng pass ng frequency band. Iyon ay, kumikilos sila pareho bilang isang mababang pass filter at bilang isang high pass filter, tinututulan ang daanan ng pinakamababang mga frequency at pati na rin ang pinakamataas sa parehong oras. Sa madaling salita, pinapayagan lamang nitong dumaan ang mga gitnang dalas.
  • Filter ng banda: ito ay eksaktong kabaligtaran ng nakaraang isa, kung ano ang ginagawa nito ay sinasala nito ang pass ng mga mid frequency at hinahayaan lamang ang pinakamababa at pinakamataas na frequency.

Alalahanin mo yan inductances pinabayaan nila ang mga mabababang frequency at kinalaban ang daanan ng mga mataas na frequency. Sa halip, capacitor pinabayaan nila ang mga mataas na frequency at kinokontra ang daanan ng mga mababang frequency.

Nais kong idagdag ang mga filter na iyon sa isang praktikal na antas hindi sila perpekto, at palagi nilang maipapasa ang ilang mababa o mataas na frequency na dapat mong harangan. Gayunpaman, ginagawa nila ng maayos ang kanilang trabaho para sa karamihan ng mga aplikasyon.

At sa wakas, nais kong linawin din ang isa pang bagay, at iyon ay tiyak na narinig mo tungkol sa Mga filter ng EMA at DEMA. Pinapayagan ng mga filter ng Ema (Exponential Moving Average) na ipatupad ang ganitong uri ng mga filter sa isang simpleng paraan sa mga naka-embed na aparato. Tulad ng para sa DEMA (Double Exponential Moving Average), mayroon silang isang mas mabilis na tugon kaysa sa EMA, na pinapanatili ang mahusay na pagpigil sa ingay na nais mong iwasan.

Kadahilanan ng Alpha

El alpha factor, na makikita mo na lilitaw sa mga code ng Arduino IDE sa susunod na seksyon, ay ang parameter na nagsasaad ng pag-uugali ng exponential filter. Ito ay nauugnay sa dalas ng cutoff:

  • Alpha = 1: na nagbibigay ng isang senyas sa hindi na-filter na output.
  • Alpha = 0: ang halaga ng filter ay palaging magiging 0.
  • Ang Alpha = x: ibang mga halaga ay maaaring makakuha ng iba pang mga pagbabago sa filter ng EMA. Kung babawasan mo ang kadahilanan ng Alpha, mapapalambot mo ang signal ng dalas na nakuha nang higit pa, at ang oras ng pagtugon ng system ay nadagdagan din (mas matagal itong tumatag).

Mga Filter at Arduino

Arduino I2C bus

Upang magamit ang mga filter na ito, ang paggamit ng isang silid-aklatan para sa Arduino IDE ay magpapadali sa iyong trabaho. Pwede mong gamitin pareho ito.

Dapat mong malaman na hindi kinakailangan upang lumikha ng circuit high pass filter o low pass filter upang ikonekta ito sa iyong Arduino board at makipagtulungan dito. Bagaman maaari kang mag-eksperimento at lumikha ng mga ganitong uri ng simpleng mga filter, maaari mo ring subukan kung paano gagana ang isang EMA sa Arduino board lamang at isang simpleng code para sa Arduino IDE. Ito ay ang tanging bagay na kailangan mo upang makita kung paano ito singil sa pag-filter ng ilang mga frequency (sa kasong ito ang aksyon ay gayahin at ang ilang mga integer / float ay simpleng nasala pagtulad sa gagawin ko filter talaga).

Narito ang ilang mga sample ng code na maaari mong gamitin upang magsanay.

Halimbawa ng simpleng digital filter sa Arduino ng uri 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);

Halimbawa ng code para sa uri ng Arduino Mataas na pass:

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
}

Halimbawa ng code ng 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);                              
}

Halimbawa ng code ng Arduino para sa banda:

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

Tandaan na ang ADC ay ang Arduino Analog Digital converter. Gumamit ng isang saklaw na 0-5v, na naghahati sa mga saklaw na 0-1023. Kung ang halaga ay 0v, ang isang digital na halaga ng 0 ay kukuha, at kung ito ay 5v, 1023 ay kukuha bilang halaga ng signal, ang 1v ay maaaring 204m, 2v ay magiging 408, atbp.

Pinapayuhan ko kayo na baguhin at mag-eksperimento sa mga code na ito. Ang resulta maaari mong tingnan ang napaka-graphic salamat sa Serial Plotter ng Arduino IDE ... Tandaan na kung mayroon kang mga katanungan tungkol sa programa ng Arduino o kung paano gamitin ang IDE, maaari mong i-download ang libreng kurso na HwLibre sa PDF.


Maging una sa komento

Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.