logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Obrotomierz akustyczny(FFT)

Piroman1024 08 Mar 2009 18:46 2897 8
REKLAMA
  • #1 6254396
    Piroman1024
    Poziom 17  
    Witam
    Chciałbym zbudować obrotomierz jak w temacie i nie bardzo wiem jak to ugryźć.
    Obrotomierz ma mierzyć obroty silnika spalinowego jednocylindrowego w zakresie do 50 000obr/min, czyli częstotliwość podstawowa jest mniejsza od 1[KHz], wystarczy mi jeżeli pomiar będzie wyświetlany raz na pół sekundy lub sekundę.
    Generalnie chodzi mi oto aby z sygnału akustycznego generowanego przez silnik wyłuskać częstotliwość podstawową, przeliczyć ją na obroty i wyświetlić(z tymi ostatnim nie będzie problemu).

    Piszę w AVR C, mam trochę projektów na koncie jednak do tego nie wiem jak się zabrać:(

    Wyobrażam sobie to tak:
    1.Czujnik - mikrofon elektretowy
    2.Wzmacniacz sygnału na jakimś op-ampie, sygnał ze wzmacniacza podawany na ADC mikrokontrolera
    3.Próbkowanie sygnału
    4.FFT - aby wyodrębnić podstawową częstotliwość
    5.Niezbędne przeliczenia
    6.Wyświetlenie wyniku

    Wstępnie przyjąłem jako mikrokontroler Atmega8 jednak nie wiem czy to dobry pomysł.

    Kompletnie się nie znam na przekształceniach FFT i nie wiem jak to zaimplementować dla tego konkretnego przypadku.

    Bardzo proszę o wszelką pomoc, wskazówki rady itd.
    Pozdrawiam
  • REKLAMA
  • #2 6254940
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 6255906
    psooya
    Poziom 38  
    Podobne pomiary tylko dla pompy wodnej robiłem w LabView firmy National Instrument gdzie mogłem pod PC podłączyć akcelerometr poprzez odpowiedni przetwornik i za pomocą FFT wykryć podstawową harmoniczną (oczywiście możliwości było znacznie więcej ale byłem początkującym w tym środowisku). To była sugestia do zastosowania innego czujnika niż mikrofonu by pomiar był sensowny o ile jest to osiągalne.
    Pozdrawiam
  • REKLAMA
  • #4 6256048
    Piroman1024
    Poziom 17  
    Witam
    Dzięki wielkie za odpowiedzi, już mam jakiś trop.
    Co do czujnika to wziąłem przykład z amatorskiego obrotomierz tego typu - posiadał zakres jeśli się nie mylę od 15 000 do 40 000 obr/min.
    Po przekroczeniu górnego zakresu obrotomierz wariował.
    Niestety nie mogłem sprawdzić na jakich podzespołach był zbudowany - ale mikrofon wyglądał na pojemnościowy/elektretowy.

    Ja liczyłbym o ile to możliwe na zakres od 20 000 do 50 000 obr/min - marzeniem by było od 15 000 obr/min.

    Miałbym jeszcze takie pytania:
    1. Rozumiem że dane z ADC zapisuję do tablicy - czy 32 próbki wystarczą?
    2. Nie wiem jaką częstotliwość próbkowania zastosować - teoretycznie 2 KHz powinny wystarczyć ale to tylko teoria, na początek chciałbym więc przyjąć na wszelki wypadek 4 kHz - czy to wystarczy?

    Naprawdę jestem zielony w tym temacie:(

    Pozdrawiam
  • #5 6256077
    Freddie Chopin
    Specjalista - Mikrokontrolery
    to nie jest takie proste jak ci sie wydaje. sygnal akustyczny z silnika jest niesamowicie zaklocony - ciezko jest w nim 'ot tak' wylowic ta wlasciwa czestotliwosc. kolega ktory robil taka prace magisterska musial dolozyc do algorytmu filtracje, potem jest liczenie obwiedni i dopiero z tego wyciagal czestotliwosc (jako okres powtarzania sie extremow powyzej pewnego progu), ale nie za pomoca FFT, bo to w ogole nie dawalo rezultatow.

    podeslalem mu linka, moze sie odezwie i cos podpowie.

    a prockiem byl dsPIC33, a nie AVR <:

    4\/3!!
  • REKLAMA
  • #6 6256481
    Konto nie istnieje
    Poziom 1  
  • #7 6256564
    arturt134
    Poziom 27  
    A ja zamiast FFT spróbowałbym sygnał nieco przefiltrować (tak jak ktoś pisał wcześniej, sygnał z silnika będzie bardzo zaśmiecony), a później może autokorelacja?
    Najlepiej zacznij od nagrania sygnału z mikrofonu do np. wav, załaduj go do PC-eta i spróbuj trochę obrobić. Możesz użyć LabView, MATLAB-a lub napisać kawałek kodu w c++ builderze czy innym Delphi.
  • #8 6257362
    Konto nie istnieje
    Poziom 1  
  • #9 6257557
    Piroman1024
    Poziom 17  
    Witam
    Dziękuje za kolejną garść cennych porad.
    Postąpiłem tak jak koledzy radzili napisałem program w delphi, jak tylko będę w domu to wrzucę wszystko na forum.

    Kiedyś natknołem się na taki program komputerowy obliczający prędkość obrotową na podstawie nagrania.
    Co prawda nie jest to praktyczne rozwiązanie z mojego punktu widzenia, ale na początek jak by mi się udało napisać taki to byłby to wielki sukces.
    Później mógłbym zaimplementować sprawdzony program na odpowiednim mikrokontrolerze.

    Ostatnio zaś ten obrotomierz widziałem - zbudowany przez amatorów - mierzy prędkość bardzo dokładnie, wbrew pozorom jest niewrażliwy na zakłócenia - może być nawet umieszczony w odległości 1-2m od silnika i dalej mierzy poprawnie.
    Pomiar był poprawny nawet w małych pomieszczeniach(odbicia itd.) - zakłócenia powstawały tylko wtedy kiedy dwa silniczki na raz pracowały.

    Moja teoria do tej pory była taka że pracuje na zasadzie analizy FFT, być może się mylę(zbudowany jest w oparciu o mikrokontroler - jaki niestety nie wiem).

    Myślę że sygnał akustyczny z silnika nie jest tak bardzo zakłócony - sądząc na słuch jest to wyraźny ciągły ton zmieniający się wyraźnie wraz z obrotami(brzmi jak dźwięk z jakiegoś instrumentu).
    Sygnał jest bardzo głośny - bez tłumika ogłuszający.

    Tutaj dwa liniki do modeli napędzanych takimi właśnie silniczkami, filmy są z lotów więc dochodzi zmiana częstotliwości wywołana efektem doplera - ale ja chcę mierzyć te silniczki na ziemi :
    http://www.youtube.com/watch?v=JGBHips72TA
    http://www.youtube.com/watch?v=aloc11FAIWM


    pozdrawiam

    Dodano po 5 [godziny] 9 [minuty]:

    W załączniku zamieszczam rzeczony program(wraz ze źródłem).

    Miałbym pytanie w jaki sposób jeżeli już odseparuje najwyższy pik(rozumiem że to częstotliwość podstawowa) obliczyć wartość tej częstotliwości?
REKLAMA