Czujnik Halla SS41F STM32: podłączenie, EXTI i odczyt magnesu

Czujnik Halla SS41F STM32: podłączenie, EXTI i odczyt magnesu
Magnes przesuwasz przed czujnikiem, a pin w STM32 skacze losowo albo milczy? Czujnik Halla SS41F i STM32 dogadają się bez problemu, ale jego wyjście typu open-collector samo nie wystawi stanu wysokiego, więc potrzebuje podciągnięcia do zasilania. Pokażę Ci okablowanie, konfigurację EXTI w STM32CubeMX i odczyt impulsów w callbacku, a na koniec typowe błędy, na których wykłada się większość początkujących.
Chcesz wykryć magnes bez mechanicznego styku, na przykład jako krańcówkę albo tachometr? Czujnik Halla SS41F i STM32 to prosty duet do takiego zadania, a do tego tani.
Pokażę Ci zasilanie, rezystor podciągający, konfigurację EXTI w STM32CubeMX i odczyt impulsów. Całość zadziała też z zamiennikiem od innego producenta. Przy okazji dorzucę kilka rzeczy z kategorii elektronika, DIY i elektronikaodpodstaw, które przydadzą Ci się też poza tym projektem.

Jak działa czujnik Halla SS41F i co wystawia na wyjściu
Czujnik reaguje na pole magnetyczne i zmienia stan wyjścia cyfrowego. To bipolarny przełącznik w obudowie TO-92, a nie liniowy miernik pola, więc nie dostaniesz z niego wartości w gaussach, tylko stan zero-jedynkowy.
Wyjście jest typu open-collector, czyli otwarty kolektor tranzystora NPN. Układ potrafi tylko zewrzeć linię do masy. Stanu wysokiego sam nie wystawi, więc musisz go podciągnąć do zasilania. Na tym wykłada się większość początkujących.
Układ ma kilka oznaczeń zamiennych. Tabela zbiera to, co musisz wiedzieć przed podłączeniem.
| Model | Funkcja | Uwaga dla STM32 |
|---|---|---|
| SS41F | Detekcja pola magnetycznego, wyjście open-collector | Wymaga podciągnięcia wyjścia do zasilania |
| 0H41, SH41, SS41, S41 | Zamienniki wskazane dla SS41F | Sprawdź w nocie katalogowej piny i parametry konkretnej sztuki |
| Napięcie zasilania, progi, polaryzacja | Zależą od egzemplarza | Sprawdź w nocie katalogowej |
W praktyce: zanim cokolwiek podłączysz, znajdź notę katalogową swojego egzemplarza. Znajdziesz tam to, czego z samego oznaczenia nie zgadniesz.
SS41F podłączenie do STM32
Potrzebujesz trzech połączeń: zasilania, masy i wyjścia do pinu GPIO. Masa czujnika musi być wspólna z masą płytki STM32, inaczej sygnał nie będzie miał odniesienia.
Zasilanie dobierz do poziomu logiki płytki i sprawdź, czy mieści się w zakresie z noty. Kolejność pinów zweryfikuj na swoim module. Nie jedź z pamięci.
Gotowy moduł Czujnik Halla SS41F jest dostępny w sklepie msalamon.pl.
Czujnik Halla rezystor podciągający przy wyjściu open-collector
Bez podciągnięcia pin wejściowy „pływa” i łapie zakłócenia. Objawia się to losowymi zmianami stanu, nawet gdy w pobliżu nie ma żadnego magnesu.
Masz dwie drogi: wewnętrzny pull-up GPIO albo zewnętrzny rezystor między wyjściem a zasilaniem. Wartość dobierz do napięcia i długości przewodu. Przy dłuższych kablach lepiej sprawdza się zewnętrzny.
Uwaga: rezystor podciągaj do napięcia, które pin STM32 toleruje. Zajrzyj w datasheet swojego układu, zanim podepniesz go do wyższego zasilania.

Czujnik Halla EXTI przerwanie w STM32CubeMX
W STM32CubeMX ustaw pin jako GPIO_EXTI. To wejście z przerwaniem zewnętrznym. Kilka ustawień wymaga Twojej uwagi:
- Trigger zbocze opadające, narastające albo oba. Przy open-collector magnes zwykle ściąga linię do masy, ale sprawdź to na swoim egzemplarzu,
- Pull-up włącz go, jeśli wybrałeś podciągnięcie wewnętrzne. Przy zewnętrznym rezystorze zostaw No pull,
- NVIC zaznacz włączenie przerwania dla linii EXTI tego pinu.
Po wygenerowaniu kodu HAL woła callback przy każdym wykrytym zboczu. Właśnie tam zliczasz impulsy.
W praktyce: jeśli przerwanie nie wchodzi, zajrzyj najpierw do NVIC i sprawdź, czy linia jest zaznaczona.

Odczyt danych z czujnika Halla: polling czy przerwanie
Polling to odczyt stanu pinu w pętli. Do wolnych zdarzeń wystarczy, ale przy szybko kręcącym się magnesie przegapisz impuls.
Przerwanie reaguje od razu i nie blokuje pętli głównej. Do zliczania obrotów to wybór domyślny.
Poniższy fragment zlicza zbocza w callbacku. Zmienna jest volatile, bo zmienia ją przerwanie, a czyta pętla główna.

volatile uint32_t pulse_count = 0;
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == GPIO_PIN_0) /* dopasuj do swojego pinu */
{
pulse_count++;
}
}
Callback ma być krótki. Nie wysyłaj z niego danych przez UART. Zwiększ licznik i wyjdź.
Wartość wypiszesz w pętli głównej. UART, czyli uniwersalny asynchroniczny nadajnik-odbiornik, to wygodny kanał debugowania do terminala na komputerze.
char msg[32];
uint32_t n = pulse_count;
int len = snprintf(msg, sizeof(msg), "Impulsy: %lu\r\n", (unsigned long)n);
HAL_UART_Transmit(&huart2, (uint8_t*)msg, len, 100);
Potrzebujesz include stdio.h, a uchwyt huart2 zależy od Twojej konfiguracji. Ta sama logika działa w Arduino, ale tu skupiamy się na STM32.
Przy wolnym ruchu magnesu zobaczysz czasem kilka impulsów zamiast jednego. To drgania sygnału. Odfiltrujesz je programowo, ignorując kolejne zbocza przez krótką chwilę.
Zliczanie obrotów czujnik Halla i dobór magnesu
Czujnik reaguje na biegun magnesu zwrócony w jego stronę. Jeśli nic się nie dzieje, odwróć magnes drugą stroną.
Liczy się też odległość i kierunek ruchu. Czułość i progi znajdziesz w nocie katalogowej, bo zależą od egzemplarza.
| Zastosowanie | Montaż magnesu |
|---|---|
| Krańcówka, wykrywanie położenia | Magnes na ruchomym elemencie, czujnik na stałe |
| Tachometr | Magnes na wale, czujnik przy torze jego ruchu |
W tachometrze liczysz impulsy w stałym oknie czasu albo mierzysz odstęp między nimi. Drugi sposób opiera się na timerach i Input Capture. Dobrze je poznać w następnym kroku.
Typowe błędy przy podłączeniu czujnika Halla do STM32
Większość kłopotów ma te same przyczyny. Przejdź je po kolei:
- Brak podciągnięcia pin pływa i stan skacze losowo,
- Zła orientacja magnesu czujnik milczy, bo biegun jest odwrócony,
- Pomylone piny zasilania czujnik się grzeje albo nie reaguje,
- Niezgodne poziomy zasilania sygnał nie mieści się w progach wejścia STM32,
- Brak linii w NVIC callback nigdy się nie wywołuje.
W praktyce: podejrzyj stan pinu w debuggerze albo analizatorem logicznym. Jeśli linia zmienia się przy magnesie, a licznik stoi, winna jest konfiguracja EXTI.

Podsumowanie
Potrafisz już podłączyć czujnik, ustawić rezystor podciągający, skonfigurować EXTI w STM32CubeMX i zliczać impulsy w callbacku. Wiesz też, gdzie szukać typowych błędów.
Czujnik Halla dobrze sprawdza się przy cyfrowym wykrywaniu magnesu bez styku mechanicznego. Następny logiczny krok to timery i pomiar prędkości obrotowej.
FAQ – czujnik Halla SS41F STM32
1. Czy czujnik Halla SS41F potrzebuje rezystora podciągającego? Tak, bo wyjście open-collector samo nie wystawia stanu wysokiego. Użyj zewnętrznego rezystora albo wewnętrznego pull-upa GPIO.
2. Czy SS41F podłączę do STM32 bez zewnętrznych elementów? Często tak, jeśli włączysz wewnętrzny pull-up pinu. Przy długich przewodach lepiej postawić zewnętrzny rezystor.
3. Jaki magnes pasuje do czujnika Halla SS41F? Liczy się biegun zwrócony do czujnika i odległość. Wymagane pole znajdziesz w nocie katalogowej.
4. Czy mogę użyć czujnika Halla SS41F z Arduino? Tak, logika jest ta sama: podciągnięcie wyjścia i odczyt pinu lub przerwanie. Sprawdź tylko zgodność zasilania.
5. Jak zliczać obroty czujnikiem Halla w STM32? Zamontuj magnes na wale i zliczaj zbocza w callbacku EXTI. Potem przelicz impulsy na obroty w stałym oknie czasu.
6. Czym można zastąpić czujnik SS41F? Zamiennikami są 0H41, SH41, SS41 i S41. Przed wymianą sprawdź w nocie piny i parametry.

Prezentowaną w artykule elektronikę – w tym czujnik Halla SS41F – znajdziesz w naszym sklepie sklep.msalamon.pl. Zapraszamy również na nasze social media, gdzie pokazujemy nowości i projekty.


