Modelowanie układów sekwencyjnych w LabView, Uczelnia, Elementy Automatyki Przemysłowej
[ Pobierz całość w formacie PDF ]
Modelowanie układów sekwencyjnych w LabView - ćwiczenie 8
1. Cel ćwiczenia:
Celem ćwiczenia jest zapoznanie się z zasadą działania i strukturami sumatorów binarnych
oraz praktyczna realizacja układów sekwencyjnych takich jak przerzutniki i liczniki w
środowisku LabView.
2. Wprowadzenie
2.1. Synteza sumatora i półsumatora
Budowę sumatora zaczniemy od prostej analizy dodawania dwóch liczb A i B zapisanych w
naturalnym kodzie dwójkowym. Zapis operacji przedstawiono poniżej
Carry= 11000
--------
A=
1101
| 13
B= +1100
|+12
--------
------
Suma= 11001
| 25
Przedstawione działanie wykonujemy zaczynając od bitów najmniej znaczących znajdujących się
po prawej stronie przesuwając się stopniowo w lewo. Wynikiem sumy logicznej pojedynczej
operacji jest bit wynikowy oraz bit informujący o przepełnieniu (tak zwany bit carry) patrz
tabela 1. Przeglądając wyniki operacji sumowania możemy zauważyć, że wynik zapisany jest
funkcją EXOR a bit przepełnienia można wyrazić jako
funkcję AND zmiennych A, B. Powstały z połączenia
dwóch omawianych funktorów logicznych układ
przedstawiony na rysunku 1 nosi nazwę półsumatora.
Niestety układ półsumatora można zastosować tylko w
przypadku, gdy w działaniach nie trzeba uwzględniać
przeniesienia wartości z młodszego bitu. W przeciwnym
razie należy dodać również wartość bitu carry do aktualnie sumowanych wyrażeń. Strukturę
pełnego sumatora zamodelowanego w LabView przedstawiono na rysunku 2.
B
Y
Carry
0
0
0
0
0
1
1
0
1
0
1
0
1
1
0
1
Tab 1. Półsumator
Rys 1.
Struktura półsumatora
Rys 2.
Struktura sumatora
A
2.2. Synteza układu odejmującego
Binarną operację odejmowania możemy przeprowadzić w dwojaki sposób. Pierwszy sposób
przypomina klasyczne odejmowanie rozpoczynając od najmłodszego bitu przechodzimy
stopniowo do najstarszego (w przypadku, gdy bit odjemnej jest mniejszy od bitu odjemnika
stosujemy zapożyczenie wartości z bitu starszego). Drugą prostszą metodą jest zaprzeczenie
odjemnika i dodanie do odjemnej. W systemie dwójkowym zaprzeczenie realizujemy poprzez
negację pojedynczych bitów ciągu i dodanie 1 do najmłodszego bitu (np. jeśli B=01100 to
NB=10100). Należy również pamiętać że w przypadku wykorzystania operacji sumowania do
wyznaczenia różnicy pomijamy przeniesienie dla najstarszego bitu.
Metoda 1
Metoda 2
Odjemna= 11001
| 25
A=
11001
Odjemnik= -1100
|-12
NB=
+10100
--------
--------
------
Różnica=
01101
| 13
Suma=
01101
2.3. Mnożenie liczb w kodzie dwójkowym
Mnożenie realizujemy postępując według następującego algorytmu.
1. Wprowadzamy iloczyn częściowy równy zero
2. Analizujemy bit mnożnej (rozpoczynając od najmłodszego)
a) Bit mnożnej =1 dodajemy mnożnik przesunięty w lewo o (n-1) gdzie n jest numerem
analizowanego bitu
b) Bit mnożnej=0 dodajemy 0
3. Powtarzamy punkt 2 analizując wszystkie bity mnożnej
Przykład
Mnożna=
1100
| 12
Mnożnik=
x1101
|x13
Krok 1 (1 bit mnożnej =0)
Iloczyn częściowy
0
+
0
------
0
Krok 2(2 bit mnożnej =0)
Iloczyn częściowy
0
+
0
--------
0
Krok 3 (3 bit mnożnej =1)
Iloczyn częściowy
0
+
110100
---------
110100
Krok 4 (4 bit mnożnej =1)
Iloczyn częściowy
110100
+
1101000
------------
10011100
|156
3. Przebieg ćwiczenia
3.1. Synteza synchronicznego przerzutnika JK za pomocą programu LabView.
Wybierając
Start>Programy>LabVIEW
2009 uruchamiamy pakiet LabView. W głównym
oknie programu z paska menu wybieramy
File>Open
po wybraniu ścieżki
…\Pulpit\Ćw
8\Start.lvproj
zatwierdzamy OK. Otwarte okno projektu przedstawione na rysunku 3 umożliwia
tworzenie bardziej skomplikowanych struktur programów jak również grupowanie i szybkie
zarządzanie programami. W celu stworzenia nowego programu należy kliknąć prawym
przyciskiem myszy na ikonie
My Computer
wybierając
New>VI
. W oknie projektu zostanie
utworzony nowy wpis odpowiadający nazwie stworzonej aplikacji (domyślnie Untitled 1). Po
zapisaniu programu
File>Save
w oknie schematu blokowego tworzymy przerzutnik JK zgodnie
ze schematem przedstawionym na rysunku 4
A
B
C
D
Rys 3.
Okno projektu
Rys 4.
Schemat przerzutnika JK
Do budowy wykorzystamy 3 przyciski reprezentujące wejścia J,K,CK oraz dwie diody
wskazujące aktualny stan wejść Q i NQ Łącząc wyjście Q z wejściem
bramki D, a następnie NQ z wejściem B stworzony zostanie element
pamięci tak zwany Feedback Node. Element ten można wstawić również
ręcznie wybierając z palety funkcji
Structures> Feedback Node.
Stan
pamięci wykorzystany w pierwszym cyklu programu możemy ustawić
poprzez złącze
Initializer Terminal
. Zapisaną strukturę modelowanego
przerzutnika pokazano na rysunku 5. Poprawnie zbudowany przerzutnik powinien realizować
funkcję przedstawioną w tabeli 2.
CK Q
n-1
0 0 0 1 1 0
1 1
0 0 0 0 0 0
0 1 1 1 1 1
1 0 0 0 1
N
1 1 1 0 1
N
N – stan niedozwolony występujący na wyjściach,
wywołany efektem generacji
J K
Rys 5.
Budowa struktury przerzutnika JK
Tab 2. Tabela prawdy przerzutnika JK
3.2. Synteza przerzutnika T
Tworząc nowy program z palety funkcyjnej wstawiamy
Structures>Case Structure.
Wstawiona przez nas struktura jest funkcją wyboru wiec musi zawierać, co najmniej dwie
możliwości (domyślnie true i false) W zależności od podłączonego do punktu
?
warunku
wynikowo wykonana zostanie odpowiednia część podprogramu przypisana do zakładki
spełniającej ten warunek. W kolejnym kroku dodając do struktury (zakładka true) element not z
palety
Boolean>Not
tworzymy dwa przyciski i jedną diodę. Całość łączymy zgodnie z rysunkiem
6 nie zapominając o połączeniu wejścia Input z wyjściem Output w zakładce false. W celu
zmiany rozmiaru ikon utworzonych poprzez paletę obiektów możemy w oknie programu kliknąć
prawym przyciskiem na wstawiony obiekt wybierając polecenie
View As Icon
.
Rys 6.
Struktura podprogramu
Rys 7.
Struktura przerzutnika T
Zbudowany program możemy przekształcić na podprogram (tak zwany SubVI). W tym celu
najprościej jest zaznaczyć wszystkie elementy wchodzące w strukturę podprogramu i z paska
menu wybrać
Edit>Create SubVI
. Klikając dwa razy na powstały program otwieramy okno z
panelem użytkownika. Aby zmienić wyświetlaną ikonę należy kliknąć prawym
przyciskiem ikonę znajdującą się w prawej górnej części ekranu, oraz wybrać
Edit
Icon.
Dla bardziej rozbudowanych podprogramów może zaistnieć konieczność
dodania dodatkowego wejścia lub wyjścia w tym celu należy podobnie jak
poprzednio kliknąć prawym przyciskiem myszy na ikonie programu i wybrać
Show
Connector
. Dodając nowe przyłącze
Add Terminal
(lub w miarę potrzeby usuwając
funkcją
Remove Terminal
) możemy dokonać powiązania istniejącego terminala ze zmienną.
Powiązanie tworzymy poprzez wskazanie wolnego przyłącza a następnie odpowiadającej mu
zmiennej. Niestety w większości sytuacji dodanie nowego terminala do podprogramu spowoduje
błąd powiązania w głównym programie, aby go usunąć klikamy prawym klawiszem na ikonie
podprogramu i wybieramy
Relink To SubVI
.
Gotowe podprogramy możemy wstawiać również z okna projektu (rysunek 3) przeciągając ich
nazwy na program, w którym chcemy je wykorzystać (w ten
sposób tworzymy strukturę odwołań pomiędzy podprogramami).
W kolejnym kroku w panelu użytkownika tworzymy wykres
Waveform Chart (Graph>Waveform Chart).
W górnej części
utworzonego wykresu (patrz rysunek obok) „rozciągamy” pole z
nazwą wyświetlanej funkcji tworząc opis dla dwóch funkcji
wejściowych. Aby stworzyć dwa niezależne przebiegi klikamy
prawym przyciskiem w polu utworzonej kontrolki wybierając
Stack Plots
.
Jak większość układów sekwencyjnych przerzutnik T
wymaga zastosowania elementu pamięci w tym celu wykorzystamy
Shift Register
. W pierwszym kroku tworzymy pętlę
Structures>While
Loop
następnie klikając na jej prawym lub lewym obrzeżu wybieramy
Add Shift Register
. Wartość początkową rejestru możemy ustalić
podłączając odpowiednią stałą do lewego przyłącza utworzonego
rejestru Wstawiając
Express>Sig Manip>Merge Signals
pozostałe
połączenia tworzymy zgodnie z rysunkiem 7
.
Po uruchomieniu
programy zauważamy, że zarejestrowane przebiegi przypominają
trójkąty, aby tego uniknąć należy zmienić sposób łączenia poszczególnych punktów
charakterystyk. Klikając prawym przyciskiem myszy na kontrolce wykresu wybieramy
Properties
następnie w zakładce
plots
definiujemy parametry wyświetlania dla poszczególnych
przebiegów
3.3. Budowa licznika modulo 11 liczącego od 10 do 20
Wykorzystując przygotowane podprogramy generatora, sumatora, oraz bloki zawierające
struktury przerzutników JK i D zbuduj układ realizujący licznik liczący od 10 do 20 (rysunek 8).
Wyniki symulacji osobno dla generatora oraz kolejnych wyjść sumatorów przedstaw na
wykresach wykorzystując kontrolkę
Waveform Chart
.
4. Sprawozdanie
W sprawozdaniu należy umieścić zrealizowane na zajęciach struktury sumatorów wraz z
ich tabelami stanów i funkcjami logicznymi, zrealizowane struktury przerzutników i liczników
(wraz z przebiegami czasowymi) oraz wnioski końcowe.
[ Pobierz całość w formacie PDF ]