35_38.PDF

(400 KB) Pobierz
Konwerter sygnałów wyjściowych obrotowych enkoderów opisany w VHDL
Konwerter sygnałów wyjściowych obrotowych enkoderów opisany w VHDL
P R O J E K T Y
Konwerter sygnałów
wyjściowych obrotowych
enkoderów opisany
w VHDL
Przedstawiamy kolejny
minimodu³, ktÛrego opis
przygotowano w†jÍzyku opisu
sprzÍtu - VHDL. W†artykule
prezentujemy projekt uk³adu
przekszta³caj¹cego sygna³y
impulsowe z†wyjúÊ
dwukierunkowych obrotowych
enkoderÛw do postaci
pozwalaj¹cej na zastosowanie
do ich zliczania popularnych
licznikÛw z†rodziny
TTL lub CMOS.
Rekomendacje : uk³ad moøe
byÊ stosowany we wszelkiego
rodzaju aplikacjach,
w†ktÛrych jako elementy
regulacyjne s¹ wykorzystywane
enkodery obrotowe.
nÛøî trafi³ problem konwersji syg-
na³Ûw enkoderÛw obrotowych.
Artyku³ opublikowany we
wrzeúniowej EP, poúwiÍcony ste-
rownikowi wyúwietlacza multi-
pleksowanego LED opisanemu
w†VHDL, wzbudzi³ wúrÛd Czytel-
nikÛw spore zainteresowanie. Do-
sta³em takøe propozycje kilku
uk³adÛw, ktÛrymi warto siÍ zaj¹Ê.
BÍdÍ je kolejno opracowywa³. Opi-
sy rozwi¹zaÒ przedstawimy w†EP,
a†kody ürÛd³owe udostÍpnimy na
p³ytach CD-EP do³¹czanych do
EPo/oL oraz na naszej stronie
internetowej. Jako pierwszy ìpod
Jak dzia³a enkoder
obrotowy?
Enkodery obrotowe stosowaliú-
my kilkukrotnie w†projektach pub-
likowanych w†EP (m.in. w†zasila-
czu programowanym cyfrowo -
AVT-366 i†tunerze FM - AVT-
900). Enkodery mog¹ zastÍpowaÊ
- oczywiúcie po pewnym rozbu-
dowaniu ich czÍúci elektronicznej
- klasyczne potencjometry stoso-
wane do regulacji, ktÛrych ìob-
s³ugaî jest znacznie bliøsza ludz-
Rys. 1. Zasada działania enkodera obrotowego
Elektronika Praktyczna 11/2002
35
32282744.040.png 32282744.041.png 32282744.042.png 32282744.043.png 32282744.001.png 32282744.002.png 32282744.003.png 32282744.004.png 32282744.005.png 32282744.006.png 32282744.007.png 32282744.008.png 32282744.009.png 32282744.010.png 32282744.011.png 32282744.012.png 32282744.013.png 32282744.014.png 32282744.015.png 32282744.016.png 32282744.017.png 32282744.018.png 32282744.019.png 32282744.020.png 32282744.021.png 32282744.022.png 32282744.023.png 32282744.024.png
Konwerter sygnałów wyjściowych obrotowych enkoderów opisany w VHDL
Rys. 2. Schemat blokowy dekodera−enkodera
mera. Najprostszym sposobem wy-
konania go w†uk³adzie PLD jest
zbudowanie automatu taktowane-
go zewnÍtrznym sygna³em zegaro-
wym i†ustalenie mu takiego cyklu
pracy, ktÛry zminimalizuje wp³yw
drgaÒ stykÛw na jakoúÊ dekodo-
wania.
Na rys. 3 przedstawiono graf
prostego automatu, ktÛrego opis
w†VHDL zamieszczono na list. 1 .
Jak moøna zauwaøyÊ, zaprojekto-
wany automat jest pe³nym odpo-
wiednikiem bloku zakreúlonego
na rys. 2†przerywan¹ grub¹ lini¹,
czyli odpowiada za dekodowanie
stanu wyjúÊ enkodera, ich obrÛbkÍ
i†generacjÍ sygna³Ûw steruj¹cych
zewnÍtrznym licznikiem. Jak
w†kaødym automacie synchronicz-
nym, takøe praca tego jest syn-
chronizowana przebiegiem zegaro-
wym, ktÛry jest podawany na
wejúcie clk .
We wspÛ³czesnych jÍzykach
HDL, takøe w VHDL, opisanie
pracy automatu jest moøliwe na
wiele sposobÛw. Aby zapewniÊ
przejrzystoúÊ opisu dzia³ania, wy-
bra³em opis za pomoc¹ grafu,
ktÛrego poszczegÛlne stany s¹ jaw-
nie predefiniowane za pomoc¹
deklaracji constant Sx , gdzie x
kim przyzwyczajeniom niø ko-
rzystanie z klawiatur doúÊ czÍsto
stosowanych w†rÛønych urz¹dze-
niach.
ZasadÍ dzia³ania enkodera ob-
rotowego zilustrowano na rys. 1 .
Na jego wyjúciach A†i†B†pojawiaj¹
siÍ impulsy (w wyniku zwarcia ze
wspÛlnym wyprowadzeniem C),
ktÛrych faza niesie informacjÍ
o†kierunku obracania osi enkode-
ra, natomiast ich czÍstotliwoúÊ
niesie informacjÍ o†szybkoúci jej
obracania. Wzi¹wszy pod uwagÍ
nieuniknione zak³Ûcenia impulso-
we powstaj¹ce podczas zwierania
i†rozwierania stykÛw, taka para
sygna³Ûw nie nadaje siÍ do wy-
korzystania bezpoúrednio w in-
nych uk³adach cyfrowych.
Rozwi¹zanie tego problemu za-
lecane przez firmÍ Bourns (jedne-
go z†wiÍkszych producentÛw en-
koderÛw obrotowych) pokazano
na rys. 2 . Pierwszym waønym
etapem obrÛbki sygna³Ûw z†wyjúÊ
enkodera jest usuniÍcie zak³ÛceÒ
wynikaj¹cych z†drgaÒ stykÛw
(moøna np. zastosowaÊ specjalizo-
wany uk³ad scalony jak np.
MC14490 lub MAX6816/17/18).
NastÍpnie naleøy:
- ustaliÊ na podstawie fazy syg-
na³Ûw na wyjúciach enkodera
kierunek obrotu osi i†ustaliÊ
odpowiedni poziom na wyjúciu
Kierunek ,
- generowaÊ na wyjúciu SzybkoúÊ
sygna³ o†czÍstotliwoúci wynika-
j¹cej z†szybkoúci obracania osi
enkodera.
Zadanie nie jest zbyt ³atwe do
zrealizowania w†oparciu o†uk³ady
cyfrowe TTL lub CMOS. Znacznie
³atwiej moøna je rozwi¹zaÊ pos³u-
guj¹c siÍ mikrokontrolerem (dobry
przyk³ad moøna znaleüÊ w†opisie
zasilacza AVT-366 w†EP1/98).
w†uk³adzie programowalnym. Ze
wzglÍdu na ³atw¹ przenoúnoúÊ
pomiÍdzy systemami narzÍdzio-
wymi rÛønych producentÛw i†wy-
nikaj¹c¹ z†niej uniwersalnoúÊ pro-
jektÛw opisanych w†VHDL, ten
w³aúnie jÍzyk pos³uøy³ do przy-
gotowania opisu modu³u funkcjo-
nalnego, ktÛrego uproszczony
schemat blokowy zaznaczono gru-
b¹ lini¹ przerywan¹ na rys. 2. Tak
zaprojektowany ìdekoderî nadaje
siÍ do bezpoúredniej wspÛ³pracy
z†licznikami wyposaøonymi
w†wejúcia: steruj¹ce kierunkiem
zliczania UP/DOWN i†zegarowe
(mog¹ to byÊ np. CMOS - 4029,
TTL - 74190 lub 74191).
Poniewaø do likwidacji drgaÒ
stykÛw potrzebne s¹ uk³ady od-
mierzaj¹ce czas, to konieczne by³o
wbudowanie w†strukturÍ PLD ti-
Jak to opisaÊ w†VHDL-u?
Postawiliúmy sobie za cel wy-
konanie kompletnego ìdekoderaî
wspÛ³pracuj¹cego z†enkoderem
Rys. 3. Uproszczony graf ilustrujący zasadę działania układu opisanego na
list. 1
36
Elektronika Praktyczna 11/2002
32282744.025.png 32282744.026.png 32282744.027.png 32282744.028.png 32282744.029.png 32282744.030.png 32282744.031.png 32282744.032.png 32282744.033.png 32282744.034.png 32282744.035.png
Konwerter sygnałów wyjściowych obrotowych enkoderów opisany w VHDL
List. 1. Opis w języku VHDL działania „dekodera” enkoderów obrotowych
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity enkoder is
Port ( A : in std_logic; - wejście kanalu A enkodera
B : in std_logic; - wejście kanalu B enkodera
u_d_out: out std_logic; - wyjscie kierunku
res: in std_logic; - wejscie zerujace
clk_out: out std_logic; - wyjscie sygnalu taktujacego licznik
clk: in std_logic - wejscie sygnalu zegarowego taktujacego automat
);
end enkoder;
architecture arch of enkoder is
signal stan: std_logic_vector(3 downto 0);
constant S0: std_logic_vector(3 downto 0):= “0000”;
constant S1: std_logic_vector(3 downto 0):= “0001”;
constant S2: std_logic_vector(3 downto 0):= “0010”;
constant S3: std_logic_vector(3 downto 0):= “0011”;
constant S4: std_logic_vector(3 downto 0):= “0100”;
constant S5: std_logic_vector(3 downto 0):= “0101”;
constant S10: std_logic_vector(3 downto 0):= “1001”;
constant S20: std_logic_vector(3 downto 0):= “1010”;
constant S30: std_logic_vector(3 downto 0):= “1011”;
constant S40: std_logic_vector(3 downto 0):= “1100”;
constant S50: std_logic_vector(3 downto 0):= “1101”;
begin
process (clk, res)
begin
if res = ‘1’ then
stan <= “0000”;
elsif clk’event and clk = ‘1’ then
case stan is
when S0 =>
clk_out <= ‘0’;
u_d_out <= ‘0’;
if A = ‘1’ and B = ‘0’ then
stan <= S1;
elsif A = ‘0’ and B = ‘1’ then
stan <= S10;
else stan <= S0;
end if;
- *********************************************************
- sciezka automatu dla detekcji ruchu w kierunku “zwieksz”
when S1 =>
if A = ‘1’ and B = ‘1’ then
stan <= S2;
elsif A = ‘1’ and B = ‘0’ then
stan <= S1;
else stan <= S0;
end if;
when S2 =>
if A = ‘0’ and B = ‘1’ then
stan <= S3;
elsif A = ‘1’ and B = ‘1’ then
stan <= S2;
else stan <= S0;
end if;
when S3 =>
if A = ‘0’ and B = ‘0’ then
stan <= S4;
elsif A = ‘0’ and B = ‘1’ then
stan <= S3;
else stan <= S0;
end if;
when S4 =>
u_d_out <= ‘1’;
stan <= S5;
when S5 =>
clk_out <= ‘1’;
stan <= S0;
- *********************************************************
- sciezka automatu dla detekcji ruchu w kierunku “zmniejsz”
when S10 =>
if A = ‘1’ and B = ‘1’ then
stan <= S20;
elsif A = ‘0’ and B = ‘1’ then
stan <= S10;
else stan <= S0;
end if;
when S20 =>
if A = ‘1’ and B = ‘0’ then
stan <= S30;
elsif A = ‘1’ and B = ‘1’ then
stan <= S20;
else stan <= S0;
end if;
when S30 =>
if A = ‘0’ and B = ‘0’ then
stan <= S40;
elsif A = ‘1’ and B = ‘0’ then
stan <= S30;
else stan <= S0;
end if;
when S40 =>
u_d_out <= ‘0’;
stan <= S50;
when S50 =>
clk_out <= ‘1’;
stan <= S0;
when others =>
stan <= S0;
end case;
end if;
end process;
end arch;
identyfikuje stan. Jakkolwiek jaw-
ne przypisywanie wartoúci po-
szczegÛlnym stanom wymaga nie-
co pracy, to ³atwiejsze jest spraw-
dzenie poprawnoúci opisu logicz-
nego (weryfikacja opisu), ponie-
waø na podstawie wartoúci wek-
tora stan ³atwo okreúliÊ, w†ktÛrym
stanie (w jakim miejscu grafu)
znajduje siÍ w†danej chwili auto-
mat. Ze wzglÍdu na zasadÍ dzia-
³ania, projektowany automat wy-
posaøono w†wejúcie zerowania (a-
synchroniczne) res - kaødorazowo
po w³¹czeniu zasilania naleøy
podaÊ na nie krÛtki impuls o†po-
ziomie wysokim. SprzÍtowe zero-
wanie wymusza przejúcie automa-
tu do stanu S0, ktÛry jest stanem
pocz¹tkowym - automat pozostaje
w†nim do czasu zmiany poziomu
na jednym z†wejúÊ: A†lub B. W†za-
leønoúci od tego, na ktÛrym z†nich
poziom wysoki wyst¹pi jako pier-
wszy (co okreúla kierunek obra-
cania osi enkodera) automat prze-
chodzi do stanu S1 (kierunek
zliczania ìw gÛrÍî) lub S10 (kie-
runek zliczania ìw dÛ³î). Pocz¹w-
szy od tych stanÛw rozpoczyna
siÍ kontrola drgaÒ stykÛw (stany
inne od oczekiwanych powoduj¹
przejúcie automatu do stanu po-
cz¹tkowego S0), a†takøe generacjÍ
sygna³Ûw u_d_out (stany S4 lub
S40) i† clk_out (stany S5 lub S50).
PrzyjÍty sposÛb opisu dzia³ania
wyjúÊ u_d_out i † clk_out wymusza
na syntezerze logicznym przypi-
sanie im rejestrÛw - s¹ one
bowiem generowane synchronicz-
nie z†sygna³em zegarowym clk .
Jest to rozwi¹zanie pozornie nad-
miarowe, bo przecieø obydwa syg-
na³y moøna wytwarzaÊ kombina-
cyjnie na podstawie wartoúci wek-
tora stan , a†co gorsza zajmowane
s¹ dwa doúÊ cenne przerzutniki.
Jak pokaza³y doúwiadczenia,
w†tym przypadku oszczÍdnoúÊ siÍ
zupe³nie nie op³aca, poniewaø
przy rozwi¹zaniu kombinacyjnym
trudno jest zlikwidowaÊ efekty
hazardÛw, z†powodu ktÛrych na
wyjúciach mog¹ pojawiaÊ siÍ trud-
ne do zlikwidowania zak³Ûcenia
szpilkowe. Wybra³em wiÍc roz-
wi¹zanie nieco droøsze, ale gwa-
rantuj¹ce stabiln¹ pracÍ uk³adu.
Implementacja
DziÍki zastosowaniu jako jÍzy-
ka opisu sprzÍtu VHDL-a, z†pre-
zentowanego projektu mog¹ sko-
Elektronika Praktyczna 11/2002
37
32282744.036.png
Konwerter sygnałów wyjściowych obrotowych enkoderów opisany w VHDL
Rys. 4. Wyniki symulacji opisu z list. 1 uzyskane w programie ModelSim
rzystaÊ fani dowolnej rodziny
uk³adÛw PLD. Do poprawnego
zaimplementowania automatu nie-
zbÍdne jest 6†przerzutnikÛw D†lub
JK, co w†przypadku uk³adÛw
CPLD (jak np. MAX7000, czy
XC9500) przek³ada siÍ ìwprostî
na liczbÍ zajÍtych makrokomÛrek.
Plik z†opisem projektu (list. 1)
by³ kompilowany za pomoc¹ bez-
p³atnych pakietÛw: Max+Plus II
Student Edition (obs³uguje VHDL),
Quartus II 2.1 Web Edition -
obydwa firmy Altera i†WebPack
ISE 4.2 firmy Xilinx (zamieszczamy
go takøe na p³ycie CD-EP11/2002B).
Na rys. 4 pokazano wyniki
symulacji funkcjonalnej projektu,
wykonanej za pomoc¹ programu
ModelSim firmy Mentor Graphics.
Skala czasu zaznaczona na tym
rysunku jest umowna i nie od-
zwierciedla szybkoúci dzia³ania,
w†zwi¹zku z†czym nie naleøy siÍ
ni¹ sugerowaÊ.
WeryfikacjÍ poprawnoúci dzia-
³ania projektu przeprowadzi³em
na uk³adzie CPLD XC95108 firmy
Xilinx, ktÛry wchodzi w sk³ad
minizestawu ewaluacyjnego, ktÛry
opisaliúmy w†EP9/2002 (przy
okazji opisu bloku IP - sterownika
wyúwietlacza multipleksowanego).
SposÛb do³¹czenia enkodera do
wyprowadzeÒ uk³adu U2 (zgodnie
ze schematem z†rys. 6, str. 30,
EP9/2002) pokazano na rys. 5 .
èrÛd³em sygna³u zegarowego dla
automatu jest generator
z†uk³adem U3 (j.w.), ktÛry
jednoczeúnie spe³nia rolÍ
wzorca czasu dla wyúwiet-
lacza multipleksowanego.
SposÛb zrealizowania
ìdekoderaî zapewnia ma³¹
zaleønoúÊ jakoúci jego pra-
cy od wartoúci czÍstotli-
woúci taktuj¹cej.
Dzia³anie egzemplarza
prototypowego sprawdzi-
³em, wykorzystuj¹c dwa
enkodery (ECW1J-B24-
BE0012 - bez zapadek,
ECW1J-B24-BC0006 - z†za-
padkami, obydwa firmy Bourns
oraz CI-11CT-V1N31-HFACF firmy
Piher) o†rÛønej rozdzielczoúci. De-
koder dzia³a³ bez zarzutu dla
czÍstotliwoúci zegarowych z†prze-
dzia³u 400†Hz...1 kHz. Aby u³at-
wiÊ przeprowadzenie testÛw,
w†uk³ad PLD wbudowany zosta³
takøe 16-bitowy licznik gÛra-dÛ³
oraz sterownik wyúwietlacza mul-
tipleksowanego, ktÛry zosta³ szcze-
gÛ³owo opisany we wrzeúniowym
wydaniu EP.
Opisy w†postaci ürÛd³owej
wszystkich niezbÍdnych modu³Ûw,
pliki z†testami funkcjonalnymi dla
automatu oraz modu³u licznika,
a†takøe kompletny system projek-
towy WebPack ISE 4.2 udostÍp-
niamy na p³ycie CD-EP11/2002B,
a†na naszej stronie WWW ( Dow-
nload>Dokumentacje ) znajd¹ siÍ
pliki ürÛd³owe, w†tym takøe kom-
plet plikÛw tworz¹cych projekt
hierarchiczny w†systemie WebPack
ISE - gor¹co polecam to narzÍdzie
do nauki jÍzyka VHDL.
Piotr Zbysiñski, AVT
piotr.zbysinski@ep.com.pl
Rys. 5. Zalecany sposób dołączenia
enkodera do układu XC95108
Uwaga! System WebPack ISE,
znajduj¹cy siÍ na p³ycie CD-EP11/
2002B, przed instalacj¹ trzeba
zarejestrowaÊ na stronie http://
www.btc.pl/cd.htm.
38
Elektronika Praktyczna 11/2002
32282744.037.png 32282744.038.png 32282744.039.png
Zgłoś jeśli naruszono regulamin