06-12-2023, 21:04
(06-12-2023, 20:46)oscarX napisał(a):(06-12-2023, 19:50)Fondix napisał(a): Witam
Mam zagwozdkę. W programie poniżej wykonuje między innymi pomiar częstotliwości przebiegu prostokątnego za pomocą funkcji PulseIn w zakresie 2kHz do około 12kHz.
Musisz bardziej sprecyzować problem - np. jak dokładnie chcesz mierzyć tą częstotliwość, jak często. Od tego zależy czy lepiej będzie liczyć impulsy w ustalonym czasie czy mierzyć długość 1 okresu przebiegu. Wydaje mi się, że jeśli pomiar ma być możliwie najlepszy musisz "wyjść poza Arduino" tzn. zakładająć że wykorzystujesz Atmegę wykorzystać jakiś wolny TIMER, wykonać kilka połączeń (impulsy na TIMER a nie na GPIO). Oczywiście trzeba dać generator kwarcowy. Kiedyś zbudowałem układ po pomiary częstotliwości na procku ATXmega (ma więcej układów peryferujnych) i korzystając z impulsów 1PPS z odbiornika GPS zmierzyłem częstotliwość zegarową. Wyszło 24MHz z wahaniami po kilkaset Hz (przy taktowaniu kwarcowym) lub po kilkanaście kHz (przy taktowaniu z wbudowanego generatora RC). W ATXmega można zegar przełączać programowo w trakcie pracy...
Dokumentacja Arduino podaje, że na ATmedze core wykorzystuje 1 timer, reszta jest wolna.
Może jest jakaś gotowa biblioteka...
Nie mam narzuconego jak często musze mierzyć gdyż przepływomierz ustabilizuje się bardzo szybko. Przykładowo przez 0,1 sekundy będzie częstotliwość wzrastać, a następnie przez te powiedzmy 3,9 sekundy będzie oscylować wokół np 12 khz. Pomiar ma być że tak powiem zgrubny. Układ będzie działał tak: klikam przycisk -> otwiera się elektrozawór, a wiec podaje powietrze do przepływomierza, po np 0,1 s rozpoczyna się pomiar -> elektrozawór się zamyka, pomiar się zakańcza -> wyświetla sie max wartość zmierzona

