ýESKÉ VYSOKÉ UýENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická
BAKALÁěSKÁ PRÁCE
2009
Michal Tomáš
ýESKÉ VYSOKÉ UýENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická Katedra mČĜení
Vývojový modul s procesorem STM32 a jeho programování
Ing. Jan Fischer, CSc.
Michal Tomáš
Praha 2009
Prohlášení Prohlašuji, že jsem svou bakaláĜskou práci vypracoval samostatnČ a použil jsem pouze podklady (literaturu, projekty, SW atd.) uvedené v pĜiloženém seznamu. Nemám závažný dĤvod proti užití tohoto školního díla ve smyslu § 60 Zákona þ.121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o zmČnČ nČkterých zákonĤ (autorský zákon).
V Praze dne ……………………….
……………………………………. podpis
ii
iii
Anotace BakaláĜská práce se zabývá seznámením s architekturou jednoþipového mikrokontroléru s jádrem ARM Cortex-M3 a jeho programování na úrovní jazyka Assembler. V práci je vytvoĜeno nČkolik postupĤ konfigurace vestavČných periferií mikrokontroléru a vlastních motivaþních programĤ. Dále je vyvinuta metodika ladČní programĤ pĜes sériové rozhraní RS232. Na závČr jsou vytvoĜeny demonstraþní úlohy k ovládání krokového a stejnosmČrného motoru.
Annotation The bachelor work deals with the introduction of the architecture of single-chip microcontroller with kernel ARM Cotrex-M3 and its programming at the Assembler language level. In the work there are created several procedures of configuration of embedded microcontroller peripherals and its own motivational programs. Furthermore, there is developed the methodology of the program debugging via serial interface RS232. Finally, there are created demonstration tasks for controlling of stepping and DC motors. iv
Obsah 1
Úvod ............................................................................................................. 11
2
Specifikace hardwaru a softvaru .............................................................. 12
3
4
5
2.1
Deska vývojového modulu .......................................................................................12
2.2
Vývojové prostĜedí ...................................................................................................12
2.3
Zavedení programu do procesoru .............................................................................13
Architektura ARM Cortex-M3 ................................................................. 14 3.1
Registry jádra procesoru...........................................................................................14
3.2
PamČĢový prostor .....................................................................................................14
3.3
Instrukþní sada..........................................................................................................16
3.3.1
Zápis instrukce..................................................................................................16
3.3.2
Instrukce pĜesunu..............................................................................................17
3.3.3
Instrukce aritmetické ........................................................................................17
3.3.4
Instrukce logické...............................................................................................18
3.3.5
Instrukce posunutí ............................................................................................18
3.3.6
Instrukce skoku.................................................................................................18
3.3.7
Instrukce porovnání ..........................................................................................19
Zdroj hodinového signálu.......................................................................... 21 4.1
VnitĜní rychlý zdroj hodinového signálu - HSI........................................................21
4.2
VnČjší rychlý zdroj hodinového signálu - HSE ........................................................21
4.3
Smyþka fázového závČsu - PLL ...............................................................................21
Základní jednoduché programy ............................................................... 23 5.1
Blikaní LED diodou .................................................................................................23
5.1.1
Konfigurace systému hodin ..............................................................................23
5.1.2
Konfigurace portu.............................................................................................24
5.1.3
ZmČna úrovnČ na portu.....................................................................................25
5.2
Komunikace pĜes sériové rozhraní - USART...........................................................25
5.2.1
Konfigurace systému hodin ..............................................................................26
5.2.2
Konfigurace portu.............................................................................................26
5.2.3
Konfigurace USART ........................................................................................26 v
5.2.3.1 5.2.4
6
Vysílání a pĜíjem pĜes USART.........................................................................27
Programy složitČjšího typu využívající peiferie ...................................... 28 6.1
AnalogovČ-þíslicový pĜevodník - ADC....................................................................28
6.1.1
Konfigurace systému hodin ..............................................................................28
6.1.2
Konfigurace portu.............................................................................................29
6.1.3
Konfigurace A/D pĜevodníku ...........................................................................29
6.1.4
Obsluha A/D pĜevodníku..................................................................................30
6.1.5
Data A/D pĜevodníku .......................................................................................30
6.1.6
Senzor teploty...................................................................................................31 Jednotka þítaþe/þasovaþe − TIM ..............................................................................32
6.2
6.2.1
Režim þasovaþe a pĜerušení pĜi jeho pĜeteþení.................................................32
6.2.2
Režim pulzní šíĜkové modulace − PWM..........................................................33
6.2.3
Režim Encoder .................................................................................................35
6.2.4
Demonstraþní úloha použití jednotky þítaþ/þasovaþe v režimu Ecoder ...........36
6.2.4.1
Princip inkrementálního rotaþního optického snímaþe ................................37
ěadiþ systém pĜerušení.............................................................................................39
6.3 6.3.1
Prioritní systém.................................................................................................40
6.3.2
Nastavení systému pĜerušení ............................................................................41
6.4
7
Výpoþet pĜenosové rychlosti ........................................................................26
VnČjší zdroj pĜerušení – EXTI .................................................................................42
Ladící program Monitor............................................................................ 43 7.1
Ladící možnosti programu Monitor..........................................................................44
7.2
Princip ladící metody................................................................................................44
7.3
Jak Monitor používat ................................................................................................47
7.3.1
Princi zavedení programu do pamČti ................................................................47
7.3.2
Podmínka spuštČní programu ...........................................................................47
7.3.3
Použití pĜerušení ...............................................................................................48
7.3.4
Nastavení taktování systému a pĜenosové rychlosti .........................................48
7.4
Ovládání programu ...................................................................................................49
7.4.1
Konfiguraþní þást..............................................................................................49
7.4.2
Ladící þást.........................................................................................................50
vi
8
Demonstraþní úloha ovládání krokového motoru................................... 52 Princip þinnosti a Ĝízení krokového motoru .............................................................52
8.1 8.1.1
Unipolární a bipolární Ĝízení.............................................................................52
8.1.2
Jednofázové a dvoufázové Ĝízení......................................................................52
8.1.3
ěízení s poloviþním a plným krokem...............................................................53
8.1.4
Použitá metoda Ĝízení v úloze...........................................................................53
8.2
9
Použitý hardware a schéma zapojení krokového motoru .........................................53
8.2.1
Krokový motor .................................................................................................53
8.2.2
Obvod budiþe krokového motoru .....................................................................54
8.2.3
Schéma zapojení s krokovým motorem ...........................................................54
8.3
Možnosti ovládání krokového motoru......................................................................55
8.4
Popis þinnosti programu pro krokový motor............................................................56
Demonstraþní úloha ovládání stejnosmČrného motoru.......................... 57 9.1
Metoda ovládání stejnosmČrného motoru ................................................................57
9.1.1
Princip þinnosti stejnosmČrného motoru ..........................................................57
9.1.2
ěízení stejnosmČrného motoru .........................................................................58
9.1.3
Použitá metoda Ĝízení v úloze...........................................................................59
9.2
Použitý hardware a schéma zapojení stejnosmČrného motoru .................................59
9.2.1
Mechanika se stejnosmČrným motorem ...........................................................59
9.2.2
Obvod Ĝízení stejnosmČrného motoru...............................................................59
9.2.3
Schéma zapojení se stejnosmČrným motorem..................................................60
9.3
Popis þinnosti programu pro stejnosmČrný motor....................................................60
10 ZávČr............................................................................................................ 62 Literatura ........................................................................................................... 64 PĜílohy ................................................................................................................ 66
vii
Seznam obrázkĤ Obr. 2.1: Nový projekt v prostĜedí ȝVision 3...........................................................................13 Obr. 3.1: RozdČlení pamČĢového prostoru ...............................................................................15 Obr. 4.1: Strom systému hodin.................................................................................................22 Obr. 5.1: Zapojení diody na vývojovém modulu .....................................................................25 Obr. 6.1: ýinnost þítaþe v režimu Encoder na zmČnou úrovnČ obou signálĤ ..........................36 Obr. 6.2: Schéma pĜipojení inkrement. snímaþe IRC 110 k mikrokontroléru STM32F103R837 Obr. 6.3: Fotoelektrické snímání metodou prosvČtlování ........................................................38 Obr. 6.4: PrĤbČhy výstupĤ inkrementálního snímaþe...............................................................38 Obr. 6.5: Priorita skupiny .........................................................................................................40 Obr. 6.6: Priorita podskupiny ...................................................................................................41 Obr. 6.7: Priorita skupiny a podskupiny...................................................................................41 Obr. 7.1: NepĜímé propojení poþítaþe a mikrokontrolétu pĜes ladící rozhraní.........................43 Obr. 7.2: PĜímé propojení poþítaþe a mikrokontroléru pĜes periferie ......................................43 Obr. 7.3: Ladící metoda programu Monitor .............................................................................46 Obr. 7.4: Zjednodušené schéma ladící metody programu Monitor..........................................46 Obr. 7.5: Stav pamČti po zavedení ladícího a ladČného programu ...........................................47 Obr. 7.6: Odskok na adresu Monitoru v souboru STM32F10x.s .............................................48 Obr. 7.7: Adresa tabulky vektorĤ pĜerušení .............................................................................48 Obr. 7.8: PĜíklad vytvoĜení breakpointu programem Monitor .................................................50 Obr. 7.9: PĜíklad þtení z pamČti programem Monitor ..............................................................50 Obr. 8.1: Spínání cívek krokového motoru v unipolárním režimu s poloviþním krokem........53 Obr. 8.2: Unipolární krokový motor s vyvedeným stĜedem.....................................................54 Obr. 8.3: Schéma zapojení jednoho spínaþe Darlingtonova páru budiþe.................................54 Obr. 8.4: Schéma zapojení krokového motoru ovládaného procesorem STM32F103R8........54 Obr. 8.5: Obrazovka ovládání krokového motoru....................................................................55 Obr. 8.6: Vývojový diagram programu pro ovládání krokového motoru ................................56 Obr. 9.1: Náhradní schéma stejnosmČrného motoru ................................................................58 Obr. 9.2: Ideové zapojení stejnosmČrného motoru do H-mĤstku.............................................58 Obr. 9.3: VnitĜní struktura obvodu L298..................................................................................59 Obr. 9.4: Schéma zapojení ovládání stejnosmČrného motoru procesorem STM32F103R8 ....60 Obr. 9.5: Vývojový diagram Ĝízení stejnosmČrného motoru ....................................................61
viii
Seznam tabulek Tab. 2.1: Volba Bootování .......................................................................................................13 Tab. 3.1: Podmínky pro instrukce skoku a další operace .........................................................19 Tab. 5.1: Konfigurace bitu portu ..............................................................................................25 Tab. 6.1: Parametry teplotního senzoru udávané výrobcem ....................................................32 Tab. 6.2: Volba výbČru aktivního signálu þítaþe/þasovaþe v režimu Encoder .........................35 Tab. 6.3: Tabulka vektorĤ výjimek ..........................................................................................39 Tab. 6.4: Stav zásobníku pĜi pĜerušení .....................................................................................40 Tab. 6.5: Nastavení priority 3 bitové úrovnČ s Priority Group 5..............................................41 Tab. 7.1: Nabídky programu Monitor konfiguraþní þásti.........................................................49 Tab. 7.2: Nabídky programu Monitor ladící þásti ....................................................................51 Tab. 8.1: Nabídka pĜíkazĤ pro ovládání krokového motoru.....................................................55 Tab. 9.1: ěízení stejnosmČrného motoru..................................................................................60
ix
Seznam rovnic Rce. 3.1: Obecná rovnice bitové adresy ...................................................................................15 Rce. 3.2: Adresa v pamČĢovém prostoru ..................................................................................16 Rce. 5.1: Rovnice pĜenosové rychlosti pro USART.................................................................27 Rce. 6.1: Doba pĜevodu A/D pĜevodníku .................................................................................29 Rce. 6.2: Velikost napČtí na jeden bit A/D pĜevodníku............................................................31 Rce. 6.3: Stanovení teploty ve °C.............................................................................................31 Rce. 6.4: Frekvence zmČny stavu þítaþe/þasovaþe ...................................................................33 Rce. 6.5: Frekvence pĜeteþení jednotky þítaþe/þasovaþe..........................................................33 Rce. 6.6: ýinitel plnČní signálu PWM jednotky þítaþe/þasovaþe .............................................34 Rce. 9.1: Rovnice obvodu kotvy stejnosmČrného motoru........................................................57 Rce. 9.2: Moment stejnosmČrného motoru...............................................................................57 Rce. 9.3: Indukované napČtí kotvy stejnosmČrného motoru ....................................................58
x
1 ÚVOD V dnešní dobČ jsou témČĜ veškerá elektronická zaĜízení, jako výrobky spotĜební elektroniky, výrobky mČĜící techniky, ale i výrobky dalších odvČtví, vybavena alespoĖ jedním mikroprocesorem. Spousta tČchto aplikací stále používá populární, ale vývojovČ relativnČ staré jednoþipové mikrokontroléry Ĝady 8051, pĜípadnČ jejich klony. Jedná se o pomČrnČ pomalé 8-bitové mikrokontroléry, a jelikož se nároky na výpoþetní výkon, velikost pamČti a na vybavení vestavČnými perifériemi neustále zvyšují, je potĜeba hledat jinou variantu, která splní tyto požadavky. Vhodnou volbou mohou být mikroprocesory z rodiny 32-bitových jednoþipových mikrokontrolérĤ s jádrem ARM Cortex-M3, které disponují relativnČ vysokým výkonem a umožĖují spolupráci s Ĝadou využitelných periferií. Toto jádro se stalo stavebním kamenem nČkterých výrobcĤ jednoþipových mikrokontrolerĤ, jako ST Microelectronics, Luminary Micro, Actel a NXP, a liší se zejména právČ volbou vestavČných periferií. Výsledná funkce témČĜ každého mikrokontroléru je urþena teprve až vloženým programem, a k jeho vytvoĜení je potĜebná znalost vhodného programovacího jazyka. V souþasné dobČ je již ménČ populární programování v jazyce Assembler, ale dobrá znalost tohoto jazyka umožní vytvoĜit rychlý a efektivní kód i ve spoustČ složitých a technicky vybavených mikrokontrolérech. V porovnání s vyššími programovacími jazyky, napĜíklad C a C++, lze pomČrnČ snadno pĜistupovat k použitému hardwaru, v nČkterých pĜípadech je to dokonce i nutností. Tento jazyk však nutnČ vyžaduje úzkou spolupráci s technickým manuálem procesoru. Pro úplné zaþáteþníky programovat v jazyce Assembler mikroprocesory s jádrem ARM Cortex-M3, by mohl být nesnadný úkol, proto je dobré mít nČjaké základní znalosti z oblasti programování jednoþipových mikrokontrolérĤ, napĜíklad 8051. V této dobČ se výuka mikroprocesorové techniky snaží o pĜechod ze zastaralého mikrokontroléru 8051 na technologicky vyspČlejší architekturu s jádrem ARM Cortex-M3. Hlavní cílem této bakaláĜské práce je vytvoĜení motivaþní programĤ pro výuku s mikroprocesorem STM32F103R8 v jazyce Assembler. V tomto jazyce nejsou k dispozici knihovny se základním nastavením, jako je tomu napĜíklad u jazyka C, je tedy potĜebné vytvoĜit zejména programy zamČĜené na konfiguraci periferií, která je pomČrnČ složitá nejen pro úplné zaþáteþníky. K snazšímu vytvoĜení aplikaþních programĤ bude snaha o vývoj ladící metodiky pĜes sériové rozhraní RS232 bez jinak nutného hardwarového pĜípravku s rozhraním JTAG.
11
2 SPECIFIKACE HARDWARU A SOFTVARU K vývoji programu pro mikrokontrolér je zapotĜebí mít k dispozici vývojové prostĜedí pro napsání a simulaci zdrojového kódu a k pĜekladu do kódu procesoru. Dále je nezbytný hardware, na kterém se program odladí pro chod v reálném þase.
2.1 Deska vývojového modulu K ovČĜení funkce programĤ, je použit již hotový vývojový modul s mikrokontrolérem (viz. pĜíloha A: Zapojení desky s STM32, 48 pinĤ), který také obsahuje základní vybavení k jeho oživení, resetu a zavedení programu pĜes rozhraní RS232. Deska modulu je osazena i jednou diodou LED, která je volnČ k dispozici. Vyvedeny jsou všechny piny pouzdra procesoru, ale pouze nČkteré jsou pĜizpĤsobeny k pĜipojení na desku nepájivého kontaktního pole. Veškeré aplikaþní programy jsou vytvoĜeny s ohledem na hardwarové možnosti dané desky. Jedná se zejména o pĜizpĤsobení k rozložení dostupných vývodĤ pro pĜipojení nČkterých využívaných vnČjších periferií.
2.2 Vývojové prostĜedí K vývoji a simulaci aplikaþních programĤ je využíváno prostĜedí ȝVision 3 spoleþnosti Keil. UmožĖuje pomČrnČ jednoduchý náhled na stav registrĤ jádra procesoru a pamČĢového prostoru. K vytvoĜení projektu v prostĜedí ȝVision 3 je vhodné použít následující postup: 1. V otevĜeném
vývojovém
prostĜedí
vytvoĜíme
nový
projekt:
ProjectĺNew vision Project, vybereme umístČní a zadáme název a potvrdíme. 2. Ve vyvolaném oknČ vybereme typ procesoru: STMicroelectronicĺSTM32F103R8, potvrdíme a následnČ potvrdíme i pĜidání Startup Code do projektu. 3. Nyní vytvoĜíme hlavní soubor, kam bude zapsán zdrojový kód: FileĺNew, pak soubor uložíme: FileĺSave As a vhodnČ pojmenujeme s pĜíponou ASM do stejného projektu. 4. V oknČ Project Workspace pĜidáme vytvoĜený soubor do projektu dvojklikem na složku Source Group 1 a v následujícím oknČ vybereme: Soubory typu: Asm Source File a pĜidáme náš soubor. 5. Nyní máme pĜipraven prázdný projekt, a zbývá jen dopsat potĜebné hlaviþky a pĜizpĤsobení k použití pĜeddefinovaného nastaveni v Startup Code , viz. obr. 2.1.
12
Obr. 2.1: Nový projekt v prostĜedí ȝVision 3
2.3 Zavedení programu do procesoru Mikrokontrolér podporuje zavedení programu pomocí „Bootloader“, tj. režim, ve kterém je procesor schopen zavést program do pamČti. Výše zmínČný modul umožĖuje zavedení programu pomocí sériového rozhraní oznaþeného jako USART1 (Universal Synchronous Asynchronous Receiver Transmitter). V jakém režimu má procesor pracovat ukazuje tab. 2.1. K samotnému zavedení programu do þipu je nutná aplikace Flash Loader Demonstrátor, která je volnČ ke stažení z webových stránek výrobce, jakož i manuál k této aplikaci [1].
Oznaþení pinu Mód bootování BOOT1 BOOT0 x 0 Hlavní programová pamČĢ Flash programu 0 1 Systémová pamČĢ pro zavedení programu
Tab. 2.1: Volba Bootování 0 – úroveĖ logické nuly, 1 – úroveĖ logické jedniþky, x – na úrovni nezáleží
13
3 ARCHITEKTURA ARM CORTEX-M3 Cortex-M3 patĜí do skupiny 32-bitových mikroprocesorĤ, to znamená, že datový tok je v šíĜi 32-bitĤ, obsahuje banky 32-bitových registrĤ a 32-bitové rozhraní pro pĜístup k pamČti. PamČĢový prostor je spoleþný pro program i pro data, ale pĜístup je dán oddČleným sbČrnicovým rozhraním, jedná se tedy o procesor harvardské architektury. ZpĜístupnČním instrukcí i dat ve stejném okamžiku, je docíleno vyššího výkonu procesoru.
3.1 Registry jádra procesoru Jádro procesoru obsahuje nČkolik registrĤ, pĜes které procesor pĜímo vykonává jednotlivé operace. Pro všeobecné použití je zde 13 registrĤ oznaþených R0−R12, kde R8−R12 nelze použít pro 16-bitové instrukce, ostatní mají své specifické použití. Dva registry ukazatele vrcholu zásobníku (Stack Pointer) MSP a PSP, ale v daný okamžik je viditelný pouze jeden z nich a je oznaþen jako R13 nebo SP a jeho hodnota se mČní vždy nejménČ o velikost jednoho slova (word). Registr R14 nebo LR se nazývá Link Registr a je používán k uchování návratové adresy, napĜíklad pĜi volání podprogramu. Velmi dĤležitý registr, oznaþený jako R15 nebo PC, je používán jako programový þítaþ (Program Counter). Procesor má dále ještČ nČkolik speciálních registrĤ (PSR, PRIMASK, FAULTMASK, BESEPRI, CONTROL), které mohou být zpĜístupnČny pouze pomocí speciálních instrukcí. NapĜíklad registr PSR, což je stavový registr, který udává informaci o pĜíznacích po provedené instrukci (Negative, Zero, Carry, Overflow).
3.2 PamČĢový prostor Mikroprocesory ARM Cortex-M3 mají již pĜedem definované rozdČlení pamČĢového prostoru podle obr. 3.1. PamČĢ programu, pamČĢ dat a registry vstupních/výstupních zaĜízení i vestavČných periférií jsou umístČny do shodného lineárního adresového prostoru. PĜístup do pamČti je umožnČn 32-bitovou adresou, kde nejmenší adresovatelnou jednotkou je 1 byte, ale bČžnČ se pĜistupuje k celému slovu (4 byte). V prostoru SRAM a periferií existuje tzv. „Bit band region“, což je oblast, kde lze bitovČ adresovat pĜíslušnou þást pamČti. Každému bitu z bitovČ adresovatelné oblasti náleží 32-bitová adresa v prostoru „Bit band alias“, potom pamČĢovému prostoru velikosti 1 MB odpovídá oblast bitových adres v rozsahu 32 MB.
14
bit _ word _ addr = bit _ band _ base + (byte _ offset × 32) + (bit _ number × 4 ) Rce. 3.1: Obecná rovnice bitové adresy Kde: •
bit_word_addr − adresa jednoho bitu v bitovČ adresovatelné oblasti,
•
bit_band_base − poþáteþní adresa bitovČ adresovatelné oblasti,
•
byte_offset − poþet bajtĤ v dané adresové oblasti,
•
bit_number − þíslo bitu v adresovaném slovČ.
PĜíklad: Výpoþet bitové adresy bitu þíslo 24 slova na adrese 0x40021000:
0 x 42420060 = 0 x 42000000 + 0 x 21000 × 32 + 24 × 4
Obr. 3.1: RozdČlení pamČĢového prostoru
15
Každá periferie i registry samotného jádra procesoru mají svoji unikátní bázovou adresu. K jejich pĜístupu je dĤležité se seznámit s mapou rozmístČní jednotlivých komponent, str. 35[2]. V technickém listu jsou uvedeny pouze offsety pĜíslušných registrĤ. Výsledná adresa je kombinací báze a offsetu podle rce. 3.2.
ADR = ADR _ base + ADR _ offset Rce. 3.2: Adresa v pamČĢovém prostoru Kde: •
ADR − výsledný adresa registru v pamČti,
•
ADR_base – báze adresy registru v pamČti,
•
ADR_offset − offset adresy registru v pamČti.
3.3 Instrukþní sada Jeden z dĤležitých rysĤ mikroprocesorĤ s jádrem Cortex-M3 je podpora instrukþní sady Thumb-2. Procesor pak mĤže využívat 32-bitové i 16-bitové instrukce ve stejném programu, a kód potom nabývá velké programové hustoty s vysokou úþinností. Sada podporovaných instrukcí je velmi rozsáhlá str. 2-13-[3], budou tedy zmínČny pĜíklady jen tČch nejþastČji používaných instrukcí. 3.3.1
Zápis instrukce •
Zápis podle typu dat MOV
R0, R1
; data v registru
MOV
R0, #1
; pĜímá data
LDR
R0, =1
; pĜímá data
LDR
R1, [R0]
; nepĜímá adresa dat
Sada instrukcí se liší možným zápisem typu a velikosti pĜímých dat. •
Zápis s rĤzným poþtem operandĤ a ovlivnČní registru pĜíznakĤ PSR ADD
R0, R1
; R0 = R0+R1 , vliv na PSR
ADD
R0, R0, R1
; R0 = R0+R1
ADDS
R0, R0, R1
; R0 = R0+R1 , vliv na PSR
PĜekladaþ vČtšinou z ADD R0, R1 vytvoĜí tvar ADD R0, R0, R1.
16
•
Zápis s požadavkem na délku instrukce ADDS
R0, #1
; 16-bitová instrukce
ADDS.N
R0, #1
; 16-bitová instrukce
ADDS.W
R0, #1
; 32-bitová instrukce
Délku instrukce a její modifikaci obstarává pĜekladaþ, ale lze specifikovat. 3.3.2
Instrukce pĜesunu •
•
Základní instrukce pĜesunu pĜímé hodnoty MOV nebo negované MVN MOV
R0, R1
; R0 = R1
MOV
R0, #1
; R0 = 1
MVN
R0, R1
; R0 = negace R1
MVN
R0, #1
; R0 = 0xFFFFFFFE
Instrukce pĜístupu k pamČti, þtení LDR a zápis STR LDR
R0, =0x2000 ; R0 = 0x2000 adresa
LDR
R1, [R0]
; R1 = slovo naþtené z adresy 0x2000
STR
R1, [R0]
; R1 = slovo zapsané na adresu 0x2000
LDR
R2, [R0, #4] ; R2 = slovo naþtené z adresy 0x2004
STR
R2, [R0, #8] ; R2 = slovo zapsané na adresu 0x2008
PĜidáním pĜípony B, H nebo D lze pĜistupovat k bajtu, poloviþnímu slovu nebo dvojslovu. •
Instrukce pĜístupu k zásobníku, þtení POP a zápis PUSH PUSH
{R1-R3, LR} ; uložení R1, R2, R3, LR do zásobníku
POP
{ R1-R3, PC} ; obnovení R1, R2, R3, PC ze zásobníku
Tento zápis se používá pĜi volání podprogramĤ a obsluhy pĜerušení. 3.3.3
Instrukce aritmetické •
•
Instrukce sþítání ADD a odþítání SUB ADD
R0, R2, R1
; R0 = R2+R1
SUB
R0, R0, #1
; R0 = R0 -1
Instrukce násobení MUL a dČlení znaménkové SDIV neznaménkové UDIV MUL
R0, R0, R1
; R0 = R0 *R1
UDIV
R0, R0, R1
; R0 = R0 /R1
17
3.3.4
Instrukce logické •
•
Instrukce logického souþinu AND a logického souþtu ORR AND
R0, R0, R1
; R0 = R0 & R1
ORR
R0, R0, R1
; R0 = R0 | R1
Instrukce neg. logického souþinu BIC, neg. logického souþtu ORN a neg. Ekvivalence EOR
3.3.5
R0, R0, R1
; R0 = R0 & (-R1)
ORN
R0, R0, R1
; R0 = R0 | ( -R1)
EOR
R0, R0, R1
; R0 = R0 XOR R1
Instrukce posunutí •
3.3.6
BIC
Instrukce logické posuvu vpravo LSR a vlevo LSL a rotace vpravo ROR LSL
R0, R0, #2
; R0 = R0 « 1, R0 = R0 *4
LSR
R0, R0, #1
; R0 = R0 » 1, R0 = R0 /2
ROR
R0, R0, #4
; R0 = R0 » 4
ROR
R0, R0, #28
; R0 = R0 « 4
Instrukce skoku •
Instrukce nepodmínČného skoku podle návČští a podle adresy v registru B
NAVESTI
; skok na adresu NAVESTI
BX
Registr
; skok na adresu v Registru
BL
NAVESTI
; skok na adresu NAVESTI a uložení ; návratové adresy v LR
BLX
Registr
; skok na adresu v Registru a uložení ; návratové adresy v LR
Instrukce BL NAVESTI se používá k volání podprogramu a instrukce BX LR pro návrat z podprogramu, kde LR je návratová adresa, která nesmí být pĜepsána, napĜíklad dalším voláním podprogramu uvnitĜ programu pĤvodního.
18
•
Instrukce podmínČného skoku, podmínky viz. tab. 3.1 BEQ
NAVESTI
; skok na adresu NAVESTI pĜi Z = 1
BLT
NAVESTI
; skok na adresu NAVESTI pĜi V N
Zápis instrukce je stejný jako u instrukcí nepodmínČného skoku, ale pĜidáním pĜípony je specifikována podmínka, podle které je proveden skok v závislosti na stavu pĜíznakĤ v registru PSR. •
Instrukce skoku pĜí porovnání s nulou CBZ a CBNZ CBZ
R0, NAVESTI
; skok na adresu NAVESTI pĜi R0 = 0
CBNZ R0, NAVESTI
; skok na adresu NAVESTI pĜi R0 0
PĜípona EQ
Podmínka Equal
PĜíznak PSR Z=1
NE
Not equal
Z=0
CS/HS
Carry set/unsigned higher or same
C=1
CC/LO
Carry clear/unsigned lower
C=0
MI
Carry set/unsigned higher or same
N=1
PL
Minus/negative
N=0
VS
Plus/positive or zero
V=1
VC
No overflow
V=0
HI
Unsigned higher
C=1aZ=0
LS
Unsigned lower or same
C=0aZ=1
GE
Greater than or equal
N=V
LT
Less than
NV
GT
Greater than
Z = 0 nebo N = V
LE
Less than or equal
Z = 1 nebo N V
AL
Always (unconditional)
−
S
Update PSR (flags)
−
Tab. 3.1: Podmínky pro instrukce skoku a další operace 3.3.7
Instrukce porovnání
Instrukce vykonají danou operaci a nastaví pĜíznaky v PSR, ale bez zápisu výsledku. Používají se v kombinaci s instrukcemi podmínČného skoku. •
Instrukce porovnání odþítáním CMP CMP R0, R1
; R0 – R1 a nastavení pĜíznakĤ PSR
BLT
; skok na adresu NAVESTI
NAVESTI
; pĜi R0 < R1 (V N) 19
•
Instrukce porovnání logickým souþinem TST TST
R0, R1
; R0 & R1 a nastavení pĜíznakĤ PSR
BLT
NAVESTI
; skok na adresu NAVESTI pĜi V N
20
4 ZDROJ HODINOVÉHO SIGNÁLU Velmi
dĤležitou
souþástí
každého
mikroprocesoru
je
zdroj
hodinového
signálu.
PĜi programování jakékoliv aplikace je dobré vČdČt s jakou frekvencí systémových hodin, bude procesor pracovat. ObecnČ platí, že s rostoucí frekvencí se zvyšuje výkon systému, ale také stoupá jeho spotĜeba elektrické energie. Používaný jednoþipový mikroprocesor má k dispozici tĜi základní zdroje taktování systému s vysokou rychlostí, které mohou být použity: •
HSI
- vnitĜní rychlý RC oscilátor,
•
HSE
- vnČjší rychlý oscilátor (krystal),
•
PLL
- násobiþka se zdrojem HSI nebo HSE.
Dále je možné ještČ využít dva sekundární zdroje taktování systému s nízkou rychlostí 40 kHz nebo 32,768 kHz, napĜíklad pro režim se sníženou spotĜebou. Požadovanou frekvenci je možné do jisté míry nastavit použitím vestavČných dČliþek, pĜípadnČ násobiþek. Mikroprocesor podporuje maximální nejvyšší kmitoþet 72 MHz, který by nemČl být pĜekraþován. Je to také hraniþní frekvence nČkterých vestavČných periferií, ale mnohdy musí být taktování ještČ nižší. Podrobný náhled o maximálních frekvencích sbČrnic periferií a systému dČliþek a násobiþek poskytuje obr. 4.1.
4.1 VnitĜní rychlý zdroj hodinového signálu - HSI Po resetu systému je HSI (High Speed Internal clock signal) vybrán jako zdroj systémových hodin, vnitĜní RC oscilátor s frekvencí 8 MHz. Když jsou hodiny pĜímo využívány k taktování procesoru nebo jsou zdrojem pro PLL, nelze je vypnout. PĜepnutí na jiný zdroj je možný nejdĜíve po dosažení stability pĜepínaného zdroje.
4.2 VnČjší rychlý zdroj hodinového signálu - HSE HSE (High Speed External clock signal) poskytuje hodinové pulzy pro systém, buć pĜivedením externího signálu do 25 MHz, nebo použitím krystalu þi keramického rezonátoru v rozsahu od 4 do 16 MHz.
4.3 Smyþka fázového závČsu - PLL PLL (Phase Locked Loop) plní funkci násobiþky frekvence a mĤže být použita se zdrojem HSI nebo HSE, kde pĜi výbČru HSI je vstupní frekvence dČlena dvČma, tedy HSI/ 2. 21
Koeficient násobení je nastavitelný v rozsahu x2−x16. Jakmile je funkce násobiþky povolena, koeficient již nelze zmČnit. Maximální nastavitelná frekvence se vstupním zdrojem HSI je 64 MHz.
Obr. 4.1: Strom systému hodin
22
5 ZÁKLADNÍ JEDNODUCHÉ PROGRAMY 5.1 Blikaní LED diodou První jednoduchý program, kterým lze ovČĜit oživení a správnou funkþnost mikroprocesoru, je nejlépe demonstrovat rozblikáním nČjaké LED diody pĜipojené k jeho bránČ. Je to vhodné zejména z dĤvodu potĜeby minimálního hardwaru a funkþnost je ovČĜitelná i vizuálnČ. Spousta vývojových pĜípravkĤ nejménČ jednu diodu obsahuje. Modul použitý pro tuto úlohu má pĜipojenu jednu diodu v zapojení „pull-up“ (obr. 5.1) na vývodu þíslo 13 portu A. V následujícím textu bude oznaþení použitého vývodu ve shodČ s pĜíslušným vývodem pouzdra použitého procesoru, tak jako tomu je v str.16-[4]. Tedy pro tento pĜípad se jedná o vývod PA13. Aby program správnČ fungoval, musí se provést nezbytná konfigurace systému hodin a odpovídajícího portu. Podstata programu spoþívá v periodické zmČnČ úrovnČ na zvoleném bitu portu s frekvencí pozorovatelnou lidským okem. 5.1.1
Konfigurace systému hodin
Procesor poskytuje nČkolik zdrojĤ pro systémové hodiny, viz. kapitola 4. PĜi poþáteþním nastavení je vybrán zdroj HSI, který postaþuje k taktování celého procesoru, ale nedosahuje takové pĜesnosti jako HSE s krystalový oscilátorem. Pro dosažení rychlého a pĜesného zdroje hodinového signálu je vhodné zvolit PLL násobiþku se zdrojem HSE. Na vývojovém modulu je použit HSE s krystalovým oscilátorem s frekvencí 8 MHz. Nyní bude uveden postup konfigurace PLL s HSE s výslednou taktovací frekvencí 72 MHz a podobné nastavení je použito i v následujících programech. 1. Nejprve je dĤležité zapnout zdroj HSE a testovat, zda zdroj dosahuje požadované stability. K tomu slouží bity HSEON a HSERDY registru RCC_CR str. 74-[2]. Teprve po dosažení stability je zvolený zdroj pĜipraven k použití. 2. Dále je vhodné nastavit potĜebné dČliþky s ohledem na používané periferie, viz registr RCC_CFGR str. 75-[2]. Lepší orientaci poskytne obr. 4.1. Pro tento pĜípad staþí nastavit dČlící pomČr u PPRE1 (APB1), a to s dČlícím faktorem 2. DĤvodem je maximální frekvence 36 MHz sbČrnice APB1. Ostatní dČliþky jsou ponechány s dČlícím faktorem 1. 3. Aby procesor správnČ fungoval, je nutností nastavit pĜíslušné þekací stavy k pĜístupu Flash pamČti, viz. LATENCY v registru FLASH_ACR str. 21-[5]. Pro tento pĜípad jsou 23
nastaveny 2 þekací stavy, protože taktovací frekvence je v rozsahu 48 MHz až 72 MHz. Zrychlení pĜístupu k pamČti je docíleno povolením zachycení jednoho slova pĜi þtení. Toto nastavení je již po resetu systému a je nutné pĜi volbČ dČlícího pomČru rĤzného od dČlícího faktoru 1 na dČliþce AHB. Povolení je umožnČno bitem PRFTBE v registru FLASH_ACR str. 21-[5]. 4.
Použije-li se PLL násobiþka, vybere se zdroj vstupních hodin a koeficient násobení, bity PLLSRC a PLLMUL registru RCC_CFGR str. 75-[2]. S frekvencí zdroje HSE 8 MHz a koeficientem násobení x9, je PLL zdrojem hodin o frekvenci 72 MHz.
5. Je-li násobiþka nastavená, zbývá ji uvést do provozu nastavením bitu PLLON a provést test úspČšného rozbČhnutí bit PLLRDY, bity jsou pĜístupny v registru RCC_CR str. 74-[2]. 6. Samotný zdroj systémových hodin je vybrán bity SW registru RCC_CFGR str. 75-[2]. V tomto pĜípadČ je zvolen PLL, který je nastaven na frekvenci 72 MHz. 7. Nyní jsou nakonfigurovány systémové hodiny, ale aby mohly být používány i požadované periférie, je nutné jim pĜivést hodinový signál. Zde bude použit pin PA13, proto musí být povoleny hodiny alternativní funkce portu a vlastního portu A, bity AFIOEN a IOPBEN registru RCC_APB2ENR str. 86-[2]. 5.1.2
Konfigurace portu
Hlavním smyslem portu mikroprocesoru je komunikace s okolím. Každý bit portu mĤže být nakonfigurován v jednom z mnoha režimĤ dle tab. 5.1. Poþáteþní nastavení vČtšiny bitĤ portu je aktivní v módu Input floating. Výjimku tvoĜí vývody, které jsou zároveĖ používány s rozhraním JTAG, jsou to konkrétnČ vývody PA15, PA14, PA13 a PB4. Mají-li být využívány jinak, než je jejich pĤvodní funkce, je tĜeba tuto funkci zakázat. Vývojový modul má na PA13 LED diodu, proto funkce JTAG musí být zakázána, aby bylo možné diodu ovládat.
Zakázání
funkce
JTAG
lze
bity
SWJ_CFG
v
módu
‘100’
registru
AFIO_MAPR str. 113- [2]. Protože je LED dioda pĜipojena jako výstupní zaĜízení, bude staþit nakonfigurovat vývod jako univerzální výstup typu push-pull. Jedná-li se o výstup, musí být ještČ zvolen mód maximální rychlosti zmČny tohoto vývodu. Vybrat lze frekvenci 2, 10 nebo 50 MHz, pro diodu bude staþit napĜíklad frekvence 2 MHz. Volba módu a konfigurace PA13 je provedena zápisem do registru GIPIOx_CRH str.103-[2].
24
Mód portu
Typ vstupu/výstupu Push-pull
Univerzální výstup
Open-drain
Alternativní funkce výstupu
Push-pull Open-drain Analog input Input floating
Vstup
Input pull-down Input pull-up
Tab. 5.1: Konfigurace bitu portu 5.1.3
ZmČna úrovnČ na portu
Dioda umístČná na vývojovém modulu je v zapojení pull-up obr. 5.1, proto její rozsvícení je možné úrovní log. jedniþky. Ovládání úrovnČ log. 1 nebo log. 0 na výstupu je možné zápisem do registru GPIOx_ODR str. 104-[11]. Protože se jedná pouze o jeden bit, je výhodné provádČt tento zápis pĜes bitovČ adresovatelnou oblast tzv. bit banding, viz. kapitola 4 .
Obr. 5.1: Zapojení diody na vývojovém modulu
5.2 Komunikace pĜes sériové rozhraní - USART Další z jednoduchých programĤ je komunikace s okolím pĜes sériové rozhraní. Mikrokontrolér obsahuje tĜi tyto rozhraní pojmenované USART1, 2 a 3 (Universal Synchronous Asynchronous Receiver Transmitter) a deska vývojového modulu pracuje právČ s USART1, kterého je také využíváno k zavedení programu do pamČti procesoru. Toto rozhraní se požívá k pĜenosu dat þi jiné komunikaci mezi procesorem a osobním poþítaþem, notebookem nebo jiným zaĜízením s potĜebným vybavením. Pro potĜebnou komunikaci jsou opČt dĤležité poþáteþní inicializace systému hodin, komunikaþního portu a vlastní konfigurace USART.
25
5.2.1
Konfigurace systému hodin
Podrobný popis jak nastavit zdroj systémových hodin, povolení hodin alternativní funkce portu a portu A, popisuje kapitola 5.1.1. Protože je ještČ využita další periferie USART1, je potĜebné
ji
poskytnou
zdroj
hodinových
impulzĤ
povolením
v registru
RCC_APB2ENR str. 86-[2] bitem USART1EN. 5.2.2
Konfigurace portu
Ke komunikaci pomocí USART1 musí být nastaveny dva bity portu, jeden pro vysílání (Tx) a druhý pro pĜíjem (Rx). Každá periferie má pĜedem definovány své alternativní vstupy pĜípadnČ výstupy, a pro USART1 jsou to právČ PA9 a PA10, jak ukazuje tabulka USART1 remapping v str. 112-[2]. Nastavení vývodĤ portu A je pro PA9 (Tx) jako alternativní funkce výstupu push-pull a pro PA10 (Rx) jako vstup input floating v registru GIPIOx_CRH str.103[2]. 5.2.3
Konfigurace USART
USART je možné nakonfigurovat do spoustu pĜenosových módĤ s volitelnou rychlostí pĜenosu. Pro jednoduchou základní komunikaci je sériové rozhraní provozováno obČma smČry asynchronním pĜenosem s rychlostí 9600Bd (jeden start bit, osm datových bitĤ a jeden stop bit). Jak USART nakonfigurovat, ukazuje následující postup: 1. Nejprve je nutné nastavit, jakou pĜenosovou rychlostí se bude komunikovat. Stanovení komunikaþní rychlosti popisuje kapitola 5.2.3.1. 2. Dále se povolí vlastní pĜíjem bit RE, vysílání bit TE a nakonec se bitem UE umožní provoz USART, bity jsou pĜístupny v registru USART_CR1 str. 631-[2]. Poþet datových bitĤ, start bitĤ a stop bitĤ je možné nastavit v registrech USART_CR1 a USART_CR2, ale není to nutné, neboĢ standardnČ po resetu je nastaven jeden start bit, jeden stop bit a osm datových bitĤ. 5.2.3.1 Výpoþet pĜenosové rychlosti Obvod rozhraní USART1 je taktován frekvencí PCLK2, která je odvozená rychlou dČliþkou APB2, viz. obr. 4.1. Ostatní obvody USART jsou taktovány frekvencí PCLK1, jež poskytuje pomalá dČliþka APB1, USART1 tedy mĤže komunikovat rychleji než ostatní tyto obvody. K urþení pĜenosové rychlosti (rce. 5.1) je nutné znát hodnotu frekvence PCLK a konstantu USARTDIV. VČtšinou je nutné urþit jakou rychlostí se bude komunikovat, a proto musí být
26
stanovena právČ konstanta USARTDIV, která je reprezentována racionálním þíslem. VyjádĜení tohoto þísla v hexadecimální soustavČ ukazuje pĜíklad níže.
BAUD =
f PCLK 16 × USARTDIV
Rce. 5.1: Rovnice pĜenosové rychlosti pro USART Kde: •
fPCLK – taktovací frekvence USART,
•
USARTDIV – konstanta pro výpoþet pĜenosové rychlosti.
PĜíklad: Výpoþet konstanty USARTDIV pro dosažení pĜenosové rychlosti 9600 Bd s frekvencí hodin fPCLK 72 MHz: USARTDIV =
f PCLK 72 MHz = = 468,75 16 × BAUD 16 × 9600
PĜevod racionálního þísla (USARTDIV) na hexadecimální (BRR):
USARTDIV = 468,75d celá þást = 468d = 0 x1D 4 desetinná þást = 16 × 0,75 = 12d = 0 xC BRR = 0 x1D 4C Hodnota BRR je konstanta urþující požadovanou komunikaþní rychlost a zapisuje se do registru USART_BRR str. 630-[2].
5.2.4
Vysílání a pĜíjem pĜes USART
Objem vysílaných i pĜijímaných dat mĤže být v šíĜi osmi nebo devíti bitĤ, závisí na konkrétní konfiguraci.
Data,
která
mají
být
vyslána,
se
zapisují
do
datového
registru
USART_DR str. 630-[2] a data pĜijatá jsou taktéž pĜístupna ze stejného registru. O stavu pĜenosu informují dva bity ve stavovém registru USART_SR str. 627–[2], a je vhodné je cyklicky testovat, aby nedocházelo ke kolizím þi ztrátČ dat. Bit TC signalizuje svým nastavení, že data jsou již kompletnČ vyslána a zápisem dalších dat je tento bit opČt vynulován, pĜípadnČ pĜímým zápisem logické nuly. ObdobnČ je tomu tak i pro pĜíjem, kde nastavením bitu RXNE je signalizováno, že jsou data kompletní. PĜeþtením datového registru se tento pĜíznak nuluje a mohou být pĜijata data následující.
27
6 PROGRAMY SLOŽITċJŠÍHO TYPU VYUŽÍVAJÍCÍ PEIFERIE Mikroprocesory STM32 mají na svém þipu k dispozici mnoho periferií, jako vstupní/výstupní porty, obvody USART, analogovČ þíslicové pĜevodníky, jednotky þítaþe/þasovaþe, atd.. U každé periferie je nutné nastavit zdroj hodinového signálu a povolit jej v registru ADC_APB1ENR str.88-[2] nebo ADC_APB2ENR str.86-[2]. PĜed nakonfigurováním do požadovaného režimu je také vhodné používanou jednotku uvést do výchozího stavu, registr ADC_APB1RSTR str.82-[2] nebo ADC_APB2RSTR str.80-[2], ale není nutné pĜi prvním použití po resetu celého systému.
6.1 AnalogovČ-þíslicový pĜevodník - ADC Velmi praktickou
výbavou mikrokontroléru
STM32F103R8 je
analogovČ-þíslicový
pĜevodník, v následujícím textu jen jako A/D pĜevodník. UmožĖuje provoz v ĜadČ pracovních módĤ s pomČrnČ rozsáhlou konfigurací. V této variantČ jsou na þipu k dispozici A/D pĜevodníky ADC1 a ADC2. Základní parametry A/D pĜevodníku:
6.1.1
•
rozlišení 12 bitĤ,
•
vstupní napČtí VIN v rozsahu: VSSA < VIN < VDDA,
•
napájecí napČtí v rozsahu 2,4 V až 3,6 V,
•
minimální doba pĜevodu 1ȝs pĜi frekvenci hodin A/D pĜevodníku 14 MHz,
•
18 kanálĤ (16 externích a 2 interní), pĜímé nebo injektované,
•
vlastní kalibrace,
•
jednorázový nebo kontinuální pĜevod,
•
možnost pĜenosu dat do pamČti pomocí DMA.
Konfigurace systému hodin
K dosažení minimální doby jednoho A/D pĜevodu (viz. rce. 6.1), musí být hodnota frekvence systémových hodin nastavena na 56 MHz. Konfigurace je obdobná jako v kapitole 5.1.1, ale s nastaveným koeficientem násobení x7. Cílem je dosáhnou maximální taktovací frekvence A/D pĜevodníku, která je 14 MHz. Zdroj taktování tohoto pĜevodníku je možné upravit jeho pĜeddČliþkou, bity ADCPRE registru RCC_CFGR str. 75-[2]. Pro tento pĜípad bude koeficient dČlení roven 4 s ohledem na frekvenci systémových hodin 56 MHz. Nakonec je ještČ nutné
28
povolit zdroj hodin pro pĜevodník v registru RCC_APB2ENR str. 86-[2] bitem ADC1EN, v pĜípadČ použití pĜevodníku s oznaþením ADC1.
t PR = (tVZ + 12,5) × TADC Rce. 6.1: Doba pĜevodu A/D pĜevodníku
Kde: •
tPR – doba pĜevodu,
•
tVZ – doba vzorkování,
•
TADC – perioda taktování pĜevodníku.
PĜíklad: Zdroj taktování A/D pĜevodníku 14 MHz a doba odbČru vzorku tVZ = 1,5.
t PR = (tVZ + 12,5) × TADC t PR = (1,5 + 12,5) ×
6.1.2
1 = 1μs 14 MHz
Konfigurace portu
Porty mikrokontroléru, právČ pro potĜeby A/D pĜevodníku, umožĖují nastavit své bity v režimu pro vstup analogového signálu. Využije-li se napĜíklad vývod PA3, nastaví se na pĜíslušné pozici v registru GIPIOx_CRL str. 102-[2] mód pro vstup v režimu analog input.
6.1.3
Konfigurace A/D pĜevodníku
PĜed nakonfigurováním A/D pĜevodníku do požadovaného pracovního módu, je nejlépe provést
jeho
reset
nastavením
a
vynulováním
bitu
ADC1RST
registru
RCC_APB2RSTR str. 80-[2], pro ADC1. Nyní bude popsáno jedno z mnoha nastavení A/D pĜevodníku, resp. jednorázový pĜevod s využitím kanálu þíslo 3 v pĜímém („regular“) módu se softwarovou spouští a zarovnáním 12-bitových dat doprava. 1. VýbČr externí spouštČ pĜevodu, bity EXTSEL v registru ADC_CR2 str. 169-[2]. Softwarová spoušĢ je zajištČna nastavením volby SWSTART. 2. Režim jednorázového nebo kontinuálního pĜevodu je zvolen bitem CONT registru ADC_CR2 str. 169-[2]. Po resetu je nastaven jednorázový pĜevod. 3. Data získaná z pĜevodníku mohou být zarovnána doprava nebo doleva, bit ALIGN registru ADC_CR2 str. 169-[2]. Po resetu jsou data zarovnána doprava.
29
4. Dále pro každý kanál lze vybrat dobu odbČru vzorku, pro kanál 3 zápis do registru ADC_SMPR2 str. 173-[2] na pozici SMP3. 5. Je-li vybráno více kanálĤ, je možnost nastavit poĜadí pĜevodu na zvolených kanálech. Má-li být kanál 3 první v poĜadí, musí být do registru ADC_SQR3 str. 173-[2] na pozici SQ1 zapsána hodnota 3. 6. Nastavením bitu ADON v registru je povolena funkce a start pĜevodu A/D pĜevodníku ADC_CR2 str. 169-[2] (samotný pĜevod je proveden až na událost vyvolanou spouští). 7. DĤležitou souþástí konfigurace je kalibrace A/D pĜevodníku. Nastavení bitu RSTCAL na úroveĖ logické jedniþky a následné testování jeho stavu. Po opČtovné zmČnČ úrovnČ na logickou nulu, se provede inicializace kalibraþního registru. Totéž je nutné provést i s bitem CAL, který signalizuje uskuteþnČní vlastní kalibrace A/D pĜevodníku. Bity jsou pĜístupné v registru ADC_CR2 str. 169-[2].
6.1.4
Obsluha A/D pĜevodníku
Ke spuštČní samotného pĜevodu je tĜeba povolit spoušĢ, bit EXTTRIG registru ADC_CR2 str. 169-[2], a vlastní pĜevod je zapoþat reakcí na událost této spouštČ. Jiný pĜípad nastává, když je nakonfigurována softwarová spoušĢ, pak odstartování pĜevodu nastává teprve zápisem logické jedniþky na bit SWSTART registru ADC_CR2 str. 169–[2], pro pĜímý mód. Zda pĜevod je již kompletní, informuje svým nastavením bit EOC v registru ADC_CR2 str. 169-[2], je tedy nutné jeho úroveĖ testovat. PĜevedená data jsou k dispozici v pĜednastaveném zarovnání v registru ADC_DR str. 166-[2], pro pĜímý mód. ýtením dat je zároveĖ nulován bit EOC.
6.1.5
Data A/D pĜevodníku
PĜevodník pĜemČní vstupní analogové napČtí na napČtí výstupní ideálnČ stejné velikosti, ale v digitální podobČ. S jakou pĜesností je vstupní napČtí pĜevedeno na výstupní, udává bitové rozlišení pĜevodníku. Aby data bylo možno zpracovat, je nutné zjistit, jak velká hodnota napČtí pĜipadá na jeden bit (LSB), viz. rce. 6.2. Tato informace je závislá na velikosti referenþního napČtí VREF. Mikrokontolér na desce vývojového modulu nemá vstup pro referenþní napČtí, proto je zdroj reference napájecí napČtí A/D pĜevodníku (VDDA, VSSA).
30
LSB =
VREF + − VREF − rozlišení pĜĜevodník u
Rce. 6.2: Velikost napČtí na jeden bit A/D pĜevodníku
PĜíklad: NapČtí VDDA= VREF+ = 3,3 V a VSSA= VREF- = 0 V, rozlišení pĜevodníku je 12 bitĤ (4096 možných hodnot).
6.1.6
LSB =
V REF + − V REF − rozlišení pĜĜevodník u
LSB =
3,3 − 0 ≅ 8,05664 ⋅ 10 −4 V 4096
Senzor teploty
ýip mikrokotroléru obsahuje senzor teploty, kterým lze napĜíklad mČĜit orientaþní okolní teplotu tohoto zaĜízení. Teplotní senzor je pĜipojen na vnitĜní kanál þíslo 16 A/D pĜevodníku a k mČĜení teploty lze pĜevodník nakonfigurovat obdobnČ, jako je uvedeno v kapitole 6.1.3 V nastavení musí být vybrán kanál þíslo 16 a doba vzorkování by se mČla blížit hodnotČ 17,1 ȝs, kterou doporuþuje výrobce. Povolení vlastního senzoru je nastavením bitu TSVREFE v registru ADC_CR2 str. 169-[2]. Urþení teploty spoþívá ve zmČĜení napČtí na vstupu vnitĜního kanálu pĜevodníku (pravdČpodobnČ je napČtí mČĜeno na tepelnČ závislém rezistoru). NapČtí se mČní pĜibližnČ lineárnČ s teplotou až do 45 °C. PĜepoþet tohoto napČtí na teplotu ve °C lze stanovit podle rce. 6.3 s využitím údajĤ výrobce podle tab. 6.1. Teplota [°C ] =
V25 − VSENSE + 25 Avg _ Slope
Rce. 6.3: Stanovení teploty ve °C
Kde: •
V25 − hodnota napČtí pĜi teplotČ 25°C,
•
VSENSE − namČĜená hodnota napČtí,
•
Avg_Slope − smČrnice lineárního prĤbČhu.
31
Tab. 6.1: Parametry teplotního senzoru udávané výrobcem
6.2 Jednotka þítaþe/þasovaþe − TIM Mikrokontrolér obsahuje þtyĜi jednotky þítaþe/þasovaþe oznaþené jako TIM1, TIM2, TIM3 a TIM4. Všechny jsou pĜístupné pro volné použití a mají stejné hardwarové vybavení až na jednotku TIM1, která má ještČ další rozšíĜené vybavení a možnosti použití. Maximální taktování tČchto jednotek je 72 MHz, pĜiþemž TIM1 je umístČn na sbČrnici APB2 a ostatní na sbČrnici APB1, viz. obr. 4.1, což je nutné brát v úvahu pĜi nastavení jejich taktování. Všechny jednotky TIM jsou 16-bitové a je možné je provozovat v režimu þítání nahoru nebo dolu. Dále každá jednotka obsahuje 16-bitovou pĜeddČliþku a 16-bitový registr Autoreload, kterým lze omezit poþet þítaných stavĤ. Tyto þítaþe/þasovaþe mají þtyĜi na sobČ nezávislé kanály využitelné v režimech Capture/Compare. PĜiĜazení konkrétních vývodĤ k pĜíslušným kanálĤm, ukazují tabulky alternativní funkcí jednotek TIM, viz. str. 109 - [2].
6.2.1
Režim þasovaþe a pĜerušení pĜi jeho pĜeteþení
Nakonfigurování jednotky TIM v režimu þasovaþe je vhodné k odmČĜení pĜesného þasového intervalu (zdroj hodinového signálu je odvozen od systémových hodin). Úkon po uplynutí stanovené doby je nejlépe obsloužit pomocí pĜerušení použitého þasovaþe. Nyní bude uveden postup jak nastavit þasovaþ s vyvoláním pĜerušení pĜi jeho pĜeteþení:
1. Do registru TIMx_ARR str. 319-[2] je nastavena hodnota pĜi které þasovaþ pĜeteþe. Zpravidla je to velikosti periody nebo doplĖku periody.
2. PĜeddČliþka þasovaþe prodlužuje dobu, na kterou þasovaþ zvýší þi sníží svou hodnotu, tj. kolik hodinových pulzĤ pĜipadne na jeden stav þasovaþe. Nastavení je provedeno v registru TIMx_ARR str. 319-[2].
3. Volba smČru þítání je vybrána bitem DIR v registru TIMx_CR1 str. 304-[2]. Pro pĜípad þasovaþe je vhodnČjší zvolit smČr nahoru z hlediska pĜímého nastavení hodnoty periody.
32
4. Požadavek na pĜerušení pĜi pĜeteþení þasovaþ je povolen bitem UIE v registru TIMx_DIER str. 309-[2]. SouþasnČ je vhodné vynulovat pĜíznak pĜeteþení þasovaþe, bit UIF v registru TIMx_SR str. 310-[2].
5. Nakonec je nutné povolit vlastní jednotku þítaþe/þasovaþe a to bitem CEN registru TIMx_CR1 str. 304-[2]. Takto nastavený þasovaþ je pĜipraven pro vyvolání daného typu pĜerušení, ale je ještČ nutné nastavit vektor a globální pĜerušení pro celou jednotku TIM, podrobnČji v kapitole 6.3, která se zabývá pĜerušením. Jak vypoþítat požadovanou dobu pĜeteþení TIM (resp. frekvenci), ukazují následující rovnice: TIM CLK PSC + 1
TIM CNT =
Rce. 6.4: Frekvence zmČny stavu þítaþe/þasovaþe TIM OF =
TIM CNT ARR + 1
Rce. 6.5: Frekvence pĜeteþení jednotky þítaþe/þasovaþe
Kde:
6.2.2
•
TIMCNT – frekvence zmČny jednoho stavu þítaþe/þasovaþe,
•
TIMCLK – frekvence taktování þítaþe,
•
PSC – hodnota registru pĜeddČliþky TIM,
•
TIMOF – frekvence pĜeteþení TIM,
•
ARR – hodnota registru Auto-reload.
Režim pulzní šíĜkové modulace − PWM
Signál PWM je velmi užiteþný v oblasti Ĝízení (regulace jasu LED diody, Ĝízení otáþek stejnosmČrného motoru, atd.) a jednotkou TIM lze pomČrnČ snadno tento signál generovat. Signál je možné pĜímo pĜivést na výstup procesoru pomocí kanálĤ jednotky TIM. Jak nakonfigurovat þítaþ v tomto režimu, vysvČtluje následující konkrétní pĜíklad:
PĜíklad: PWM signál má být generován na dvou kanálech TIM3 frekvencí 900 Hz a þinitelem plnČním 50% a 25%. Zdroj hodin pro TIM3 je 18 MHz (9 MHz na dČliþce APB1).
33
1. ýítaþ bude pĜetékat na každých 10000 pulzĤ, proto do registru TIMx_ARR str. 319-[2] je nutné zapsat hodnotu ‘9999’D (stav 0 až 9999). 2. PĜi nastavení v pĜedchozím bodČ a se zdrojem hodin 18 MHz bude požadovaná frekvence PWM docílena nastavením pĜeddČliþky þítaþe na hodnotu 1, zápis do registru TIMx_ARR str. 319-[2]. 3. SmČr þítání bude zvolen nahoru nastavením bitu DIR v registru TIMx_CR1 str. 304[2]. 4. V tomto bodČ budou nastaveny kanály (þíslo 1 a 2) þítaþe pro mód Output compare. Zápisem hodnoty ‘6868’H do registru TIMx_CCMR1 str. 312-[2] jsou povoleny pĜedvolby kanálĤ 1 a 2 a PWM mód 1, který definuje aktivní úroveĖ signálu v závislosti na smČru þítání. Když þítaþ þítá smČrem nahoru, trvá aktivní úroveĖ až do hodnoty dané pĜedvolbou. Výchozí hodnota aktivní úrovnČ je logická jedniþka, ale je možné ji zmČnit na logickou nulu. 5. Dále je tĜeba nastavit pĜedvolby kanálĤ pro požadovaný þinitel plnČní. Kanál þíslo 1 bude mít hodnotu pĜedvolby ‘5000’D pro plnČní 50%, zápis hodnoty do registru TIMx_CCR1 str. 319-[2], a kanál þíslo 2 s pĜedvolbou 2500’D pro 25%, zápis hodnoty do registru TIMx_CCR2 str. 320-[2]. 6. Nakonec je ještČ nutné povolit na kanálech jednotky Caprtur/Compare, bity CC1E a CC2E v registru TIMx_CCER str. 320-[2], a vlastní þítaþ TIM3 nastavením bitu CEN registru TIMx_CR1 str .304-[2]. PWM signály jsou nyní k dispozici na vývodech PA6 kanál þ.1 a PA7 kanál þ.2, pĜípadnČ na PB4 nebo PB5 po pĜemapování. Tyto vývody musí být nakonfigurovány jako výstup v režimu alternativní funkce portu. TDUTY [%] =
CCR × 100 ARR
Rce. 6.6: ýinitel plnČní signálu PWM jednotky þítaþe/þasovaþe
Kde: •
TDUTY – þinitel plnČní,
•
CCR – hodnota pĜevolby registru Capture/Compare,
•
ARR – hodnota registru Auto-reload.
34
S využítím vztahĤ rce. 6.4, rce. 6.5 a rce. 6.6 jsou stanoveny parametry PWM signálu. Frekvence signálu PWM: TIM OF =
9 MHz = 900 Hz 9999 + 1
TIM CNT =
18 MHz = 9 MHz 1+1
ýinitel plnČní:
6.2.3
kanál þ.1:
TIM DUTY =
5000 × 100 = 50% 9999 + 1
kanál þ.2:
TIM DUTY =
2500 × 100 = 25% 9999 + 1
Režim Encoder
Každá jednotka þítaþĤ/þasovaþĤ umožĖuje nastavení do režimu Encoder, který se používá zejména pro výstupy inkrementálních snímaþĤ, napĜíklad jako zpČtná vazba pro Ĝízení motorĤ. Nakonfigurovaná jednotka þítaþe/þasovaþe je schopna zpracovat dva signály z inkrementálního þidla, podle kterých lze urþit polohu, smČr pohybu a pĜípadnČ i rychlost a zrychlení. Stav tohoto þítaþe se mČní v závislosti na tČchto dvou signálech pĜevedených na kanály jednotky (TI1, TI2), resp. na zmČnu úrovnČ prvního, druhého nebo obou signálĤ (viz. tab. 6.2).
Tab. 6.2: Volba výbČru aktivního signálu þítaþe/þasovaþe v režimu Encoder
35
Obr. 6.1: ýinnost þítaþe v režimu Encoder na zmČnou úrovnČ obou signálĤ Jednotku þítaþe/þasovaþe v režimu Encoder je možné nakonfigurovat podle následujícího postupu:
1. Do registru TIMx_ARR str .319-[2] lze nastavit rozsah hodnot, které þítaþ zaznamená, než pĜeteþe. MaximálnČ 16-bitová hodnota.
2. Velikost hodnoty pĜeddČliþky je nejlépe nastavit na 0, aby stav þítaþe byl zmČnČn na každou úroveĖ signálu. Zápis do registru TIMx_ARR str. 319-[2].
3. PĜiĜazení vstupĤ (TI1, TI2) kanálĤm þítaþe v módu Input capture je pĜístupné v registru TIMx_CCMR1 str. 312-[2]. NapĜíklad kanálu CC1 bude pĜiĜazen vstup TI1 (bity CC1S) a kanálu CC2 bude pĜiĜazen vstup TI2 (bity CC2S).
4. Bity CC1P a CC2P v registru TIMx_CCER str .317-[2] je umožnČno zvolit, zda vstupní signál bude invertován.
5. Povolení jednotky Caprtur/Compare pro výše zmínČné kanály, bity CC1E a CC2E, je pĜístupno v registru TIMx_CCER str. 317-[2].
6. Nyní
je
dĤležité
spustit
vlastní
þítaþ
nastavením
bitu
CEN
registru
TIMx_CR1 str. 304 -[2].
7. Vlastní výbČr alternativního režimu, ve kterém bude þítaþ pracovat, je vybrán bity SMS v registru TIMx_SMCR str .306-[2]. Aby þítaþ zaznamenával zmČnu úrovnČ obou vstupních signálĤ, musí být vybrán Encoder mode 3.
6.2.4
Demonstraþní úloha použití jednotky þítaþ/þasovaþe v režimu Ecoder
Mikrokontrolér je nakonfigurován pro zpracování signálu z inkrementálního optického snímaþe IRC 110. Využívá se jednotky TIM4 v režimu Encoder ke snímání kvadraturní stopy snímaþe (dva fázovČ posunuté signály). Dále je využito nulového pulzu (referenþní pulz) k nastavení výchozího stavu þítaþe v obsluze vnČjšího pĜerušení EXTI4. Vlastní pĜipojení snímaþe k mikrokontroléru je pĜes port B, kde kvadraturní stopa je pĜivedena na PB7, PB6
36
a nulový pulz na PB4 (viz. obr. 6.2). Stav þítaþe (tj. poloha) je pomocí rozhraní USART vysílán na terminál poþítaþe.
Obr. 6.2: Schéma pĜipojení inkrementálního snímaþe IRC 110 k mikrokontroléru STM32F103R8 Parametry optického rotaþního inkrementálního snímaþe IRC 110: •
kvadraturní výstup,
•
referenþní výstup (jeden pulz na otáþku),
•
rozlišení kotouþe 1250 dílkĤ,
•
žárovka jako zdroj svČtelného toku (4 Vss).
PĜi detekci na nábČžnou i spádovou hrany signálu obou stop kvadraturního výstupu tohoto snímaþe, lze dosáhnout až 5000 (4 hrany krát 1250 dílkĤ) stavĤ þítaþe na jednu otáþku.
6.2.4.1 Princip inkrementálního rotaþního optického snímaþe Jádrem snímaþe je otoþný optický disk, který je mechanicky spojen s pĜipojovací hĜídelí. Princip þinnosti je založen na clonČní svČtelného toku mezi zdrojem svČtla a fotodetektorem. Vlastní þinnost lze demonstrovat podle obr. 6.3, kde jsou proti sobČ pevné a pohyblivé mĜížky. Pokud jsou mĜížky ve shodné poloze, prochází skrz nČ maximální svČtelný tok, který fotodetektor zapracuje a nastaví pĜíslušnou úroveĖ na svém výstupu. Naopak je tomu pĜi zaclonČní svČtelného toku, kdy fotodetektor zmČní svou úroveĖ na opaþnou. Otáþením kotouþe s mĜížkou proti pevné mĜížce se tedy periodicky mČní výstupní signál fotodetektoru.
37
Inkrementální rotaþní snímaþe obvykle používají þtyĜi mĜížky pro vytváĜení dvou výsledných o ʌ/2 fázovČ posunutých obdélníkových signálĤ a navíc jednu mĜížku pro referenþní znaþku (spodní mĜížka na obr. 6.3), tzv. nulový index, urþující poþátek otáþení, který je generován pouze jednou za otáþku.
Obr. 6.3: Fotoelektrické snímání metodou prosvČtlování PĜíklad prĤbČhu výstupních signálĤ z inkrementálního snímaþe je na obr. 6.4, kde A a B jsou kvadraturní signály a I je signál referenþní znaþky.
Obr. 6.4: PrĤbČhy výstupĤ inkrementálního snímaþe
38
6.3 ěadiþ systém pĜerušení ěadiþ pĜerušení není pĜímo periferie mikrokontroléru, ale je to výbava jádra procesoru, která umožĖuje tyto periférie obsluhovat. Jádro ARM Cortex-M3 pracuje se systémem tzv. výjimek, kterým jsou procesoru oznamovány mimoĜádné stavy. Seznam tČchto výjimek je pevnČ dán tabulkou vektorĤ a každá položka rezervuje pamČĢové místo velikosti 4 B. Obsahem každé této buĖky je adresa obslužné rutiny. Tabulka procesoru, kterým je vybavena i deska vývojového modulu, obsahuje 58 položek, ale samotné jádro jich mĤže mýt až 256 (tab. 6.3). Prvních 15 položek používá samotné jádro a obsahuje vektory resetu, nemaskovatelného pĜerušení, chybové a další vektory. Zbývající položky od þísla 16 jsou k dispozici periferiím a oznaþují se jako vektory pĜerušení. PoĜadí v tabulce udává prioritu vykonání pĜíslušné obsluhy a vČtšinu tČchto priorit lze podle potĜeby nastavit. Poþáteþní nastavení procesoru má tabulku vektorĤ umístČnu od adresy nula (oblast pamČti typu Flash), první položka s þíslem nula obsahuje adresu ukazatele vrcholu zásobníku a druhá položka s þíslem jedna adresu první instrukce, kterou procesor bude vykonávat. Celou tabulku je možné pĜemístit do jiné oblasti Flash pamČti nebo do RAM, kde lze vektory mČnit i v prĤbČhu vykonávání programu.
Tab. 6.3: Tabulka vektorĤ výjimek
39
Vykonává-li procesor program a dojde k pĜerušení, je do zásobníku uložen obsah nČkterých registru vþetnČ návratové adresy. PoĜadí této operace ukazuje následující tabulka.
Adresa PĤvodní SP (N)
Data (PĜedchozí uložená data)
(N-4)
PSR
(N-8)
PC
(N-12)
LR
(N-16)
R12
(N-20)
R3
(N-24)
R2
(N-28)
R1
Nový SP (N-32)
R0
Tab. 6.4: Stav zásobníku pĜi pĜerušení
6.3.1
Prioritní systém
Prioritní systém je vhodné použít v pĜípadČ, že je využíváno více jak jedno pĜerušení a je potĜeba urþit, jaké se má obsloužit dĜíve. Systém umožĖuje nastavit prioritu v rozsahu 8bitového registru. NejménČ je možné nastavit horní 3 bity (8 úrovní) a maximálnČ 8 bitĤ (256 úrovní). ýíslo s nejnižší hodnotou má nejvyšší prioritu. Pro 3-bitovou úroveĖ je možné nastavit hodnoty 0x00, 0x20, 0x40, 0x60, 0x80, 0xA0, 0xC0 a 0xE0. Poþet definovaných úrovní je dále rozdČlen na dvČ þásti: priorita skupiny (Preempt priority) a priorita podskupiny (Subpriority). Jak bude priorita rozdČlena na skupinu a podskupinu je stanoveno tab. 6.4.
•
Priorita skupiny − definuje, které z pĜerušení je vykonáno dĜíve, vykonává-li se obsluha pĜerušení a pĜijde jiné pĜerušení.
Obr. 6.5: Priorita skupiny
40
•
Priorita podskupiny − definuje, které pĜerušení se vykoná dĜíve pĜi jejich souþasném výskytu.
Obr. 6.6: Priorita podskupiny
Tab. 6.5: Nastavení priority 3 bitové úrovnČ s Priority Group 5
Obr. 6.7: Priorita skupiny a podskupiny
6.3.2
Nastavení systému pĜerušení
Každé pĜerušení, které bude v programu využíváno, musí mít nastaveno adresu, kde bude obslouženo. Následující postup ukazuje, jak pĜesmČrovat tabulku vektorĤ pĜerušení do oblasti RAM, nastavit vektory obsluhy a pĜerušení povolit: 1. Nejprve musí být definována nová poþáteþní adresa tabulky vektorĤ. 2. Na pozici nové tabulky je nezbytnČ nutné zkopírovat nejménČ první þtyĜi pĤvodní vektory od adresy nula (ukazatel zásobníku, Reset, NMI a HardFault) a nastavit tuto novou adresu do Vector Table Offset Register str. 8-20-[3]. 3. Do takto pĜipravené tabulky lze nyní nastavit na pĜíslušnou pozici požadovaný vektor pĜerušení.
41
4. Je-li potĜeba upravit poĜadí vykonávání více pĜerušení, nastaví se nutné priority. V Aplication Interrupt and Reset Control Register str. 8-21-[3] je tĜeba zvolit PRIGROUP a v Interrupt Priority Registers str. 8-16-[3] nastavit hodnotu na danou pozici pĜíslušného pĜerušení. 5. Nakonec se vybrané pĜerušení povolí v Interrupt Set-Enable Registers str. 8-12-[3]. Jeho zakázání je možné v Interrupt Clear-Enable Registers str. 8-13-[3]. V obsluze pĜerušení je nutné nulovat pĜíznak události, kterou toto pĜerušení vyvolalo. NapĜíklad pĜi pĜerušení pĜeteþení þítaþe se nuluje pĜíznak pĜeteþení ve statusu registru.
6.4 VnČjší zdroj pĜerušení – EXTI Vstupní zaĜízení pĜepojená k procesoru pomocí portu mohou být obsloužena systémem pĜerušení. Tuto vlastnost má každý bit portu, který je nakonfigurován jako vstup a má povolen tento zdroj pĜerušení. VnČjší pĜerušení na PA3 lze nastavit následovnČ: 1. Nastaví se pĜerušení typu EXTI3 (viz. kapitola 6.3.2). 2. V registru AFIO_EXTICR1 str. 116-[2] se na pozici EXTI3 vybere port A. 3. Nastavením bitu MR3 v registru EXTI_IMR str. 126-[2] se zakáže maskování bitu portu. 4. Na jakou hranu vstupního signálu se má pĜerušení vyvolat, je urþeno nastavením bitu na pĜíslušnou pozici v registru EXTI_RTSR (nábČžná) nebo EXTI_FTSR (spádová) str. 127-[2]. 5. V pĜerušovacím systému se ještČ musí EXTI3 povolit (viz. kapitola 6.3.2).
42
7 LADÍCÍ PROGRAM MONITOR K ovČĜení správné funkce programu nČkdy nestaþí jen samotná simulace ve vývojovém prostĜedí, neboĢ simulátor není schopný nastavit reálný stav procesoru (stavy registrĤ a pamČti). ěada výrobcĤ implementuje rĤzná rozhraní, která umožĖují ladit program pĜímo na vlastním mikrokontroléru. Jádro Cortex-M3 poskytuje na svém þipu hardware pro pĜímé ladČní pojmenovaný jako SWJ-DP (Seriál Wire and JTAG – Debut Port). Tato rozhraní jsou na procesoru STM32F103R8 vyvedená na pinech PA13 a PA14 pro SW (Serial Wire) a na PA13, PA14, PA15, PB3 a PB4 pro JTAG (Point Test Action Group). PĜímé propojení ladícího rozhraní SWJ-DP k poþítaþi není možné, neboĢ bČžný jím není vybaven. Komunikaci mezi poþítaþem a mikrokontrolérem pro ladící potĜeby lze realizovat prostĜednictvím adaptéru s komunikaþním protokolem, viz. obr. 7.1. Vývojové prostĜedí ȝVision 3 má pĜímo implementovánu
podporu
komunikace
s nČkterými
typy
adaptérĤ
(napĜ.
ULINK)
pro mikrokontrolery s rozharním SWJ-DP.
Obr. 7.1: NepĜímé propojení poþítaþe a mikrokontroléru pĜes ladící rozhraní Jiný zpĤsob, jak ladit program pĜímo na hardwaru mikrokontroléru, je pĜímo pĜes rozhraní periferií USART nebo USB (obr. 7.2), ale již nelze dosáhnout takových možnosti jako na rozhraní SWJ-DP. Tato možnost je zejména pĜíznivá vzhledem k nízké poĜizovací cenČ hardwaru (USART a USB jsou integrovány pĜímo na þipu mikrokontroléru STM32F103R8). Naopak cena adaptéru v souþasné dobČ mnohonásobnČ pĜevyšuje cenu samotného mikrokontroléru. Nevýhodou tohoto typu Ĝešení je þásteþné zablokování nČkterých periferií (USART, USB, …) a omezení nČkterých funkcí ladícího hardwaru procesoru .
Obr. 7.2: PĜímé propojení poþítaþe a mikrokontroléru pĜes periferie
43
7.1 Ladící možnosti programu Monitor Vlastní ladící program pojmenovaný jako Monitor je založen na komunikaci prostĜednictvím sériového rozhraní (USART) mezi poþítaþem a mikrokontrolérem. Z terminálu poþítaþe jsou vysílány pĜíkazy, které mikrokontrolér zpracuje a výsledek požadované operace je opČt zobrazen na tomto terminálu. Program Monitor poskytuje následující ladící možnosti: •
nastavení breakpointu v celé pamČĢové oblasti Flash,
•
nastavení až 6 breakpointĤ,
•
pohyb mezi jednotlivými breakpointy,
•
pohyb po instrukcích,
•
zobrazení úseku pamČti,
•
zápis slova do pamČti,
•
þtení registrĤ jádra R0−R15,
•
zápis do registrĤ jádra R0−R12.
V ladČném programu nesmí být provedeny následující úkony : •
zavedení programu do Flash pamČti na stránky 12, 13, 14 a 15,
•
zápis do oblasti pamČti RAM od adresy 0x20004EE2 do 0x20004EFF,
•
zápis do oblasti pamČti RAM od adresy 0x20004F00 do 0x20004FFF (kromČ vektorĤ pĜerušení),
•
umístČní poþátku tabulky vektorĤ pĜerušení mimo adresu 0x20004F00 (pouze pĜi použití pĜerušení),
•
nastavení priority skupiny pĜerušení vČtší ani shodné s nulou (pouze pĜi použití pĜerušení).
7.2 Princip ladící metody Program monitor používá ke své þinnosti jednotku FPB (Falsh Patch and Breakpoint), kde je k dispozici 6 komparátorĤ adresy instrukce. Dále je využita možnost podpory jádra procesoru ke krokování instrukcí. K obsluze jednotky FPB a režimu krokování je k dispozici vektor výjimky (pĜerušení) Debug Monitor. Požadovaný bod zastavení programu (breakpoint) se vytvoĜí zápisem adresy instrukce do komparátoru jednotky FPB. Když programový þítaþ (PC) narazí na tuto adresu, vyvolá výjimku typu Debug Monitor a odskoþí do jeho obsluhy. Rozsah adres, které mohou být do
44
komparátoru uloženy, je velikost pamČti typu Flash, tj. od adresy 0x0 do 0x1FFFFFFF. Rozsah adres je omezen faktem, že FPB podporuje pouze 32-bitové instrukce, proto poslední dva bity adresy jsou vždy ignorovány. Adresa v komparátoru tedy vždy bude nabývat maximálnČ hodnoty konþící na 0x0, 0x4, 0x8 nebo 0xC, ale skok do obsluhy Debut Monitor je uskuteþnČn i na ostatní adresy, protože komparátor napĜíklad vyhodnotí adresu 0x2 jako 0x0. Instrukce nabývají i délky 16-bitĤ a omezení adresy vložené do komparátoru lze eliminovat spuštČním krokovacího režimu, kdy je po každé vykonané instrukci vyvolána výjimka typu Debug Monitor. Vykonávání programu lze tedy pĜerušit na adresu v komparátoru (breakpoint) a v režimu krokování je možné se pohybovat i po adresách instrukcí 16-bitových. Když je vyvolána výjimka na událost breakpoint, návratová adresa z obsluhy výjimky není zvČtšena na adresu následující instrukce, ale návrat probČhne na adresu v místČ vyvolané události. Program se tedy zastaví v nekoneþné smyþce a nemĤže pokraþovat dál. ěešením této situace je zakázání daného breakpointu vypnutím pĜíslušného komparátoru a v režimu krokování se posunout na adresu rĤznou od adresy v komparátoru a opČt komparátor povolit (obr. 7.3) pro pĜípad opČtovného návratu na tento bod. Zde je nutné brát v úvahu, že pokud na adrese breakpointu je 16-bitová instrukce, je nutné se posunout v režimu krokování nejménČ o dva kroky. Zápis a zobrazení hodnot registrĤ a obsahu pamČti je možné provést až v obsluze breakpointu. S pĜístupem do pamČti není žádný velký problém, ale aby se bylo možno dostat k pĤvodnímu obsahu registrĤ v bodČ pĜerušení musí být první instrukce obsluhy záloha tČchto hodnot a to nejlépe do zásobníku. Automaticky pĜi každém pĜerušení jsou do zásobníku uloženy hodnoty registrĤ PSR, PC, LR , R12, R3, R2, R1 a R0.
45
Obr. 7.3: Ladící metoda programu Monitor
6WDUW 0RQLWRUX
2EVOXKD SĜHUXãHQt 'HEXJ0RQLWRU 9\SQRW NURNRYiQt
.RQILJXUDFH 86$57
$QR .RQILJXUDFH )3%
-H %.37 "
1H =DGiQt DGUHV\ %.37
=DSQRW NRPS )3%
9\SQRW NRPS )3%
$QR
=DSQRW NURNRYiQt
2SDNRYDW ]iGiQt DGUHV\ %.37" 1H 1H =iSLV GUHV\ GR NRPSDUDWRUX D SRYROHQt )3%
0i VH ODGLW" $QR
6NRN GR PRQLWRURYDQpKR SURJUDPX
9êEČU ODGtFt RSHUDFH
6NRN ]SHW GR PRQLWRURYDQpKR SURJUDPX
Obr. 7.4: Zjednodušené schéma ladící metody programu Monitor
46
7.3 Jak Monitor používat Program slouží jako pomĤcka pro náhled na stav pamČti a registrĤ na hardwaru procesoru. K používání je nutné mít k dispozici program v prostĜedí ȝVision 3 (pĜípadnČ v jiném) s náhledem na adresy instrukcí (Disassembly Window). Podle této adresy lze pak vykonávání programu pĜerušit ve vybraném bodČ (breakpointu).
7.3.1
Princi zavedení programu do pamČti
Program Monitor je vytvoĜen v prostĜedí ȝVision 3, kde nebylo zjištČno jak program zkompilovat od jiné adresy než od poþátku pamČĢové oblasti Flash. K posunutí program na vyšší adresy je tedy nutné doplnit program Monitor o redundantní úsek kódu, který nemá vliv na vykonávání programu. Do pamČti procesoru musí být nejprve zaveden program Monitor a následnČ program ladČný, pĜiþemž velikost ladČného programu nesmí pĜevyšovat velikost nadbyteþné informace programu Monitor (programy se nesmí pĜekrývat). Jak by mČla vypadat pamČĢ po zavedení obou programĤ ukazuje obr. 7.5. Kód programu monitor zabírá pamČĢový prostor velikosti 16 kB (stránka 0 až 15), pĜiþemž dolních 12 kB je redundantních a je k dispozici pro ladČné programy, zbývající horní 4 kB (stránka 12, 13, 14 a 15) je vlastní program Monitor. V takto vytvoĜeném Monitoru je maximální velikost ladČného programu 12 kB, který lze opakovanČ nahrát do pamČti bez potĜeby opČtovného zavedení Monitoru. PĜi nahrávání programu do pamČti je nutné zvolit volbu Erase necessary pages viz. str. 12-[1].
Obr. 7.5: Stav pamČti po zavedení ladícího a ladČného programu
7.3.2
Podmínka spuštČní programu
K zajištČné spuštČní programu Monitor musí být první instrukce programu skok na adresu, kde se Monitor nachází. NejvhodnČji je upravit pĜedem vytvoĜený soubor (Startup Code)
47
STM32F10x.s jak ukazuje obr. 7.6. Jsou to dvČ instrukce, v první je naþtena adresa skoku do registru (LDR) a ve druhé je proveden vlastní skok podle adresy v registru (BLX). Pro zachování struktury kódu pro náhled adres požadovaných breakpointĤ je nutné zakomentovat instrukci skoku (BLX), nesmí dojít k posunutí adres instrukcí.
Obr. 7.6: Odskok na adresu Monitoru v souboru STM32F10x.s
7.3.3
Použití pĜerušení
Využívá-li ladČný program pĜerušení, je nutné pĜesunout tabulku vektorĤ pĜerušení na stejnou adresu, kterou používá program Monitor (obr. 7.7). Adresa poþátku tabulky je 0x20004F00, což je posledních 256 bytĤ pamČĢové oblasti RAM procesoru STM32F103R8. Aby bylo možné program ladit i v obsluze pĜerušení, musí toto pĜerušení mít hodnotu priority skupiny vČtší než nula (nižší prioritu). PĜi 3-bitové úrovni s Priority Group 5 má výjimka Debut Monitor prioritu 0x0 a možné nižší priority skupiny jsou 0x4, 0x8 a 0xC, podrobnČji v kapitole 6.3.1 .
Obr. 7.7: Adresa tabulky vektorĤ pĜerušení
7.3.4
Nastavení taktování systému a pĜenosové rychlosti
Monitor pracuje s výchozím nastavení systémových hodin (vnitĜní RC 8 MHz). Toto je z dĤvodu možnosti nastavení libovolné systémové taktovací frekvence v ladČném programu. Dále je nastaveno rozhraní USART1 pro komunikaci obČma smČry s pĜenosovou rychlostí 9600 Bd. V ladČném programu lze tedy zmČnit frekvenci systémových hodin i hodnotu pĜenosové rychlosti. DĤležité je pĜi zmČnČ frekvence systémových hodin správnČ nastavit pĜenosovou rychlost USART1.
48
7.4 Ovládání programu Ovládání programu Monitor je prostĜednictvím terminálu poþítaþe a vlastní pĜíkazy jsou tvoĜeny formou nabídky intuitivního charakteru, proto není potĜeba studium sady možných voleb, ale staþí se Ĝídit výbČrem dle aktuální nabídky. Program Monitor je možné rozdČlit na dvČ základní þásti:
7.4.1
•
Konfiguraþní þást,
•
Ladící þást.
Konfiguraþní þást
V konfiguraþní þásti je pĜístupna volba spuštČní vlastního ladícího programu a nastavení
þi zrušení potĜebného poþtu breakpointĤ. Možné volby jsou podle tab. 7.1.
Nabídka Monitor start?
Volba Yes No Yes
Clear BKPT? No New Delete
BKPT
Cancel Number BKPT
1−6
Address BKPT
þíslo v HEX Yes
Next BKPT?
No Yes
Change BKPT?
No
Popis spuštení programu Monitor spuštČní programu aplikaþního programu vymazání povolených breakpointĤ aktuální breakpointy budou zachovány vytvoĜení jednoho breakpointu smazání jednoho breakpointu ukonþení volby breakpointĤ a pĜechod do ladící þásti volba komparátoru pro breakpoint volba adresy breakpointu (potrzení <ENTER>, <MEZERNÍK>) volba další nabídky breakpointĤ ukonþení volby breakpointĤ a pĜechod do ladící þásti vyvolání nabídky BKPT? ukonþení volby breakpointĤ a pĜechod do ladící þásti
Tab. 7.1: Nabídky programu Monitor konfiguraþní þásti
49
Obr. 7.8: PĜíklad vytvoĜení breakpointu programem Monitor
7.4.2
Ladící þást
V této þásti programu je ladČný program zastaven na zadaných breakpointech. Po vyvolání nabídky je umožnČno krokování po instrukcích a následnČ i pĜesun na jiný breakpoint. Dále je možné þtení zadaného úseku pamČti nebo zápis po slovech. Stav registrĤ jádra procesoru je zpĜístupnČn ke þtení, výpisu registru R0-R15, a k zápisu do registrĤ R0-R12. Možný seznam nabídek je dán tab. 7.2.
Obr. 7.9: PĜíklad þtení z pamČti programem Monitor
50
Nabídka
Volba Core Memory Step Run Read Write
Start address
þíslo v Hex
End address
þíslo v Hex
Address
þíslo v Hex
New value
þíslo v Hex
Sel. Reg.
1−12
Other sel.
1−12
Popis následující volba se bude týkat registrĤ jadra následující volba se bude týkat pamČti pĜesun na následující instrukci pĜesun na následující breakpoint (volba je zamþena na breakpointu) þtení registrĤ jádra nebo úseku pamČti zápis do registrĤ jádra nebo slova pamČti poþáteþní adresa vybraného úseku pamČti (potrzení <ENTER>, <MEZERNÍK>) koncová adresa vybraného úseku pamČti (potrzení <ENTER>, <MEZERNÍK>) adresa slova pamČti (potrzení <ENTER>, <MEZERNÍK>) nová hodnota registru þi slova pamČti (potrzení <ENTER>, <MEZERNÍK>) výbČr registru jádra procesoru pro zápis (potrzení <ENTER>, <MEZERNÍK>) výbČr registru jádra procesoru pro zápis (potrzení <ENTER>, <MEZERNÍK>)
Tab. 7.2: Nabídky programu Monitor ladící þásti
51
8 DEMONSTRAýNÍ ÚLOHA OVLÁDÁNÍ KROKOVÉHO MOTORU Cílem úlohy je ovládání krokového motoru prostĜednictvím pĜíkazĤ pĜes terminál poþítaþe.
ýinnost motoru a zpracování požadavkĤ je Ĝízeno mikrokontrolérem STM32F103R8. Motor bude plnit základní požadavky: otáþení obČma smČry (vpravo, vlevo) s definovaným poþtem krokĤ. Rychlost komunikace pĜes sériové rozhraní RS232 je 9600 Bd.
8.1 Princip þinnosti a Ĝízení krokového motoru Krokový motor je toþivý stroj k urþení polohy. Princip þinnosti spoþívá v tom, že jeho rotor, který tvoĜí prstenec permanentních magnetĤ s vystupujícími póly, se vždy snaží zaujmout takovou polohu v magnetickém poli, která pĜi prĤchodu proudu vytváĜejí vinutí pólových nástavcĤ po obvodu statoru, aby byly proti sobČ nesouhlasnČ orientované magnetické póly. Vhodným pĜepínáním cívek v obvodu statoru je pak docíleno rotujícího magnetického pole, které otáþí rotorem. Rychlost tohoto pĜepínání urþuje moment a otáþky motoru. Vzhledem k indukþnosti vinutí a k setrvaþným silám rotoru se s rostoucím poþtem otáþek snižuje krotící moment rotoru a pĜekroþením urþité hranice rychlosti otáþení nebo zátČže, motor zaþne ztrácet kroky. Podle požadovaného kroutícího momentu a proudového odbČru a pĜesnosti požadované polohy lze motor Ĝídit:
8.1.1
•
unipolárnČ nebo bipolárnČ,
•
jednofázovČ nebo dvoufázovČ,
•
s poloviþním nebo plným krokem.
Unipolární a bipolární Ĝízení
PĜi unipolárním Ĝízení je sepnuta vždy jen jedna cívka obvodu statoru na rozdíl od bipolárního
Ĝízení, kdy jsou sepnuty dvČ protilehlé cívky s opaþnČ orientovaným magnetickým polem. 8.1.2
Jednofázové a dvoufázové Ĝízení
PĜi jednofázovém Ĝízení je sepnuta vždy jen jedna vČtev, kdy pro unipolární Ĝízení je to jedna cívka a u bipolárního Ĝízení dvČ protilehlé cívky opaþné orientace. Dvoufázové Ĝízení spoþívá v sepnutí ještČ jedné vČtve, kde pĜi unipolárním Ĝízení jsou sepnuty dvČ sousední cívky se stejnou orientací a u bipolárního Ĝízení ještČ dvČ cívky protilehlé opaþnČ orientované.
52
8.1.3
ěízení s poloviþním a plným krokem
ěízení spoþívá opČt v poþtu spínaných cívek kombinací pĜedešlých forem Ĝízení. Poloviþní krok pak znamená, že je pravidelnČ stĜídáno Ĝízení jednofázové a dvoufázové a tím se dosáhne dvojnásobný poþet krokĤ. Plný krok je pouze Ĝízení jednofázové nebo dvojfázové.
8.1.4
Použitá metoda Ĝízení v úloze
V této úloze s ohledem na zapojení krokového motoru je použito unipolární Ĝízení. Vyvedeny jsou þtyĜi fáze a spoleþný stĜed vynutí jako na obr. 8.2. Pro dosažení velkého rozlišení je zvolen režim s poloviþním krokem, tj. 400 poloviþních krokĤ na otáþku. Cívky jsou pĜes budiþ spínány úrovní log. 1 v poĜadí: L1 − L1+L2 − L2 − L2+L3 − L3+L4 − L4+L1, viz. obr. 8.1.
Obr. 8.1: Spínání cívek krokového motoru v unipolárním režimu s poloviþním krokem
8.2 Použitý hardware a schéma zapojení krokového motoru 8.2.1
Krokový motor
Použitý krokový motor je ze staré 5,25” disketové mechaniky. Parametry motoru: •
unipolární ( 5 vývodĤ),
•
odpor vinutí 72 ȍ,
•
200 krokĤ na otáþku.
53
Obr. 8.2: Unipolární krokový motor s vyvedeným stĜedem
8.2.2
Obvod budiþe krokového motoru
Obvod budiþe ULN2003A obsahuje sedmici tranzistorových spínaþĤ s dvojicí tranzistorĤ v Darlingtonovu zapojení. Maximální výstupní proud každého spínaþe je 0,5 A. Ostatní parametry obvodu lze nalézt v jeho katalogovém listu [5].
Obr. 8.3: Schéma zapojení jednoho spínaþe Darlingtonova páru budiþe
8.2.3
Schéma zapojení s krokovým motorem
Krokový motor je pĜes budiþ ULN2003A pĜipojen k procesoru STM32F103R8. Napájecí napČtí je blokováno kondenzátorem C1.
Obr. 8.4: Schéma zapojení krokového motoru ovládaného procesorem STM32F103R8
54
8.3 Možnosti ovládání krokového motoru Mikrokontrolér ovládá krokový motor prostĜednictvím nabídky požadavkĤ (tab. 8.1) na terminálu poþítaþe, který komunikuje s tímto mikrokontrolérem po sériovém rozhraní RS232. Nabídka SMER OTACENI
Volba Popis vPravo motor se otáþí vpravo vLevo
POCET KROKU
þíslo
ZASTAVENI
Stop Ano
POKRACOVAT? Ne
PRODLEVA MEZI KROKY
þíslo
motor se otáþí vlevo poþet krokĤ, které motor vykoná (potvrzení <ENTER> nebo <MEZERNÍK>) zastaveni motoru v prĤbČhu krokování motor pokraþuje ve vykonávání zbývajících krokĤ motor již nevykoná zbývající kroky a je vyvolána zmČna smČru otáþení nastavení þekacího stavu mezi jednotlivými kroky v milisekundách (potvrzení <ENTER> nebo <MEZERNÍK>)
Tab. 8.1: Nabídka pĜíkazĤ pro ovládání krokového motoru
Obr. 8.5: Obrazovka ovládání krokového motoru
55
8.4 Popis þinnosti programu pro krokový motor Po resetu mikrokontroléru je nastaven zdroj hodin systému (72 MHz), sériové rozhraní USART (9600 Bd), využívané porty a pĜerušovací systém. Dále je provedeno zkušební otáþení motoru obČma smČry rĤznou rychlostí, po dokonþení je zaujata pĤvodní poloha natoþení. NáslednČ je vyvolána nabídka k zadání prodlevy v milisekundách mezi jednotlivými kroky (krok = poloviþní krok). Nyní je již k dispozici samotné ovládání, tedy volba smČru otáþení následována volbou poþtu krokĤ v daném smČru. V prĤbČhu vykonávání krokování je možné þinnost pĜerušit, událost generovaná pĜerušením od USART. NáslednČ je zobrazen poþet zbývajících krokĤ a nabídka s volbou pokraþovat nebo ukonþit þinnost vykonání zbylého poþtu krokĤ. Dokonþením nebo pĜerušením zadané operace je opČtovnČ nabídnut smČr a poþet krokĤ motoru.
Obr. 8.6: Vývojový diagram programu pro ovládání krokového motoru
56
9 DEMONSTRAýNÍ ÚLOHA OVLÁDÁNÍ STEJNOSMċRNÉHO MOTORU Cílem úlohy je ovládání mechaniky pojezdu pohánČné stejnosmČrným motorem, který je Ĝízen mikrokontrolérem STM32F103R8. Snímáním velikosti odebíraného proudu motoru bude vyhodnocován smČr pohybu pojezdu.
9.1 Metoda ovládání stejnosmČrného motoru 9.1.1
Princip þinnosti stejnosmČrného motoru
StejnosmČrný motor je toþivý stroj složený ze statoru a rotoru. Stator je tvoĜen permanentním magnetem, který vytváĜí magnetické pole, v nČmž je umístČn rotor složený z kotvy a komutátoru. Obvod kotvy tvoĜí cívky (nejménČ dvČ) napájené pĜes komutátor, který pĜepíná smČr elektrického proudu a polaritu magnetického pole procházejícího kotvou, a tím je zajištČno roztoþení motoru. Vztah mezi indukovaným napČtím kotvy a svorkovým napČtím lze urþit z náhradního schématu (obr. 9.1), potom pro obvod kotvy platí rce. 9.1.
U = Ra I a + U i Rce. 9.1: Rovnice obvodu kotvy stejnosmČrného motoru Kde: •
Ra − ohmický odpor kotvy,
•
Ia − proud obvodu kotvy,
•
Ui − indukované napČtí kotvy.
Moment
stejnosmČrného
motoru
závisí
na
proudu
protékajícím
obvodem
kotvy
a na magnetickém toku statoru dle rce. 9.2. Užiteþný moment na hĜídeli motoru je menší o moment úmČrný mechanickým ztrátám a ztrátám v železe kotvy.
M = k ⋅ Φ ⋅ Ia Rce. 9.2: Moment stejnosmČrného motoru Kde: •
k − konstrukþní konstanta motoru,
•
Ɏ − magnetický tok statoru,
•
Ia − proud obvodu kotvy.
57
Indukované napČtí na kotvČ tzv. protielektromotorická síla je dána rce. 9.3. Ui = k ⋅ Φ ⋅ n Rce. 9.3: Indukované napČtí kotvy stejnosmČrného motoru Kde: •
k − konstrukþní konstanta motoru,
•
Ɏ − magnetický tok statoru,
•
n − otáþky rotoru.
Obr. 9.1: Náhradní schéma stejnosmČrného motoru
9.1.2
ěízení stejnosmČrného motoru
Ze vztahu v rce. 9.2 vyplývá, že moment je pĜímo úmČrný jeho proudovému odbČru a regulací tohoto proudu je tedy možné nastavit zábČrný moment motoru. Podle vztahu uvedeném v rce. 9.3 je napČtí pĜímo úmČrné otáþkám, pak velikostí napČtí je Ĝízena rychlost otáþení motoru a to je vhodné napĜíklad pomocí signálu PWM, kterým lze regulovat velikost stĜední hodnoty napČtí na motoru. SmČr otáþení motoru lze Ĝídit polaritou napájecího napČtí. Pro ovládání motor se velmi þasto využívá zapojení do tzv. H-mĤstku podle obr. 9.2, kde vhodným spínání spínaþĤ s lze motor plnČ Ĝídit.
Obr. 9.2: Ideové zapojení stejnosmČrného motoru do H-mĤstku
58
9.1.3
Použitá metoda Ĝízení v úloze
SmČr otáþení a rozbČh motoru je ovládán zapojením do H-mĤstku. RozbČh je spouštČn signálem PWM s postupným zvyšováním þinitele plnČní až na 100% (plný chod), eliminuje se tak velký zábČrný proud motoru. Dále je snímána velikost proudového odbČru pomocí A/D pĜevodníku, kterou je hlídáno pĜekroþení velikosti zábČrné síly motoru. A/D pĜevodníkem je v podstatČ mČĜeno napČtí na malém rezistoru, které je pĜímo úmČrné velikosti proudu.
9.2 Použitý hardware a schéma zapojení stejnosmČrného motoru 9.2.1
Mechanika se stejnosmČrným motorem
Pro demonstraci ovládání stejnosmČrného motoru je použita CD mechanika z osobního poþítaþe. Obsahuje pouze stejnosmČrný motor, pĜevodovku a rám s pojezdem. Je zde i koncový spínaþ maximální polohy, ale toho není využíváno.
9.2.2
Obvod Ĝízení stejnosmČrného motoru
Obvod L298 pro Ĝízení stejnosmČrného motoru obsahuje dvojitý H-mĤstek s páry spínacích tranzistorĤ. Pomocí tohoto mĤstku lze ovládat smČr otáþení i Ĝízení otáþek motoru pomocí signálu PWM. Obvod je pĜizpĤsoben i pro snímání velikosti proudu motorem pĜes externí rezistor. Maximální proud jedním mĤstkem je 2 A. Ostatní parametry obvodu lze nalézt v jeho katalogovém listu [6].
Obr. 9.3: VnitĜní struktura obvodu L298
59
9.2.3
Schéma zapojení se stejnosmČrným motorem
Obvod se skládá z H-mĤstku L298, kde jeho ovládání je pĜipojeno k mikrokontroléru STM32F103R8 pĜes ochranné rezistory R2, R3 a R4. Snímání velikosti proudu motoru je pĜes rezistor R1 a pĜipojení na vstup mikrokontroléru (A/D pĜevodník) je pĜes ochranný rezistor R5. Obvod motoru je ještČ doplnČn ochrannými diodami eliminující napČĢové špiþky. Napájecí napČtí jsou blokována kondenzátory C1 a C2.
Obr. 9.4: Schéma zapojení ovládání stejnosmČrného motoru procesorem STM32F103R8
Vstupní signál C = 1, D = 0 EN = 1 C = 0, D = 1 C=D EN = 0 C = x, D = x
ýinnost motoru otáþení reverzace otáþení rychlé zastavení volnobČžné otáþení nebo zastavení
Tab. 9.1: ěízení stejnosmČrného motoru 0 – úroveĖ logické nuly, 1 – úroveĖ logické jedniþky, x – na úrovni nezáleží
9.3 Popis þinnosti programu pro stejnosmČrný motor Po resetu je nejprve provedeno nastavení zdroje taktování mikrokontroléru (56 MHz), používaných vývodĤ portĤ, A/D pĜevodníku, dvou jednotek þítaþĤ/þasovaþĤ v režimu
þasovaþe a PWM, pĜerušovacího systému vþetnČ priorit obsluhy. Frekvence signálu PWM je nakonfigurována na 350 Hz. Dále je zvolen výchozí smČr otáþení motoru (vlevo) a jeho uvedení do chodu. Samotný rozbČh motoru je proveden pomocí PWM s þinitelem plnČní 40%, 60%, 80% a 100% s prodlevou 100 ms mezi jednotlivými kroky. DĤvodem tohoto rozbČhu je eliminace nárazového proudového odbČru motoru. Hodnota velikosti proudu motorem je každou jednu milisekundu snímána A/D pĜevodníkem v obsluze pĜerušení
þasovaþe. PĜi pĜekroþení stanovené hranice proudu je motor zastaven zmČnou hodnoty þinitele plnČní signálu PWM na 0%. NáslednČ je reversován smČr pĤvodního otáþení motoru a opČt
60
pomocí PWM rozbČhnut. Velikost hodnoty hraniþního proudu lze stanovit pomocí A/D pĜevodníku s výpisem jeho hodnoty pĜevodu na terminál poþítaþe pĜi požadovaném zatížení motoru.
Obr. 9.5: Vývojový diagram Ĝízení stejnosmČrného motoru
61
10 ZÁVċR Tato bakaláĜská práce je orientována na seznámení se s mikrokontrolérem STM32F103R8, postaveném na architektuĜe s jádrem ARM Cortex-M3 a porozumČní, jak tento procesor ovládat na úrovni programovacího jazyka Assembler, ve kterém bylo doposud k tomuto mikrokontroléru napsáno pomČrnČ malé množství zdrojových kódĤ. Pro úþely výuky mikroprocesorové techniky, bylo vytvoĜeno nČkolik postupĤ a motivaþních programĤ, zamČĜených pĜedevším na pomČrnČ složitou konfiguraci periferií integrovaných na þipu procesoru. Byly vytvoĜeny programy pro ovládání bran procesoru, sériového rozhraní, jednotek þítaþĤ/þasovaþĤ, analogovČ-þíslicového pĜevodníku a Ĝadiþe systému pĜerušení a byly otestovány i na dostupném hardwaru. NapĜíklad k jednotce þítaþe/þasovaþe v režimu Encoder byl pĜipojen inkrementální rotaþní optický snímaþ demonstrující polohu natoþení jeho hĜídele (viz. kapitola 6.2.4). Práce by mČla hlavnČ usnadnit orientaci v rozsáhlé dokumentaci k mikrokontroléru (rozsah více než 1000 stran), která je pro potĜeby jazyka Assembler nezbytností. NapĜíklad pro porovnání s dokumentací dĜíve používaného mikroprocesoru Ĝady 8051 (rozsah kolem 100 stran) je to pomČrnČ velké množství. Dále byla vyvinuta metoda pro odladČní programĤ pĜímo na hardwaru mikrokontroléru s komunikací pĜes sériové rozhraní RS232. Metoda není sice zcela dokonalá v porovnání s ladícím rozhraním výrobce (SWJ-DP), ale obejde se bez pomČrnČ drahého pĜídavného hardwaru. VytvoĜením této ladící metodiky byl poskytnut uživateli prostĜedek k snadnČjšímu vývoji aplikaþních programĤ i v jiném, než laboratorním prostĜedí. Vzhledem k absenci podobného nástroje pro mikrokontroléry s jádrem ARM Cortex-M3 a zároveĖ nemožností se nČjak inspirovat, lze tento ladící nástroj považovat za unikátní. Výsledkem práce jsou i praktické úlohy demonstrující ovládání krokového a stejnosmČrného motoru. Krokový motor je ovládán mikroprocesorem na pĜíkaz uživatele prostĜednictvím terminálu poþítaþe, což je využitelné zejména k nastavení požadované polohy. U úlohy se stejnosmČrným motorem se podaĜilo docílit regulace zábČrné síly motoru, zejména využitelné v ĜadČ prĤmyslových aplikací (napĜíklad rĤzné dveĜní systémy zamezující své uzavĜení pĜes pĜekážku ). Po dohodČ s vedoucím bakaláĜské práce bylo upuštČno od vývoje a výroby desky minimodulu pro STM32, ale byl využit modul, který vznikl v rámci projektu [10] vyvíjeného v laboratoĜi,
62
kde byla Ĝešena i tato práce. V dĤsledku této skuteþnosti bylo možné se detailnČji vČnovat vývoji aplikaþních programĤ v jazyce Assembler, kde zejména konfigurace pomČrnČ složitých integrovaných periferií byla nároþnČjší, než bylo pĤvodnČ oþekáváno (napĜ. kapitola 6.2 ).
63
LITERATURA [1]
UM0462 - User Manual STM32F101xx, STM32F102xx and STM32F103xx Flash loader demonstrator. 2009, STMicroelectronics http://www.st.com/stonline/products/literature/um/13916.pdf
[2]
RM0008 - Reference Manual STM32F101xx and STM32F103xx. 2008, STMicroelectronics http://www.st.com/stonline/products/literature/rm/13902.pdf
[3]
Cortex-M3TM, Technical Reference Manual. Publ. ARM DDI 0337B, 2006, ARM Limited. http://infocenter.arm.com/help/topic/com.arm.doc.ddi0337e/DDI0337E_cortex_m3_r1 p1_trm.pdf
[4]
STM32F103x8/B – Datasheet reference. 2009, STMicroelectronics http://www.st.com/stonline/products/literature/ds/13587.pdf
[5]
Katalogový list budiþe ULN2003A http://www.datasheetcatalog.org/datasheet/stmicroelectronics/5279.pdf
[6]
Katalogový list dvojitého H-mĤstku L298 http://www.datasheetcatalog.org/datasheet2/2/052daje928cw7pc0uqs1ipyryppy.pdf
[7]
Yiu J.: The definitive Guide to the ARM Cortex-M3. Elsevier, 2007, ISBN: 978-0-7506-8534-4
[8]
Software ȝVision Keil, v. 3.50 https://www.keil.com/demo/eval/arm.htm
[9]
Software Flash Leader Demonstrátor, v. 1.3 http://www.st.com/stonline/products/support/micro/files/um0462.zip
[10]
Viktor CsĘrgĘ, Roman Táborský, Ovládací jednotka s procesorem STM32, zpráva
k projektu v týmu, katedra mČĜení, ýVUT - FEL, 2008
[11]
Laboratorní úloha pĜedmČtu ZRI, Inkrementální snímaþ, 2006 http://dce.felk.cvut.cz/zri/podklady/Inkrement_snimac.pdf
[12]
ýlánek server robotika.cz http://robotika.cz/articles/steppers/cs
[13]
ýlánek server cs.wikipedia.org http://cs.wikipedia.org/wiki/Elektromotor
[14]
ýlánek server hw.cz http://hw.cz/Teorie-a-praxe/Dokumentace/ART406-Ovladac-stejnosmerneho-motoruvyuzivajici-PWM.html
64
[15]
ýlánek server volny.cz http://www.volny.cz/fuksam/navrhy/krokmot/krokmot.htm
[16]
Peter Knaggs, Stehen Welsh: ARM: Assembly Language Programming, 2004 http://www.arm.com/miscPDFs/9658.pdf
65
PěÍLOHY A - Zapojení desky s STM32, 48 pinĤ, þást 1
A - Zapojení desky s STM32, 48 pinĤ, þást 2
B - Disk CD-ROM OBSAH: Bootloader ZavadČþ programu pro procesory STMicroelectronics, Flash Loader Demonstrátor, v 1.3 Datasheets Katalogové listy procesoru a použitých souþástek Programy Projekty vytvoĜené v Keil ȝVision 3 v jazyce Assembler: •
NovyProjekt
•
BlikLedHSI
•
BlikLed
•
USART
•
ADC
•
ADC_Temp
•
TIM_PWM
•
TIM_Encoder
•
Preruseni
•
Monitor
•
Motor_Krok
•
Motor_DC
Terminal Program Terminal v 1.9b