Dziś kontynuujemy wczorajszy temat obsługi czujnika poziomu i temperatury oleju. Naszym zadaniem jest znalezienie efektywnej metody pomiaru czasu trwania poszczególnych segmentów przebiegu cyfrowego na wyjściu wspomnianego sensora.
Na wstępie odrzuciliśmy już wszelkie czysto software’owe metody odczytu, jako mało dokładne i nieefektywne. Pozostaje nam zdać się na sprzęt. I tu z pomocą przychodzą liczniki/timery wbudowane w nasz mikrokontroler STM32F4. Część z nich posiada bardzo ciekawą funkcjonalność Input Capture, która stanowi idealne rozwiązanie dla naszego problemu.
Cóż to jest Input Capture? Jak to działa?
Timer pracujący w tym trybie zlicza w kółko impulsy wewnętrznego zegara – jego działanie nie różni się więc szczególnie od “normalnego” trybu pracy. Posiada on jednak dodatkowe wejście cyfrowe, podłączone do układu wykrywania zbocza. W momencie pojawienia się zbocza narastającego lub opadającego na tymże wejściu, stan licznika jest zapisywany “na boku” w dedykowanym rejestrze licznika. Dodatkowo może zostać wywołane przerwanie.
Jak wykorzystać tą funkcjonalność?
Na wspomniane wejście podajemy sygnał cyfrowy z czujnika. Każde zbocze, zarówno opadające jak i narastające będzie generować przerwanie, w który odczytamy moment wykrycia zbocza. Warto zauważyć, iż rejestracja czasu jest realizowana w sposób czysto sprzętowy, dzięki czemu na dokładność pomiaru nie wpływ żaden jitter – stan licznika zapisany w rejestrze określa moment pojawienia się zbocza, a nie rozpoczęcia procedury obsługi przerwania.
Poniżej przedstawiam schemat takiego rozwiązania.
Od strony oprogramowania pozostaje obsłużenie zapisanego czasu wystąpienia zbocza. Po znalezieniu zbocza synchronizującego wraz z 20 milisekundowym segmentem w stanie niskim, kolejne pomiary mogą być wykonywane już sekwencyjnie. Całość logiki można więc obsłużyć prostą maszyną stanów.
Jutro ciąg dalszy zmagań – zajmiemy się podłączeniem elektrycznym oraz spróbujemy podłączyć pomiar do naszych widgetów 🙂 Zapraszam.