Low pass чыпкасы: бул схема жөнүндө билишиңиз керек болгон нерселердин бардыгы

төмөнкү чыпкалуу чынжыр

Катушкалар жана оп-амперлер атактуу сыяктуу абдан кызыктуу схемаларды түзүүгө мүмкүнчүлүк берет жыштык чыпкалары. Бул чыпкалар электроника тармагында көптөгөн колдонмолорго ээ. Төмөнкү чыпка, жогорку чыпка ж.б.у.с. Айрым үн колдонмолору, үндөрдү чыпкалоо мүмкүнчүлүгү же алардын жыштыгына жараша аздыр-көптүр олуттуу үндөр өзгөчө кызыктуу. Ошондуктан, алар абдан пайдалуу.

Эгер сиз дагы көбүрөөк билгиңиз келсе төмөн өткөрүү чыпкасы, жана башка чыпкалар, жана Arduino же DIY менен долбоорлоруңузда кандайча жардам бере алышат, мен сизди окууну улантууга чакырам ...

Электр чыпкалары

Анын аты айтып тургандай, чыпка бул бир катар катушкалардан жана конденсаторлордон, ал тургай кээ бир иштөө күчөткүчтөрүнөн турган схема. жыштыктын айрым бөлүктөрүн гана өткөрүү. Башкача айтканда, бар жыштык спектринин ичинен, алар өтүп кетпеши үчүн, бир же бир нече бөлүктү чыпкалап чыгышат.

Ооба Ejemplo Биз адам уккан, 20 Гцтен 20 кГцке чейинки спектри жөнүндө, аздыр-көптүр треб / бас үндөрүнүн өтүшүнө мүмкүнчүлүк берүү үчүн, эң төмөнкү же эң жогорку чегин чыпкалар менен жок кыла алабыз. Бул көптөгөн аудио жазуу же көбөйтүү тутумдары колдонуучу нерсе, мисалы, микрофондор, колонкалар ж.б.

түрү

ылайык чыпка түрү, тагыраак айтканда, алардын блоктогон жыштыгына же өткөргөнүнө жараша, ар кандай схемалардын түрлөрү бар:

  • Төмөнкү чыпка: алар эң төмөнкү жыштыктарды өткөрүүчү жана жогорку жыштыктардын өтүшүн басуучу же азайтуучу чыпкалар болгондуктан ушундай аталат. Алар бир же бир нече катушкалардан (электр кубаты жана жүктөм менен катар), жана бир же эки шунт конденсаторунан кубаттуулук жана жүктөм менен турат. Жүктүн чыпкага туташтырылган жана фильтрдин натыйжаларын чогулткан шайман деп түшүнүлөрүн унутпаңыз ... Бул чыпкалардын ичинде L, T жана π.
  • Жогорку өткөрүү чыпкасы: жогорку өтүү чыпкасы төмөнкү өтүүгө карама-каршы келет, бул учурда, чыпкалоо же чектөө төмөнкү жыштыктын өтүшү, жогору жыштыктарга жол берүү. Буга аны түзгөн электрондук элементтер жумшалат. Башкача айтканда, бул жерде конденсаторлор кубаттуулук жана жүктөм менен катар-катар болуп, катушкалар иштебей калат. Төмөнкү чыпкалардагыдай эле түрчөлөр бар.
  • Топтун чыпкасы: Фильтрдин бул түрү эки жыштык тилкесинин өтүп кетүү ылдамдыгын кулпулайт. Башкача айтканда, алар бир эле учурда эң төмөнкү жыштыктардын жана ошондой эле эң жогорку чектердин өтүшүнө каршы чыгып, төмөнкү пас чыпкасы катары да, жогорку чыпка чыпкасы катары да иштешет. Башка сөз менен айтканда, ал ортоңку жыштыктарды гана өткөрөт.
  • Топ чыпкасы: бул мурункусунан таптакыр карама-каршы келген нерсе, ал ортоңку жыштыктардын өтүшүн чыпкалап, эң төмөнкү жана эң жогорку жыштыктар аркылуу гана өтөт.

Эсиңизде болсун индуктивдүүлүктөр алар төмөнкү жыштыктарды өткөрүп, жогорку жыштыктарга каршы турушат. Анын ордуна, Capacitors алар жогорку жыштыктарды өткөрүп, төмөнкү жыштыктардын өтүшүнө каршы турушат.

Ошол чыпкаларды практикалык деңгээлде кошкум келет алар кемчиликсиз эмес, жана алар ар дайым сиз тоскоол болушу керек болгон кээ бир төмөн же жогорку жыштык аркылуу өткөрө алат. Бирок, алар көпчүлүк тиркемелер үчүн өз жумуштарын мыкты аткарышат.

Акыры, дагы бир нерсени тактап кетким келет, бул жөнүндө сиз сөзсүз уккансыз EMA жана DEMA чыпкалары. EMA (Exponential Moving Average) чыпкалары камтылган түзмөктөрдө жөнөкөй ыкма менен чыпкалардын бул түрүн ишке ашырууга мүмкүнчүлүк берет. DEMA (Double Exponential Moving Average) жөнүндө айтсак, алар EMAга караганда тезирээк жооп берип, сиз качкыңыз келген ызы-чууну жакшы басат.

Альфа фактор

El альфа-фактор, кийинки бөлүмдөгү Arduino IDE коддорунда пайда болгон экспоненциалдык чыпкалардын иштешин шарттаган параметр. Бул өчүрүү жыштыгына байланыштуу:

  • Alpha = 1: бул чыпкаланбаган чыгууга сигнал берет.
  • Alpha = 0: чыпканын мааниси ар дайым 0 болот.
  • Alpha = x: башка баалуулуктар EMA чыпкасында башка өзгөртүүлөрдү ала алат. Эгерде сиз Альфа коэффициентин төмөндөтсөңүз, анда алынган жыштык сигналын көбүрөөк жумшартасыз жана системанын жооп берүү убактысы да көбөйөт (турукташтыруу үчүн көп убакыт талап кылынат).

Чыпкалар жана Arduino

Arduino I2C автобус

Бул чыпкаларды колдонуу үчүн, Arduino IDE үчүн китепкананы колдонуу сиздин ишиңизди бир топ жеңилдетет. Сиз колдоно аласыз ушул эле.

Сиз чынжырды түзүүнүн кажети жок экендигин билишиңиз керек жогорку өткөрүү чыпкасы же төмөн чыпка чыпкасы аны 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);

Arduino типиндеги код мисалы Бийик ашуу:

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 кодунун мисалы топ өткөрүү:

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 кодунун мисалы топ үчүн:

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 Arduino Аналогдук Санариптик конвертер экендигин унутпаңыз. 0-5 диапазонуна бөлүп, 0-1023v диапазонун колдонуңуз. Эгер 0v мааниси болсо, 0 санариптик мааниси, ал эми 5v болсо, 1023 сигнал мааниси катары кабыл алынат, 1v 204m, 2v 408ге ж.б.у.с.

Мен сизге ушул коддорду өзгөртүп, тажрыйба жасап көрүңүз деп кеңеш берем. Натыйжа сиз графикалык түрдө көрө аласыз Arduino IDEдин Serial Plotter жардамы менен ... Arduino программалоосу же IDEди колдонуу боюнча суроолоруңуз болсо, анда PDFте акысыз HwLibre курсу.


Макаланын мазмуну биздин принциптерге карманат редакциялык этика. Ката жөнүндө кабарлоо үчүн чыкылдатыңыз бул жерде.

Комментарий биринчи болуп

Комментарий калтырыңыз

Сиздин электрондук почта дареги жарыяланбайт. Милдеттүү талаалар менен белгиленет *

*

*

  1. Маалыматтар үчүн жооптуу: Мигель Анхель Гатан
  2. Маалыматтын максаты: СПАМды көзөмөлдөө, комментарийлерди башкаруу.
  3. Мыйзамдуулук: Сиздин макулдугуңуз
  4. Маалыматтарды берүү: Маалыматтар үчүнчү жактарга юридикалык милдеттенмелерден тышкары билдирилбейт.
  5. Маалыматтарды сактоо: Occentus Networks (ЕС) тарабынан уюштурулган маалыматтар базасы
  6. Укуктар: Каалаган убакта маалыматыңызды чектеп, калыбына келтирип жана жок кыла аласыз.