ZL30ARM (STM32F103) + LabView: obsługa akcelerometru MMA7455

 

Artykuł opisuje aplikację wykorzystującą akcelerometr MMA7455 firmy Freescale Semiconductor. W składa przedstawionego projektu wchodzi zestaw ewaluacyjny ZL30ARM z mikrokontrolerem STM32, który łączy się z czujnikiem za pomocą magistrali I2C, oraz program dla aplikacji LabView, mający na celu wizualizację danych. Schemat blokowy systemu przedstawiono poniżej:

 

Rys. 1. Schemat blokowy systemu

Rys. 1. Schemat blokowy systemu

 

 

 

Trochę teorii

Akcelerometr MMA7455 jest układem scalonym, w którym w warstwie półprzewodnika zostały wytworzone struktury mechaniczne. Czujnik przyśpieszenia może być zamodelowany jako zestaw belek, z których jedna ruchoma umieszczona jest między dwiema nieruchomymi (Rys. 1).

 

Rys. 2. Uproszczony model mechaniczny akcelerometru

Rys. 2. Uproszczony model mechaniczny akcelerometru

 

 

Na skutek oddziaływania ruchoma belka odchylana jest ze swojego poziomu równowagi. W odchylenia się ruchomej belki w dowolnym kierunku zmniejsza się dystans od nieruchomych belek po jednej stronie, a wzrasta po drugiej stronie. Pomiar wartości tej odległości umożliwia obliczenie działającego na układ przyśpieszenia. Traktując te trzy belki jako okładki kondensatora mamy:

 

 

Gdzie:
S – powierzchnia oddziałujących belek,
d – odległość okładek,
?0 – przenikalność elektryczna próżni,
?r – względna przenikalność ośrodka.

Stąd przyśpieszenie można wyznaczyć na podstawie różnicy pojemności dwóch kondensatorów.

Konfiguracja czujnika

Zanim czujnik zacznie działać prawidłowo należy skonfigurować jego rejestry sterujące. W tabeli przedstawiono podstawowe rejestry.

 

Tab. 1. Rejestry konfiguracyjne układu MMA7455

Adres Nazwa Definicja Bit 7 Bit 6 Bit 5 Bit 4
$06 XOUT8 8 bitowe wyjście osi X XOUT [7] XOUT [6] XOUT [5] XOUT [4]
$07 YOUT8 8 bitowe wyjście osi Y YOUT [7] YOUT [6] YOUT [5] YOUT [4]
$08 ZOUT8 8 bitowe wyjście osi Z ZOUT [7] ZOUT [6] ZOUT [5] ZOUT [4]
$09 STATUS Rejestr Statusowy
$0D I2CAD I2C adres urządzenia I2CDIS DAD[6] DAD[5] DAD[4]
$16 MCTL Kontrola trybu działania DRPD SPI3W STON
$18 CTL1 Rejestr kontrolny 1 DFBW THOPT ZDA YDA
$1A LDTH próg zadziałania dla poziomu LDTH[7] LDTH[6] LDTH[5] LDTH[4]
$1B PDTH próg zadziałania dla impulsu PDTH[7] PDTH[6] PDTH[5] PDTH[4]

 

Adres Nazwa Definicja Bit 3 Bit 2 Bit 1 Bit 0
$06 XOUT8 8 bitowe wyjście osi X XOUT [3] XOUT [2] XOUT [1] XOUT [0]
$07 YOUT8 8 bitowe wyjście osi Y YOUT [3] YOUT [2] YOUT [1] YOUT [0]
$08 ZOUT8 8 bitowe wyjście osi Z ZOUT [3] ZOUT [2] ZOUT [1] ZOUT [0]
$09 STATUS Rejestr Statusowy PERR DOVR DRDY
$0D I2CAD I2C adres urządzenia DAD[3] DAD[2] DAD[1] DAD[0]
$16 MCTL Kontrola trybu działania GLVL [1] GLVL [0] MODE [1] MODE [0]
$18 CTL1 Rejestr kontrolny 1 XDA INTRG [1] INTRG [0] INTPIN
$1A LDTH próg zadziałania dla poziomu LDTH[3] LDTH[2] LDTH[1] LDTH[0]
$1B PDTH próg zadziałania dla impulsu PDTH[3] PDTH[2] PDTH[1] PDTH[0]

 

Czujnik domyślnie, po resecie, wprowadzony jest w tryb czuwania Standby Mode. Aby rozpocząć przetwarzanie należy przełączyć tryb za pomocą bitów MODE[1:0]. Do dyspozycji są cztery tryby działania, przedstawione w taeli poniżej.

 

Tab. 2. Tryby działania w zależności od ustawionych bitów MODE

MODE [1:0] Funkcja
00 Standby Mode
01 Measurement Mode
10 Level Detection Mode
11 Pulse Detection Mode

 

W trybie Measurement Mode włączone jest ciągłe przetwarzanie na wszystkich osiach. Dodatkowo istnieje możliwość wyboru czułości w zależności od potrzeb. Realizowane jest to za pomocą bitów GLVL [1:0], dostępne są zakresy 2g, 4g i 8g, gdzie g oznacza przyśpieszenie ziemskie (10m/s2).

 

Tab. 3. Wybór czułości działania w zależności od ustawionych bitów GLVL

GLVL [1:0] Zakres Czułość
00 8g 16 LSB/g
01 2g 64 LSB/g
10 4g 32 LSB/g

 

Za pomocą bitów XDA, YDA, ZDA w rejestrze CTL1 można wyłączyć przetwarzanie na poszczególnych osiach, domyślnie wszystkie są włączone. Zakończenie konwersji jest sygnalizowane za pomocą bitu DRDY w rejestrze STATUS. Flaga ta może być wyprowadzona na pin wyjściowy czujnika przy odpowiedniej konfiguracji bitu DRPD rejestru MCTL (przy wyzerowanym bicie flaga DRDY jest wystawiana na odpowiednią linię). DRDY jest zerowany przez odczyt jednego z rejestrów XOUT8, YOUT8 lub ZOUT8.

Kolejnym trybem działania, w jakim czujnik może pracować, jest Level Detection Mode. W tej konfiguracji czujnik działa w taki sposób aby wykrywał na jednej i/lub wszystkich osiach przekroczenie pewnej skonfigurowanej wartości. Każde zdarzenie jest sygnalizowanie na pinach wyjściowych INT1 i INT2, które również można konfigurować. Dzięki takiemu podejściu przy odpowiedniej konfiguracji układ może generować sygnał przerwania określonych zdarzeń, np. ruchu, swobodnego upadku. Wartość progowa służąca do wygenerowania sygnału przerwania jest ustawiana w rejestrze LDTH.

Następnym trybem, w jakim może działać akcelerometr, jest Pulse Detection Mode. Tryb pozwala na wykrywanie pojedynczego lub podwójnego impulsu o określonym czasie trwania, który przekroczył pewien próg. Próg ten ustawiany jest w rejestrze PDTH.

Ponadto sensor posiada tryb weryfikacji urządzenia – Self-Test. Pozwala on na sprawdzenie czy czujnik pod względem mechanicznym i elektronicznym działa poprawnie. Po ustawieniu bitu STON (rejestr MCTL) siła elektrostatyczna jest przykładana do belek powodując ich odchylenie niezależnie od działającego pola grawitacyjnego.

Do pobrania

O autorze