Filtro passa-baixo: tudo o que você precisa saber sobre este circuito

circuito de filtro passa baixa

Bobinas e amplificadores operacionais permitem que você crie circuitos muito interessantes, como o famoso filtros de frequência. Esses filtros têm uma infinidade de aplicações na indústria eletrônica. Como é o caso com o filtro de passagem baixa, o filtro de passagem alta, etc. São especialmente interessantes para determinadas aplicações sonoras, podendo filtrar ruídos, ou sons mais ou menos graves de acordo com a sua frequência. Portanto, eles são muito úteis.

Se você quiser saber mais sobre filtro passa-baixo, e outros filtros, e como eles podem ajudá-lo em seus projetos com Arduino ou DIY, eu encorajo você a continuar lendo ...

Filtros elétricos

Como o próprio nome sugere, um filtro é um circuito composto por uma série de bobinas e capacitores, e até mesmo alguns amplificadores operacionais, para fins de deixando apenas certas partes de uma frequência passar. Ou seja, de todo o espectro de frequências disponíveis, eles filtrarão uma ou mais partes para evitar que passem.

Se por exemplo Estamos falando do espectro audível pelo ser humano, que vai de 20 Hz a 20 Khz, com filtros que você poderia eliminar o mais baixo, ou o mais alto, para deixar passar apenas os sons mais ou menos agudos / graves. É algo que muitos sistemas de gravação ou reprodução de áudio usam, como microfones, alto-falantes, etc.

Tipo

Conforme tipo de filtro, ou melhor, dependendo da frequência que bloqueiam ou deixam passar, existem diferentes tipos de circuitos que são:

  • Filtro passa-baixo: são assim chamados porque são aqueles filtros que permitem a passagem das frequências mais baixas e suprimem ou reduzem a passagem das frequências mais altas. Eles consistem em uma ou mais bobinas (em série com a fonte de alimentação e a carga) e um ou dois capacitores shunt com a fonte de alimentação e a carga. Lembre-se que por carga entende-se o dispositivo conectado ao filtro e que coleta a saída do filtro ... Dentro desses filtros também existem variantes, como L, T e π.
  • Filtro passa-alto: o filtro passa-alto é o oposto do passa-baixo, neste caso, o que vai filtrar ou limitar é a passagem de baixa frequência, deixando passar as altas frequências. Nisto são investidos os elementos eletrônicos que o compõem. Ou seja, aqui os capacitores serão aqueles em série com a fonte de alimentação e a carga, enquanto as bobinas serão desviadas. Existem também os mesmos subtipos que no caso dos filtros de passagem baixa.
  • Filtro passa-banda: Este tipo de filtro exerce dois blocos de taxa de passagem de banda de frequência. Ou seja, atuam tanto como filtro passa-baixas quanto como passa-altas, opondo-se à passagem das frequências mais baixas e também das mais altas ao mesmo tempo. Em outras palavras, ele permite apenas a passagem das frequências médias.
  • Filtro de banda: é exatamente o oposto do anterior, o que faz é que filtra a passagem das frequências médias e só deixa passar as frequências mais baixas e mais altas.

Lembre-se disso indutâncias eles deixam passar baixas frequências e se opõem à passagem de altas frequências. Em vez de, capacitores eles deixam passar altas frequências e se opõem à passagem de baixas frequências.

Eu gostaria de adicionar esses filtros em um nível prático eles não são perfeitos, e eles sempre podem passar algumas frequências baixas ou altas que você deve bloquear. No entanto, eles fazem seu trabalho muito bem para a maioria das aplicações.

E, por fim, gostaria de esclarecer outra coisa: você certamente já ouviu falar sobre o Filtros EMA e DEMA. Os filtros EMA (Exponential Moving Average) permitem implementar este tipo de filtro de forma simples em dispositivos embarcados. Já o DEMA (Double Exponential Moving Average) tem uma resposta mais rápida que o EMA, mantendo uma boa supressão do ruído que se deseja evitar.

Fator alfa

El fator alfa, que você verá que aparece nos códigos IDE do Arduino na próxima seção, é o parâmetro que condiciona o comportamento do filtro exponencial. Está relacionado à frequência de corte:

  • Alpha = 1: que fornece um sinal para a saída não filtrada.
  • Alfa = 0: o valor do filtro será sempre 0.
  • Alpha = x: outros valores podem obter outras alterações no filtro EMA. Se você diminuir o fator Alfa, suavizará mais o sinal de frequência obtido e o tempo de resposta do sistema também aumentará (leva mais tempo para se estabilizar).

Filtros e Arduino

Barramento Arduino I2C

Para usar esses filtros, o uso de uma biblioteca para Arduino IDE tornará seu trabalho muito mais fácil. Você pode usar Esse mesmo.

Você deve saber que não é necessário criar o circuito filtro de passagem alta ou filtro de passagem baixa para conectá-lo à sua placa Arduino e trabalhar com ele. Embora você possa experimentar e criar esses tipos de filtros simples, também pode testar como um EMA funcionaria apenas com a placa Arduino e um código simples para o IDE do Arduino. Só precisa de ver como se encarrega de filtrar algumas frequências (neste caso a acção é simulada e alguns inteiros / flutuantes são simplesmente filtrados simulando o que eu faria filtro na verdade).

Aqui estão alguns exemplos de código que você pode usar para praticar.

Exemplo de filtro digital simples no Arduino do tipo passe baixo:

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

Exemplo de código para o tipo Arduino passo alto:

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
}

Exemplo de código Arduino passe de banda:

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

Exemplo de código Arduino para 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);                                
}

Lembre-se de que ADC é o conversor Analógico Digital Arduino. Use um intervalo de 0-5v, dividindo-se em intervalos de 0-1023. Se o valor for 0v, um valor digital de 0 é considerado, e se for 5v, 1023 será considerado o valor do sinal, 1v pode ser 204m, 2v seria 408, etc.

Aconselho você a modificar e experimentar esses códigos. O resultado você pode veja muito graficamente graças ao Serial Plotter do Arduino IDE ... Lembre-se que se você tiver dúvidas sobre a programação do Arduino ou como usar o IDE, você pode baixar o curso HwLibre grátis em PDF.


Seja o primeiro a comentar

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.