Skocz do zawartości
Turboasm

[Bascom] Mierzenie czasu pomiedzy impulsami

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 ?

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
Share on other sites

A mógł byś dać jakis przykład ?

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

No właśnie bascom nie daje za bardzo takiej opcji trzeba mieszać w rejestrach :/

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...