Alçak geçiren filtre: bu devre hakkında bilmeniz gereken her şey

alçak geçiren filtre devresi

Bobinler ve op amfiler, ünlü gibi çok ilginç devreler oluşturmanıza olanak sağlar. frekans filtreleri. Bu filtrelerin elektronik endüstrisinde çok sayıda uygulaması vardır. Alçak geçiren filtre, yüksek geçiren filtre vb. İçin olduğu gibi. Frekanslarına göre gürültüleri veya az veya çok ciddi sesleri filtreleyebilen belirli ses uygulamaları için özellikle ilgi çekicidir. Bu nedenle çok faydalıdırlar.

Hakkında daha fazla bilgi edinmek istiyorsanız alçak geçiş filtresive diğer filtreler ve Arduino veya DIY ile projelerinizde size nasıl yardımcı olabileceklerini, okumaya devam etmenizi öneririm ...

Elektrikli filtreler

Adından da anlaşılacağı gibi, bir filtre, bir dizi bobin ve kapasitörden ve hatta bazı operasyonel amplifikatörlerden oluşan bir devredir. bir frekansın yalnızca belirli kısımlarının geçmesine izin vermek. Yani, mevcut frekansların tüm spektrumunun içinden geçmelerini önlemek için bir veya daha fazla parçayı filtreleyeceklerdir.

Evet için örnek İnsan tarafından duyulabilen, 20 Hz'den 20 Khz'ye giden spektrumdan bahsediyoruz, filtrelerle, yalnızca az ya da çok tiz / bas seslerinin geçmesine izin vermek için en düşük veya en yüksek olanı eleyebilirsiniz. Mikrofonlar, hoparlörler vb. Gibi birçok ses kayıt veya reprodüksiyon sisteminin kullandığı bir şeydir.

Türleri

Mevcut Filtre tipiveya daha doğrusu, bloke ettikleri frekansa veya izin verdikleri frekansa bağlı olarak, farklı tipte devreler vardır:

  • Alçak geçiş filtresi: Bunlar, en düşük frekansların geçmesine izin veren ve yüksek frekansların geçişini bastıran veya azaltan filtreler oldukları için böyle adlandırılırlar. Bir veya daha fazla bobin (güç kaynağı ve yük ile seri olarak) ve güç kaynağı ve yük ile bir veya iki şönt kapasitörden oluşurlar. Yükün, filtreye bağlı olan ve filtrenin çıkışını toplayan cihaz olarak anlaşıldığını unutmayın ... Bu filtrelerin içinde ayrıca L, T ve π.
  • Yüksek geçiren filtre: yüksek geçiş filtresi, düşük geçişin tersidir, bu durumda, filtreleyecek veya sınırlandıracak şey, daha yüksek frekansların geçmesine izin veren düşük frekans geçişidir. Buna, onu oluşturan elektronik unsurlara yatırım yapılır. Yani, burada kondansatörler güç kaynağı ve yük ile seri olacak, bobinler ise şöntlenecektir. Düşük geçiş filtreleri durumunda olduğu gibi aynı alt tipler de vardır.
  • Bant geçiren filtre: Bu filtre türü, iki frekans bandı geçiş hızı bloğu uygular. Yani, hem düşük geçiş filtresi hem de yüksek geçiş filtresi görevi görerek, aynı anda en düşük frekansların ve aynı zamanda en yüksek frekansların geçişine karşı çıkmaktadırlar. Başka bir deyişle, yalnızca orta frekansların geçmesine izin verir.
  • Bant filtresi: Bir öncekinin tam tersi, yaptığı şey, orta frekansların geçişini filtrelemesi ve yalnızca en düşük ve en yüksek frekansların geçişine izin vermesidir.

Bunu hatırla endüktanslar düşük frekanslara izin verirler ve yüksek frekansların geçişine karşı çıkarlar. Yerine, kapasitörler yüksek frekanslara izin verirler ve düşük frekansların geçişine karşı çıkarlar.

Bu filtreleri pratik bir düzeyde eklemek istiyorum mükemmel değillerve engellemeniz gereken bazı düşük veya yüksek frekansları her zaman geçebilirler. Ancak, çoğu uygulama için işlerini oldukça iyi yapıyorlar.

Son olarak, başka bir şeyi de açıklığa kavuşturmak isterim. EMA ve DEMA filtreleri. EMA (Üstel Hareketli Ortalama) filtreleri, bu tür filtrelerin gömülü cihazlarda basit bir şekilde uygulanmasına izin verir. DEMA'ya (Double Exponential Moving Average) gelince, EMA'dan daha hızlı yanıt verirler ve kaçınmak istediğiniz gürültüyü iyi bir şekilde bastırırlar.

Alfa faktörü

El alfa faktörüBir sonraki bölümde Arduino IDE kodlarında görünen, üstel filtrenin davranışını koşullandıran parametredir. Kesim frekansı ile ilgilidir:

  • Alfa = 1: filtrelenmemiş çıkışa bir sinyal sağlar.
  • Alfa = 0: filtre değeri her zaman 0 olacaktır.
  • Alfa = x: diğer değerler EMA filtresinde başka değişiklikler alabilir. Alfa faktörünü düşürürseniz, elde edilen frekans sinyalini daha fazla yumuşatırsınız ve sistemin tepki süresi de artar (stabilize olması daha uzun sürer).

Filtreler ve Arduino

Arduino I2C veriyolu

Bu filtreleri kullanmak için, Arduino IDE için bir kitaplık kullanmak işinizi çok daha kolay hale getirecektir. Kullanabilirsiniz Bu aynı.

Devreyi oluşturmanın gerekli olmadığını bilmelisiniz yüksek geçiren filtre veya alçak geçiren filtre Arduino kartınıza bağlamak ve onunla çalışmak için. Bu tür basit filtreleri deneyip oluşturabilseniz de, bir EMA'nın sadece Arduino kartı ve Arduino IDE için basit bir kodla nasıl çalışacağını da test edebilirsiniz. Bazı frekansları filtrelemekten nasıl sorumlu olduğunu görmeniz gereken tek şey budur (bu durumda eylem simüle edilir ve bazı tamsayılar / kayan değerler basitçe filtrelenir. ne yapacağımı taklit etmek aslında filtre).

İşte pratik yapmak için kullanabileceğiniz bazı kod örnekleri.

Arduino tipinde basit dijital filtre örneği düşük geçiş:

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

Arduino türü için kod örneği Yüksek geçiş:

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 kodu örneği bant geçişi:

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 kodu örneği grup için:

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

ADC'nin Arduino Analog Dijital dönüştürücü olduğunu unutmayın. 0-5 aralığına bölerek 0-1023v aralığını kullanın. Değer 0v ise 0 dijital değeri alınır ve 5v ise 1023 sinyal değeri olarak alınır, 1v 204m, 2v 408 vb. Olabilir.

Bu kodları değiştirmenizi ve denemenizi tavsiye ederim. Yapabileceğin sonuç çok grafiksel olarak görmek Arduino IDE'nin Seri Plotter'ı sayesinde ... Arduino programlama veya IDE'nin nasıl kullanılacağı hakkında sorularınız varsa, PDF formatında ücretsiz HwLibre kursu.


İlk yorumu siz

Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.