Popularny post Nawyk Napisano Wrzesień 1, 2010 Popularny post Udostępnij Napisano Wrzesień 1, 2010 Z akcelerometrami typu MEMS mamy dziś do czynienia niemal na każdym kroku. Spadek cen tej technologii w ciągu ostatnich czterech lat sprawił, że stały się one powszechnie wykorzystywane w wielu urządzeniach - wszędzie tam, gdzie potrzebna jest możliwość wykrycia i pomiaru ruchu, wibracji lub zmiany położenia obiektu. Spotkać je można w motoryzacji, fotografii (np. stabilizacja obrazu) czy telefonii komórkowej, a od niedawna - coraz częściej w amatorskiej robotyce. Życzę miłej lektury, Damian Nowak (Nawyk) Układ LIS35DE to trójosiowy akcelerometr typu MEMS, produkowany przez firmę STMicroelectronics. Pozwala wykryć drgania oraz określić nachylenie urządzenia względem pola grawitacyjnego Ziemi. Do komunikacji z innymi układami wykorzystuje dwa interfejsy - SPI i I2C. Posiada obudowę typu (T)LGA-14 - dość kłopotliwą w montażu w warunkach amatorskich; na szczęście z pomocą przyszła nam firma Kamami, która jest dystrybutorem KAmodMEMS2 - modułu wykorzystującego ten układ. Najważniejsze cechy: – napięcie zasilania 2.16V - 3.6V – pobór mocy <1mW – cyfrowy interfejs SPI/I2C – programowalne generatory przerwań – wykrywanie pojedynczego i podwójnego "kliknięcia" – wbudowany filtr górnoprzepustowy – odporność na wstrząsy 10000g Na stronie internetowej Kamami można znaleźć dokumentację techniczną modułu oraz przykładowe programy napisane w języku C. Żeby poszerzyć grono potencjalnych użytkowników tego układu o osoby początkujące, napisałem prosty program w języku BASCOM-AVR. Pozwala on na pomiar przyspieszenia w każdej z trzech osi (wartości przechowywane w trzech zmiennych), a dzięki "modułowej" budowie nie powinien sprawiać problemów w implementacji dla Waszych projektów. Ze względu na wymagane zasilanie akcelerometru rzędu 3,3V, dla uproszczenia zrezygnowałem z konwerterów napięć i zastosowałem mikrokontroler dostosowany do takiego samego napięcia - Atmega32L. Widocznej na zdjęciach i filmie płytki rozwojowej ZL3AVR użyłem tylko do podłączenia LCD (ma wygodnie rozmieszczone piny, nie musiałem lutować złącza LCD na PCB z mikrokontrolerem). Zasilanie to stabilizator typu low-dropout, LD1117VC33; Układ zasilam ze stabilizowanych 5V lub programatora (założona zworka JP3 na schemacie poniżej). Kwestię podłączenia zasilania do podświetlenia LCD (pin 15 i 16) musicie rozważyć sami - zależnie od modelu i firmy posiadanego wyświetlacza. Potencjometr jest praktycznie dowolny, można użyć np. 10kOhm. Na linii zasilania, między VCC i GND nie zaszkodzi dodać kilku kondensatorów 100nF, ale układ nie powinien sprawiać problemów bez nich. Schemat: Efekt jaki osiągniemy widać na filmie (ze względu na mały wyświetlacz, wyświetlam tylko wartość przyspieszenia dla osi X): Program przedstawiony jest poniżej (wersja *.bas i skompilowana dla ATmega32L *.hex dostępna w załączniku): $regfile = "m32def.dat" $crystal = 8000000 Config Porta = Output Config Sda = Portc.1 'konfiguracja I2C Config Scl = Portc.0 I2cinit Gosub Akcelstart Dim X As Byte 'zmienna zawierająca wartość przyspieszenia w osi X po odczycie z akcelerometru Dim Y As Byte Dim Z As Byte Do Cls Gosub Odczytx 'Gosub Odczyty 'Gosub Odczytz Lcd X Waitms 100 Loop End Akcelstart: Const Zapisadr = &H3A 'rejestr zapisu Const Odczytadr = &H3B 'rejestr odczytu I2cstart I2cwbyte Zapisadr I2cwbyte &H20 I2cwbyte &B01000111 'wyjście z trybu power-down I2cstop Return Odczytx: 'Odczytuje wartość przyspieszenia w osi X I2cstart I2cwbyte Zapisadr I2cwbyte &H29 I2cstart I2cwbyte Odczytadr I2crbyte X , Nack I2cstop Return Odczyty: 'Odczytuje wartość przyspieszenia w osi Y I2cstart I2cwbyte Zapisadr I2cwbyte &H2B I2cstart I2cwbyte Odczytadr I2crbyte Y , Nack I2cstop Return Odczytz: 'Odczytuje wartość przyspieszenia w osi Z I2cstart I2cwbyte Zapisadr I2cwbyte &H2D I2cstart I2cwbyte Odczytadr I2crbyte Z , Nack I2cstop Return Interesują nas etykiety "Odczytx", "Odczyty", "Odczytz" oraz "Akcelstart". Ostatnią musimy wywołać na początku zaraz po zainicjowaniu I2C, w celu "obudzenia" akcelerometru. Trzy pozostałe służą do przypisania zmiennym X, Y i Z wartości przyspieszenia dla odpowiednich osi i wywołujemy je niezależnie od siebie, gdy zachodzi taka potrzeba. Dla zaprezentowania zastosowania akcelerometrów w robotyce amatorskiej, zbudowałem prostego robota wykorzystującego ATmega32L oraz mostek L293DNE. Wykorzystałem uC w obudowie TQFP, płytkę uniwersalną (stąd tyle przewodów), dwa przerobione mikroserwa modelarskie, kółko podporowe ze sklepu meblarskiego oraz koła do modeli samochodów skali 1:16. Zadaniem konstrukcji jest regulowanie prędkości obrotowej kół, w zależności od nachylenia podłoża - podjazdowi pod górę będą towarzyszyły wyższe obroty (oraz większy moment obrotowy), przy zjeździe koła będą obracać się wolniej. Schemat przedstawia się następująco: Program robota: $regfile = "m32def.dat" $crystal = 8000000 Config Porta = Output Config Portb = Output Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Config Sda = Portc.1 'konfiguracja I2C Config Scl = Portc.0 I2cinit Gosub Akcelstart Set Portb.2 Set Porta.6 Reset Portb.3 Reset Porta.7 Dim X As Byte 'zmienna zawierająca wartość przyspieszenia w osi X po odczycie z akcelerometru Do Gosub Odczytx Pwm1a = 255 - X Pwm1b = 255 - X Waitms 100 Loop End Akcelstart: Const Zapisadr = &H3A 'rejestr zapisu Const Odczytadr = &H3B 'rejestr odczytu I2cstart I2cwbyte Zapisadr I2cwbyte &H20 I2cwbyte &B01000111 'wyjście z trybu power-down I2cstop Return Odczytx: 'Odczytuje wartość przyspieszenia w osi X I2cstart I2cwbyte Zapisadr I2cwbyte &H29 I2cstart I2cwbyte Odczytadr I2crbyte X , Nack I2cstop Return Efekt końcowy: Zaprezentowane powyżej zastosowanie akcelerometru jest chyba jednym z najprostszych, chciałem jednak pokazać, jak łatwo można z tego urządzenia skorzystać. Od dzisiaj wystarczy podstawowa znajomość BASCOM'a - reszta zależy od Waszych pomysłów i wyobraźni 🙂 Podsumowując: ➕ cena i dostępność modułu (34,90zł), ➕ wygodne wyprowadzenia dla interfejsów SPI i I2C, ➕ małe (jak na element systemu rozwojowego) rozmiary i waga, ➕ przejrzysta dokumentacja i przykłady programów w języku C, ➖ utrudniony montaż modułu (brak otworów, jedynie gumowe nóżki) - choć można to tłumaczyć edukacyjnym charakterem urządzenia. robot.zip odczyt_xyz.zip 4 Link do komentarza Share on other sites More sharing options...
dziadek46 Wrzesień 1, 2010 Udostępnij Wrzesień 1, 2010 Nawyk, ten art rozjaśnił mi jak to działa, ale jeszcze wiele nie rozumiem z tej technologii, bardzo ciekawej technologii!.Duże dzięki za ten artykuł, bardzo ciekawy i co za tym idzie bardzo przydatny dla nie elektroników do których się zaliczam a mocno próbuję zgłębić wiedzę z tej szeroko pojętej i obecnej w życiu codziennym technologii. Nie zatrzymuj się proszę na tym jednym arcie! Pozdrawiam. Link do komentarza Share on other sites More sharing options...
KD93 Wrzesień 1, 2010 Udostępnij Wrzesień 1, 2010 Super sprawa, jak widać obsługa nie nastręcza problemów, a cena modułu bardzo przyzwoita. Link do komentarza Share on other sites More sharing options...
Dotli Wrzesień 17, 2010 Udostępnij Wrzesień 17, 2010 bardzo spodobał mi się owy artykuł , dużo zrozumiałem . Mam jednak jedno pytanie gdy przy drugim przykładzie jaki zaprezentowałeś , brak koła skrętnego spowodowało by to że robot sprawował by się jak segwey ? Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
chodki Październik 12, 2010 Udostępnij Październik 12, 2010 bardzo spodobał mi się owy artykuł , dużo zrozumiałem . Mam jednak jedno pytanie gdy przy drugim przykładzie jaki zaprezentowałeś , brak koła skrętnego spowodowało by to że robot sprawował by się jak segwey ? Tak byłby jak segway ale,to nie takie proste. Moge się przyznać, że walcze z próbą budowy robota balansującego już chyba od lutego... Jak narazie dużo się dowiedziałem, aktualnie powstaje druga zupełnie inna konstrukcja.. 😋 P.S Nawyk a wiesz może jak często można zczytywać dane z akcelerometru? Link do komentarza Share on other sites More sharing options...
MirekCz Październik 12, 2010 Udostępnij Październik 12, 2010 Dane z akcelerometru to zależnie od typu i ew. ustawień. Przeważnie do kilkuset Hz. Na samym akcelerometrze trudno zrobić robota balansującego. Potrzebujesz jeszcze żyroskopu. Link do komentarza Share on other sites More sharing options...
chodki Październik 13, 2010 Udostępnij Październik 13, 2010 Akurat akcelerometr mam z mobot-tu, jednak ma on chyba zbyt mocny filtr sygnałów, dlatego pytam jak jest z innymi.. 😋 O żyroskopie wiem... 😉 Link do komentarza Share on other sites More sharing options...
Nawyk Październik 13, 2010 Autor tematu Udostępnij Październik 13, 2010 chodki, właśnie do tego służą powszechnie dostępne noty katalogowe, żeby sobie sprawdzić 😉 Link do komentarza Share on other sites More sharing options...
chodki Październik 13, 2010 Udostępnij Październik 13, 2010 Tak masz racje, samą notę akcelerometru jako scalaka znajdę bez problemu. Dowiem się o ilości pomiarów na sekunde, tylko nic mi to nie da! Jeżeli mówimy o jakims gotowym układzie to już nie jest tak kolorowo, już to przetestowałem. Link do komentarza Share on other sites More sharing options...
MirekCz Październik 13, 2010 Udostępnij Październik 13, 2010 Nie znam modułu mobota, ale w zależności od użytego układu powinno się dać to ustawić. W razie problemów możesz kupić w moim sklepie układ cyfrowy ADXL345 z ustawianiem cyfrowym ilości odczytów, albo analogowy typu ADXL325/ADXL335 to wlutuję filtr RC ustalający częstotliwość według Twoich potrzeb. Link do komentarza Share on other sites More sharing options...
BlackJack Listopad 8, 2010 Udostępnij Listopad 8, 2010 Fajna sprawa, akcelerometr + czujnik z myszy optycznej i mamy wszystko co trzeba, możemy liczyć wektory i kierunki sił, a od tego już tylko krok do PGP (procesor geometrii przestrzeni). Jedyne co mi się w zestawach Kamami nie podoba to złącza. Dla mnie w zupełności niepotrzebnie są polutowane golpiny czy inne złącza. Płytki mogłyby być sprzedawane bez nich, wtedy dolutowywało by się samemu tylko to co trzeba i z tej strony PCB na której wygodniej tzn. aby wygodniej sobie moduł zamontować w urządzeniu docelowym. Link do komentarza Share on other sites More sharing options...
Nawyk Listopad 8, 2010 Autor tematu Udostępnij Listopad 8, 2010 Widać, że moduł został stworzony do innego celu niż montaż w gotowym urządzeniu - przede wszystkim nie ma jak go przymocować (brak otworów, są tylko gumowe nóżki) oraz to co mówisz - wyprowadzone złącza I2C oraz SPI i to razy dwa (zwykłe złącza gp oraz zmodyfikowane, pasujące do zestawów uruchomieniowych KAMAMI, np. ZL15AVR). Sam układ akcelerometru ma wymiary ok. 5x3x1mm, a płytka 50x30x20, także to co piszesz mijałoby się z celem 😉 Link do komentarza Share on other sites More sharing options...
nes86 Listopad 10, 2010 Udostępnij Listopad 10, 2010 Nawyk, piszesz, że układ jest w kłopotliwej do montażu obudowie, ale według noty widzę, że wyprowadzenia są podobne do tych w typowych obudowach QFN, a z lutowaniem takich sobie radzę. Czy w tym kłopotliwym montażu chodzi tylko o wyprowadzenia czy może o coś jeszcze? Bo zastanawiam się nad wykorzystaniem tego układu w robocie minisumo. A może napiszesz jeszcze o ile jesteś zorientowany w temacie (bo ja nie) jak ten układ wypada na tle innych, czy są lepsze układy (szybsze, dokładniejsze itd.) albo z innymi interfejsami? O jakim module mobota piszecie? bo ja, żadnego nie mogę znaleźć na ich stronie. Link do komentarza Share on other sites More sharing options...
OldSkull Listopad 10, 2010 Udostępnij Listopad 10, 2010 @nes: chcesz wykrywać przechylenie? Jeśli potrzebujesz akcelerometr to mam MMA7361LC - 3-osiowy analogowy 1.5g/6g 800mV/g / 206mV/g. Z próbek 🙂 Mogę Ci podrzucić, ew. sobie zamów z Freescale'a (cyfrowe też mają). Obudowa jedynie na tyle kłopotliwa, że musiałem lutować nagrzewając ścieżkę obok i majac nadzieję, że się zlutuje od spodu. Link do komentarza Share on other sites More sharing options...
MirekCz Listopad 10, 2010 Udostępnij Listopad 10, 2010 nes86: Możesz przejrzeć dokumentację. Układ ten wypada słabo i np. w porównaniu z cyfrowym ADXL345 ma kilkukrotnie gorszą rozdzielczość (18mg zamiast 4mg). Jeszcze lepsze są LIS331DLH zapewniające rozdzielczość do 1mg. Ten moduł fajnie nadaje się do wykrywania orientacji urządzenia, ale dużo więcej z tym nie zrobisz. Lutowanie standardowe, nie ma żadnych udziwnień. Jak QFN lutujesz to te wszystkie obudowy też polutujesz. Mobot kiedyś miał moduł na MMA7260QT, ale ten scalak wyszedł rok temu z produkcji i najwyraźniej nie opłacało im się zastępować tego czymś innym. 1 Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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ę »