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