Skocz do zawartości

Kurs STM32 - #12 - I2C w praktyce, akcelerometr


Pomocna odpowiedź

Napisano
html_mig_img
Na zakończenie kursu STM32 omówimy bardziej rozbudowany przykład. Na warsztat weźmiemy moduł z układem LSM303D, który zawiera w sobie akcelerometr, magnetometr oraz termometr.Zobaczymy, jak można odczytywać z niego dane za pomocą I2C oraz jak zaprezentować wyniki na wyświetlaczu graficznym

UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.

Przeczytaj całość »

Poniżej znajdują się komentarze powiązane z tym wpisem.

  • 2 miesiące później...

Cześć, w dokumentacji czujnika przeczytałem by nie przekraczać 4,8V na pinach. STM daje 5V. Czy bezpiecznie jest go podłączać bezpośrednio? Może zastosować dzielnik?

Czaro, na pewno STM daje 5V? Mikrokontroler jest zasilany z 3V3. Piszę z głowy, mam nadzieję, że dobrze. Mierzyłeś te 5V

Czaro, są też specjalne konwertery. Trzymajmy się w tym wątku jednak tematyki STM32 proszę 🙂

Jeśli będziesz miał problem z inną platformą, to załóż temat w stosownym dziale.

Uruchomiłem LSM303D dokładnie tak jak w #12 kursu.

Akcelerator i magnetometr działają .

Mam problem z pomiarem temperatury.

Wyświetlana jest temperatura ujemna -9 ,gdy ogrzeję czujnik temperatura rośnie do 0 i dalej.

Powinienem widzieć około 19 stopni. Czy mój czujnik nie jest uszkodzony lub źle skalibrowany?

Jak to działa? Przetwornik jest 12 bitowy to 4095 na ile stopni ? Jak to przeliczyć? W dokumentacji jest coś co wygląda jak 8bitów na stopień - dziwne. Czy ktoś może mi to objaśnić?

Rozumiem że zakres to 125 stopni czyli 32.7 bita /stopień.

Czytałem rejestry:

int16_t tempN = lsm_read_value(LSM303D_TEMP_OUT_L);

jak również

uint8_t tempL = lsm_read_value(LSM303D_TEMP_OUT_L);

uint8_t tempH = lsm_read_value(LSM303D_TEMP_OUT_H);

dla adresów

#define LSM303D_TEMP_OUT_L 0x05

#define LSM303D_TEMP_OUT_H 0x06

Widzę wartości bliskie 0xff w obu rejestrach.

Dopiero po podgrzaniu wartości się zerują , wygląda to tak jak by przetwornik miał przesunięte zero o około 20 stopni.

Wyniki pokazane w #12 są dla mnie niezrozumiałe ponieważ tak pokazane bez przeliczenia sugerują zupełnie inny zakres pomiaru. Dla skali -40 do 85 wystarczyło by 8 bitów.

Podsumowując , piszę o dwóch tematach jeden to problem z dziwnym zachowaniem przetwornika

a drugi to skalowanie i przeliczenie poprawnych wyników na stopnie.

Format jest opisany w dokumentacji ukladu i jest to 12-bitowa liczba w kodzie uzupelnieniowym do 2. Jest to liczba calkowita, ktora odpowiada temperaturze wewnetrznej czujnika.

Wygląda na to że mój przetwornik jest popsuty - czy tak.

Mogę dostać namiar Pana pdf lub jeżeli to jest w LSM303D to stronę gdzie to Pan znalazł.

Link jest podany w artykule: /blog/wp-content/uploads/2016/01/LSM303D_dokumentacja.pdf

Punkt 4.2 omawia dzialanie czujnika temperatury.

Natomiast co do tego czy jest popsuty, to oczywiscie jest taka mozliwosc. Ale duzo bardziej prawdopodobne jest ze to nie czujnik, ale program zle dziala. Na pewno uruchomiles poprawnie pomiar? Testowales programy przykladowe z kursu?

Testowałem dokładnie programem z kursu i dostałem wynik -9 stopni. (było w pokoju około 19 stopni).

W 4.2 jest tylko, uzupełnienie do dwóch i format zastrzeżony.

Dziwi mnie to bo z 12 bitów to jedno miejsce po przecinku pewne a nawet dwa.

W 2,2 jest napisane o dokładności 8 bit na stopień .To gdzie przecinek ? Może jest podobnie jak z DS1820 tam też format był ciekawy.

Przyznam ze czujnik temperatury potraktowalem mocno po macoszemu... ale teraz zaczynam zalowac.

Na szybko znalazlem taki kod:

	/* remember the temperature. The datasheet isn't clear, but it
 * seems to be a signed offset from 25 degrees C in units of 0.125C
 */
_last_temperature = 25 + (raw_mag_report.temperature * 0.125f);
mag_report.temperature = _last_temperature;

Wiec -9 to byloby jakies 23.9 stopnia, co wydaje sie sensowne.

  • Pomogłeś! 1
  • 8 miesiące później...

Gdzie może być błąd gdy po komunikacie o wyszukiwaniu akcelerometru, nie pojawia się już informacja o znalezieniu? Sam program mam dokładnie tak jak w kursie, wszystko jest też podłączone zgodnie ze schematem...

PS Nie pojawia się również komunikat "Niepoprawna odpowiedź układu"

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