Skocz do zawartości

[Bascom] Mierzenie czasu pomiedzy impulsami


Turboasm

Pomocna odpowiedź

Jak zrealizować pomiar czasu pomiedzy impulsami ? Dodam że impulsy są zbierane z czujnika indukcyjnego zamocowanego nad kołem zembatym z około 100 zębami. Zależy mi na bardzo dynamicznym pomiarze gdyż zliczanie impulsów w czasie nie zdaje egzaminu gdyż silnik zmienia prędkość obrotową bardzo dynamicznie od 500 - 7000 obrotów na minutę. Nie musi być to dokładne nie co 1 obr/m a np 100 200. Czy w bascomie intrukcja PULSEIN dała by radę czy moze znajdzie sie jakies inne rozwiązanie ?

Link do komentarza
Share on other sites

Osobiście zrobiłbym to na przerwaniu zewnętrznym i liczniku. Licznik z sygnałem zegarowym z kwarcu (ew. przez preskaler) - przerwanie wyzwalane czujnikiem, a w nim odczytywana wartość licznika, i zerowanie go. Wartość licznika byłaby czasem jaki jest pomiędzy 2ma impulsami z czujnika (nie wiem jak to masz zamontowane, ale chyba pomiędzy 2ma zębami, czyli x100 i mamy czas obrotu całego koła). Byłoby to bardzo dokładne.

Link do komentarza
Share on other sites

Witam!

Jeśli temat jest nadal aktualny...

Użyłbym do tego dowolnego przerwania zewnętrznego i dowolnego timera do pomiaru czasu.

Zaleta jest taka ze można ustawić sobie na jakie zbocze lub zmianę sygnału ma układ reagować,po wykryciu takiego sygnału uruchamiamy timer który liczy sobie takty.Polecam w tym wypadku 16bitowy.

-Przykładowo konfigurujemy urządzenie INT0 to generowania przerwania po stwierdzeniu zmiany sygnału na końcówce.

Timer1 konfigurujemy normalnie z jakimś prescalerem.

Przykładowo liczę dla max obrotów 10000rpm

Gdzie jedno przejście kola trwa 6ms (10000/60=166 1/166=6ms)

To impuls z ząbka będzie trwać 60us (6ms/100=60us)

Dlatego potrzeba inkrementowac timer1 szybciej niz 60us

Wiec dla zegaru 8mhz prescaler wyniesie np 256 i timer będzie się inkrementowac co 32us,i przepełni się dopiero po ok 2 sekundach czyli idealnie znajdzie się w naszym zastosowaniu 🙂 (0,000032*65536=2,097152s)

-W podprogramie togglujemy sobie flagę ze przerwanie nastąpiło a po tym warunek jeśli flaga=1 to włącz timer a jeśli 0 to wyłącz timer i zacznij przeliczać na obr/s

Po prostu trzeba się pobawić 🙂

Pozdrawiam

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Nie wiem czy da się to zrobić w BASCOMIE,
ale np. ATmega88 umożliwia zrobienie czegoś takiego tylko na jednym timerze.

Trzeba skonfigurować ten timer, aby był wyzwalany wejściem zewnętrznym

bezpośrednio sterującym tym timerem (nie pamiętam nazwy wejścia).

Samo wyzwolenie działa podobnie jak wejście INT na typ zbocza. Ale cała procedura

jest wykonywana na jednym układzie peryferyjnym.

Za pierwszym razem startujesz licznik, a za drugim spisujesz wartość zczytana

do zmiennej, na której już dokonujesz odpowiednich przeliczeń w programie.

Kiedyś do tego trzeba było użyć 2 timerów i przerwania INT.

Tak, że jest to spore ułatwienie.

Więcej informacji w nocie katalogowej.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.