Files
PI_mikrokontroler_2/docs/gy291.md

15 KiB
Raw Permalink Blame History

Akcelerometr GY291 ADXL345 i2c spi

Moduł GY291 to 3osiowy akcelerometr ADXL345. Wyposażony w mikromechaniczny czujnik zapewniający wysoką rozdzielczość i niskie zużycie energii.

Czujnikiej jest polikrzemowa struktura umieszczona na płytce krzemowej. Sprężyny polikrzemowe podtrzymują strukturę nad powierzchnią płytki i zapewniają opór siłom wynikającym z przyłożonego przyspieszenia. Gdy akcelerometr jest prostopadły do pola przyspieszenia, niewielkie zmiany nachylenia będą miały duży wpływ, ponieważ grawitacja działa na większym obszarze.

Wraz ze wzrostem nachylenia w pionie, czujnik staje się mniej czuły aż do momentu, gdy przy pełnej orientacji pionowej nie może zwrócić odczytu, ponieważ wektor grawitacji nie ma wpływu na wiązkę.

Bardzo dobrą dyskusję na temat czułości akcelerometru można znaleźć w nocie aplikacyjnej AN-1057 firmy Analogue Devices autorstwa C. Fishera. Poniższy diagram pochodzi z tej notki aplikacyjnej:

Opis
Rysunek 1. Diagram

Na diagramie widać, że przy nachyleniu w zakresie 0°23° wystarczy czułość 16 mg/LSB, aby uzyskać dokładność pomiaru co 1°, przy nachyleniu w zakresie 60° 8 mg, a przy nachyleniu w zakresie 80° 4 mg. Z tego powodu ADXl345 nie może wyświetlać kąta 90°, ponieważ jego czułość jest zbyt mała, aby uzyskać dokładność pomiaru nachylenia pod tym kątem (3,8 mg). ADXL345 nadaje się do pomiaru nachylenia do około ±80°. Jest to przydatne w przypadku, gdy chcemy uzyskać dokładność pomiaru nachylenia z dokładnością do 1°.

Warto uwzględnić to podczas projektowania obudowy i mocowania czujnika na badanym urządzeniu.

Opis
Rysunek 2. Schemat blokowy

Płytka posiada stabilizator LDO 3V3, zatem napięcie zasilania VCC musi wynosić 0d 4.0V do 6V.

Opis
Rysunek 3. Pinout modułu

Nazwa opis

  • GND Masa układu
  • VCC Napięcie zasilania modułu z zakresu 3 V do 5 V
  • CS Wyprowadzenie dla magistrali SPI - Chip Select (logiczna jedynka uruchamia magistralę I2C)
  • INT1 Wyjście przerwania zewnętrznego nr 1 (szczegóły w dokumentacji)
  • INT2 Wyjście przerwania zewnętrznego nr 2 (szczegóły w dokumentacji)
  • SDO Wybór adresu magistrali I2C / Linia danych magistrali SPI
  • SCL/SCLK Linia danych magistrali I2C (TWI) / Linia zegarowa magistrali SPI
  • SDA/SDI Linia zegarowa magistrali I2C (TWI) / Linia danych magistrali SPI

Uwagi dodatkowe:

  • CS jest podciągany do stanu wysokiego przez rezystor 10 kΩ (aktywny). Na niektórych płytkach może mieć wartość 4 kΩ.
  • ADDR(SDO) jest podciągany do stanu niskiego przez rezystor 4 kΩ.
  • SCL jest podciągany do poziomu wysokiego 3V3 przez rezystor 4 kΩ.
  • SDA jest podciągany do poziomu wysokiego 3V3 przez rezystor 4 kΩ.
  • VDDIO jest podłączone do VS, a oba są podłączone do 3V3.
Opis
Rysunek 4. Schemat modułu

I²C - uwagi do interfejsu

Adresy I²C:

Stan pinu ADDR/SDO  Adres I2C (hex) Adres I2C (binarnie)
ADDR pulled high	 0x1D       %0001-1101
ADDR pulled low	     0x53	    %0101-0011

Ponieważ interfejs I²C wykorzystuje wyjścia z otwartym drenem, interfejs jest kompatybilny z systemem 5 V. Dzieje się tak, ponieważ Arduino nigdy nie generuje napięcia 5 V, a jedynie trójstanowe wyjście, aby napięcie podciągnęło się do 3V3. Aby wygenerować zero, na wyjściu pojawia się zero cyfrowe, które jest również kompatybilne z interfejsem 3V3.

SPI - uwagi do interfejsu: w przypadku użycia interfejsu SPI, należy użyć konwertera poziomów napięć logicznych (tylko wówczas, gdy mikrokontroler lub mikrokomputer pracuje z napięciem logiki 5V). Konwerter nie jest potrzebny dla Raspberry PI, ponieważ jego napięcie logiki wynosi 3.3V.

Dane techniczne

  • Czip: ADXL345, 13bitowy (3,9mg/LSB), ±2/4/8/16g
  • Interfejsy: I²C i SPI (3 lub 4 przewodowy)
  • Szybkość interfejsu: 100kHz, 400kHz / 5MHz
  • Rozdzielczość: (2g to 16g) 10 ~ 13 bitów
  • Zasilanie: 35V,
  • Napięcie logiki: 1,73,6V lub 46V
  • Temperatura pracy: -40°C ~ 85°C
  • Funkcje sprzętowe: detekcja tapnięcia (klik), aktywności, bezczynności, swobodnego opadania, programowalne przerwania
  • Zużycie energii: (~40µA aktywnie, ~0,1µA w standby), odporność na wstrząsy do 10000g
  • Rozmiar: około 20×15mm, pinheader do samodzielnego wlutowania
  • Współpraca z RaspberryPi: bezpośrednie zasilanie z 3,3V GPIO zgodność z poziomami logicznymi Pi

Rozdzielczość ADXL345

Można wybrać zakres przyspieszenia spośród następujących wartości: 2g, 4g, 8g, 16g.

Ten sam współczynnik skalowania jest używany we wszystkich rozdzielczościach, ponieważ wewnętrzna rozdzielczość przetwornika DAC zmienia się z 10 bitów na 13 bitów przy każdej wybranej rozdzielczości. Zatem każdy bit ma zawsze wartość 3,9 mg:

Należy pamiętać, że „-1” sprawia, że bit znaku daje wynik dodatni lub ujemny.

Opis
Rysunek 5. Tabela czułości

Jeśli ograniczysz zakres czujnika ADXL345 do 10 bitów, jego czułość spadnie (oczywiste). Dla pełnego zakresu uzyskujesz typową czułość 3,9 mg/LSB i odchylenie od min. do maks. 3,5 ~ 4,3 mg/LSB (ustawia się to bitem FULL_RES). Nie warto jednak ograniczać się do 10 bitów.

Dlaczego akcelerometr ADXL345 nie może wskazać ±90°?

Akcelerometr doskonale radzi sobie ze wskazaniem nachylenia pod niewielkim kątem (na płaskiej powierzchni) do około 70°, ale nie osiągnie ±90°.

Należy montować akcelerometr jak najbardziej poziomo, ponieważ w przeciwnym wypadku mniejszy wpływ będzie miała na niego grawitacja, a zatem akcelerometr staje się mniej czuły. Czułość akcelerometru maleje wraz ze wzrostem kąta i podąża za charakterystyką zbliżoną do sinusoidalnej, zaś dokładność maleje wraz ze zbliżaniem się do nachylenia ±90°.

Obudowa

Do zbudowanmia czujnika wykorzystano obudowę uniwersalną Kradex Z-47. Obudowa wykonana z ABS. Obudowa składa się z dwóch części składanych na zatrzask. Kolor czarny. Wymiary: 20,6 x 40,2 x 50,2 mm.

Opis
Rysunek 6. Proponowana obudowa

Sztywne mechaniczne przymocowanie akcelerometru (np. GY-291 z ADXL345) do elementu analizowanego (np. obudowy HDD, silnika, rury) jest absolutnie kluczowe dla poprawnego wykrywania drgań. Poniżej znajdziesz praktyczne, sprawdzone metody montażu w szczególności dla przypadków, gdy chcesz przykleić akcelerometr do dysku w obudowie PVC.

Opis
Rysunek 7. Montaż czujnika w obudowaie

Podłączenie

  1. Podłącz: SDA (MOSI) GPIO11, SCL (CLK) GPIO12, SD0 (MISO) GPIO13

Uwaga: ADXL345 ma twardo ustawione dwa adresy I²C: 0x53 domyślny (pin SDO/ALT do GND), 0x1D alternatywny (pin SDO/ALT do VCC). Można podłączyć tylko dwa moduły przez I²C jednocześnie jeden z 0x53, drugi z 0x1D.

Podłączenie SPI akceleratorów z ESP32S3

Podłączenie przez SPI (dla 4 czujników)

Uwaga: Pin SDO w SPI służy do wyjścia danych, nie do ustawiania adresu jak w I²C.

| ESP32   | Nazwa | GY-291|
| ------- | ----- | ----- |
| GPIO11  | MOSI  | SDA   |
| GPIO13  | MISO  | SDO   |
| GPIO12  | SCLK  | SCL   |
| GPIO    | 3.3V  | VCC   |
| GPIO    | GND   | GND   |

Filtrowanie - tylko dla przewodów >2 m (nie przetestowane do końca)

Omiń tę sekcję, jeśli przewód pomiędzy urządzeniem a czujnikiem akcelerometru jest krótszy niż 2 m.

Nie należy przekraczać 5m długości przewodów dla SPI w warunkach fabrycznych, ponieważ w środowisku o wysokim poziomie zakłóceń elektromagnetycznych (EMI), typowym dla fabryk, mogą wystąpić przekłamania.

Wysokie ryzyko:

  • utraty sygnału (zniekształcenie zboczy sygnału),
  • przesłuchów między liniami,
  • błędów CRC lub losowych odczytów,
  • odbić i zakłóceń szczególnie na SCLK.
  • standardowe SPI przy 3.3V napięciu logiki jest niewystarczające na >50 cm bez zabezpieczeń!

Fizyczne zabezpieczenie linii

  • Skrętka ekranowana (STP) np. skrętka 4-parowa FTP/STP kat. 5e lub wyżej
  • Ekranowane przewody / peszel ochronią przed polami elektromagnetycznymi
  • Podciągnięcie rezystorów pull-up dla MOSI, MISO, SCLK do 3.3V (np. 4.7kΩ)
  • Szeregowe rezystory terminujące 50-100Ω w szereg na każdej linii SPI
  • Dławiki ferrytowe na liniach zasilania i sygnałowych (filtrowanie EMI)
  • Redukcja prędkości SPI do <500 kHz lub nawet 100 kHz — pozwoli ograniczyć efekt odbić i przesłuchów.
Opis
Rysunek 8. Opcjonalne filtrowanie sygnałów

Wtyczka

Typ gniazda/wtyczki: GX16-6 6 Pin Metal Male Female Panel Connector 16mm GX16-6

Opis
Rysunek 9. Gniazdo do podłączenia akcelerometrów
Opis
Rysunek 10. Wtyczka czujnikja akcelerometru

Numeracja pinów dla modułów z magistralą SPI:

  1. +5V (moduł ma regulator 3.3V)
  2. masa
  3. MOSI
  4. MISO
  5. SCLK
  6. SS

Uwagi

Zapobieganie błędom w ruchu magistrali

Pin CS układu ADXL345 służy zarówno do inicjowania transakcji SPI, jak i do włączania trybu I2C. Gdy układ ADXL345 jest używany na magistrali SPI z wieloma urządzeniami, jego pin CS jest utrzymywany w stanie wysokim, podczas gdy urządzenie nadrzędne komunikuje się z innymi urządzeniami. Mogą wystąpić sytuacje, w których polecenie SPI przesłane do innego urządzenia wygląda jak prawidłowe polecenie I2C. W takim przypadku układ ADXL345 zinterpretowałby to jako próbę komunikacji w trybie I2C i mógłby zakłócać ruch magistrali. O ile ruch magistrali nie będzie odpowiednio kontrolowany, aby zapobiec wystąpieniu takiej sytuacji, zaleca się dodanie bramki logicznej przed pinem SDI, jak pokazano na rysunku 36. Ta bramka OR będzie utrzymywać linię SDA w stanie wysokim, gdy CS będzie w stanie wysokim, aby zapobiec sytuacji, w której ruch magistrali SPI w układzie ADXL345 będzie postrzegany jako polecenie startu I2C.

Zalecany schemat połączenia SPI w przypadku korzystania z wielu urządzeń SPI na jednej magistrali

W przypadku SPI zastosowano konfigurację 4-przewodową, jak pokazano na schemacie poniżej. Wyczyszczenie bitu SPI (bit D6) w rejestrze DATA_FORMAT (adres 0x31) powoduje wybór trybu 4-przewodowego, natomiast ustawienie bitu SPI powoduje wybór trybu 3-przewodowego. Maksymalna częstotliwość taktowania SPI wynosi 5 MHz przy maksymalnym obciążeniu 100 pF, a schemat czasowy jest zgodny z polaryzacją zegara (CPOL) = 1 i fazą zegara (CPHA) = 1. Jeśli zasilanie zostanie podane do układu ADXL345 przed skonfigurowaniem polaryzacji i fazy zegara procesora hosta, pin CS powinien zostać wprowadzony w stan wysoki przed zmianą polaryzacji i fazy zegara.

W niektórych opisach napisano, że bramki są zbędne, jeśli oprogramowanie zapewni prawidłowe stany na piach CS, tj., stan wysoki na czujnikach niekatywnych i stan niski WYŁACZNIE na czujniku, na którym trwa pomiar. Na modułach są rezystory podciągające (na schemacie oznaczone jako R3 i R4) do I²C (na SDA/SCL), które przy SPI nie powinny przeszkadzać, ale jeśli coś dziwnego dzieje się na liniach, warto je wylutować.

Figure 35. 4-Wire SPI Connection Diagram

CS to linia zezwalająca, sterowana przez urządzenie nadrzędne SPI. Linia ta musi przejść w stan niski na początku transmisji i wysoki na jej końcu, jak pokazano na rysunku 37. SCLK to zegar portu szeregowego, dostarczany przez urządzenie nadrzędne SPI. SCLK powinien pozostawać w stanie wysokim w okresie braku transmisji. SDI i SDO to odpowiednio wejście i wyjście danych szeregowych. Dane są aktualizowane na opadającym zboczu sygnału SCLK i powinny być próbkowane na narastającym zboczu sygnału SCLK. Aby odczytać lub zapisać wiele bajtów w jednej transmisji, należy ustawić bit wielobajtowy, znajdujący się po bicie R/W w pierwszym przesłanym bajcie (MB na rysunkach 3739). Po zaadresowaniu rejestru i przesłaniu pierwszego bajtu danych, każdy kolejny zestaw impulsów zegarowych (osiem impulsów zegarowych) powoduje, że ADXL345 wskazuje na kolejny rejestr w celu odczytu lub zapisu. To przesuwanie trwa do momentu ustania impulsów zegarowych i cofnięcia potwierdzenia CS. Aby wykonać odczyt lub zapis do różnych, niesekwencyjnych rejestrów, należy dezaktywować CS między transmisjami, a nowy rejestr musi zostać zaadresowany oddzielnie. Schemat czasowy dla 3-przewodowych odczytów lub zapisów SPI przedstawiono na rysunku 39. 4-przewodowe odpowiedniki dla zapisów i odczytów SPI przedstawiono odpowiednio na rysunku 37 i rysunku 38. Aby zapewnić prawidłowe działanie modułu, progi logiczne i parametry czasowe podane w tabeli 9 i tabeli 10 muszą być zawsze spełnione. Stosowanie częstotliwości transmisji danych wyjściowych 3200 Hz i 1600 Hz jest zalecane tylko przy częstotliwościach transmisji SPI większych lub równych 2 MHz. Częstotliwość transmisji danych wyjściowych 800 Hz jest zalecana tylko dla prędkości transmisji większych lub równych 400 kHz, a pozostałe częstotliwości transmisji danych skalują się proporcjonalnie. Na przykład minimalna zalecana prędkość transmisji dla częstotliwości transmisji danych wyjściowych 200 Hz wynosi 100 kHz. Praca z szybkością transmisji danych wyjściowych przekraczającą zalecane maksimum może powodować niepożądane efekty w danych dotyczących przyspieszenia, w tym brak próbek lub dodatkowy szum.

Układ ADXL345 udostępnia dwa piny wyjściowe do obsługi przerwań: INT1 i INT2. Oba piny przerwań to piny push-pull o niskiej impedancji, których specyfikacje wyjściowe przedstawiono w tabeli 13. Domyślna konfiguracja pinów przerwań jest aktywna w stanie wysokim. Można ją zmienić na aktywną w stanie niskim, ustawiając bit INT_INVERT w rejestrze DATA_FORMAT (adres 0x31). Wszystkie funkcje mogą być używane jednocześnie, a jedynym ograniczeniem jest to, że niektóre funkcje mogą wymagać współużytkowania pinów przerwań. Przerwania są włączane poprzez ustawienie odpowiedniego bitu w rejestrze INT_ENABLE (adres 0x2E) i są mapowane na pin INT1 lub INT2 na podstawie zawartości rejestru INT_MAP (adres 0x2F). Podczas początkowej konfiguracji pinów przerwań zaleca się, aby przed włączeniem przerwań wykonać funkcje i mapowanie przerwań. Podczas zmiany konfiguracji przerwania zaleca się najpierw wyłączyć przerwanie, kasując bit odpowiadający tej funkcji w rejestrze INT_ENABLE, a następnie ponownie skonfigurować funkcję przed ponownym włączeniem przerwania. Konfiguracja funkcji przy wyłączonych przerwaniach pomaga zapobiec przypadkowemu wygenerowaniu przerwania przedwcześnie. Funkcje przerwań są blokowane i kasowane poprzez odczyt rejestrów danych (adresy od 0x32 do 0x37) do momentu, aż warunek przerwania nie będzie już ważny dla przerwań związanych z danymi, lub poprzez odczyt rejestru INT_SOURCE (adres 0x30) dla pozostałych przerwań. W tej sekcji opisano przerwania, które można ustawić w rejestrze INT_ENABLE i monitorować w rejestrze INT_SOURCE.

Powrót na stronę główną