You are on page 1of 4

KURS

Czujnik przypieszenia (1)


Ukad odczytu iwywietlania
Newton, formuujc drug zasad dynamiki okrela zmian prdkoci w czasie zmian ruchu (mutationem motus). Obecnie uywamy pojcia przypieszenie i mamy odpowiednie przyrzdy do jego pomiaru. Akcelerometry, bo o nich mowa, s elementami stosowanymi w systemach nawigacji lotniczej, ale te w urzdzeniach powszechnego uytku, jak telefony komrkowe czy aparaty fotograficzne. W artykule opisano sposb odczytu informacji z akcelerometru o zmierzonym przypieszeniu. W pierwszej czci przedstawiono realizacj interfejsu do komunikacji pomidzy akcelerometrem Freescale MMA7455L a ukadem FPGA. W drugiej pokazano jak wygenerowa sygnay sterujce dla monitora VGA, aby wywietli na nim odczytane wartoci przypieszenia.
Projekt zrealizowano no pycie testowej HW-SPAR3AN-SK-UNI-G z ukadem XC3S700AN za pomoc oprogramowania ISE WebPACK oraz ChipScope Pro firmy Xilinx. Sterowanie interfejsem odbywa si za pomoc wskanika. Okrela on, zktrej pozycji bit rejestru cmd zostanie przesany oraz na ktrej pozycji rejestru dane_odczytane naley zapisa warto odebranego bitu. Co 8 cykli zegarowych dane z rejestru dane_ odczytane s przepisywane do zewntrznego rejestru dane. Rejestry s taktowane zewntrznym sygnaem zegarowym, ktry jest rwnie przesyany do urzdzenia slave wwczas, gdy jest aktywna komunikacja. Komunikacja jest uruchamiana, gdy zostanie ustawiony zewntrzny sygna init (ma poziom wysoki). Sygna CS opoziomie niskim rozpoczyna transfer danych, natomiast przez port SPC przesyany jest sygna zegarowy do urzdzenia slave, w takt ktrego prowadzona jest wymiana danych. Gdy sygna init ma poziom wysoki, to wskanik rejestrw zwiksza swoj warto przy kadej zmianie sygnau zegarowego z 1 na 0. Na listingu 2 pokazano opis generatora sygnau zegarowego dla moduu SPI. Listing 1. Interfejs SPI Interfejs SPI akcelerometru MMA7455L pozwala na zastosowanie zegara o czstotliwoci do 8 MHz. Zamy, e dysponujemy zegarem o czstotliwoci 50 MHz. Aby uzyska sygna taktujcy dla moduu obsugujcego interfejs SPI, zastosujmy licznik, ktry zlicza impulsy zegara oczstotliwoci 50 MHz. Gdy licznik osignie odpowiedni zawarto, jest zmieniany poziom logiczny sygnau tick1Mhz na przeciwny. Sygna tick1Mhz o czstotliwoci 1 MHz jest doczony do moduu SPI jako taktujcy. Prawidowo dziaania zaprojektowanego moduu SPI zostaa zweryfikowana za pomoc symulatora. Wynik przeprowadzonej symulacji przedstawiono na rysunku2. Podczas symulacji byo przesyane 8-bitowe sowo 11001101. Wyjcie moduu SDI byo doczone byo do wejcia SDO, dziki czemu mona byo sprawdzi czy modu prawidowo odbiera kolejno przychodzce bity oraz czy zapisuje je wodpowiednim rejestrze wchwili, gdy zostanie odebrany ostatni znich. Pocztkowo rejestr data zawiera warto nieokrelon, oznaczon w systemie szesnastkowym jako 8hXX. W chwili zainicjowania komunikacji, sygna CS przyjmuje warto 0 izaczyna by nadawany sygna zegarowy SPC. Z kadym kolejnym taktem zegara jest zwikszana zawarto licznika wskanika izmienia si stan wyjcia SDI oraz wejcia SDO. Gdy zostanie odebrany ostatni bit, komunikacja zostaje przerwana (CS na poziomie wysokim), sygna zegarowy przestaje by przesyany, ado rejestru data jest przepisywana odebrana zawarto rejestru przesuwajcego. Na rys. 2 jest szesnastkowa liczba 8hCD odpowiadajc wysyanemu sowu wpostaci dwjkowej.

Komunikacja zakcelerometrem interfejs SPI


W akcelerometrze wyniki pomiarw s umieszczane wspecjalnych rejestrach. Do ich odczytania uyjemy interfejsu SPI, przy czym akcelerometr bdzie pracowa wtrybie slave, natomiast ukad FPGA wtrybie master. Wtym interfejsie do komunikacji s uywane 4 sygnay SDO: (Slave Data Output), SDI (Slave Data Input), SCK (Serial Clock), tutaj oznaczony jako SPC (SPI Serial Clock) oraz CS (ang. Chip Select). Przebieg tych sygnaw podczas pojedynczej sesji wymiany danych przedstawiono na rysunku1. Interfejs SPI jest zbudowany w oparciu o8-bitowy rejestr przesuwajcy. Urzdzenie master przesya kolejne bity z tego rejestru do urzdzenia slave. Jednoczenie master odczytuje sygna SDO i zapisuje jego kolejne wartoci. Opis rejestrw przesuwajcych w jzyku Verilog pokazano we fragmencie definicji interfejsu SPI na listingu1.

Rysunek 1. Wysyanie iodbir 8 bitw poprzez SPI

assign CS = ~init; //Inicjalizacja komunikacji assign SDI = cmd[7-cmd_ptr]; //Przypisywanie wyjciu kolejnych stanw assign dane = (cmd_ptr==3b000) ? dane_odczytane : dane; // Gdy licznik wskanika przepeniony //odczytana porcja danych przesyana dalej always @ (negedge clk) dane_odczytane[7-cmd_ptr] = SDO; // wpisanie stanu wejcia do rejestru always @ (negedge clk) //Przesuwanie wskanika po rejestrze if(init) cmd_ptr = cmd_ptr + 1; else cmd_ptr = 3b0; assign SPC = (init) ? clk : 1b0; //Przesanie zegara

Listing. 2. Generator sygnau zegarowego


always @ (posedge CLK_50MHZ) begin cnt1MHz <= cnt1MHz + 1; if(cnt1MHz==6d24) begin tick1MHz <= !tick1MHz; cnt1MHz <= 6b0; end

Rysunek 2. Symulacja dziaania moduu SPI

// // // // // //

Kade pozytywne zbocze zegara uruchamia blok Zwikszenie licznika gdy licznik osignie dan warto zanegowanie sygnau wyzerowanie licznika

end

74

ELEKTRONIKA PRAKTYCZNA 1/2011

Czujnik przypieszenia
Automat stanw generowanie polece iodbieranie danych
Jest to modu ukadu sekwencyjnego zarzdzajcego komunikacj pomidzy akcelerometrem aukadem FPGA. Po dokonaniu pomiarw przyspieszenia przez akcelerometr MMA7455L, ich wyniki s umieszczane w przeznaczonych do ich przechowywania rejestrach, np. h06. W rejestrach rwnie s przechowywana dane konfigurujce akcelerometr. Okrelaj one ikontroluj tryb pracy akcelerometru, zakres pomiaru, czstotliwo ich powtarzania, wartoci poziomw detekcji oraz wybr rodzaju komunikacji. Dostp do rejestrw uzyskuje si poprzez przesanie 6-bitowego adresu. Zawarto rejestrw, wzalenoci od ich funkcji, moemy modyfikowa bd tylko odczytywa. Komenda, ktr naley przesa do akcelerometru, skada si z8 bitw: 6 znich jest wczeniej wspomnianym adresem rejestru, 1bit informuje czy rejestr ma by odczytany, czy modyfikowany oraz jeden nieistotny bit. Na rysunku3 przedstawiono przebieg sygnaw interfejsu SPI przy odczytywaniu (a) oraz zapisywaniu (b) danych do rejestru. Jako pierwszy jest przesyany bit R/Wokrelajcy rodzaj operacji. Kolejne 6 bitw okrela cel operacji, po czym nadawany jest nieistotny bit (oznaczony jako X). Nastpnie, wprzypadku zapisu, przesyane jest 8 bitw, ktre zostan wpisane do rejestru, bd te akcelerometr zwraca zawarto rejestru, ktrego odczyt zosta zadany. Akcelerometr MMA7455L ma 31 uytecznych rejestrw, zktrych waniejsze to: 1. Rejestry zawierajce wskazania akcelerometru wformacie 8-bitowym oadresach: h06, h07, h08, ktre s tylko do odczytu. 2. Rejestr h0D zawierajcy adres interfejsu I2C, adokadniej najbardziej znaczcy bit I2CDIS wyczajcy ten interfejs (wyczamy aby unikn bdw komunikacji przy uyciu interfejsu SPI). 3. Rejestr h16 kontrolujcy tryb, w ktrym dziaa akcelerometr. Jego zawarto przedstawiono wtabeli 1. Przy komunikacji s istotne cztery bity najmniej znaczce. Pierwsze dwa, oznaczone jako MODE, okrelaj tryb wjakim pracuje akcelerometr. Moliwe tryby to: 00 tryb oszczdzania energii, 01 tryb pomiarw, 10 tryb detekcji poziomu, 11 tryb detekcji impulsu. Bity GLVL[1] oraz GLVL[0] pozwalaj konfigurowa zakres pomiarowy bdcy wielokrotnoci g przyspieszenia ziemskiego: 00 zakres 8g, 10 zakres 4g, Nastpn czynnoci jest wyczenie interfejsu komunikacyjnego I2C. Gdy aktywne s obydwa interfejsy, za pomoc pinu CS wybiera si, ktry znich jest aktualnie uytkowany. Jednak aby unikn bdw komunikacyjnych zaleca si wyczenie interfejsu I2C podczas uytkowania SPI. Aby tego dokona naley przesa do akcelerometru cig 16 bitw, skadajcy si z adresu rejestru oraz jego nowej zawartoci (11101000 10011101). Po tej czynnoci akcelerometr wykonuje pomiary przypieszenia wosiach: X, Y oraz Z. Odczyt wynikw sprowadza si do przesaniu dania odczytania konkretnego rejestru iodebrania jego zawartoci. Aby niezawodnie wcza iwycza akcelerometr (przeczanie pomidzy trybem upienia, a pomiarw) zastosujemy ukad sekwencyjny (automat stanw, maszyna stanw) obsugujcy komunikacj midzy akcelerometrem, asterownikiem wukadzie programowalnym. Do jego zada nale: wczanie iwyczanie akcelerometru (przechodzenie z trybu oszczdzania energii do pomiarw i odwrotnie) oraz cykliczny odczyt wskaza. Schemat dziaania automatu zaprezentowano na rysunku4. Automat ma 4 stany. Po zaczeniu zasilania jest w stanie Czekaj. Gdy przecznik

Rysunek 3. Wymiana danych

Rysunek 4. Grad automatu obsugujcego komunikacj

Tabela 1. Zawarto bitw rejestru h16


Bit 7 Bit 6 DRPD Bit 5 SPI3W Bit 4 STON

01 zakres 2g. Pozostae bity w tym rejestrze umoliwiaj przeczanie pomidzy trybami SPI, zezwalaj na przeprowadzanie testu prawidowoci dziaania akcelerometru oraz ustawia wyprowadzanie informacji o odczytach dokonywanych za pomoc przerwa. Po wczeniu zasilania akcelerometr jest w trybie oszczdzania energii, w ktrym nie s dokonywane adne pomiary. Aktywne s tylko interfejsy komunikacyjne I2C iSPI. Aby zaczy akcelerometr, naley zmodyfikowa zawarto rejestru h16. Najpierw jest przesyana komenda dotyczca zamiaru modyfikacji rejestru oraz zawiera- Rysunek 5. Schemat dziaania wstanie Czekaj jca adres celu, zakoczona bitem bez znaczenia czyli 10101100. SW zostanie ustawiony, automat przechoKolejne 8 bitw jest now zawartoci dzi w stan Zacz, w ktrym s przesyane modyfikowanego rejestru. Akcelerometr zokomendy uruchamiajce akcelerometr. Gdy stanie ustawiony wtryb pomiarw (01) wzaprzecznik SW pozostaje wstanie 1, automat kresie 2g (01): 00000101. przechodzi pomidzy stanami Czekaj iTransfer, cyklicznie odczytujc wskazania akcelerometru. Gdy przecznik zostanie wyczony, automat przejdzie w stan Wycz w ktrym Bit 3 Bit 2 Bit 1 Bit 0 przesane zostan komendy przeczajce akGLVL[1] GLVL[0] MODE[1] MODE[0] celerometr w stan oszczdzania energii. Na-

ELEKTRONIKA PRAKTYCZNA 1/2011

75

KURS

Rysunek 7. Schemat czynnociowy wstanie Wycz Rysunek 6. Schemat czynnociowy wstanie Zacz stpnie automat pozostanie w stanie Czekaj a do zmiany stany przeczenia SW. W stanie Czekaj, ktrego schemat pokazano na rysunku 5, jest realizowany odstp czasu midzy wysyaniem kolejnych komend do akcelerometru, gdy potrzebuje on czasu, aby przej z trybu oszczdzania energii do trybu pomiarw. Ponadto, pomiary s wykonywane z okrelon czstotliwoci, dlatego prby zbyt czstego odczytu rejestrw, gdy akcelerometr umieszcza w nich wyniki pomiarw, bd powodowa bdy. Gdy rejestry zawierajce ostatnio dokonane pomiary zostan odczytane, ich zawarto jest zerowana, awic prba zbyt wczesnego odczytu skutkuje bdnym wynikiem. Stan Czekaj jest pocztkowym po zaczeniu zasilania. Wtym stanie jest inkrementowany jest licznik l_czekaj i gdy osignie warto maksymaln, jest sprawdzany stan przecznika SW. W zalenoci od jego stanu czy zmiany, nastpuje odpowiednia akcja. Jeeli SW pozostaje wyczony, to jest zerowany licznik l_czekaj iodliczanie rozpoczyna si od pocztku. Gdy przecznik SW zostanie zaczony, automat przejdzie do stanu Zacz. W tym stanie s przesyane komendy zaczajce akcelerometr i ustawiajce go w danym trybie. Dla uniknicia bdw komunikacyjnych jest wyczany interfejs I2C. Po przejciu do tego stanu sygna Komunikacja jest ustawiany, co powoduje rozpoczcie przesyania sygnau zegarowego do akcelerometru. Jednoczenie wrejestrze przesuwajcym moduu SPI umieszczana jest pierwsza komenda modyfikacji rejestru kontrolujcego tryb dziaania akcelerometru. Wyzerowany licznik l_zaacz jest inkrementowany. Gdy licznik osignie warto 7, co bdzie oznacza, e liczc od 0 zliczy ju 8 taktw zegara, wrejestrze przesuwajcym jest umieszczone sowo konfigurujce akcelerometr. Jest on przeczany do trybu pomiarw ozakresie 2g. Nastpnie wysyane s komendy wyczajce interfejs I2C, aby po zliczeniu 32 taktw zakoczy poczenie i przej do stanu Czekaj. W stanie Wycz czynnoci s analogiczne jak wstanie Zacz. Rni si tyme, e do rejestru kontrolujcego tryb dziaania jest wysyany cig bitw powodujcy przejcie wtryb oszczdzania energii. Na rysunku 8 Rysunek 8. Schemat czynnociowy wstanie Transfer przedstawiono schemat dziaa, ktre s wykonywane wstanie Transfer. Do akcelerometru s wysyane komendy powodujce odczyt zawartoci rejestrw zawierajcych wskazania akcelerometru. Podobnie jak wstanach Zacz oraz WyRysunek 9. Wskazania wywietlane na cz najpierw nastpuje zerowanie licznika ekranie monitora oraz inicjalizacja komunikacji. Pierwsza jest przesyana komenda odczytu rejestru zawiejcego Odebrane do rejestru Warto_X, rozrajcego warto przypieszenia wosi X. Ta poczynane jest wysyanie komendy odczytu komenda, umieszczona w rejestrze przesurejestru zwynikiem dla osi Y. wajcym, gdy licznik l_transfer by wyzeroPo odczytaniu wszystkich bitw przywany spowoduje, e odpowied akceleromepieszenia w osi Y, wysyana jest komenda tru bdzie dostpna wchwili, gdy licznik bodczytu wartoci osi Z, apo ich odczytaniu dzie mia warto 16. Jednoczenie, podczas komunikacja jest przerywana iautomat przeprzepisywania zawartoci rejestru przesuwachodzi wstan Czekaj. ELEKTRONIKA PRAKTYCZNA 1/2011

76

Czujnik przypieszenia
Listing 3. Fragment opisu automatu stanu wVerilogu
. . . always @ (posedge CLK_50MHZ) state_reg <= state_next;

always @ (negedge tick1MHz) begin state_next <= state_reg; case(state_reg) zacz: begin case(cmd_num) 8h00: begin komunikacja <= 1b1; Do_przesania <= {1b1,6h16,1b0}; end 8h07: Do_przesania <= {4b0000,2b10,2b01}; 8h0f: Do_przesania <= {1b1,6h0d,1b0}; 8h17: Do_przesania <= 8b10011101; 8h1f: begin Komunikacja <= 1b0; state_next <= Czekaj; Do_przesania <= 8b0; now_on <= 1b1; now_off <= 1b0; cmd_num = 8b0; end endcase cmd_num = (komunikacja) ? cmd_num + 1 : 8b0 ; end . . . transfer: begin case(cmd_num) 8h00: begin Komunikacja <= 1b1; Do_przesania <= {1b0,6h06,1b0}; end 8h07: Do_przesania <= 8h00; 8h10: begin Warto_X<= Odebrane; Do_przesania <= {1b0,6h07,1b0}; end 8h17: Do_przesania <= 8h00; 8h20: begin Warto_Y <= Odebrane; Do_przesania <= {1b0,6h08,1b0}; end 8h27: Do_przesania <= 8h00; 8h30: Warto_Z <= Odebrane; 8h37: Do_przesania <= 8h00; 8h3f: begin cmd_num = 8h00; Komunikacja <= 1b0; state_next <= Czekaj; end endcase cmd_num = (Komunikacja) ? cmd_num + 1 : 8b0 ; end . . . SPI spi1( .clk (tick1MHz), .init (Komunikacja), .cmd (Do_przesania), .SDO (SDO), .CS (CS), .SDI (SDI), .SPC (SPC), .data (Odebrane) );

Fragment opisu implementacji automatu stanu zarzdzajcego komunikacj zamieszczono na listingu3. Jest on zgodny ze schematami zaprezentowanymi wczeniej. Rnic jest tylko to, e wkadym ze stanw jest uywany ten sam licznik sterujcy umieszczaniem wrejestrze Do_przesania odpowiedniej komendy. Zastosowanie jednego rejestru onazwie cmd_num pozwolio na skrcenie dugoci kodu ijego ujednolicenie. Nie przeszkadza to, gdy przy przejciach z jednego stanu do drugiego licznikjest zerowany. Po zaimplementowaniu wFPGA moduu obsugi poczenia zakcelerometrem, ktry umoliwia wysyanie polece iodbieranie wynikw pomiaru mamy zapisywane w rejestrach ukadu programowalnego: Warto_X, Warto_Y, Warto_Z. Aby zobaczy te wyniki, wywietlmy je na ekranie monitora. Zrzut ekranu wywietlajcego wyniki pomiaru przedstawiono na rysunku9, arealizacj moduu obsugi wywietlania na ekranie monitora VGA zaprezentujemy wnastpnym artykule.

SUNON

Chrystian Ruminowicz Piotr Pietrzyk


ELEKTRONIKA PRAKTYCZNA 1/2011

77

You might also like