تتيح لك ملفات ومضخات التشغيل إنشاء دوائر مثيرة جدًا للاهتمام ، مثل الدوائر الشهيرة مرشحات التردد. تحتوي هذه المرشحات على العديد من التطبيقات في صناعة الإلكترونيات. كما هو الحال مع مرشح التمرير المنخفض ، مرشح التمرير العالي ، إلخ. إنها مثيرة للاهتمام بشكل خاص لتطبيقات صوتية معينة ، أو القدرة على تصفية الضوضاء ، أو أصوات أكثر أو أقل خطورة وفقًا لترددها. لذلك ، فهي مفيدة للغاية.
إذا كنت تريد معرفة المزيد عن مرشح تمرير منخفض، والمرشحات الأخرى ، وكيف يمكنهم مساعدتك في مشاريعك باستخدام Arduino أو DIY ، أشجعك على مواصلة القراءة ...
فلاتر كهربائية
كما يوحي اسمه ، فإن المرشح عبارة عن دائرة تتكون من سلسلة من الملفات والمكثفات ، وحتى بعض مضخمات التشغيل ، لغرض السماح فقط لأجزاء معينة من التردد بالمرور. أي ، من بين الطيف الكامل للترددات المتاحة ، سيقومون بتصفية جزء أو أكثر لمنعهم من المرور.
نعم لاجل مثال نحن نتحدث عن الطيف المسموع من قبل الإنسان ، والذي يتراوح من 20 هرتز إلى 20 كيلوهرتز ، مع مرشحات يمكنك التخلص من أدنى أو أعلى ، للسماح فقط بمرور أصوات ثلاثية / باس أكثر أو أقل. إنه شيء تستخدمه العديد من أنظمة التسجيل الصوتي أو الاستنساخ ، مثل الميكروفونات ومكبرات الصوت وما إلى ذلك.
نوع
بحسب نوع فلتر، أو بالأحرى ، اعتمادًا على التردد الذي يحجبونه أو الذي يسمحون له بالمرور ، هناك أنواع مختلفة من الدوائر وهي:
- مرشح تمرير منخفض: سميت بذلك لأنها تلك المرشحات التي تسمح بمرور الترددات الأقل وقمع أو تقلل من مرور الترددات الأعلى. وهي تتكون من ملف واحد أو أكثر (في سلسلة مع مصدر الطاقة والحمل) ، وواحد أو اثنين من مكثفات التحويل مع مصدر الطاقة والحمل. تذكر أن الحمل يُفهم على أنه الجهاز المتصل بالفلتر والذي يجمع ناتج الفلتر ... توجد ضمن هذه المرشحات أيضًا متغيرات ، مثل L و T و π.
- مرشح دقيق: مرشح التمرير العالي هو عكس التمرير المنخفض ، في هذه الحالة ، ما سيتم ترشيحه أو تحديده هو تمرير التردد المنخفض ، مما يسمح بمرور الترددات الأعلى. في هذا يتم استثمار العناصر الإلكترونية التي يتكون منها. وهذا يعني أن المكثفات هنا ستكون متسلسلة مع مصدر الطاقة والحمل ، بينما سيتم تحويل الملفات. هناك أيضًا نفس الأنواع الفرعية كما في حالة مرشحات المرور المنخفض.
- مرشح تمرير النطاق: هذا النوع من المرشحات يمارس فدرتين لمعدل تمرير نطاق التردد. أي أنها تعمل كمرشح تمرير منخفض وكمرشح تمرير عالي ، مما يعارض مرور الترددات الأقل وأيضًا الأعلى في نفس الوقت. بمعنى آخر ، يسمح فقط للترددات المتوسطة بالمرور.
- مرشح الفرقة: إنه عكس السابق تمامًا ، ما يفعله هو أنه يقوم بتصفية تمرير الترددات المتوسطة ويسمح فقط بالمرور من خلال الترددات الأدنى والأعلى.
تذكر ذلك المحاثات فهي تسمح بمرور الترددات المنخفضة وتعارض مرور الترددات العالية. في حين أن، المكثفات فهي تسمح بمرور الترددات العالية وتعارض مرور الترددات المنخفضة.
أود أن أضيف تلك المرشحات على المستوى العملي هم ليسوا مثاليين، ويمكنهم دائمًا السماح ببعض الترددات المنخفضة أو العالية التي يجب حظرها. ومع ذلك ، فإنهم يقومون بعملهم بشكل جيد بالنسبة لمعظم التطبيقات.
وأخيرًا ، أود أيضًا أن أوضح شيئًا آخر ، وهو أنك سمعت بالتأكيد عن مرشحات EMA و DEMA. تتيح لك مرشحات EMA (المتوسط المتحرك الأسي) تنفيذ هذا النوع من المرشحات بطريقة بسيطة في الأجهزة المضمنة. أما بالنسبة لـ DEMA (المتوسط المتحرك الأسي المزدوج) ، فإن لديهم استجابة أسرع من المتوسط المتحرك الأسي ، مما يحافظ على قمع جيد للضوضاء التي تريد تجنبها.
عامل ألفا
El عامل ألفا، والتي سترى ظهورها في أكواد Arduino IDE في القسم التالي ، هي المعلمة التي تحدد سلوك المرشح الأسي. يتعلق بتردد القطع:
- Alpha = 1: توفر إشارة للإخراج غير المرشح.
- ألفا = 0: قيمة المرشح ستكون دائمًا 0.
- Alpha = x: يمكن أن تحصل القيم الأخرى على تعديلات أخرى في مرشح EMA. إذا قمت بتقليل عامل ألفا ، فسوف تقوم بتخفيف إشارة التردد التي تم الحصول عليها بشكل أكبر ، كما يتم زيادة وقت استجابة النظام (يستغرق الأمر وقتًا أطول للاستقرار).
مرشحات واردوينو
يجب أن تعلم أنه ليس من الضروري إنشاء الدائرة مرشح تمرير عالي أو مرشح تمرير منخفض لتوصيله بلوحة Arduino الخاصة بك والعمل معها. على الرغم من أنه يمكنك تجربة وإنشاء هذه الأنواع من المرشحات البسيطة ، يمكنك أيضًا اختبار كيفية عمل EMA مع لوحة Arduino فقط ورمز بسيط لـ Arduino IDE. هذا هو الشيء الوحيد الذي تحتاجه لمعرفة كيف يكون مسؤولاً عن تصفية بعض الترددات (في هذه الحالة ، يتم محاكاة الإجراء ويتم تصفية بعض الأعداد الصحيحة / العوامات ببساطة محاكاة ما سأفعله التصفية في الواقع).
فيما يلي بعض نماذج التعليمات البرمجية التي يمكنك استخدامها للتدرب.
مثال على مرشح رقمي بسيط في نوع Arduino تمرير منخفض:
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);
مثال رمز لنوع اردوينو تمريرة عالية:
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 }
مثال على كود اردوينو تمر الفرقة:
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); }
مثال على كود اردوينو للفرقة:
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); }
أنصحك بتعديل هذه الأكواد وتجربتها. النتيجة تستطيع انظر بيانيا جدا بفضل Serial Plotter لـ Arduino IDE ... تذكر أنه إذا كانت لديك أسئلة حول برمجة Arduino أو كيفية استخدام IDE ، فيمكنك تنزيل دورة مجانية في HwLibre بصيغة PDF.