![]() | Janulo's homepage | |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() od 9.4.2003
|
Blue2 Program: Programové vybavenie dosky motorovCelý program sa skladá z komunikačnej a výkonnej časti. Komunikácia je naprogramovaná ako ošetrenie prerušenia od prijímacieho a vysielacieho kanála integrovanej sériovej linky procesora 8051. Prijaté znaky sa ukladajú do zásobníka a po načítaní potrebného počtu znakov sa nastaví príznak o prijatí rámca. Tento príznak sa vyhodnotí v hlavnej slučke programu, kde sa prečíta a vyhodnotí celý rámec a vykoná sa príslušná akcia podľa dát v rámci. Pri potrebe vrátiť nejaké dáta mastrovi sa naplní zásobník a ten sa odvysiela. Pri vysielaní sa generuje CRC zabezpečenie a pri prijímaní sa kontroluje. protocol_send: ;vysielanie paketu Riadenie krokových motorov je pomocou postupného vysielania dát na brány procesora, celé riadenie je v prerušení časovača T0, pri každom prerušení sa inkrementuje register rýchlosti a porovnáva sa s nastavenou hodnotou, pri zhode sa vykoná zmena zopnutia fáz, čo spôsobí pootočenie motora o jeden elementárny krok, to sa vykonáva stále dookola pre všetky štyri motory. Ako ďalšia možnosť pohonu jednosmernými motormi je na doske realizované softvérové PWM riadenie dvoch jednosmerných motorov. Realizácie nebola cieľom ale len pokusom možnosti riadenia jednosmerných motorov použitým procesorom, iné typy procesorov majú PWM integrované priamo na čipe. Vstupná frekvencia od prerušenia časovača T0 je základná frekvencia kroku PWM, inkrementuje register frekvencie PWM, pri prekročení nastavenej hodnoty, zistenej experimentálne, sa vynuluje a čítanie sa robí znova. Ďalej sa porovnáva napočítaná hodnota so žiadanou hodnotou rýchlosti, ak je menšia, na výstupe je log.1, inak sa nastaví nula. Potom keď sa začína čítať sú oba PWM výstupy na logickej jednotke, pri načítaní hodnoty rovnakej ako je nastavená sa výstup preklopí do nuly. tim0: push psw Programové vybavenie dosky snímačovAj pri tomto procesore máme komunikačnú a výkonnú časť, komunikačná bola popísaná v predošlej kapitole, sú tu nadefinované iné funkcie a akcie k nim popísané v kapitole o komunikácii. Samotná výkonná časť je riadená časovými intervalmi generované časovačom T0, v obsluhe prerušenia sa sníma vstupný paralelný port a posielajú sa dáta na výstupný paralelný port, je riadená perióda, s ktorou sa vykonáva meranie a/d prevodu, meranie frekvencie a meranie vzdialenosti pomocou ultrazvuku. Všetky funkcie sa spúšťajú v tejto obsluhe prerušenia okrem a/d prevodu, nastaví sa príznak merania a v hlavnej slučke sa vykoná meranie. Pretože procesor AT89C2051 nemá integrovaný a/d prevodník, použili sme softvérovú integračnú metódu. Pomocou RC článku a integrovaného komparátora sa dosiahne presnosť podľa použitého kondenzátora zhruba 2%, získame tak veľmi lacný ale pomalý osembitový a/d prevodník. Na začiatku merania sa vybije kondenzátor zapísaním nuly na pin portu, čo vlastne skratuje kondenzátor tranzistorom na čipe, potom akonáhle povolíme nabíjanie, meráme čas, kým sa nepreklopí komparátor, podľa času potrebného na preklopenie vieme aké je vstupné napätie. Inšpirácia na toto zapojenie je uverejnená na www.hw.cz, odkiaľ sme čerpali. adc: clr tr0 ;zastav časovač T0 Meranie frekvencie sa robí tak, že sa meria počet inkrementov časovača T0 počasjednej periódy vstupného signálu. Na začiatku sa nastavia všetky potrebné registrea pri prvom prerušení od externého vstupu INT1 sa začne odpočítavanie a pri druhomprerušení, kedy končí perióda signálu sa celý proces zastaví a nastavia sa príslušnépríznaky. Potom v registroch časovača T0 je nameraná hodnota úmerná perióde vstupnéhosignálu. Na ošetrenie stavu, kedy na vstupe nie je žiadna frekvencia sa časovač spustíešte pred prvým prerušením, keby sa nedostavilo prerušenie od INT1, nastane pretečeniea ukončí sa meranie. frek_start: ;nastavenie a pripravenie na meranie Na meranie vzdialenosti ultrazvukom na začiatku programovo generujeme frekvenciu40kHz povolíme príslušné prerušenia a čakáme na prerušenie INT0, kedy čelo impulzudorazilo späť, celú dobu merania máme spustený časovač T0, keby sa nedostavilo prerušenie,čo znamená, že nebol detekovaný odraz, nastane pretečenie a meranie sa ukončí. sonar_start: ;úvodné inicializovanie pre ultrazvuk Download::blue2.zip Janulo © 2003 janulo@pobox.sk Aktuálny čas: Ľuboš, Ľubor 24-09-2020 meniny má 1 Pridať do obľúbených Čas načítania: 0.013 sekúnd |