• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Licznik wolnych obrotow
#1
Witam
Zrobilem mechanicznie urzadzenie, ktore ma od 0,2 do 2,25 obrotu na minute, na kole jest 10 magnesow, a impulsy odczytuje czujnikiem Halla. Impulsy przy tych obrotach trwaja dlugo, potrzebuje pomocy aby np jest sygnal 1 i czekamy na sygnal 0 i zliczmy np te 1, aby moc wyliczyc obroty na minute.
 
Odpowiedź
#2
Jest gdzieś na forum program do zliczania bo wrzucałem a nie chce mi się szukać, szukaj pod hasłem ICP
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#3
(09-10-2024, 21:04)fusilis napisał(a): Witam
Zrobilem mechanicznie urzadzenie, ktore ma od 0,2 do 2,25 obrotu na minute, na kole jest 10 magnesow, a impulsy odczytuje czujnikiem Halla. Impulsy przy tych obrotach trwaja dlugo, potrzebuje pomocy aby np jest sygnal 1 i czekamy na sygnal 0 i zliczmy np te 1, aby moc wyliczyc obroty na minute.

Są dwie metody cyfrowego mierzenia częśtotliwości (bo to w sumie tego typu problem):
1.  W ustalonym czasie liczy się impulsy.
2. Mierzy się czas pomiędzy dwoma kolejnymi impulsami (czyli w sumie mierzy się okres sygnału).

Metoda 1 jest dokładniejsza dla dużych częstotliwości i prostsza w realizacji - przy odpowiednim dobraniu czasu otrzymuje się od razu wynik w Hz/kHz itp.

Metoda 2 jest dokładniejsza dla małych częstotliwości, jednak wynik trzeba przeliczyć (odwrotność) - co może być problemem, gdy przyrząd jest zbudowany na logice dyskretnej (bramki, przerzutniki itp) ale gdy i tak mamy komputer to bez znaczenia.

W obu przypadkach dokładność można zwiększyć zwiększając czas pomiaru, porównanie dotyczy pomiaru w tym samym czasie.

Jeśli masz bardzo małą częstotliwość to zostaje tylko metoda 2. Przy podanych wartościach, czas pomiaru i tak wyjdzie duży - najwolniej kręci się raz na 5 minut, te 10 magnesów oczywiście poprawia sytuacje, bo jest jakby mnożnikiem częstotliwości i czas spada do 30 sekund, ale to i tak dużo.

Czujniki Halla są elementem "analogowym" i sygnał z nich będzie powoli rósł w momencie zbliżania magnesu i wszystko zależy od tej części analogowej - komparatora, stabilności elementów i napięc. Może warto będzie zastosować bardziej cyfrowy czujnik - np. optyczny (np. tarcza z dziurkami i transoptor szczelinowy). Można by wtedy znacznie zwiększyć mnożnik częstotliwości - realne byłoby uzyskanie np. 100 (pomiar co 3 sekundy).

Jak już wspomniał kolega w poprzednim poście najlepiej byłoby użyć mechanizmu ICP (input capture), który polega na zapamiętaniu w rejestrze stanu timera w momencie wystąpienia impulsu - ale potrzebny byłby bardzo wolno pracujący timer, może prościej byłoby monitorować wejście programowo i użyć millis(), tylko trzeba zapewnić, że program nigdzie nie zatrzyma się na dłużej.

Jeszcze widzę możliwość wykorzystania tej "analogowatości" - może wręcz analogowo (ADC) mierzyć napięcie z wyjścia czujnika Halla i analizować tempo narastania/opadania sygnału? Taki szybkościomierz.
 
Odpowiedź
#4
Nie trzeba wolnego timera, bo timer można zbudować  licznik overflow  i tak tam napisałem może liczyć już od 1Hz ale da się niżej zejść i jest dokładne, bez blokowania czyli może uc robić sobie coś innego. I już w 30s mamy wynik i odświeżanie przy najwolniejszych obrotach.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości