Semestrální práce z předmětu 36POB
Řízení motoru pomocí klávesnice

1. ÚKOL

Pomocí klávesnice se 16 tlačítky se má řídit otáčení krokového motoru. Rychlost má čtyři stupně zvlášť v každém směru (4, 3, 2, 1, -1, -2, -3, -4). Navíc má být k dispozici jemné řízení kroků, dvě tlačítka pro jeden krok vpřed a vzad. Samozřejmostí je tlačítko (tlačítka) na zastavení otáčení. Momentální rychlost včetně indikace smyslu otáček motoru se bude pro informaci zobrazovat na sedmisegmentovém displeji.

2. ROZBOR

2.1 POUŽITÉ PŘÍPRAVKY

K realizaci máme k dispozici moduly s programovatelnými obvody Xilinx (systém ProMoX). Každá konfigurace ProMoXu se skládá ze základní desky osazené vlastním programovatelným obvodem, konektory a napájecí zásuvkou, a z kombinace dceřinných desek, zajišťujících připojení různých aplikací, generátoru hodin na obvod a v neposlední řadě i zavaděče programu v podobě propojení se sériovým nebo paralelním portem PC. Jako základní desku jsme si vybrali tu osazenou obvodem XCS10 Spartan, čistě z toho důvodu, že je nejmladší ze všech nabízených; očekávali jsme pro něj lepší syntézu z VHDL v prostředí ISE. Zavaděč jsme použili sériový. Nedílnou součástí zapojení je i generátor hodinových pulsů, dceřinná deska Základní hodiny s ovládáním. Rychlost hodin se upravuje vložením vhodného krystalu, vybrali jsme frekvenci 2, 45 MHz, která je pro naší úlohu dostatečná. Navíc využijeme jedno z tlačítek na ovládání pro asynchronní reset celého zapojení. Ostatní prvky nepoužijeme.

Poslední, ale nejdůležitější, dceřinou deskou je modul pro připojení 16 tlačítkové klávesnice se čtyřmístným sedmisegmentovým displejem a dvěma bránami pro zapojení (např.) našeho motoru. Zobrazování na displeji se ovládá pomocí osmi signálů A až H, aktivních v L, vždy najednou všechny čtyři číslice. Výběr té právě zobrazované se ději pomocí signálů SEL0 až SEL3, jejich změny nemají překročit frekvenci 1 Mhz. Klávesnice se ovládá podobných způsobem, signál ROWi\ je aktivní (v L) pokud je klávesa v příslušném řádku stisknuta a je aktivní signál pro sloupec SELj\. Navíc použijeme standardní bránu ProMoXu pro připojení motoru. K dispozici máme osm signálů, využijeme jen čtyři z nich, bránu vybereme druhou v pořadí pro snazší připojení konektorů. S motorem propojení realizuje plochý 20 žilový kabel.

Veškerá dokumentace k modulům je v literatuře [1] až [4], včetně popisů signálů, schémat zapojení, podmínek pro funkci a přiřazení signálů modul - pouzdro Xilinx.

Motor jsme zvolili takový z nabídky krokových, aby se mohl libovolně dlouho otáčet bez překážek. Motor od disketové mechaniky není vhodný, v krajní pozicích se musí kontrolovat jeho dojetí. Dokumentace k motoru je v literatuře [5].

2.2 SCHÉMA

Realizaci jsme si rozdělili do logických celků podle smyslu úlohy, ale i podle fyzického členění periférií. Nejlépe to dokumentuje Obrázek 1:

.
Obrázek 1

Následuje popis funkce jednotlivých částí, význam signálů je vysvětlen v části 3.

2.3 MOŽNOSTI REALIZACE

Celý systém jsme se rozhodli realizovat pomocí jazyka VHDL, a to z několika důvodů:

3. REALIZACE

V této části zvlášť popíšeme realizaci každé části podle schématu na Obrázku 1, popis funkcí je v předešlém oddílu 2.2. Nakonec je uvedeno sloučení všech částí do jednoho celku.
Poznámka: na konci každé části je uveden přehled signálů a odkaz ke stažení příslušného VHDL souboru, v poslední jsou navíc všechny odkazy pro přehlednost zopakovány.

Přehled významů jednotlivých signálů:

Signál Jeho význam
CLK globální hodiny
RESET globální asynchronní reset
SEL0 - SEL3 výběr znaku displeje nebo výběr sloupce kláves
DATA_VALID indikuje platnost údajů SEL0 - SEL3 pro filtr kláves
ROW0 - ROW3 vstup indikující vybranou řadu tlačítek na klávesnici
STAV(11) označení stavu systému, vždy je aktivní jen jeden z bitů:
0 - stop, rychlost nula
1 - rychlost +1 vpřed
2 - rychlost +2 vpřed
3 - rychlost +3 vpřed
4 - rychlost +4 vpřed
5 - rychlost -1 vzad
6 - rychlost -2 vzad
7 - rychlost -3 vzad
8 - rychlost -4 vzad
9 - krok vzad
10 - kork vpřed
KLAV(11) označení stavu systému po stisknutí klávesy, podobné jako STAV
A - H signály ovládající jednotlivé segmenty znaku na displeji
PLUS, MINUS pulsy pro stavový automat řízení cívek motoru, generuje se v části řízení motoru
MP(4) řízení cívek motoru, jednička na dané pozici znamená aktivní cívku

Tabulka 1

3.1 Generátor multiplexu

Na každou 16. náběžnou hranu hodin se jeden se signálů SEL0 - SEL3 nastaví na H, ostatní jsou v nule. O jednu hranu hodin dále se nastaví potvrzovací signál DATA_VALID pro generátor klávesnice, chráníme se tak před zpožděním jejích obvodů. Vlastní frekvenci hodin (krystalu) tak dělíme 64 (pro správnou syntézu toto číslo musí být mocnina dvou, nejbližší nižší mocnina už generuje příliš vysokou frekvenci multiplexu), frekvence střídání signálů SEL je tedy zhruba 38,28 kHz.

Vstupy CLK, RESET
Výstupy SEL0 - SEL3, DATA_VALID

Příslušné soubory VHDL:

3.2 Filtr kláves

Po stisknutí klávesy vygeneruje jeden tik dlouhý impuls na příslušném vodiče ze sběrnice KLAV. Poté přednastavenou dobu (asi 80 ms) nereaguje na žádné údaje z klávesnice.

Vstupy SEL0 - SEL3, ROW0 - ROW3, CLK, RESET
Výstupy KLAV(11)

Příslušné soubory VHDL:

3.3 Generátor stavu

Při příchodu hodin a při změně na vstupu (z filtru kláves) stisknutím klávesy zopakuje dodanou identifikaci stavu na výstup, pokud je vstup celý nulový (žádná klávesa není stisknuta), zopakuje původní stav (pamatuje vstup a mění ho na výstup jen při změně). Povely pro jednotlivé kroky propouští beze změny.

Vstupy KLAV(11), CLK, RESET
Výstupy STAV(11)

Příslušné soubory VHDL:

3.4 Řízení displeje

Pro vstupy SEL0 až SEL2 (první tři číslice zleva) aktivní se zobrazuje nula, pro SEL3 aktivní se zobrazuje číslo rychlosti podle STAV, záporné rychlosti jsou doplněny tečkou. Pro stisknutí tlačítka kroku vpřed nebo nazad se ponechává nula. Znaky na displeji a jejich reprezentaci v textu programu uvádí následující tabulka.

Znak Význam Signály A až H Znak Význam Signály A až H Znak Význam Signály A až H Znak Význam Signály A až H
rychlost +4 01100110 rychlost +3 11110010 rychlost +2 11011010 rychlost +1 01100000
rychlost 0 11111100
rychlost -1 01100001 rychlost -2 11011011 rychlost -3 11110011 rychlost -4 01100111

Tabulka 2

Vstupy SEL0 - SEL3, STAV, CLK, RESET
Výstupy A - H

Příslušné soubory VHDL:

3.5 Řízení motoru

Podle aktuálního stavu (signál STAV) nastavíme rychlost generování pulsů PLUS nebo MINUS. Různá jejich frekvence je realizována pomocí pozdržení generování prostřednictvím vnitřního signálu architektury, využitého jako čítač. Pro rychlost nula nejsou generovány žádné pulsy, pro stav krok vpřed nebo vzad je vygenerován jeden příslušný signál. Pulsy mají délku hodin. Nejlepší představu o principu podá vlastní kód VHDL.

Vstupy STAV, CLK, RESET
Výstupy PLUS, MINUS

Příslušné soubory VHDL:

3.6 Ovládání motoru

Podle přicházejících pulsů PLUS nebo MINUS se generuje posloupnost příkazů pro cívky motoru, vybírá se popořadě jeden z následujících vektorů: "1010", "1000", "1001", "0001", "0101", "0100", "0110", "0010". Celá entita je řešena formou přechodového automatu s osmi stavy, jehož obrázek zde uvádíme.

.
Obrázek 2

Z předchozího vyplývá, že nemůže nastat stav aktivních obou pulsů PLUS i MINUS, pro jistotu je pro takový případ přechod do stejného stavu jako aktuální (větve ELSE).

Vstupy PLUS, MINUS, CLK, RESET
Výstupy MP(4)

Příslušné soubory VHDL:

3.7 Celek

Celý systém zrealizuje vkládáním již hotových entit jako komponent do konečné hlavní entity (přesněji její architektury). Zde již jen správně mezi sebou propojíme vstupy a výstupy, případně některé signály zinvertujeme (jsou ve skutečnosti aktivní v logické nule). Pak jen přiřadíme výstupy této hlavní entity na výstupy z pouzdra obvodu podle dokumentace a můžeme program zavést do čipu. Přiřazení uvádí následující přehled.

signál pin signál pin signál pin signál pin signál pin signál pin signál pin signál pin
A p3 B p4 C p5 D p6 E p7 F p8 G p9 H p10
GATEDIR p45 GATEG p47 SEL0 p68 SEL1 p72 SEL2 p78 SEL3 p80 MP(0) p14 MP(1) p15
MP(2) p16 MP(3) p17 ROW0 p81 ROW1 p82 ROW2 p83 ROW3 p84 CLK p35 RESET p27

Tabulka 3

Na závěr ještě soupis všech VHDL souborů doplněný o soubor entity celku (a k ní příslušného testbenche) a o constrainy.

5. ZÁVĚR

Podařilo se nám uskutečnit vytyčený úkol bez větších problémů, systém funguje správně. Celý návrh, simulace a ověření zapojení fungovalo bez chyb, až na fázi interpretace řídících pulsů pro motor. Generovali jsme průběh čtyřbitového signálu pro řízení cívek krokového motoru v souladu se schématem zapojení publikovaném v literatuře [5], ovšem bez úspěchu. Až doplnění na řízení po osmi příkazech v cyklu přineslo žádaný výsledek, posloupnost pulsů jsme zjistili v literatuře [6]. Drobnou závadu jsme našli při připojování spojovacího kabelu mezi ProMoX bránou na desce s klávesnicí a displejem a stejnou bránou na motoru. Na desce správnému nasazení konektoru brání indikační diody směru přenosu brány a kondenzátor. Použili jsme nastavení dutinkami. Součástí řešení jsou i všechny soubory VHDL včetně constrain souboru.

6. LITERATURA

[1] Dokumentace k modulu základní desky s XCS10
[2] Dokumentace k modulu sériového zavaděče
[3] Dokumentace k modulu generátoru hodin s ovládáním
[4] Dokumentace k modulu klávesnice a zobrazovače
[5] Dokumentace ke krokovému motoru
[6] Přehled pulsů k řízení krokového motoru