Skocz do zawartości

Jak dobrze zliczyć ilość stanów niskich?


Pomocna odpowiedź

A może opaska gumowa którą nałożę na wał i nakleję na nią odblask? Etui od telefonu mam gumowe i nie odbija IR nawet z 1 milimetera, więc chyba by się sprawdziło idealnie. 

21 godzin temu, atMegaTona napisał:

zliczanie do zmiennej w przerwaniu wystarczy w zupełności.

Dlaczego nie wykorzystać sprzętu jesli jest? Arduinowe biblioteki uwielbiają wyłączać przerwania i programowy pomiar częstotliwości może być obarczony błędem. Gdy zliczanie jest sprzętowe szansa na błąd spowodowana blokowaniem przerwań jest ograniczona lub nawet wyeliminowana.

@RFM Jak w takim razie najlepiej policzyć impulsy? Albo jak pozbyć się bezwładności? Teraz mi pokazuje 1176 lub 1200 RPM i nic pomiędzy. 24 rpm błędy przy takim pomiarze to chyba sporo. To jest ok. 24 obrotów na sekundę czyli przerwanie wychodzi co jakieś 41 milisekund. Z jaką dokładnością arduino potrafi zmierzyć czas między dwoma kolejnymi wywołaniami przerwania? 

A skąd masz pewność, że ten wentylator kręci się z perfekcyjnie niezmienną prędkością? Policz sobie jak długo trwa takie przerwanie (plik lss) i zastanów jak to się ma do długości impulsów zliczanych i częstotliwości ich pojawiania się.

8 godzin temu, RFM napisał:

Dlaczego nie wykorzystać sprzętu jesli jest?

@RFM masz rację, ale w tym konkretnym przypadku równie dobrze sprawdzi się zmienna jak rejestr sprzętowy choć faktycznie w zgodzie ze sztuką powinno się wykorzystać rejestr do tego celu.

@atMegaTona No to może mierzyć czas 1 obrotu, następnie liczyć do ilości obrotów na minutę, wyświetlić tą wartość na sekundę i znów zmierzyć jeden obrót? Wtedy mierzylibyśmy np. tylko 1 z obrotów występujących w sekundzie. 

14 godzin temu, Dzonzi napisał:

Jak w takim razie najlepiej policzyć impulsy?

Timerem w trybie licznika.

Aktualizacja:

13 godzin temu, Dzonzi napisał:

No to może mierzyć czas 1 obrotu

Metoda dobra gdy impulsy sa długie a w tym przypadku są. Szczęśliwie aby obliczyć RPM trzeba mierzyć okres wiec bez problemu zrobisz to sprzętowo timerem.

Można, tylko jaki sens tego jest? Jeśli faktycznie potrzebujesz super perfekcyjnego odczytu wartości chwilowych to nie powinny być one podawane w RPM ale jeśli Ci wystarczy RPM to tak jak już pisałem lepiej uśrednić wyniki: pobierać dane co 100ms i uśredniać  każdy z poprzednią średnią a co 1s wyświetlać wtedy będzie stabilniej. Zauważ też jedną rzecz -  płyta główna nie zasila wentylatorów w sposób idealnie stały dlatego fizycznie kręcą się raz szybciej raz wolniej.

@atMegaTona Oczywiście, masz rację, ale docelowo to urządzenia ma badać silniki elektryczne, którą potrafią utrzymać równe obroty. Będzie głupio wyglądać, jeżeli będę mierzył prędkość obrotową silnika synchronicznego i pomiary mi będą wychodzić np. 1480-1500-1520

Więc chcesz sobie skalibrować urządzenie pomiarowe dedykowane dla silników o stałych obrotach na podstawie silnika o niepewnej stałości obrotów? Wg. mnie, jeśli silnik utrzyma stałą prędkość to metoda jaką Ci opisałem będzie prezentować stałe wyniki❗

(edytowany)
29 minut temu, Dzonzi napisał:

Będzie głupio wyglądać, jeżeli będę mierzył prędkość obrotową silnika synchronicznego i pomiary mi będą wychodzić np. 1480-1500-1520

Będzie wyglądać jak każde inne urządzenie pomiarowe o rozdzielczości wyższej niż dokładność czyli w praktyce każde xD

1 godzinę temu, Dzonzi napisał:

24 rpm błędy przy takim pomiarze to chyba sporo.

2% to jest spoko wynik dla "zabawkowego" urządzenia.

 

Ja bym to zrobił tak że mierzyłbym w przerwaniu czas pojedynczego obrotu (lub nawet części), uśredniał kolejne kilka(dziesiąt/set), przeliczał i wyświetlał.

Edytowano przez Chumanista
  • Lubię! 1
14 godzin temu, atMegaTona napisał:

Można, tylko jaki sens tego jest? Jeśli faktycznie potrzebujesz super perfekcyjnego odczytu wartości chwilowych to nie powinny być one podawane w RPM ale jeśli Ci wystarczy RPM to tak jak już pisałem lepiej uśrednić wyniki: pobierać dane co 100ms i uśredniać  każdy z poprzednią średnią a co 1s

Chyba nie używałeś częstościomierz, który wyświetla wyniki co sekundę. Sekunda to "wieczność". Nawet multimetr, który wyświetla wyniki 3 razy na sekundę potrafi denerwować. Sensowne odczyty wartości, które mogą ulegać częstym zmianom to 10 na sekundę, min 5. Jeśli robisz pomiar co 100ms, to ile wartości uśrednisz?

Pisząc oprogramowanie dla licznika częstotliwości i czau, dla F < 1kHz mierzę nie częstotliwość ale czas. Dzięki temu wynik pojawia się (z punktu postrzegania człowieka) natychmiastowo. Dla F>= 1kHz mierzę częstotliwość bramkując sygnał przez 100ms (64ms).

 

14 godzin temu, Dzonzi napisał:

Będzie głupio wyglądać, jeżeli będę mierzył prędkość obrotową silnika synchronicznego i pomiary mi będą wychodzić np. 1480-1500-1520

Powinieneś sprawdzić częstościomierzem, czy obroty są stabilne czy nie. Wyeliminujesz jedną niewiadomą. Polecam tez zmierzyć okres sygnału (faktyczny okres a nie wyliczany przez miernik częstotliwości), porównanie F a 1/t może Cię zdziwić.

 

14 godzin temu, atMegaTona napisał:

Więc chcesz sobie skalibrować urządzenie pomiarowe dedykowane dla silników o stałych obrotach na podstawie silnika o niepewnej stałości obrotów?

Podłączył bym generator.

 

13 godzin temu, Dzonzi napisał:

nie wiem jak to napisać w programie, bo dosyć średnio ogarniam programowanie.

Na to jest jedna rada - naucz się pisać programy.

Pomyśl, jaką radę dałbyś gdy ktoś napisał "Tylko kurczę jak mam wyciąć wyrostek? Słabo ogarniam medycynę".

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...