Skocz do zawartości

Kurs STM32 - #12 - I2C w praktyce, akcelerometr


Komentator

Pomocna odpowiedź

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.

Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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ć?

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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"

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.