Professional Documents
Culture Documents
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
// // // // // //
Kade pozytywne zbocze zegara uruchamia blok Zwikszenie licznika gdy licznik osignie dan warto zanegowanie sygnau wyzerowanie licznika
end
74
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
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-
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
77