Prototypowanie układów elektronicznych, sprawozdanie

12

description

jak w tytule

Transcript of Prototypowanie układów elektronicznych, sprawozdanie

Page 1: Prototypowanie układów elektronicznych, sprawozdanie

Laboratorium Prototypowania ukªadów elektronicznych

Gawlewicz Adam, Lasyk Jerzy, Smaro« Piotr

04-12-2012

Grupa 3, Poniedziaªek 8:30

1

Page 2: Prototypowanie układów elektronicznych, sprawozdanie

1 �wiczenie nr 1: �1-Wire�

1.1 Cel ¢wiczenia

Celem ¢wiczenia byªo zapoznanie si¦ z zasad¡ dziaªania magistrali 1-Wire. Naszym zadaniembyªo odczytanie unikalnego, 64-bitowego numeru identy�kacyjnego ukªadu DS18B20, zapisanegow wewn¦trznej pamieci ROM.

1.2 Wykonanie ¢wiczenia

W celu wykonania ¢wiczenia nale»aªo zmody�kowa¢ plik bazowy napisany w j¦zyku C. Przedewszystkim nale»aªo nawi¡za¢ komunikacj¦ z urz¡dzeniem poprzez cykliczne wysyªanie komendyodczytu numeru seryjnego. Poni»ej fragment kodu odpowiadaj¡cy za inicjalizacj¦:

int i=0;

DQ=0;

for(;i<30;i++)

{

_delay_us10();

}

Inicjalizacja polega na wymuszeniu na linii stanu niskiego przez co najmniej 480µs, po czymnast¦puje oczekiwanie na odpowied¹ ukªadu slave:

DQ=1;

for( i=0 ; i<50 ; i++ )

{

_delay_us10();

}

Oczekiwanie polega na utrzymaniu stanu wysokiego. Je±li na linii urz¡dzenie slave wymusi stanniski, oznacza to jego obecno±¢.

Po udanej inicjalizacji nast¦puje wysªanie polecenia odczytania numeru id, co jest równowa»newysªaniu kodu 33h:

one();

one();

zero();

zero();

one();

one();

zero();

zero();

2

Page 3: Prototypowanie układów elektronicznych, sprawozdanie

gdzie poszczególne funkcje zde�niowane s¡ nast¦puj¡co:

void one( void )

{

DQ=0;

_delay_us10();

DQ=1;

_delay_us10();

_delay_us10();

_delay_us10();

_delay_us10();

_delay_us10();

_delay_us10();

_delay_us10();

}

void zero( void )

{

DQ=0;

_delay_us10();

_delay_us10();

_delay_us10();

_delay_us10();

_delay_us10();

_delay_us10();

_delay_us10();

_delay_us10();

_delay_us10();

DQ=1;

_delay_us10();

_delay_us10();

}

Nale»y przy tym pami¦ta¢, »e wysyªanie komendy zaczyna si¦ od najmªodszego bitu. Nast¦pnienast¦puje procedura odczytu wysªanej warto±ci przez ukªad slave:

void readROM( int licznik )

{

DQ=0;

_delay_us2();

DQ=1;

_delay_us10();

_delay_us10();

_delay_us10();

3

Page 4: Prototypowanie układów elektronicznych, sprawozdanie

_delay_us10();

_delay_us10();

_delay_us10();

if( DQ == 1 )

{

tablica[licznik] = 1;

}

else

tablica[licznik] = 0;

}

}

Odczyt polega na wymuszeniu stanu niskiego na linii na czas od 1 do 15 µs, po czym wymusze-niu stanu wysokiego na min 45µs, w taki sposób, aby caªa procedura nie trwaªa krócej ni» 60µs.Po upªywie tego czasu odczytujemy warto±¢ sygnaªu DQ. Wszystkie odczytane warto±ci zapisu-jemy do tablicy. Nast¦pnie tablica ta zostaje przekazana do funkcji, która odpowiedzialna jest zawy±wietlenie zapisanych w niej znaków:

void kod2bin( )

{

int i=0;

char znak[2];

for( ; i<64 ; i += 4)

{

bin = tablica[i]+tablica[i+1]*10+tablica[i+2]*100+tablica[i+3]*1000;

znak[0] = bin2hex();

znak[1] = '\0';

lcd_printxy_c1((i+1)/2,2,znak);

}

}

Funkcja ta do korzysta z dodatkowej funkcji odpowiadaj¡cej za odkodowanie znaków:

char bin2hex( )

{

switch( bin )

{

case 1111 : return 'F';

case 1110 : return 'E';

case 1101 : return 'D';

case 1100 : return 'C';

4

Page 5: Prototypowanie układów elektronicznych, sprawozdanie

case 1011 : return 'B';

case 1010 : return 'A';

case 1001 : return '9';

case 1000 : return '8';

case 0111 : return '7';

case 0110 : return '6';

case 0101 : return '5';

case 0100 : return '4';

case 0011 : return '3';

case 0010 : return '2';

case 0001 : return '1';

case 0000 : return '0';

}

return 'Z';

}

1.3 Podsumowanie

Wykonanie ¢wiczenia nie udaªo si¦ w caªo±ci. My±limy, »e gªównym powodem byªo nie zacho-wanie odpowiednich ram czasowych w trakcie odczytu danych urz¡dzenia slave. Na oscyloskopieotrzymywali±my same jedynki, tzn. slave nie utrzymywaª stanu niskiego na linii przez odpowiedniczas.

2 �wiczenie nr 2: �LabView�

2.1 Cel ¢wiczenia

Celem ¢wiczenia byªo zrealizowanie generatora PWM, o zmiennym wspóªczynniku wypeªnienia,oraz stworzenie logiki odpowiadajacej za odczyt pozycji z enkodera kwadraturowego.

2.2 Wykonanie ¢wiczenia

2.2.1 Realizacja PWM

Generator PWM zostaª w pierwszej fazie wykonany na komputerze, a nast¦pnie przeniesiony naukªad FPGA. Poni»ej schemat ukªadu blokowego:

5

Page 6: Prototypowanie układów elektronicznych, sprawozdanie

dziaªaª !

2.2.2 Realizacja enkodera

Podobnie jak w przypadku generatora PWM, logika odpowiadaj¡ca za odczyt sygnaªów z enkoderapocz¡tkowo zaprojektowana zostaªa na komputerze, a nast¦pnie przeniesiona na ukªad FPGA:

2.2.3 Panel operatorski

W panelu operatorskim mo»na ustawi¢ wypeªnienie generatora PWM od 0 do 100%, zmieni¢okres sygnaªu PWM oraz zmienia¢ kierunek ruchu silnika. Dodatkowo mo»liwe jest zatrzymanie

6

Page 7: Prototypowanie układów elektronicznych, sprawozdanie

dziaªania logiki. Na wykresie wy±wietlane s¡ dwie fale, A oraz B, enkodera, poni»ej natomiastzliczona warto±¢.

2.3 Podsumowanie

�wiczenie zostaªo wykonane w peªni poprawnie. Wszystkie elementy zachowywaªy si¦ zgodnie zzaªo»eniami, co zostaªo potwierdzone testami aplikacji.

3 �wiczenie nr 3: �Xilinx�

3.1 Cel ¢wiczenia

Celem ¢wiczenia byªo zrealizowanie logiki odpowiadaj¡cej za sterowanie silnikiem za pomoc¡ sy-gnaªu z generatora PWM, nast¦pnie odczyt sygnaªów z dwu enkoderów. Ko«cowym zadaniembyªo stworzenie ukªadu nad¡»nego.

3.2 Wykonanie ¢wiczenia

Gªówna cz¦±¢ odpowiadaj¡ca za generator PWM przedstawia si¦ nast¦puj¡co:

Wypelnienie(11 downto 8) <= Switch(3 downto 0);

...

if (I = Dzielnik) then

Okres <= Okres+1;

I := "00000000";

end if;

if (Okres > Wypelnienie) then

PWM <= '1';

7

Page 8: Prototypowanie układów elektronicznych, sprawozdanie

else

PWM <= '0';

end if;

if (Okres = "111111111111") then

Okres <= "000000000000";

end if;

Wypeªnienie sygnaªu zostaªo zapisywane do 12-bitowej warto±ci, której 4 najstarsze bity mo»nabyªo regulowa¢ poprzez zmian¦ przeª¡czników hebelkowych znajduj¡cych si¦ na ukªadzie FPGA.

Druga cz¦±¢, odpowiadaj¡ca za sczytywanie warto±ci z ekondera:

A := Enc1_A & A(0);

B := Enc1_B & B(0);

C := Enc2_A & C(0);

D := Enc2_B & D(0);

temp := A & B;

temp2 := C & D;

if( temp = "1000" or temp = "1110" or temp = "0111" or temp = "0001" ) then

enkoder1 := enkoder1 + 1;

end if;

if( temp = "0010" or temp = "1011" or temp = "1101" or temp = "0100" ) then

enkoder1 := enkoder1 - 1;

end if;

if( temp2 = "1000" or temp2 = "1110" or temp2 = "0111" or temp2 = "0001" ) then

enkoder2 := enkoder2 + 1;

end if;

if( temp2 = "0010" or temp2 = "1011" or temp2 = "1101" or temp2 = "0100" ) then

enkoder2 := enkoder2 - 1;

end if;

...

A(0) := A(1);

B(0) := B(1);

C(0) := C(1);

D(0) := D(1);

Na podstawie obu cz¦±ci kodu, starali±my si¦ wykona¢ ukªad nad¡»ny, którego cz¦±ci kodu za-mieszczamy poni»ej:

8

Page 9: Prototypowanie układów elektronicznych, sprawozdanie

wzmocnienie := "00000001";

...

uchyb := enkoder1 + enkoder2;

...

if( uchyb < 0 ) then

Dir <= '1';

else

Dir <= '0';

end if;

...

if (Okres = "111111111111") then

Okres <= "000000000000";

Wypelnienie <= uchyb*wzmocnienie;

end if;

3.3 Podsumowanie

Udaªo nam si¦ zrealizowa¢ generator PWM oraz logik¦ odpowiadaj¡c¡ za odczyt enkoderów, na-tomiast ukªad nad¡»ny nie dziaªaª do ko«ca poprawnie. My±limy, »e powodem bª¦dnego dziaªaniabyªa ¹le dobrana zmiana kierunku.

4 �wiczenie nr 4: �ADµC�

4.1 Cel ¢wiczenia

Celem ¢wiczenia byªo zrealizowanie kilku zada«:

1. generacja fali sinusoidalnej, 8-bitowej na jednym wyj±ciu,

2. generacja fali sinusoidalnej, 12-bitowej na jednym wyj±ciu,

3. generacja dwóch sinusoidalnych, 12-bitowych fal oraz

4. generacja dwóch sinusoidalnych, 12-bitowych fal przesuni¦tych wzgl¦dem siebie o 90o.

4.2 Wykonanie ¢wiczenia

4.2.1 Sinus 8-bitowy

MOV DACCON, #11111111b ;ustawienie na 8-bit

MOV DAC0L, #00000000b ;wyzerowanie warto±ci wyj±ciowej z przetwornika

MOV DAC0H, #00000000b

MOV DPTR, #Sin8bit ;ustawienie wska¹nika na pocz¡tek tablicy sinus

9

Page 10: Prototypowanie układów elektronicznych, sprawozdanie

MOV R1, #0

LOOP:

CLR A

MOVC A, @A+DPTR ; aktualna wartosac sinusa

INC DPL ; zwiekszenie DPTR ,

MOV DAC0L,A ; wyslanie danych na przetwornik

MOV R1,DPL ;inkrementacja R1

CJNE R1,#64, LOOP ;je±li R1 nie doliczyªo do 64, skacz

MOV DPTR, #Sin8bit ;je±li R1 osi¡gn¦ªo 64, ustaw wska¹nik na pocz¡tek tablicy sin

AJMP LOOP

4.2.2 Sinus 12-bitowy

Sinus 12-bitow ró»ni si¦ od poprzedniego kilkoma rzeczami:

MOV DACCON, #01111111b ;konfiguracja na 12-bit

MOV DAC0L, #00000000b

MOV DAC0H, #00000000b

MOV DPTR, #Sin12bit ;ustawienie na pocz¡tek tablicy 12-bitowego sin

MOV R1,#0

LOOP:

CLR A

MOVC A,@A+DPTR

MOV DAC0H, A

INC DPTR ; wska¹nik jest inkrementowany 2 razy

CLR A

MOVC A, @A+DPTR

MOV DAC0L, A

INC DPTR ; 2 inkrementacja wska¹nika

INC R1

MOV A,R1

CJNE R1, #64, LOOP

MOV DPTR, #Sin12bit

MOV R1,#0

LJMP LOOP

4.2.3 Dwa sinusy 12-bitowe

Drugi sinus uzyskujemy przez dodanie kodu przed etykiet¦ LOOP :

MOV DAC1L, #00000000b

MOV DAC1H, #00000000b

10

Page 11: Prototypowanie układów elektronicznych, sprawozdanie

oraz dodanie odpowiednich linii:

MOV DAC1L, A

oraz

MOV DAC1H, A

przy zapisywaniu warto±ci do wyj±cia.

4.2.4 Dwa sinusy 12-bitowe przesuni¦te w fazie

MOV DACCON, #01111111b ;ustawienie na dwa 12-bitowe wyjscia

MOV DAC1H, #00000000b

MOV DAC0H, #00000000b

MOV DAC1L, #00000000b

MOV DAC0L, #00000000b

MOV DPTR, #Sin12bit

MOV R1,#48 ;dwa rejestry R1 i R4 sªu»¡ do

;wchodzenia do etykiet

MOV R4,#64

MOV R2,#00 ;dwa rejestry R2 i R3 odpowiadaj¡

;za przesuni¦cie wska¹nika w tablicy

MOV R3,#32

LOOP:

CLR A

MOV A,R2

MOVC A,@A+DPTR;

MOV DAC0H,A

CLR A

MOV A,R3

MOVC A,@A+DPTR;

MOV DAC1H,A

INC DPTR

CLR A

MOV A,R2

MOVC A,@A+DPTR

MOV DAC0L,A

CLR A

MOV A,R3

MOVC A,@A+DPTR

MOV DAC1L,A

INC DPTR

11

Page 12: Prototypowanie układów elektronicznych, sprawozdanie

DEC R1

DEC R4

CLR A

MOV A,R1 ;do akumulatora przypisujemy warto±¢ R1

JZ LOOP1 ;je±li jest równa 0, nast¦puje skok

MOV A,R4 ;podobnie z rejestrem R4

JZ LOOP2

LJMP LOOP

LOOP1: ;w obu p¦tlach zmieniamy adresy na które

;wskazuje wska¹nik

MOV DPTR, #Sin12bit

MOV R3,#00

MOV R2,#96

MOV R1,#64

LJMP LOOP

LOOP2:

MOV DPTR, #Sin12bit

MOV R3,#32

MOV R2,#00

MOV R4,#64

MOV R1,#48

LJMP LOOP

4.3 Podsumowanie

Udaªo si¦ nam zrealizowa¢ wszystkie cele, co potwierdzili±my wy±wietlaniem wyników dziaªaniakodów na oscyloskopie.

12