Metoda pomiaru częstotliwości.

Tutaj mozesz poruszać tematy ogólne powiązane z elektroniką, np. dyskusje na temat podzespołów, układów, zasad ich działania. Czyli można pisać o wszystkim czego nie da się przyporządkować do innych działów.
adi19887
-
Posty: 52
Rejestracja: 22 mar 2010, 23:48
Lokalizacja: Poznań

Metoda pomiaru częstotliwości.

Post autor: adi19887 » 02 paź 2013, 19:29

Witam serdecznie,

Szukam efektywnego rozwiązania dot. pomiaru częstotliwości fali sinusoidalnej (może być ze składową stałą lub bez wtedy jest rozłożona symetrycznie wzdłuż osi 0). Do tej pory myślałem o:
- przetworniku scalonym f/u
- wprowadzić sygnał na przerzutnik Schmitta i nastepnie zliczać impulsy,
- mialem tez na myśli programowe rozwiązanie jednak nie za bardzo wiem jak się do tego zabrać.

Potrzebuje liczyć częstotliwość sygnału sinusoidalnego, czy to programowo czy tez za pośrednictwem układów analogowych i dopiero potem na uC (atmega8).

Szczerze to nie mogę sobie poradzić z przerzutnikiem - żaden symulator mi prawidłowo moich konfiguracji nie odbiera (w ogóle nie działa wg zamierzenia i różnych stron w internecie). Dlatego szukam pomocy tutaj, może mnie ktoś naprowadzi?

Awatar użytkownika
joon
Użytkownik
Posty: 2076
Rejestracja: 30 cze 2007, 22:56
Lokalizacja: Kraków, Przemyśl, Warszawa
Kontakt:

Post autor: joon » 02 paź 2013, 22:19

Na uC dwie metody:
-pomiar okresu- przy małych częstotliwościach- wyzwalanie dajesz zboczem i po sprawie
-pomiar ilości "zdarzeń" w jednostce czasu -sprzętowy licznik również wyzwalanie zboczem

Co do części sprzętowej: to bywa czasem znacznie trudniejsze niż program :(

adi19887
-
Posty: 52
Rejestracja: 22 mar 2010, 23:48
Lokalizacja: Poznań

Post autor: adi19887 » 03 paź 2013, 7:51

Atmega8A sobie z tym poradzi ? I czy te metody stosuje się tez do pomiaru sygnałów sinusoidalnych ?

elbober
Użytkownik
Posty: 194
Rejestracja: 02 lut 2013, 14:39
Lokalizacja: Poznań

Post autor: elbober » 03 paź 2013, 9:20

Jakie to mają być częstotliwości - kHz, MHz, czy setki MHz. I do czego dalej ma służyć - wyświetlenie wartości, dalsza obróbka do sterowania czymś ? Jaka dokładność ?
Jest kilka możliwości, nie koniecznie od razu Atmega.

adi19887
-
Posty: 52
Rejestracja: 22 mar 2010, 23:48
Lokalizacja: Poznań

Post autor: adi19887 » 03 paź 2013, 16:22

Dobrze sygnał w zakresie od 20 Hz do max 5kHz. Fala sinusoidalna ze zmienną amplitudą (niewielki stopień). Jest to tylko jeden z parametrów jakie mierzę dla tej fali (pomiar też amplitudy). Atmega dlatego, że używam tego uC w projekcie. Jeżeli ktoś chciałby wiedzieć to sygnał przychodzi z ostatniego stopnia wzmacniaczy (z wtórnika napięciowego). Dokładność musi być dobra tak ±50 Hz.

elbober
Użytkownik
Posty: 194
Rejestracja: 02 lut 2013, 14:39
Lokalizacja: Poznań

Post autor: elbober » 03 paź 2013, 16:51

Teraz to "rozjaśniona" sprawa.
Jeśli ma być od 20Hz, to dokładność 5-1Hz albo 1cyfra na ostatniej pozycji (dla odczytu w Hz lub dziesiątkach Hz), bo wg Twojego założenia, poniżej 50 Hz odczyt mógłby być "0" lub 100Hz.
W dziedzinie uC niewiele pomogę.

adi19887
-
Posty: 52
Rejestracja: 22 mar 2010, 23:48
Lokalizacja: Poznań

Post autor: adi19887 » 03 paź 2013, 17:04

Rozumiem. Te 20 Hz to założenie teoretyczne - mój układ, który poddaje testom jakiś układ badany będzie pracował najprawdopodobniej w okolicach 100 Hz najniżej. Rozdzielczość sobie ustawię mnie chodzi tylko o to czy uC może zrobić to co napisał kolega joon z sygnałem sinusoidalnym.

Awatar użytkownika
joon
Użytkownik
Posty: 2076
Rejestracja: 30 cze 2007, 22:56
Lokalizacja: Kraków, Przemyśl, Warszawa
Kontakt:

Post autor: joon » 03 paź 2013, 21:02

Bez większego problemu uzyskasz taką dokładność, nawet wyjątkowo trzeba się postarać żeby jej nie uzyskać ;) Zastosuj tylko zewnętrzny kwarc a nie wbudowany oscylator RC który potrafi z czasem rozjeżdżać się ;)

adi19887
-
Posty: 52
Rejestracja: 22 mar 2010, 23:48
Lokalizacja: Poznań

Post autor: adi19887 » 07 paź 2013, 13:32

Do kolegi Joon:
Zastanawiam się nad rozwiązaniem programowym jednak nie za bardzo wiem gdzie szukać tych funkcji, o których pisałeś w uC (atmega8) mógłbyś mi podpowiedzieć czego dokładnie szukać tzn jakich funkcji?

Jony130
Moderator
Posty: 3170
Rejestracja: 11 sie 2005, 16:33
Lokalizacja: wrocław

Post autor: Jony130 » 07 paź 2013, 14:14

Zobacz sobie to mikroprocesorowej oślej łączki, ćwiczenie 30 i 31. Gdzie Piotr bardzo dobrze opisuje te zagadnienie.

adi19887
-
Posty: 52
Rejestracja: 22 mar 2010, 23:48
Lokalizacja: Poznań

Post autor: adi19887 » 08 paź 2013, 16:43

Zastanawiam się nad wybraniem opcji z komparatorem analogowym atmegi i timerem ktory zlicza jego przeładowania (przechwytywanie). Nie znalazłem jednak info nt. tego jak to dokładnie działa. Mianowicie:
- czy zliczanie działa w tle (niejako przerwania działają ale zliczanie w tle ?)?
- czym różni się tryb przechwytywania od komparatora a normlane przerwania od komparatora ?
Zwłaszcza drugie pytanie - nie znalazłem nic wartościowego. Natomiast oślą łączkę przeczytałem i znalazłem kilka informacji.

adi19887
-
Posty: 52
Rejestracja: 22 mar 2010, 23:48
Lokalizacja: Poznań

Post autor: adi19887 » 08 paź 2013, 18:19

Zastanawiam się nad wybraniem opcji z komparatorem analogowym atmegi i timerem ktory zlicza jego przeładowania (przechwytywanie). Nie znalazłem jednak info nt. tego jak to dokładnie działa. Mianowicie:
- czy zliczanie działa w tle (niejako przerwania działają ale zliczanie w tle ?)?
- czym różni się tryb przechwytywania od komparatora a normlane przerwania od komparatora ?
Zwłaszcza drugie pytanie - nie znalazłem nic wartościowego. Natomiast oślą łączkę przeczytałem i znalazłem kilka informacji.

Awatar użytkownika
joon
Użytkownik
Posty: 2076
Rejestracja: 30 cze 2007, 22:56
Lokalizacja: Kraków, Przemyśl, Warszawa
Kontakt:

Post autor: joon » 10 paź 2013, 19:29

A nie lepiej przerwanie wyzwalane zboczem? Wtedy sygnał po podaniu na wejście będzie wywoływał przerwanie w trakcie zmiany stanu z H na L lub odwrotnie.

adi19887
-
Posty: 52
Rejestracja: 22 mar 2010, 23:48
Lokalizacja: Poznań

Post autor: adi19887 » 10 paź 2013, 20:34

Pomysł wydaje się fajny jednak, jak napisałem wczesniej, nie dokopałem się do informacji w datasheecie atmegi na temat takiego rozwiazania. Możesz mi wskazać dokładnie z których hardwerowych rozwiązań moge skorzystac ?

Awatar użytkownika
joon
Użytkownik
Posty: 2076
Rejestracja: 30 cze 2007, 22:56
Lokalizacja: Kraków, Przemyśl, Warszawa
Kontakt:

Post autor: joon » 10 paź 2013, 21:42

Konfiguracja timera
DDRB &= ~(1<<PB1);
PORTB |= (1<<PB1); //PB1 wejście podciagnięte do plusa
TCCR1B |= (1<< CS12) |(1<< CS11); //zrodło zewnętrzne - zbocze opadające
TIMSK |= (1<<TOIE1); //przepełnienie

przerwanie:
ISR(TIMER1_OVF_vect)
{
licznik++;
}
a w programie po odliczeniu za pomocą drugiego timera jakiegoś odcinka czasu wystawiasz flagę. W pętli głównej jeśli flaga jest postawiona, zwalniasz ja a następnie:

reszta = TCNT1; //pobieranie wartości z licznika
TCNT1=0; //zerowanie licznika
czestotliwosc = licznik * 65536; //liczba przepełnień Timera1* pojemność Timera1
czestotliwosc = czestotliwosc + reszta; //obliczam częstotliwosc dla przerwania podstawy czasu co sekundę.

Fragmenty programu napisanego na M32 w ramach nauki programowania parę miesięcy temu. Można by było wprowadzić jeszcze parę poprawek ale to już twoje zadanie ;)

ODPOWIEDZ