Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Rozwiązano] Mierzenie częstotliwości fali prostokątnej.

kacpo1 05 Mar 2018 04:43 672 18
  • #1 05 Mar 2018 04:43
    kacpo1
    Poziom 28  

    Witam.

    Przymierzam się do zrobienia tego projektu miernika pojemności i indukcyjności. Jedyną zmianą będzie zastąpienie PIC'a jakimś AVR'em, najprawdopodobniej ATmega8 lub 328.

    No i wszystko fajnie, na wyjściu LM311 mamy fale prostokątną o częstotliwości układu LC. Tylko jak ją zmierzyć za pomocą ATmegi? (Korzystam z Arduino IDE)

    Z tego co wiem, jeśli zliczałbym każdy "skok" + funkcja millis() to wszystko byłoby pięknie, dopóki częstotliwość nie byłaby większa niż oscylator ATmegi, czyli 16MHz - Chyba, że się mylę i jakoś inaczej to działa.

    Z tego co widzę na schemacie PIC posiada oscylator 4MHz, cewkę do pomiarów kondensatorów - 82uH i kondensator do cewek - 1000pF.
    A to co jest napisane niżej - "small inductances starting from 10nH" przy kondensatorze 1000pF wychodzi 50MHz, z cewką 82uH i kondensatorem "capacitance from 0.1pF" jak podaje autor - 55MHz.

    Albo ja czegoś nie rozumiem (jak najprawdopodobniej jest), albo wartości są przekłamane.

    0 18
  • #2 05 Mar 2018 06:30
    ghost2000
    Poziom 18  

    Sygnał mierzony daj na wejście Tx (T0, T1). Innym timerem niż ten, na który podajesz mierzony sygnał odliczaj czas 1s lub 100ms. Odczytując timer Tx po porównaniu timera odliczającego czas 1s (100ms) i obliczając różnicę otrzymasz mierzoną częstotliwość.

    Jeśli mierzone częstotliwości będą małe (poniżej 1kHz, max 20..30kHz, jak sie sprężyc to może 50kHz) można mierzyć okres sygnału używając przechwytywania (wejście IPCx). W ten sposób można mierzyć czas impulsu (wysokiego lub niskiego). Można jednak wpakować sie "w maliny". Jeśli częstotliwość sygnału może być wysoka (ponad 20..30kHz) to program główny będzie "wisiał". Trzeba wtedy dać timeout aby się przed tym zabezpieczyć.

    0
  • #4 05 Mar 2018 06:39
    ghost2000
    Poziom 18  

    kacpo1 napisał:
    Chyba czegoś nie rozumiem... Mam sygnał prostokątny załóżmy 40 MHz, wprowadzam go na Tx

    AVR może zmierzyć sygnał o częstotliwości Fclk/2, więc max to 8 lub 10MHz. Jeśli masz 40MHz to musisz dać preskaler.

    kacpo1 napisał:

    i co mierze? Czas trwania impulsów? Ilość impulsów?

    Napisałem już:
    Cytat:
    W ten sposób można mierzyć czas impulsu (wysokiego lub niskiego). Można jednak wpakować sie "w maliny". Jeśli częstotliwość sygnału może być wysoka (ponad 20..30kHz) to program główny będzie "wisiał".

    Czego można tu nie rozumieć?

    0
  • #6 05 Mar 2018 07:07
    ghost2000
    Poziom 18  

    kacpo1 napisał:
    Czyli dzielnik częstotliwości 1/4 wystarczy ?

    Jaką częstotliwością bedzie taktowany AVR?

    0
  • #8 05 Mar 2018 07:20
    ghost2000
    Poziom 18  

    kacpo1 napisał:
    Będzie to ATmega328 z 16MHz

    Mega328 może pracować do 20MHz ale jak komuś nie zależy na szybkości można taktować i 32kHz.

    kacpo1 napisał:

    I wtedy układ 74HC74

    Napisałem:
    Cytat:

    AVR może zmierzyć sygnał o częstotliwości Fclk/2, więc max to 8 lub 10MHz

    Ile to jest 16MHz / 2?
    Ile 40MHz / 2?

    0
  • #9 05 Mar 2018 07:25
    kacpo1
    Poziom 28  

    ghost2000 napisał:
    Ile 40MHz / 2?


    Jeśli użyje układu 74HC74 który ma 2 przerzutniki typu D, na wyjściu otrzymam 10MHz, zakładając, że nie będę mierzył częstotliwości większych niż 40MHz, wszystko powinno działać.

    0
  • #10 05 Mar 2018 08:06
    ghost2000
    Poziom 18  

    kacpo1 napisał:
    ghost2000 napisał:
    Ile 40MHz / 2?


    Jeśli użyje układu 74HC74 który ma 2 przerzutniki typu D, na wyjściu otrzymam 10MHz, zakładając, że nie będę mierzył częstotliwości większych niż 40MHz, wszystko powinno działać.

    Fclk AVR dzielone na dwa ile daje?

    0
  • #11 05 Mar 2018 18:57
    emarcus
    Poziom 35  

    ghost2000 napisał:
    kacpo1 napisał:
    ghost2000 napisał:
    Ile 40MHz / 2?


    Jeśli użyje układu 74HC74 który ma 2 przerzutniki typu D, na wyjściu otrzymam 10MHz, zakładając, że nie będę mierzył częstotliwości większych niż 40MHz, wszystko powinno działać.

    Fclk AVR dzielone na dwa ile daje?


    Ma dwa przerzutniki D więc dzieli przez 4 (!)
    Mierzenie częstotliwości fali prostokątnej.

    e marcus

    0
  • #12 05 Mar 2018 19:06
    ghost2000
    Poziom 18  

    Fakt, 40/4 a nie 40/2 ale obliczył dobrze, wyjdzie 10Mhz.

    Osobiście w roli dzielników używam liczników, obudowa ma dwa wyprowadzenia więcej ale może mieć nawet dw liczniki 4 bit. Wyjątkiem są 74ABT74 (200MHz). Liczników 74ABT93 czy podobnych nie spotkałem.

    0
  • #14 06 Mar 2018 15:56
    ghost2000
    Poziom 18  

    kacpo1 napisał:
    Czyli w sygnale wygenerowanym przez obwód LC i przekształconym przez komparator, impuls będzie zawsze równy połowie okresu, niezależnie od częstotliwości, tak?

    Niekoniecznie, właściwie, to w większości wypadków nie.

    0
  • #15 06 Mar 2018 16:43
    kacpo1
    Poziom 28  

    Czyli tak - uC mierzy długość impulsu wysokiego i niskiego, dodaje, dzieli 100ms (lub 1s) przez wynik, potem wyniki dzieli na 2 (liczę ilość okresów w 100ms (lub 1s) ) po czym mnoży wynik przez liczbę którą podzieliłem częstotliwość przerzutnikami.

    0
  • #16 06 Mar 2018 16:48
    ghost2000
    Poziom 18  

    kacpo1 napisał:
    Czyli tak - uC mierzy długość impulsu wysokiego i niskiego, dodaje, dzieli 100ms (lub 1s) przez wynik, potem wyniki dzieli na 2 (liczę ilość okresów w 100ms (lub 1s) ) po czym mnoży wynik przez liczbę którą podzieliłem częstotliwość przerzutnikami.

    1 - Po co tak kombinować? Można zmierzyć okres.
    2- napisałem:
    Cytat:

    Jeśli mierzone częstotliwości będą małe (poniżej 1kHz, max 20kHz) można mierzyć okres sygnału używając przechwytywania (wejście IPCx). W ten sposób można mierzyć czas impulsu (wysokiego lub niskiego). Można jednak wpakować sie "w maliny". Jeśli częstotliwość sygnału może być wysoka (ponad 20..30kHz) to program główny będzie "wisiał". Trzeba wtedy dać timeout aby się przed tym zabezpieczyć.


    Jak to się ma do tego:
    kacpo1 napisał:
    Mam sygnał prostokątny załóżmy 40 MHz

    0
  • #17 06 Mar 2018 16:56
    kacpo1
    Poziom 28  

    Tylko tak jak na stronie Arduino pisze, funkcja pulseIn() "Works on pulses from 10 microseconds" co daje 100Hz bez dzielnika a z dzielnikiem tylko 400Hz. Więc jak to rozwiązać? Przy innych rozwiązaniach będzie dochodziło do 50KHz, a nie do końca rozumiem idee timeout'u

    0
  • #18 06 Mar 2018 17:36
    ghost2000
    Poziom 18  

    kacpo1 napisał:
    Tylko tak jak na stronie Arduino pisze

    Jest napisane.

    kacpo1 napisał:

    , funkcja pulseIn() "Works on pulses from 10 microseconds" co daje 100Hz bez dzielnika a z dzielnikiem tylko 400Hz. Więc jak to rozwiązać?

    Już napisałem, sygnał mierzony dajesz na wejście licznika. Tak można mierzyć częstotliwości do częstotliwość_taktująca_mikrokontroler / 2. W nocie katalogowej AVR jest to opisane (zakładka timer, taktowanie zewnętrzym sygnałem zegarowym)

    Dodano po 35 [minuty]:

    kacpo1 napisał:
    ghost2000 napisał:
    Już napisałem, sygnał mierzony dajesz na wejście licznika.


    Wiem, że to trochę frustrujące tłumaczenie tego samego cały czas, ale czy chodzi o to, że na uC jest funkcja, która sprawdza czy pin jest w stanie wysokim, i jeśli tak, to odlicza czas jaki trwał od pierwszego impulsu do drugiego, tak?

    Timer moze pracowac w wielu trybach. Jeden z nich po zliczanie impulsów podawanych na wejście licznika. Wystarczy drugim timerem odmierzać czas bramkowania (np 100ms). Różnica pomiędzy kolejnymi odczytami pozwala obliczyć mierzoną częstotliwość.

    Inny tryb to przechwytywanie. Licznik liczy impulsy zegara procesora (mogą przejść przez preskaler). Wybrane zbocze zatrzaskuje wynik. W ten sposób można mierzyc okres a jesli bedzie zmieniało się aktywne zbocza, to i czas.
    Takie funkcje posiadaja praktycznie wszystkie mikrokontrolery przy czym jedne daja większe inne mniejsze możliwości. Np w STM32 bez problemu mierzy się impulsy o poziomnie H czy l, nie trzeba przełączac aktywnego zbocza. W większości 8051 jest tylko jedno aktywne zbocze (jak pamiętam opadające).

    0
  Szukaj w 5mln produktów