Dekódování signálu z kvadraturního enkodéru 1

Podobné dokumenty
SEKVENČNÍ LOGICKÉ OBVODY

IMTEE Přednáška č. 8. interrupt vector table CPU při vzniku přerušení skáče na pevně dané místo v paměti (obvykle začátek CODE seg.

SEP2 Sensor processor. Technická dokumentace

Cíle. Teoretický úvod

ASYNCHRONNÍ ČÍTAČE Použité zdroje:

IRCDEK2 Hradlové pole s implementovaným kvadraturním dekodérem Technická dokumentace

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: :01:48

Cíle. Teoretický úvod. BDIO - Digitální obvody Ústav mikroelektroniky Sekvenční logika - debouncer, čítače, měření doby stisknutí tlačítka Student

Přednáška - Čítače. 2013, kat. měření, ČVUT - FEL, Praha J. Fischer. A3B38MMP, 2013, J.Fischer, ČVUT - FEL, kat. měření 1

Direct Digital Synthesis (DDS)

Mikrokontroléry. Doplňující text pro POS K. D. 2001

Vánoční hvězda 2. Publikované: , Kategória: Blikače a optika.

IMTEE Přednáška č. 11

Sekvenční logické obvody

Princip funkce počítače

České vysoké učení technické v Praze Fakulta elektrotechnická. Katedra měření. Dokumentace. Rotační enkodér

Přednáška A3B38MMP. Bloky mikropočítače vestavné aplikace, dohlížecí obvody. 2015, kat. měření, ČVUT - FEL, Praha J. Fischer

Struktura a architektura počítačů (BI-SAP) 9


MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Speciální obvody a jejich programování v C 2. díl

Registry a čítače část 2

Universita Pardubice Fakulta elektrotechniky a informatiky. Mikroprocesorová technika. Semestrální práce

Pohled do nitra mikroprocesoru Josef Horálek

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Přednáška , kat. měření, ČVUT - FEL, Praha J. Fischer. A4B38NVS, 2012, J.Fischer, kat. měření,, ČVUT - FEL 1

A0M38SPP - Signálové procesory v praxi - přednáška 10 2

Logické obvody 10. Neúplné čítače Asynchronní čítače Hazardy v kombinačních obvodech Metastabilita Logické obvody - 10 hazardy 1

8. Laboratoř: Aritmetika a řídicí struktury programu

Jednočipové mikropočítače

Základní zapojení MCU do el. obvodu. Zdroje taktovacího kmitočtu. IMTEE Přednáška č. 7. reset, oscilátor, blokování napájení

Logické funkce a obvody, zobrazení výstupů

Úvod do mobilní robotiky AIL028

SNÍMAČE OPTICKÉ, ULTRAZVUKOVÉ A RÁDIOVÉ

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY. MRBT Robotika

Analogově-číslicové převodníky ( A/D )

2.9 Čítače Úkol měření:

ŠESTNÁCTIKANÁLOVÝ A/D PŘEVODNÍK ±30 mv až ±12 V DC, 16 bitů

Přerušení na PC. Fakulta informačních technologií VUT v Brně Ústav informatiky a výpočetní techniky. Personální počítače, technická péče cvičení

Metody připojování periferií BI-MPP Přednáška 2

Profilová část maturitní zkoušky 2014/2015

Strojový kód. Instrukce počítače

Návrh čítače jako automatu

/*Dekodovani DFC signalu*/ // Projekt MMIA 2013 // Martin Dujicek, Milan Rejnus

frekvence 8 Mhz, přestože spolupracuje s procesori různe rychlými. 16 bitová ISA sběrnice je

Principy komunikace s adaptéry periferních zařízení (PZ)

Čísla, reprezentace, zjednodušené výpočty

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

DESKA ANALOGOVÝCH VSTUPŮ ±24mA DC, 16 bitů

18A - PRINCIPY ČÍSLICOVÝCH MĚŘICÍCH PŘÍSTROJŮ Voltmetry, A/D převodníky - principy, vlastnosti, Kmitoměry, čítače, fázoměry, Q- metry

Aplikace vestavných systémů A4M38AVS Před. 3 (4)

6. MĚŘENÍ SÍLY A KROUTICÍHO MOMENTU

Úvod do mobilní robotiky NAIL028

Typy a použití klopných obvodů

Projekt Pospolu. Sekvenční logické obvody Klopné obvody. Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jiří Ulrych.

Y36SAP 2007 Y36SAP-4. Logické obvody kombinační a sekvenční používané v číslicovém počítači Sčítačka, půlsčítačka, registr, čítač

Architektura počítačů Logické obvody

5. A/Č převodník s postupnou aproximací

MSP 430F1611. Jiří Kašpar. Charakteristika

A/D a D/A PŘEVODNÍK 0(4) až 24 ma DC, 16 bitů

DESKA ANALOGOVÝCH VSTUPŮ A VÝSTUPŮ ±24mA DC, 16 bitů

Architektura počítačů Logické obvody

11. Logické analyzátory. 12. Metodika měření s logickým analyzátorem

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

Použití programovatelného čítače 8253

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Přerušovací systém s prioritním řetězem

A/D a D/A PŘEVODNÍK 0(4) až 24 ma DC, 16 bitů

Obsluha periferních operací, přerušení a jeho obsluha, vybavení systémových sběrnic

Digital Control of Electric Drives. Vektorové řízení asynchronních motorů. České vysoké učení technické Fakulta elektrotechnická

Akademický rok: 2004/05 Datum: Příjmení: Křestní jméno: Osobní číslo: Obor:

Návrh ovládání zdroje ATX

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

9. Robot pro Robotický den 2012

TECHNICKÝ POPIS MODULU GRAFIK =============================

1. MIKROPROCESOR ATMEGA A/D PŘEVODNÍK MÓDY PŘEVODNÍKU Single Conversion Mode Auto Triggering Start...

setup() { I = 0; } loop() { I = I + 1; }

Přerušení POT POT. Přerušovací systém. Přerušovací systém. skok do obslužného programu. vykonávaný program. asynchronní událost. obslužný.

Projektová dokumentace ANUI

Rozšiřující desce s dalšími paralelními porty Rozšiřující desce s motorkem Elektrickém zapojení Principu činnosti Způsobu programování

Mikrokontrolery. Úvod do obvodů Atmega 328 a PIC16F88

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Struktura a architektura počítačů (BI-SAP) 7

Principy počítačů I - Procesory

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Speciální obvody a jejich programování v C 1. díl. České vysoké učení technické Fakulta elektrotechnická

Číselné vyjádření hodnoty. Kolik váží hrouda zlata?

Projekt BROB. Základy robotiky. Téma: Digitální časomíra. Vedoucí projektu: Tomáš Jílek

Témata profilové maturitní zkoušky

Architektury počítačů a procesorů

Profilová část maturitní zkoušky 2015/2016

Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr.

VY_32_INOVACE_CTE_2.MA_18_Čítače asynchronní, synchronní. Střední odborná škola a Střední odborné učiliště, Dubno Ing.

ČEMU ROZUMÍ MIKROPROCESOR?

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

VY_32_INOVACE_OV_2.ME_CISLICOVA_TECHNIKA_19_SPOJENI KOMBINACNICH_A_SEKVENCNICH_OBVODU Střední odborná škola a Střední odborné učiliště, Dubno

Laboratorní zdroj - 4. část

Čtyřnohý kráčející robot

Časovače μpočítače AT89C51CC03

Výukové texty. pro předmět. Automatické řízení výrobní techniky (KKS/ARVT) na téma

Sylabus kurzu Elektronika

Transkript:

Dekódování signálu z kvadraturního enkodéru Úvod Pro kvalitní řízení robota potřebujeme vědět, jakou vzdálenost robot ujel a jak rychle se pohybuje. Nejpoužívanější metodou pro určení polohy robota je odometrie, která používá informace o otočení kol pro výpočet robotovy pozice (viz. průvodce Odometrie http://robotika.cz/guide/odometry/cs). Potřebujeme tedy snímač, který nám tuto informaci zajistí. Nejčastěji se používají optické inkrementální snímače, buď jako průchozí nebo reflexní optická závora. Bližší popis v průvodci kapitola Enkodéry (http://robotika.cz/guide/encoders/cs). Popis funkce Výstupem kvadraturního enkodéru jsou dva fázově posunuté signály A, B viz. obrázek. Díky tomu můžeme kromě počtu tiků tj. pootočení určit i směr pohybu. Zpracování těchto signálů je možno realizovat hardwarově pomocí speciálních obvodů nebo softwarově. Hardwarové zpracování se používá hlavně pro velmi rychlé signály (> khz). Výstupem specializovaných obvodů je jeden výstup generující impuls při každé změně vstupních signálů z enkodéru a druhý výstup určuje směr pohybu (tím určíme zda impulsy přičítat či odčítat). Druhý typ poskytuje dva výstupy, kde jeden poskytuje impulsy při kladném směru pohybu a druhý při záporném. Takto předzpracovaný signál se obvykle dále přivádí na vstup rychlého čítače, který realizuje počítání impulsů (obvykle 8 bitů). Tento čítač poskytuje informaci o změně polohy nadřízenému systému, který musí dostatečně často vyčítat tuto informaci, aby nedošlo k přetečení hardwarového čítače. Výhodou tohoto řešení je vysoká rychlost a minimální zatížení nadřazeného systému. Nevýhodou je vyšší obvodová náročnost řešení a tudíž i cena. Příkladem obvodů pro dekódování signálu z kvadraturních enkodérů jsou obvody LS78x, které kromě zpracování signálu zajišťují i filtraci, která zamezuje zpracování vstupních pulsů o šířce menší, než je nastavená hodnota. Kvadraturní dekodér LS784 je určený k dekódování kvadraturních signálů A a B na pulsy a směr, LS783 poskytuje na jednom výstupu impulsy, které se přičítají, a na druhém impulsy, které se odečítají. Komplexnější řešení poskytují např. obvody HCTL-222/232, které kromě dekódování signálu obsahují i čítač. Jinou možností je realizace dekódování a následného čítaní v programovatelných obvodech CPDL, Softwarové zpracování Pro pomalejší signály lze provádět celé vyhodnocení softwarově v jednočipovém počítači. Toto řešení je z hlediska obvodu jednodušší, levnější, ale přináší zvýšené výpočetní zatížení mikroprocesoru. Vzhledem výkonu současných mikrokontrolerů a potřebnému výkonu pro řízení malých robotů to však není problém.

2 Stavíme mobilního robota - software Způsoby dekódování Při pohybu generuje výstup enkodéru během jedné periody 4 různé stavy, viz. obrázek. Pohyb vpř ed Pohyb vzad A B Pokud provádíme zpracování pouze při jedné změně signálu A (např. při vzestupné hraně) a signál B použijeme pouze pro určení směru pohybu, pak je rozlišení snímače přímo rovno počtu štěrbin, či odrazových plošek. Hlavně u amatérsky vyráběných enkodéru ovšem bývá základní rozlišení příliš nízké, proto je možné využít dělení celé periody na části. Při využití obou hran kanálu A získáme dvojnásobné rozlišení a při využití obou hran kanálu A i B dokonce čtyřnásobné rozlišení. Způsoby zpracování Asynchronní Při asynchronním zpracování je jeden nebo oba výstupní signály enkodéru připojeny na vstup mikrokontroleru, který je schopen generovat přerušení. Přerušení je vyvoláno při vzestupné, sestupné nebo obou hranách signálů. Pro dekódování s jednoduchým nebo dvojnásobným rozlišením stačí jeden přerušovací vstup, pro čtyřnásobné rozlišení jsou nutné dva přerušovací vstupy. Výhodou asynchronního zpracování je poměrně nízké zatížení procesoru, které však ze zvětšující se rychlostí roste. Poměrně velkou nevýhodou je, že nelze jednoduše realizovat filtraci proti zákmitům, které mohou nastat, pokud se enkodér zastaví na rozhraní sousedních stavů. Tedy toto zpracovaní dobře funguje při pohybu, ale při zastavení může generovat velké množství falešných tiků bez jednoduché možnosti ošetření. Synchronní Při tomto způsobu zpracování se vyhodnocení provádí v daných časových okamžicích. To je nejčastěji realizováno periodickým vyvoláváním přerušení od časovače. Frekvence vzorkování musí být alespoň tak vysoká jako frekvence změn stavů enkodéru, tj. čtyřnásobek frekvence výstupního signálu enkodéru (malou fintou při dekódování lze tento požadavek zmírnit téměř na polovinu). Nevýhodou synchronního zpracování je vyšší, ale stálé zatížení procesoru. Výhodou je automatické filtrování impulsů, které mají kratší délku než je perioda vzorkování. Tím je potlačen problém zákmitů výstupů enkodéru při zastavení na hraně.

Dekódování signálu z kvadraturního enkodéru 3 Příklady realizace softwarového zpracování Ukázky dékodování jsou psány v jazyku C a používají následující definice: #define IRC_PORT port, na ktery jsou pripojeny vystupy enkoderu #define PIN_A cislo pinu kanalu A enkoderu #define PIN_B cislo pinu kanalu B enkoderu #define MASK_PIN_A (<<PIN_A) #define MASK_PIN_B (<<PIN_B) #define MASK_PIN_AB (MASK_PIN_A MASK_PIN_B) volatile int Position promenna, ve ktere je poloha enkoderu #define GetPosition(x) sei() x = Position cli() cteni pozice musi byt pri zakazanem preruseni Ukázky asynchronního zpracování jsou psány co nejjednodušším způsobem, lze je samozřejmě optimalizovat. Asynchronní dékodování se základním rozlišením Nastaveno přerušení na vstupu kanálu A při vzestupné hraně interrupt EXT_PIN_A if ((IRC_PORT & MASK_PIN_B) == ) // Je-li při vzestupné hraně A, // B =, pricti tik // B =, odecti tik Asynchronní dékodování s dvojnásobným rozlišením Nastaveno přerušení na vstupu kanálu A při obou hranách interrupt EXT_PIN_A unsigned char IRC IRC = IRC_PORT if ((IRC & MASK_PIN_A) == ) if ((IRC & MASK_PIN_B) == ) if ((IRC & MASK_PIN_B) == ) // sestupna hrana A kanalu // vzestupna hrana na A

4 Stavíme mobilního robota - software Asynchronní dékodování se čtyřnásobným rozlišením Nastaveno přerušení na vstupech kanálů A i B při obou hranách interrupt EXT_PIN_A unsigned char IRC IRC = IRC_PORT if ((IRC & MASK_PIN_A) == ) if ((IRC & MASK_PIN_B) == ) if ((IRC & MASK_PIN_B) == ) // sestupna hrana A kanalu // vzestupna hrana na A interrupt EXT_PIN_B unsigned char IRC IRC = IRC_PORT if ((IRC & MASK_PIN_B) == ) if ((IRC & MASK_PIN_A) == ) if ((IRC & MASK_PIN_A) == ) // sestupna hrana B kanalu // vzestupna hrana na B

Dekódování signálu z kvadraturního enkodéru 5 Synchronní dékodování se čtyřnásobným rozlišením U synchronního zpracování je nutné kromě aktuálního stavu hodnot kanálů A a B enkodéru znát i předchozí stav signálů. Dekódování lze realizovat různými způsoby: vyhodnocením sekvenční logické funkce, stavovým automatem nebo dekódováním grayova kódu. Příklad ukáže nepříliš často používanou metodu, která vychází z dekódování grayova kódu. Tento postup lze velmi dobře optimalizovat a dosáhnout tak, velmi nízkého zatížení procesoru, resp. vysoké frekvence zpracování. Princip dekódování Pohyb vpřed Pohyb vzad A A B B Pokud budeme na kombinace hodnot kanálů A a B pohlížet jako na binární čísla, tak při pohybu vpřed získáme posloupnost,, 3, 2,,... a při pohybu zpět, 2, 3,,,... Tato posloupnost je vzestupně, resp. sestupně periodicky uspořádána, až na přehozené hodnoty 2 a 3. První fází zpracování je tedy záměna hodnot 2 3 a 3 2. Tím získáme posloupnosti,, 2, 3,,..., resp., 3, 2,,,... Nyní pokud tato čísla bereme jako 2-bitová, tak při pohybu vpřed je jejich rozdíl vždy (-=, 2-=, 3-2=, -3= s přetečením) a podobně při pohybu vzad -. To vše za předpokladu, že jsou výstupy enkodéru připojeny na piny a vstupního portu mikroprocesoru. Princip lze rozšířit na libovolné piny, s tím že rozdíl sousedních stavů není ± ale ±x. Jedinou podmínkou je, že kanál A je připojen na nižší pin než kanál B. Příklad zjednodušené implementace v jazyce C, nastaveno přerušení od časovače. Není ošetřen stav, kdy dojde ke ztrátě kroku, tj. dojde k posunu o dva stavy a nelze určit směr pohybu. unsigned char LastIRC interrupt CTC unsigned char IRC, temp IRC = IRC_PORT & MASK_PIN_AB // cteni stavu enkoderu if ((IRC & MASK_PIN_B)!= ) // dekodovani grayova kodu, tj. IRC ^= MASK_PIN_A // zamena druheho a tretiho stavu // rozdil soucasneho a predchoziho stavu, maskovani temp = (IRC LastIRC) & MASK_PIN_AB if (temp == MASK_PIN_A) // test zda je rozdil stavu kladny (+) if (temp == MASK_PIN_AB) // nebo zaporny (-) LastIRC = IRC // uschovani soucasneho stavu

6 Stavíme mobilního robota - software Kompletní optimalizovaná varianta implementace pro mikroprocesory AVR a překladač AVR-GCC, obsluha přerušení psána v asembleru. Důvodem je neefektivní implementace obsluh přerušení v C jazyce, kde jsou ukládány všechny i nepoužité registry. To představuje téměř zdvojnásobení doby zpracování přerušení. Optimalizovaná varianta obsluhy přerušení trvá maximálně 55 taktů, což při taktovací frekvenci 6MHz umožňuje teoreticky vzorkovací frekvenci více než 25 khz. Tato hodnota je více než dostatečná pro běžné enkodéry. Je ošetřen i stav ztráty stavu, který může nastat, je-li frekvence signálu z enkodéru vyšší než frekvence vzorkování. IntIRC.h #ifndef _IntIRC_H_ #define _IntIRC_H_ #define IRC_PORT PIND #define PIN_A 2 #define PIN_B 5 #define MASK_PIN_A (<<PIN_A) #define MASK_PIN_B (<<PIN_B) #define MASK_PIN_AB (MASK_PIN_A MASK_PIN_B) #endif IRC.h #ifndef _IRC_H_ #define _IRC_H_ #include "IntIRC.h" extern volatile int EncoderPosition // pozice v ticich enkoderu extern void InitIRC(void) #endif IRC.c #include "IRC.h" volatile int EncoderPosition // pozice v ticich enkoderu volatile char PreviousDir // pamet smeru otaceni, pro pripad ztraty hrany - // IRC snimace volatile unsigned char LastIRC // predchozi obraz vstupu z enkoderu void InitIRC(void) // CTC2, predelicka 8 vstupni frekvence od citace 2 MHz // Citac s autoclear on compare match OCR TCCR2 = (<<WGM2) (<<CS22) (<<CS2) (<<CS2) OCR2 = 39 // predvolba reload citace 4, vysledna frekvence 5 khz TIMSK = (<<OCIE2) // interrupt on Output Compare Match 2 LastIRC = IRC_PORT & MASK_PIN_AB if ((LastIRC & MASK_PIN_B)!= ) LastIRC ^= MASK_PIN_A EncoderPosition = // cteni aktualniho stavu IRC // dekodovani grayova kodu, // uschovani stavu // nulovani pozice enkoderu

IntIRC.s Dekódování signálu z kvadraturního enkodéru 7 #include <io.h> #include <ctoasm.inc> #include <macros.inc> #include "IntIRC.h".section.text ====================================================================== Prerusovaci rutina casovace zpracovani IRC snimace Timer 2... clock base 5 khz Casova narocnost: Dekodovani IRC beze zmen 35 taktu 2.875 us +/- 53 taktu 3.3 us 2* +/- 55 taktu 3.4375 us Maximální vytizeni procesoru 7,5% ======================================================================.global.func SIG_OUTPUT_COMPARE2 SIG_OUTPUT_COMPARE2 #define IRC ZL #define temp YH SIG_OUTPUT_COMPARE2: IntIRC: push in push push push r r, _SFR_IO_ADDR(SREG) ZH ZL temp in IRC, _SFR_IO_ADDR(IRC_PORT) cteni aktualniho stavu IRC ldi temp, MASK_PIN_A dekodovani grayova kodu sbrc IRC, PIN_B je-li vyssi bit eor IRC, temp pak nizsi bit negovat andi IRC, MASK_PIN_AB maskovat pouze bity A, B lds temp, LastIRC vyzvednuti minuleho stavu sts LastIRC, IRC a ulozeni noveho sub IRC, temp rozdil aktualniho a minuleho stavu andi IRC, MASK_PIN_AB maskovat pouze bity A,B (mozne přetečeni) breq enc_zero rozdil je, nedoslo k pohybu cpi IRC, MASK_PIN_A rozdil stavu je "" breq enc_inc pricist tik cpi IRC, MASK_PIN_AB rozdil stavu je "-" breq enc_dec odecist tik

8 Stavíme mobilního robota - software lds ZL, PreviousDir rozdil stavu je "2", ztrata stavu mov ZH, ZL zjistit prechozi smer pohybu lsl ZL nasobit 2-mi, asr ZH pricteme, nebo odecteme 2 tiky rjmp enc_add enc_inc: ldi ZL, budeme pricitat tik clr ZH rjmp enc_store enc_dec: ldi ZL, - budeme odecitat tik mov ZH, ZL enc_store: sts PreviousDir, ZL uschova aktualniho smeru pohybu enc_add: lds temp, EncoderPosition vypocet nove hodnoty pozice add temp, ZL enkoderu sts EncoderPosition, temp lds temp, EncoderPosition+ adc temp, ZH sts EncoderPosition+, temp enc_zero: pop pop pop out pop temp ZL ZH _SFR_IO_ADDR(SREG), r r reti.endfunc Informační zdroje: http://robotika.cz/guide/ http://elm-chan.org/works/smc/report_e.html - inspirace pro dekódování IRC jako grayova kódu a velice zajímavě řešený kaskádní PID regulátor