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

[AtMega8515] Pomiar czestotliwości 10 -150 Hz

rafiks 09 Lis 2009 21:39 2756 8
REKLAMA
  • #1 7238625
    rafiks
    Poziom 18  
    Witam mam problem którego nie mogę rozgryść.

    W jaki sposób zmierzyć czestotliwość która zostaje podana na nóżkę procesora np INT lub inna. Pomiar do max 150 Hz wystarczy

    Najwiekszy problem jest taki że czestotliwość się zmienia jest 20Hz po 0,05 sekundy już jest 40Hz kolejne 0,5 sekundy i jest 100 Hz czasami po 0,01 sekundy jest 60 Hz itd.

    Napisałem program który zlicza impulsy ale dokonuje pomiaru co 1 sekundę a ja potrzebuje dokonywać pomiar min z prędkością co 0,01 sekundy i dokładnością do 1 Hz.

    Timer 16 bitowy mam już zajęty i zostaje tylko 8 bitowy. Ewentualnie jeżeli się nie da na 8bitowym to wykorzystam jeszcze jeden procesor tylko do pomiaru f. Ewentualnie może jakiś układ zostosować do pomiaru f ?
  • REKLAMA
  • #2 7238964
    mirekk36
    Poziom 42  
    rafiks napisał:
    Napisałem program który zlicza impulsy ale dokonuje pomiaru co 1 sekundę a ja potrzebuje dokonywać pomiar min z prędkością co 0,01 sekundy i dokładnością do 1 Hz.


    to teraz napisz program, który będzie dokonywał pomiaru co 0,01 sekundy i problem rozwiązany (nawet nie musisz nic nowego pisać - skróć czas 1s do 0,01s) ;)
  • REKLAMA
  • #3 7238987
    korrus666
    Poziom 40  
    Nie da się zrobić pomiaru co 0,01 s dla takiego przedziału częstotliwości bo to bez sensu. Dla 20 Hz masz przecież impuls co 1/20 s czyli 0,05 s a dla 10Hz masz co 0,1 s. Musisz przyjąć jakieś sensowne odświeżanie. Co do pomiaru to licznik 8 bitowy wystarczy po prostu po każdym przepełnieniu licznika zwiększaj jakąś zmienna o 1 a po odczytaniu impulsu licz ile razy się licznik przepełnił i ile zliczył impulsów i wykasuj zmienną przepełnień. Napisz jeszcze co budujesz może będzie coś można doradzić. Zawsze jeszcze możesz zbudować sobie przetwornik f/U i mierzyć napięcie poprzez ADC.
  • #4 7239059
    adamz74
    Poziom 32  
    W takim przypadku pozostaje pomiar okresu i na jego podstawie obliczanie częstotliwości chwilowej.
  • REKLAMA
  • #5 7239087
    janbernat
    Poziom 38  
    To mierz długość impulsu i przelicz.
    INT0- start timer-zbocze opadające
    INT1- stop timer- zbocze narastające
    No i odpowiedni prescaler.
  • #6 7239303
    mirekk36
    Poziom 42  
    korrus666 napisał:
    Nie da się zrobić pomiaru co 0,01 s dla takiego przedziału częstotliwości bo to bez sensu..


    eeej tam zaraz się nie da ;) ... wszystko się da - tylko oczywiście tak jak piszesz trzeba dokładnie przemyśleć założenia. A takim założeniem może być autokalibracja pomiaru (odświeżania) w zależności właśnie od mierzonej częstotliwości

    adamz74 napisał:
    W takim przypadku pozostaje pomiar okresu i na jego podstawie obliczanie częstotliwości chwilowej.


    zamiast robić więc na okrętkę tak jak to piszesz, zastosować można idąc tokiem myślenia np kolegi janbernat (jeśli chodzi o sam sposób pomiaru) - obliczanie częstotliwości w różnych odcinkach czasu. Zmieniając te odcinki pomiaru wiesz przecież w jakich zakresach, jaka może być mierzona częstotliwość.

    czyli załóżmy że ustawiasz sobie czas badania częstotliwości na początek 0,01s

    jeśli wystąpiła liczba impulsów <=1 to

    zmieniasz czas na 0,1s (tzn automatycznie program zmienia)

    jeśli wystąpiła liczba impulsów <=1 to

    zmieniasz czas na 1s

    ale także można kalibrować automatycznie w drugą stronę:

    jeśli czas masz ustawiony na 1s a impulsów wychodzi więcej niż 10 czy 11 to

    zmieniasz czas na 0,1s ( i już odświeżanie jest szybsze )

    jeśli natomiast przy czasie pomiaru 0,1s ilość impulsów jest większa niż 101 to

    zmieniasz czas na 0,01s (i już masz odświeżanie dużo szybsze )

    Reasumując - odświeżanie będzie ci się samo dopasowywało do mierzonej częstotliwości. (czyli będzie raz krótsze dla wyższych częstotliwości a raz dłuższe dla bardzo niskich - będzie sobie jakby "pływało") To tak na szybko opisane więc trzeba by dokładnie sobie zbudować algorytm ale mam nadzieję że widać o co chodzi ?
  • REKLAMA
  • #7 7239408
    adamz74
    Poziom 32  
    w zasadzie Kolega rafiks się nie określił, czy chce mieć średnią czy chwilową częstotliwość... a z opisu, mam wrażenie, że chwilową.

    Jeśli średnią, to nie widzę problemu i nie wymyślimy nic nowego: ilość impulsów w określonym czasie.
    Przy chwilowej, jak zaczniemy sobie dobierać czas pomiaru, to w międzyczasie nam się ze 100 razy zmieni częstotliwość i możemy sobie dobierać od nowa czas pomiaru a jak coś nam się uda zmierzyć, to i tak będzie to średnia. Przy zakładanej prędkości pomiarów (co 0,01 sek, co daje 100 razy na sekundę -> 100Hz) i w porównaniu z częstotliwości wejściową (10~150Hz), możemy tylko mierzyć okres.
  • #8 7242317
    janbernat
    Poziom 38  
    No ale problem jest tak stary jak miernictwo.
    Częstotliwość 10Hz trzeba mierzyć bramkując ją przez 1s aby- w bardzo grubym przybliżeniu - uzyskać dokładność 10%
    A przez 100s dla dokładności 1%.
    No bo częstotliwość to jest okresowe powtarzanie sygnału.
    A gdy sygnał ma np. czas 0.1s a następny przychodzi za10s?
    To w pierwszym pomiarze mamy jest/nie ma- 0.1s czyli 10Hz.
    Po przeliczeniu wg. mojej propozycji.
    A gdy przyjdzie następny po 10s to mamy 0.01Hz.
    Dlatego przyzwoite mierniki częstotliwości mierzą częstotliwość do pewnej dolnej granicy cierpliwości obserwatora.
    A ponizej podają czas stanu niskiego/wysokiego i podają okres.
  • #9 7242817
    rafiks
    Poziom 18  
    Dzieki wszystkim za pomysły.

    Zapomniałem na wstępie dodać że buduję tempomat do auta dziś wróciłem z holandii i nawet się sprawdził prądkość wacha się w granicy max 4 km / h - pomiar z licznika co 1 sekundę.

    Prędkość 10 km/h odpowiada czestotliwości w przyblizeniu 13 Hz ale załóżmy że 10km/h to 10Hz a 100km/h to 100Hz.

    Odczyt co 0,1 sekundy w zupełności by starczył, 1 s to a dużo bo na niskich biegach w 1 sekundę auto spokojnie przyspieszy o nawet 5 czy wiecej Km/h stąd ta niedokładność.


    Chyba najlepszym rozwiązaniem jest pomiar długości impulsu.

    Lub

    zastosowanie jak ktoś wspomniał zamiany F na napięcie i mierzenie tego za pomocą przetwornika wbudowanego w AVR.

    To drugie myśle że by było lepsze może mnie ktoś nakierować mniej wiecej jak takie coś wykonać?
REKLAMA