Les bobines et amplis op permettent de créer des circuits très intéressants, comme le fameux filtres de fréquence. Ces filtres ont une multitude d'applications dans l'industrie électronique. Comme c'est le cas avec le filtre passe-bas, le filtre passe-haut, etc. Ils sont particulièrement intéressants pour certaines applications sonores, pouvant filtrer des bruits, ou des sons plus ou moins graves en fonction de leur fréquence. Par conséquent, ils sont très utiles.
Si vous voulez en savoir plus sur filtre passe bas, et autres filtres, et comment ils peuvent vous aider dans vos projets avec Arduino ou DIY, je vous encourage à continuer la lecture ...
Filtres électriques
Comme son nom l'indique, un filtre est un circuit composé d'une série de bobines et de condensateurs, et même de quelques amplificateurs opérationnels, dans le but de ne laissant passer que certaines parties d'une fréquence. C'est-à-dire que sur tout le spectre des fréquences disponibles, ils filtreront une ou plusieurs parties pour les empêcher de passer.
Oui par exemple On parle du spectre audible par l'être humain, qui va de 20 Hz à 20 Khz, avec des filtres que l'on pourrait éliminer le plus bas, ou le plus élevé, afin de ne laisser passer que les sons plus ou moins aigus / graves. C'est quelque chose que de nombreux systèmes d'enregistrement ou de reproduction audio utilisent, tels que des microphones, des haut-parleurs, etc.
Types
- Filtre passe bas
- Filtre passe-haut
- Graphiques de filtre de fréquence
Selon le type de filtre, ou plutôt, selon la fréquence qu'ils bloquent ou celle qu'ils laissent passer, il existe différents types de circuits qui sont:
- Filtre passe bas: ils sont appelés ainsi parce que ce sont ces filtres qui laissent passer les fréquences les plus basses et suppriment ou réduisent le passage des fréquences supérieures. Ils se composent d'une ou plusieurs bobines (en série avec l'alimentation et la charge), et d'un ou deux condensateurs shunt avec l'alimentation et la charge. N'oubliez pas que la charge est comprise comme étant l'appareil connecté au filtre et qui collecte la sortie du filtre ... Dans ces filtres, il existe également des variantes, telles que L, T et π.
- Filtre passe-haut: le filtre passe-haut est l'opposé du passe-bas, dans ce cas, ce qu'il va filtrer ou limiter c'est le passe basse fréquence, laissant passer les hautes fréquences. En cela les éléments électroniques qui le composent sont investis. Autrement dit, ici, les condensateurs seront ceux en série avec l'alimentation et la charge, tandis que les bobines seront shuntées. Il existe également les mêmes sous-types que dans le cas des filtres passe-bas.
- Filtre passe-bande: Ce type de filtre exerce deux verrouillages de taux de passage de bande de fréquence. C'est-à-dire qu'ils agissent à la fois comme un filtre passe-bas et comme un filtre passe-haut, s'opposant au passage des fréquences les plus basses et aussi les plus élevées en même temps. En d'autres termes, il ne laisse passer que les fréquences moyennes.
- Filtre de bande: c'est exactement le contraire du précédent, ce qu'il fait, c'est qu'il filtre le passage des moyennes fréquences et ne laisse passer que les fréquences les plus basses et les plus hautes.
Rappelez-vous que le inductances ils laissent passer les basses fréquences et s'opposent au passage des hautes fréquences. Au lieu, condensateurs ils laissent passer les hautes fréquences et s'opposent au passage des basses fréquences.
Je voudrais ajouter que les filtres à un niveau pratique ils ne sont pas parfaits, et ils peuvent toujours transmettre des fréquences basses ou élevées que vous devez bloquer. Cependant, ils font assez bien leur travail pour la plupart des applications.
Et enfin, je voudrais aussi clarifier une autre chose, c'est que vous avez sûrement entendu parler de la Filtres EMA et DEMA. Les filtres EMA (Exponential Moving Average) permettent d'implémenter ce type de filtres de manière simple dans les appareils embarqués. Quant aux DEMA (Double Exponential Moving Average), ils ont une réponse plus rapide que l'EMA, maintenant une bonne suppression du bruit que vous souhaitez éviter.
Facteur alpha
El facteur alpha, que vous verrez qui apparaît dans les codes IDE Arduino dans la section suivante, est le paramètre qui conditionne le comportement du filtre exponentiel. Elle est liée à la fréquence de coupure:
- Alpha = 1: qui fournit un signal à la sortie non filtrée.
- Alpha = 0: la valeur du filtre sera toujours 0.
- Alpha = x: d'autres valeurs peuvent obtenir d'autres modifications dans le filtre EMA. Si vous diminuez le facteur Alpha, vous adoucirez davantage le signal de fréquence obtenu, et le temps de réponse du système est également augmenté (il faut plus de temps pour se stabiliser).
Filtres et Arduino
Il faut savoir qu'il n'est pas nécessaire de créer le circuit filtre passe-haut ou filtre passe-bas pour le connecter à votre carte Arduino et travailler avec. Bien que vous puissiez expérimenter et créer ces types de filtres simples, vous pouvez également tester comment un EMA fonctionnerait uniquement avec la carte Arduino et un code simple pour l'IDE Arduino. C'est la seule chose dont vous avez besoin pour voir comment il se charge de filtrer certaines fréquences (dans ce cas l'action est simulée et certains entiers / flottants sont simplement filtrés simulant ce que je ferais filtre en fait).
Voici quelques exemples de code que vous pouvez utiliser pour vous entraîner.
Exemple de filtre numérique simple dans Arduino de type passe-bas:
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);
Exemple de code pour le type Arduino Passe haut:
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 }
Exemple de code Arduino passe-bande:
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); }
Exemple de code Arduino pour groupe:
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); }
Je vous conseille de modifier et d'expérimenter ces codes. Le résultat que vous pouvez voir très graphiquement grâce au Serial Plotter de l'IDE Arduino ... N'oubliez pas que si vous avez des questions sur la programmation Arduino ou comment utiliser l'IDE, vous pouvez télécharger le cours HwLibre gratuit en PDF.