i
ii
České vysoké učení technické v Praze Fakulta elektrotechnická Katedra počítačů
Bakalářská práce
Programátor pro řízení stejnosměrného motoru Pavel Mertlík
Vedoucí práce:
Doc.Dr.Ing. Jiří Hospodka
Studijní program: Elektrotechnika a informatika, strukturovaný, Bakalářský Obor: Výpočetní technika 28. května 2010
iv
v
Poděkování Děkuji vedoucímu práce Doc.Dr.Ing Hospodkovi za nemalou spolupráci na celém projektu, za jeho pomoc a ochotu při výrobě samotného funkčního vzorku, jeho programátoru a debugeru. Dále bych rád poděkoval všem svým blízkým, kteří mě povzbuzovali ve tvorbě této práce.
vi
vii
Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady 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 28.5.2010
......................................................
viii
Abstract This work describes the development, production and testing, management of programmable DC motor controller designed for practical application. Along with other parts, which are the subject of work, creating facilities for bottling of honey from honeycomb. The result of this work is the circuit microcontroller managing honey bottling according to known algorithms. Circumference allows manual correction algorithm and the operation of emergency equipment in case of failure of automatic control.
Abstrakt Práce popisuje vývoj, výrobu a testování řídící části programovatelného regulátoru stejnosměrného motoru určeného pro praktickou aplikaci. Spolu s dalšími částmi, které nejsou předmětem práce, vytvoří zařízení pro stáčení medu z včelích pláství. Výsledkem práce je obvod s mikrokontrolérem řídící stáčení medu podle předem známého algoritmu. Obvod umožňuje ruční korekci algoritmu i nouzový chod zařízení v případě selhání automatického řízení.
ix
x
Obsah Úvod.......................................................................................................................................1 1.1 Kontext úlohy.............................................................................................................1 Popis problému, specifikace cíle............................................................................................3 2.1 Popis řešeného problému............................................................................................3 2.2 Rešerše existujícího řešení..........................................................................................5 2.3 Požadavky na novou implementaci............................................................................6 2.3.1 Požadavky na funkci – software........................................................................6 2.3.2 Požadavky na obsluhu a chování – hardware....................................................7 2.4 Vymezení cílů BP.......................................................................................................8 2.5 Popis struktury BP......................................................................................................9 Analýza a návrh řešení.........................................................................................................11 3.1 Návrh řešení hardwarové části..................................................................................11 3.1.1 Analýza a návrh způsobu ovládání regulátoru.................................................11 3.1.2 Analýza funkčních požadavků pro výběr mikropočítače.................................13 3.2 Výběr řídícího mikropočítače...................................................................................15 3.2.1 Rodiny 8 bitových mikropočítačů....................................................................19 3.2.1.1 ATMEL AVR............................................................................................19 3.2.1.2 INTEL 8051.............................................................................................20 3.2.1.3 Freescale HC(S)08 a RS08.......................................................................20 3.2.1.4 Microchip PIC..........................................................................................21 3.2.2 Výběr konkrétního mikropočítače...................................................................21 3.2.3 I/O expandér pro sběrnici I2C..........................................................................23 3.3 Analýza implementace softwaru...............................................................................25 3.3.1 AVR Libc – jazyk C pro procesory AVR.........................................................26 3.3.2 Výběr implementačního prostředí....................................................................27 3.3.3 Výběr programátoru.........................................................................................28 3.3.4 Použité nástroje a prostředí..............................................................................29 Realizace..............................................................................................................................31 4.1 Hardwarová část.......................................................................................................31 4.2 Realizace softwarové části........................................................................................33 4.2.1 Funkce vstupu/výstupu....................................................................................33 4.2.2 Komunikace s expandérem přes I2C...............................................................34 4.2.3 Funkce času......................................................................................................37 4.2.4 Ukládání a práce s pamětí................................................................................38 Testování..............................................................................................................................39 Závěr.....................................................................................................................................41 Literatura..............................................................................................................................43 Seznam použitých zkratek....................................................................................................45 Schémata zapojení a DPS.....................................................................................................47 Stručná uživatelská příručka................................................................................................51 Obsah přiloženého CD.........................................................................................................53
xi
xii
Seznam obrázků Obrázek 1.1.1: Blokové schéma medometu................................................................................2 Obrázek 3.1.1: Schéma uživatelského rozhraní........................................................................12 Obrázek 3.2.1: základní schéma von Neumannovi architektury, zdroj : X36SKD, doc. Lórencz ...................................................................................................................................................17 Obrázek 3.2.2: základní schéma Harvardské architektury, zdroj : X36SKD, doc. Lórencz.....18 Obrázek 3.2.3: Schéma připojení sběrnice I2C.........................................................................23 Obrázek 3.2.4: Blokové schéma expandéru MCP23017..........................................................24 Obrázek 3.3.1: Jedna z variant programátoru USBasp, zdroj: www.fischl.de/usbasp/.............29 Obrázek 4.1.1: Doporučené zapojení konektoru pro AVR ISP.................................................32 Obrázek 4.1.2: Schéma oboustranné DPS bez rozlité mědi......................................................33 Obrázek 4.2.1: Formát inicializačního bytu spojení.................................................................34 Obrázek 4.2.2: Způsob adresace registrů expandéru pro možnost jejich konfigurace, stejně se zapisuje do výstupních registrů.................................................................................................35 Obrázek 4.2.3: Schéma komunikačního protokolu...................................................................36 Obrázek B.1: Schéma zapojení regulátoru................................................................................47 Obrázek B.2: Oboustranná DPS, červená vrstva značí horní stranu, modrá spodní.................48 Obrázek B.3: Horní strana DPS (strana povrchové montáže)..................................................49 Obrázek B.4: Spodní strana DPS s rozlitou mědí pro lepší odrušení.......................................49 Obrázek B.5: Osazovací schéma...............................................................................................50
xiii
xiv
Seznam tabulek Tabulka 1: Sekvence stavů provádění ........................................................................................3
xv
xvi
Kapitola 1
Úvod Předmětem této bakalářské práce je navržení, výroba a oživení programovatelného regulátoru otáček stejnosměrného elektromotoru. Tento regulátor umožní provádět sekvenci povelů, kterými se řídí směr, režim provozu a otáčky stejnosměrného elektromotoru. Sekvence těchto povelů je známá, předem zadaná a neměnná. Úkolem programovatelného regulátoru je umožnit obsluze měnit dobu po kterou jsou jednotlivé povely vykonávány a tím řídit režim provozu (normální chod, sníženou rychlost, brzdu) elektromotoru, směr jeho otáčení a jeho otáčky. Je vyžadována vysoká spolehlivost a odolnost vůči chybám. Zároveň se očekává jednoduché ovládání, avšak při zachování jeho komfortu.
1.1 Kontext úlohy Medomet je zařízení určené ke stáčení medu z včelích pláství. Funguje na principu odstřeďování. Plástve se vloží na rotor s kterým otáče elektromotor. Vzhledem k dostupnosti a umístění úlů mimo běžnou zástavbu a často mimo dosah vedení nízkého napětí je nutné, aby toto zařízení bylo maximálně mobilní. K vytvoření odstředivého pohybu se využívá stejnosměrný elektromotor napájený z běžně dostupných 12V olověných akumulátorů, kdy lze využít i startovacího akumulátoru z automobilu. Pro dosažení očekávaného výsledku a zároveň z důvodu možných poškození pláství, pokud by elektromotor nebyl regulován, je nutné regulovat chod elektromotoru. K tomuto slouží sekvence povelů ovládání elektromotoru. Pořadí jednotlivých povelů pro elektromotor bude pevně dané a vychází z praxí ověřeného postupu stáčení medu. Podle aktuálního zaplnění pláství je však třeba upravovat dobu, po kterou se jednotlivé povely budou provádět. V případě špatně nebo nedostatečně dlouho vykonané sekvence jsou možné nejen ztráty na medu, jakožto produktu, ale hrozí poškození pláství nebo zničení medometu. Zadáním této práce je navržení, naprogramování a výroba řídící části programovatelného regulátoru otáček stejnosměrného elektromotoru. Finálním výstupem by měl být funkční odladěný vzorek, který bude použit jako řídící část medometu, kde nahradí současný modul, který nevyhovuje požadavkům na komfortní a spolehlivý provoz zařízení. Má pouze jednu pevně nastavenou sekvenci povelů a jejich pevnou časovou závislost. Povely pro silovou část zůstanou zachovány i v novém řídícím obvodu, ale nový obvod bude umožňovat podstatně variabilnější řízení, díky možnosti naprogramování nového načasování sekvence kroků. Významným zlepšením komfortu užívání bude možnost uložení si několika různých časových posloupností povelů do paměti pro jejich pozdější vyvolání a provedení.
1
Úvod
2
Obrázek 1.1.1: Blokové schéma medometu
Kapitola 2
Popis problému, specifikace cíle Řízení medometu, které se očekává od funkčního vzorku, jež bude výstupem této práce, nevyžaduje absolutní přesnost na setiny sekundy pro délku prováděného kroku či na zcela přesné řízení, umožňující regulovat otáčky elektromotoru po jednotlivých otáčkách. Avšak je zde potřeba spolehlivosti, vzhledem k mobilnímu použití a nemožnosti operativních oprav, a zároveň bezproblémovosti provozu. V případě špatného řízení či záměny výstupních řídících signálů pro elektromotor je možné jeho poškození.
2.1 Popis řešeného problému Pro správnou funkci medometu je potřeba jeho řízení. Především jde o dodržení známé a praxí vyzkoušené sekvence stavů obvodu, kterými regulátor řídí elektromotor. Každý ze stavů má přiřazeny výstupní povely, kterými je již řízena výkonová část přímo ovládající elektromotor. Těmito povely regulátor řídí směr otáčení elektromotoru a režimy jeho provozu. Tyto režimy specifikují chování elektromotoru (možnost regulace otáček, nižší či vyšší otáčky) a celé jeho budící výkonové části. Zde je důležité počítat s prodlevou spínacích prvků a zajistit bezpečné chování celého zařízení jak při provozu, tak při přechodech mezi jednotlivými provozními stavy. Následující tabulka představuje sekvenci stavů medometu, kterou musí nutně řídící obvod dodržet. Zároveň znázorňuje přiřazení jednotlivých povelů pro silovou část stavům. Každý povel zároveň představuje výstupní signál regulátoru, který bude připojen na příslušné vstupy výkonové části medometu. V horizontálním směru jsou uvedeny všechny kroky sekvence (11 stavů včetně stavu „0“). Vertikální směr obsahuje jednotlivé povely (výstupní řídící signály). Znakem „x“ v tabulce je označena výstupní logická úroveň „1“ pro každý signál, který má být aktivní v daném kroku (stavu sekvence). 0 L
L
LS
B
x
x
x
P /B
x
/Sr
x
/S
x
P
PS
PM
x
x
x
x
x
x
x
B
L
LM
B
x
x
x
x
x
x x
x
x
/M Tabulka 1: Sekvence stavů provádění
x
3
x
Popis problému, specifikace cíle
4
Jednotlivé povely regulátoru : •
LEVÝ CHOD („L“): označuje smysl otáčení elektromotoru vlevo „0“ - není nastaven „1“ - elektromotor se otáčení doleva
•
PRAVÝ CHOD („P“): označuje smysl otáčení elektromotoru vpravo „0“ - není nastaven „1“ - elektromotor se otáčení doprava
•
BRZDA („/B“) : označuje přepnutí zapojení elektromotoru do režimu brzdění, signál je aktivní v logické „0“ „0“ - dojde k přepnutí zapojení vinutí elektromotoru a tím k zastavení otáčení „1“ - elektromotor se otáčí ve směru dle signálů L a P, je možné regulovat jeho otáčky v režimu aktivního signálu „/Sr“
•
REGULOVATELNÝ STAV („/Sr“) : přepíná mezi neregulovatelnou rychlostí otáčení a režimy v nichž je možné regulovat otáčky (tyto řídí signály „/S“ a „/M“), používá se pro rozběh jako ochrana spínacího prvku proti proudovým nárazům, signál je aktivní v logické „0“ „0“ - signál je aktivní – obvod lze řídit pomocí signálů „/S“ a „/M“ (případně „/B“) „1“ - rozběhový stav sloužící k ochraně spínacího tranzistoru, kterým je regulována rychlost otáčení přes pulzně-šířkovou modulaci (PWM)
•
SNÍŽENÁ RYCHLOST („/S“) : signál pro aktivaci regulaci rychlosti otáčení elektromotoru v režimu snížené rychlosti, signál je aktivní v logické „0“ „0“ - rychlost je regulována pulzně-šířkovou modulací v režimu „SNÍŽENÁ RYCHLOST“ „1“ - regulace v režimu „SNÍŽENÁ RYCHLOST“ se neuplatní
•
MAXIMÁLNÍ RYCHLOST („/M“) : signál pro aktivaci regulaci rychlosti otáčení elektromotoru v režimu maximální rychlosti, signál je aktivní v logické „0“ „0“ - rychlost je regulována pulzně-šířkovou modulací v režimu „MAXIMÁLNÍ RYCHLOST“ „1“ - regulace v režimu „ MAXIMÁLNÍ RYCHLOST“ se neuplatní
Dodržení těchto režimu a jejich posloupnosti je hlavním aspektem spolehlivosti regulátoru. Nesmí nikdy dojít ke špatnému vykonání sekvence neboť by hrozilo poškození elektromotoru či pláství uložených na rotoru medometu. Následuje vyjmenování hlavních požadavků na regulátor z hlediska bezpečnosti a bezporuchovosti celého zařízení.
Popis řešeného problému
5
Hlavní podmínky bezpečného provozu : a) Nikdy nesmí dojít k současné aktivaci signálů „L“ a „P“, jejich současná aktivace je jasnou známkou o nekorektní funkci regulátoru. b) Při rozběhu, kdy se má odblokovat brzda (signál „/B“ překlápí z log. „0“ do „1“) je nutné, aby překlopení signálu „/B“ bylo opožděno oproti nastavení ostatních signálů daného stavu sekvence. Jedná se o ochranu obvodu, která zajistí, že se obvod neocitne v nestabilním stavu vlivem prodlevy během přepínání relátek, která ovládají výkonovou část a jsou spínány řídícími signály regulátoru. Zpoždění nastavení signálu „/B“ do log. „1“ o cca 100 ms zajistí bezpečné přepnutí všech relátek a po odbrzdění se elektromotor rozeběhne očekávaným a správným způsobem. c) Při rozběhu je nutné, aby byl signál „/Sr“ v log. „1“. Tím dojde k přepnutí kontaktů relé, které zajistí, že špičkový spínací proud do vinutí rotoru elektromotoru nepoteče přes relativně zranitelný výkonový spínací tranzistor, použitý pro regulaci pulzně-šířkovou modulací režimů „/S“ a „/M“. Proud poté poteče přímo na záporný pól. d) Nesmí dojít k přepólování elektromotoru během otáčení, čili nesmí dojít ke změně směru otáčení bez předchozího zastavení do klidové polohy. e) Začátek vykonávání sekvence je vždy ze stavu „0“. Zároveň po provedení celé sekvence se regulátor nastaví do stavu „0“ včetně nastavení výstupních řídících signálů. f) Provádění sekvence je možné pouze uživatelskou interakcí, kdy uživatel sám spustí vykonávání. Zastavení je možné buď uživatelskou interakcí nebo automaticky a to buď po dokončení provádění sekvence nebo při zjištění chyby vykonávání. V tomto případě se vykonávání zastaví a elektromotor se nechá bezpečně zabrzděn.
2.2 Rešerše existujícího řešení V současné době existuje funkční řešení řídícího obvodu (regulátoru) elektromotoru v medometu. Jedná se o čistě elektronické řešení bez využití mikroprocesoru. Je zde pevně provedena sekvence povelů. Zároveň je však pevně daná i jejich časová posloupnost. Toto je umožněno díky uložení kompletního vektoru výstupních řídících signálů pro každý časový okamžik vykonávání sekvence do paměti. Obvod dále umožňuje jemné doladění jednotlivých časů pro každý krok sekvence povelů, jinak pevně zadaných, a to pomocí potenciometru, jímž se ovlivňuje frekvence vyčítání dat z paměti a jejich umisťování na výstup obvodu. Je také možné potenciometry regulovat střídu výstupního signálu pro povely S a M. Tím je efektivně řízena rychlost otáčení elektromotoru pulzně šířkovou modulací. Toto řízení nyní zajišťují univerzální časovací obvody řady 555. Výsledný signál z obou je poté sloučen do jednoho, kterým je ovládán spínací tranzistor přímo řídící proud do vinutí elektromotoru. Rozlišení na povely S a M je zde pouze z důvodu, aby mohly být oba regulovány zvlášť. Současné řešení není zcela optimální, byť k jeho funkčnosti nelze mít námitek. Výhodou je rovněž vyzkoušení i odolnost vůči náročným provozním podmínkám, které představuje především rušení vznikající v cívkách elektromotoru.
Popis problému, specifikace cíle
6 Hlavní nevýhody současného řešení představují : •
nemožnost změny délky (časového trvání) jednotlivých kroků sekvence
•
provedení neumožňující jednoduché úpravy řídících algoritmů či chování
Naopak výhody představují : •
zařízení je vyrobené, odzkoušené a funkční
•
maximálně jednoduchá obsluha díky pevně provedené sekvenci povelů i jejímu pevnému načasování
•
poměrně jednoduchá diagnostika problému, neboť na diskrétních součástkách je obvykle snazší zjistit aktuální stav a hodnoty obvodových veličin než na zapojení s mikropočítačem, kde tento funguje jako jakýsi „black-box“
2.3 Požadavky na novou implementaci 2.3.1 Požadavky na funkci – software Požadavky na funkci nově vyvinutého regulátoru a tudíž na jeho softwarovou implementaci vycházejí ze zkušeností z provozu a z funkčního popisu současného regulátoru. Zároveň zohledňují skutečnost, že v rámci celého zařízení se nově vyvíjí pouze řídící modul, je tedy nezbytné, aby jeho chování a způsob řízení elektromotoru zůstal stejný pro zachování kompatibility s ostatními částmi. Samozřejmou součástí funkčních požadavků jsou také požadavky na bezpečný provoz a ochranu jednotlivých součástí celého zařízení, jak jsou popsány v kapitole 2.1 „Požadavky na implementaci“. Nad rámec těchto základních a nepřekročitelných požadavků, které však splňuje již současný modul regulátoru, je úkolem nové implementace a tím i této bakalářské práce, zvýšit komfort používání zařízení, umožnit jeho přímé řízení a zvýšení užitné hodnoty. Smyslem této práce je tedy : •
implementovat systém s ohledem na kompatibilitu se současným modulem regulátoru
•
implementovat spolehlivé provádění kroků zadané sekvence
•
zajistit dodržení ochranných opatření pro správnou funkci (zpoždění signálu „/B“)
•
umožnit uživateli zaznamenat a uložit několik časových posloupností stavů sekvence, jejich vyvolání z paměti a opětovné provedení
•
umožnit uživateli ovlivnit provádění již zaznamenané časové posloupnosti stavů sekvence
•
integrovat co nejvíce funkcí do nového regulátoru, může převzít funkce řízení elektromotoru pomocí pulzně-šířkové modulace v režimech „SNÍŽENÁ RYCHLOST“ a „MAXIMÁLNÍ RYCHLOST“
Požadavky na novou implementaci
7
2.3.2 Požadavky na obsluhu a chování – hardware Z hlediska hardwaru je nutným požadavkem na nový obvod především zachování kompatibility ovládání výkonové části řídící elektromotor. Je tedy potřeba zachovat řídící signály i jejich smysl (aktivní v log. „1“ nebo „0“) a umožnit jejich vyvedení pro ovládání výkonové části. Ze zadání bakalářské práce pramení další požadavek a to je realizace pomocí jednočipového mikropočítače (MCU). Tento požadavek zároveň umožňuje i realizaci opravdu univerzálního a modulárního systému, neboť pouhou změnou programu je možné měnit chování regulátoru (pochopitelně v mezích možností hardwarové konstrukce). Požadavkem na hardwarovou část je zároveň mobilita, spočívající jak v rozumných rozměrech, tak možnost napájení napětím 12V dodávaným z olověných akumulátorů. Zároveň se od regulátoru a jeho hardwarové realizace očekává jistá odolnost vůči okolním vlivům, přestože se nepředpokládá nasazení v extrémních provozních podmínkách. Vzhledem k tomu, že zařízení obsahuje silný elektromotor napájený ze stejného zdroje jako regulátor je nutné, aby regulátor disponoval poměrně kvalitní odolností proti elektromagnetickému rušení (EMI), které by mohlo způsobovat problémy v činnosti, například přeslechy na datových cestách a vstupech mikropočítače. Je proto vhodné učinit opatření pro zvýšení šumové stability již při návrhu desky plošných spojů a zapojení obvodu. Především využití blokovacích kondenzátorů u napájení integrovaných obvodů, používání co nejkratších signálních cest i oddělení analogových a digitálních signálů. V případě, že regulátor převezme i funkci řízení PWM v režimech „SNÍŽENÁ RYCHLOST“ a „MAXIMÁLNÍ RYCHLOST“ je nutné, aby obvod disponoval prvkem umožňujícím nastavení parametrů PWM pro každý režim zvlášť, ideálně potenciometrem pro každý režim. V tomto případě se ale omezuje počet výstupních řídících signálů, neboť dojde ke sloučení signálů „/S“ a „/M“. Zásadním úkolem pro hardware je také zprostředkování interakce s uživatelem. Zde se očekává, že obvod bude z hlediska ovládání disponovat : •
logickým a intuitivním ovládáním
•
možností jednoduchého avšak komplexního ovládání všech funkcí
•
ochranou proti zákmitům tlačítek při stisku a jiným nestandardním vstupům
•
přehledným provedením z hlediska obsluhy
•
nouzovou možností ukončení běhu zařízení a provádění sekvence
Dále je potřeba, aby uživateli byly signalizovány tyto informace : •
stav obvodu – provádění sekvence z paměti, záznam nové sekvence, klidový stav
•
aktuální stav sekvence, který je prováděn
•
vybraná předvolba pro provádění (prováděná)
•
dokončení záznamu a provádění sekvence
•
chyby vyskytnuvší se během provozu
Popis problému, specifikace cíle
8
2.4 Vymezení cílů BP Na základě požadavků na funkčnost, ovládání i chování regulátoru s přihlédnutím k náročnosti realizace jednotlivých prvků a v souladu se zadáním bakalářské práce byly vymezeny cíle této práce takto : •
návrh softwarové implementace algoritmu řízení medometu pomocí sekvence povelů
•
umožnit komfortní obsluhu pomocí jednoduchého ovládacího rozhraní, které umožní zaznamenat, uložit, načíst a provést sekvenci
•
implementovat ruční řízení sekvence stavů při jejím provádění
•
implementování ochranných opatření pro správnou funkci regulátoru jako je zpoždění deaktivace brzdy při rozběhu
•
implementovat přehledné intuitivní ovládání, které však zajistí plnou možnost využití možností zařízení
•
zajistit informování uživatele o všech podstatných provozních stavech regulátoru
•
řešení koncipovat na základě jednočipového mikropočítače
•
umožnit změnu aktualizace softwaru
•
využít PWM pro regulaci otáček elektromotoru
•
navrhnout DPS s ohledem na odolnost vůči EMI
•
vzhledem ke složitosti implementace není cílem práce integrovat snímač otáček elektromotoru, kterým by se zjišťovalo zastavení motoru před změnou směru otáčení, toto bude záležitostí obsluhy, které musí bezpečné zastavení zajistit dostatečně dlouho aktivním signálem „/B“
Vymezení cílů BP
9
2.5 Popis struktury BP Vzhledem k tomu, že předmětem této BP je vývoj a výroba funkčního vzorku regulátoru, čili jak vývoj ovládacího softwaru, tak vývoj a výroba hardwarové části, budou kapitoly (s výjimkou kapitol „Úvod“ a „Závěr“ rozděleny vždy na část pojednávající o hardwarové části – požadavkům na funkci, provedení, návrhu, implementaci a testování a na část věnující se softwaru se stejným zaměřením obsahu. V kapitole „Úvod“ byl čtenáři nastíněn kontext úlohy. Zároveň se jedná o motivaci této práce. V druhé kapitole „Popis problému, specifikace cíle“ jsou diskutovány požadavky na výsledek vývoje nového regulátoru. Zároveň je zmíněn výchozí stav i nynější regulátor, který má být nahrazen výstupem této práce. Třetí kapitola „Analýza a návrh řešení“ diskutuje možnosti a způsoby implementace specifikovaných cílů z předchozí kapitoly. Zde je diskuze o návrhu designu ovládání, o způsobu uživatelské interakce i o výběru vhodného MCU. Kapitola „Realizace“ popisuje konkrétní provedení regulátoru. Jak navržený hardware včetně DPS, tak implementovaný software, řídící funkci regulátoru. V kapitole „Testování“ jsou shrnuty informace o způsobech a možnostech ověření funkčnosti nově vyvinutého regulátoru. Kapitola „Závěr“ hodnotí splnění cílů vytyčených pro tuto BP. Na přiloženém CD jsou zdrojové kódy, schémata a podklady pro výrobu DPS a uživatelská příručka. Rovněž se zde nachází elektronická verze této práce.
10
Popis problému, specifikace cíle
Kapitola 3
Analýza a návrh řešení 3.1 Návrh řešení hardwarové části Návrh hardwarového řešení regulátoru vychází jak z požadavků vytyčených pro tuto práci, tak z požadavků z hlediska obsluhy. Je nutné vytvořit finální funkční vzorek jako opravdu plně funkční dle vytyčených požadavků a zároveň dodržet intuitivnost ovládání a jisté schéma (design ovládání), které bylo dohodnuto a je očekáváno uživatelem. Druhou významnou částí návrhu HW řešení je výběr mikropočítače, zde je nutné rozhodnout se pro nějakou z dostupných a známých rodin (platforem) a poté v rámci této vybrat vhodný konkrétní čip, který bude poskytovat všechny potřebné funkce a funkční bloky pro realizaci regulátoru dle vytyčených požadavků.
3.1.1 Analýza a návrh způsobu ovládání regulátoru Analýza potřeb ovládání regulátoru vychází především ze základních požadavků na jeho funkčnost, kdy je potřeba zajistit, aby uživatel mohl : - zaznamenat novou sekvenci stavů - uložit zaznamenanou sekvenci na zvolenou předvolbu - načíst a provést zaznamenanou sekvenci - manuálně ovlivnit provádění sekvence pro případ nestandardního chování Pro funkci záznamu nové sekvence je potřeba tlačítko, kterým se zahájí záznam a regulátor tím přejde do režimu záznamu. O tomto by uživatel měl být spraven, aby bylo zřejmé, že probíhá záznam nové sekvence a není např. možné vybrat některou z předvoleb a nechat jí provést. Dále je potřeba tlačítko pro procházení jednotlivých stavů. Obvod okamžikem přechodu do stavu Xn začne měřit čas náležející tomuto stavu, dalším stiskem tlačítka pro procházení stavů dojde k zastavení časovače, záznamu hodnoty do sekvence a přechodu na stav Xn+1. Záznam sekvence se ukončí automaticky po provedení posledního stavu, kdy obvod přejde do stavu „0“ a ukončí režim záznamu. Zde obvod spraví uživatele jednak o ukončení režimu záznamu a zároveň o zaznamenání kompletní sekvence tak, aby uživatel mohl v případě potřeby tuto sekvenci uložit na některou z předvoleb. V případě uložení sekvence na předvolenou pozici stiskem příslušného tlačítka předvolby musí zároveň obvod informovat a provádění uložení sekvence a při ukončení ukládání přejít do základního stavu, čili do stavu kdy očekává spuštění předvolené sekvence či výběr sekvence z paměti. Zároveň se uložením do paměti daná předvolba stává poslední použitou pro případ spuštění provádění bez výběru 11
Analýza a návrh řešení
12
jiné předvolby. Pokud uživatel nechce zaznamenanou sekvenci uložit musí existovat možnost, jak přejít do základního stavu regulátoru a to bez jeho resetování či odpojení od napájení. Načtení a provedení již uložených sekvencí je výchozí stav obvodu. Po spuštění regulátoru a inicializaci všech systémů obvod zůstane v režimu, kdy čeká na výběr některé z předvolených sekvencí. Po té po stisku tlačítka pro provedení zvolené sekvence se obvod přepne do stavu provádění a provádění zvolenou sekvenci, přičemž uživateli signalizuje, který stav je zrovna aktivní a tudíž které povely jsou vykonávány. V případě, že nebyla zvolena před stiskem tlačítka pro spuštění žádná předvolba, použije obvod posledně použitou předvolbu (ať již byla naposledy vykonávána nebo uložena). O zvolené předvolbě obvod v každém případě informuje. Z pohledu zajištění správné funkce zařízení je významným prvkem umožnění manuálního ovlivnění prováděné sekvence. Zde se jedná pouze o ovlivnění v režimu provádění, neboť v režimu záznamu je manuální ovládání nutné a nelze řídit záznam automaticky. Po aktivaci režimu provádění, kdy je automaticky zahájeno provádění zvolené sekvence, je žádoucí umožnit uživateli ovlivnit probíhající sekvenci. Zde se nabízí řešení pomocí tlačítka, které deaktivuje automatické provádění a přejde na manuální, kdy délku jednotlivých kroků sekvence (stavů provádění) ovlivňuje pouze uživatel tím, že přepíná manuálně na další stav obdobně jako u režimu záznamu. Při projití celé sekvence obvod skončí ve stavu „0“ a deaktivuje režim provádění. Nabízí se rovněž možnost, aby bylo možné znovu aktivovat automatické vykonávání sekvence, čili aby regulátor mohl pokračovat v automatickém provádění od stavu následujícího po aktuálně nastaveném stavu. V případě manuálního řízení by rovněž uživatel měl být o této skutečnosti informován. Stejně tak při opětovném přechodu na automatické řízení. Počet těchto přechodů mezi automatickým a manuálním prováděním nesmí být omezen, aby bylo možné v případě potřeby prodloužit (popřípadě zkrátit) jakýkoliv krok sekvence. Zároveň mezi bezpečností prvky patří nutnost ošetřit správné reakce na tlačítkové vstupy, kdy nesmí být vyhodnocovány překmity jako ovládací povely. Zároveň je žádoucí, aby tlačítka, která nemají v daném režimu žádné funkce byly neaktivní či aby jejich případné nežádoucí stisknutí neprovedlo nežádoucí operaci (např. stisknutí tlačítka START v režimu záznamu nesmí vyvolat provádění sekvence). Z těchto požadavků a zároveň diskuzí s vedoucím práce vzniklo následující schéma designu ovládání :
Obrázek 3.1.1: Schéma uživatelského rozhraní
Návrh řešení hardwarové části
13
Toto schéma splňuje všechny požadavky na možnosti ovládání i signalizaci o pracovním režimu uživateli a zároveň disponuje intuitivností a nabízí snadnou obsluhu. Popis ovládacích prvků : - DALŠÍ – tlačítko pro krokování sekvence, vyvolá přechod na další krok (režim záznamu i manuální režim provádění, nelze s ním však aktivovat manuální režim) - START – tlačítko slouží pro zahájení provádění zvolené sekvence, v režimu provádení slouží k přechodu na manuální režim, opětovným stiskem regulátor přejde znovu do automatického režimu a pokračuje další krokem po aktuálně prováděném - ZÁZNAM – tlačítko slouží k přechodu do režimu záznamu nové sekvence, slouží také k opuštění režimu záznamu po zaznamenání celé sekvence bez uložení - PRESET1-4 – tlačítka pro výběr pozice předvolby, slouží ke zvolení předvolby pro provádění nebo pro výběr pozice pro uložení po záznamu kompletní sekvence (svítí RED) Signalizace o stavu regulátoru pomocí LED : - STATE LED – diody signalizující aktivní a aktuálně prováděný krok sekvence, svítí pouze v režimu provádění a záznamu - GREEN1-4 – diody signalizující aktuálně zvolenou předvolbu, svítí i během provádění - RED – dioda signalizující úspěšný záznam nové sekvence, je možné sekvenci uložit - GREEN5 – dioda signalizující činnost regulátoru, svítí pokud je automaticky vykonávána sekvence v režimu provádění(při manuálním ovládání zhasne) a zároveň označuje režim záznam
3.1.2 Analýza funkčních požadavků pro výběr mikropočítače Kritéria pro výběr vhodného MCU vycházejí jednak z funkčních požadavků na regulátor a jednak z požadavků na jeho obsluhu. Nyní následuje diskuze jednotlivých funkčních požadavků, ze které vzejdou konkrétní požadavky na vybavení řídícího mikropočítače. Zde je třeba uvést, že je namístě snaha o maximální integraci funkcí do MCU tak, aby pokud možno nebylo potřeba využívat žádné externí obvody či funkční celky. Souvisí to s požadavkem na spolehlivé a bezpečné fungování zařízení. Každý externí obvod a komunikační linka k MCU zvyšuje možnost provozního selhání a především náchylnost na rušení EMI od elektromotoru. Je proto žádoucí, aby maximum možných funkčních požadavků splňoval samotný vybraný mikropočítač. Úkolem regulátoru je při záznamu sekvence načítat časy, po které byly aktivní jednotlivé kroky sekvence a tyto časy uchovávat v pracovní sekvenci, která po jejím kompletním záznamu může být uložena jako jedna z předvoleb. Při provádění naopak je sekvence načtena a každý krok sekvence probíhá přesně tak dlouho, jak určuje zaznamenaná hodnota délky jeho trvání. Z tohoto je zřejmé, že hlavním úkolem regulátoru je měření času a ukládání jednotlivých hodnot do vektorů, odpovídajících jednotlivým uloženým sekvencím. Vzhledem k tomu, že zařízení nebude trvale napájeno je potřeba aby ukládání bylo realizováno do paměti typu non-volatile, která uchovává data i po odpojení napájení. Dnes jsou prakticky
14
Analýza a návrh řešení
všechny MCU vybaveny pamětí FLASH pro uchování programu, která tuto podmínku splňuje. Vzhledem k faktu, že předvolené sekvence se mohou poměrně často přemazávat, bylo by pro danou aplikaci výhodnější využít paměti typu EEPROM, která nabízí obvykle řádově větší počet zapisovacích/mazacích cyklů než paměť FLASH a je také non-volatilní. Např. u mikrokontroléru ATMEL ATmega48 s jádrem AVR se udává počet zapisovacích/mazacích cyklů takto : FLASH – 10 000 a EEPROM – 100 000. Zároveň v případě zápisu do paměti EEPROM nedochází ke komplikacím jako při zápisu do FLASH. Díky tomu, že ve FLASH je obvykle uložen program vykonávaný jednočipovým mikropočítačem, čte tento program průběžně podle aktuálně vykonávaných instrukcí. Ve chvíli, kdy je potřeba zapsat data do paměti FLASH nastává situace tzv. „self-programming“, během které nemůže mikropočítač pokračovat ve vykonávání programu, neboť během zápisu do FLASH není možné její současné čtení. Různé mikropočítačové rodiny a implementace toto řeší různě, nicméně vždy se jedná o nestandardní proceduru, kdy je nutné aby vykonávání obslužné rutiny pro zápis běželo nikoliv standardně z paměti programu (bez ohledu zda je použita Harvardská nebo von Neumannova architektura), ale pouze z paměti RAM, čili obvykle se přechází na vykonávání programu ze zásobníku. Paměť typu EEPROM lze sice připojit k MCU externě pomocí standardních sběrnic využívaných v MCU jako jsou I2C nebo SPI, nicméně vlivem možných rušení by toto řešení mohlo přinést více škody než užitku. Je tedy cílem, stejně jako u ostatních požadavků, co nejvíce funkcí integrovat do MCU a využít minimum externích obvodů. Měření času mikropočítačem bude prováděno pomocí integrovaného čítače / časovače, kterým jsou vybaveny dnešní mikropočítače. Díky tomu, že u regulátoru není časové rozlišení kritickou hodnotou, můžeme stanovit jako nejnižší rozlišovací jednotku jednu sekundu. Čili načítání i provádění jednotlivých kroků sekvence bude prováděno s rozlišením na celé sekundy. Menší časové úseky nebude regulátor rozeznávat ani provádět. Zároveň díky charakteristice práce regulátoru, kdy mikropočítač nebude muset provádět výpočetně náročné operace, je možné použití nižších taktovacích frekvencí mikropočítače, což pozitivně ovlivní jeho spotřebu. Důležitým faktorem je také maximální délka jednotlivých kroků sekvence. Ze zkušeností vyplývá, že délka celé sekvence je obvykle cca 4 – 5 minut. Z tohoto plyne, že pro každý krok sekvence by při rozlišovací schopnosti na celé sekundy (a tudíž načítání času po celých sekundách) mělo plně postačovat standardních 8 bitů jako paměťové místo (8 bitů znamená při rozlišovací schopnosti jedna sekunda možnost záznamu až 255 sekund dlouhého kroku). Zároveň všechny operace s těmito hodnotami by se uskutečňovaly v 8 bitovém prostředí. Z tohoto plyne, že systém bude koncipován s využitím běžného 8 bitového mikrokontroléru. Při použití nízké taktovací frekvence a vhodné předděličky pro obvody časovače bude možné provádět načítání jedné sekundy pomocí hodinových pulzů i do 8 bitového čítače/časovače mikrokontroléru. V případě větší požadované rozlišovací schopnosti by bylo potřeba využít 16 bitového čítače/časovače a zřejmě i 16 bitových paměťových míst, v případě 8 bitového MCU by se pak jednalo o 2 paměťová místa. Z dalších potřebných charakteristik pro výběr mikropočítače se nabízí potřeba v novém regulátoru integrovat i funkci řízení elektromotoru pomocí PWM signály „/S“ a „/M“. K tomuto účelu jsou některé 8 bitové mikropočítače přímo určené. Nicméně standardem u moderních mikropočítačů je implementace řízení PWM v rámci modulu čítače/časovače. S řízením PWM souvisí požadavek na možnost regulace PWM pro každý signál nezávislým prvkem. Zde se jednoznačně nabízí využití dvou potenciometrů pro regulaci otáček elektromotoru pomocí PWM. Změnou odporu potenciometru bude řízena jednotka PWM. Vzhledem k využití MCU jako řídícího obvodu pro PWM je nutné, aby změnu odporu potenciometr MCU reflektoval. Je tedy nutné jeho vybavení A/D převodníkem, který bude
Návrh řešení hardwarové části
15
snímat a digitalizovat napětí na jezdci potenciometru a definovaných algoritmem přepočítávat aktuální pozici jezdce potenciometru na nastavení střídy výstupního signálu. Vzhledem k tomu, že signály využívající PWM nikdy nejsou aktivní společně postačuje jeden čítač/časovač s možností řízení PWM pro oba, přičemž o tom, který potenciometr bude regulovat výstupní střídu signálu sdružujícího výstupní signály „/S“ a „/M“ původního regulátoru, rozhodne aktuální krok sekvence (čili to který ze signálů má být aktivní). Rovněž další dva funkční požadavky souvisí s časem. Jedná se o funkci zpoždění signálu brzdy „/B“ při rozběhu elektromotoru, kde se očekává zpoždění tohoto signálu oproti ostatním při změně stavu o přibližně 100 ms. Druhou funkcí závislou na čase je potřeba deaktivovat tlačítko po jeho stisku na určitou dobu. Tímto se předejde jednak falešným „stiskům“ tlačítka, které by mohly vzniknout díky zákmitům, a řídící mikropočítač by je mohl vyhodnotit jako stisk a zároveň se tím omezí možnost nechtěného opakovaného stisku tlačítka, což by v případě stisku tlačítka DALŠÍ vedlo k velmi rychlému přeskoku na další krok sekvence, což by v určitých případech (např. nedobrzdění a přepnutí na opačný smysl otáčení elektromotoru) mohlo vést i ke zničení zařízení. Základní dobou, po kterou bude tlačítko neaktivní po stisku, musí být 0,1 – 0,3 sekundy. Případné zvětšení této doby pro zvýšení ochrany proti brzkému nechtěnému přepnutí na další stav vlivem chyby obsluhy se bude diskutovat až po praktických zkušenostech z provozu. Nicméně díky řízení mikropočítačem není problém tuto hodnotu upravit v určitých mezích (minimálně v rámci rozlišovací schopnosti čítače/časovače závislé na taktovací frekvenci MCU) v softwaru kdykoliv. Dalším požadavkem je obsluha uživatelského rozhraní, tedy ovládání a signalizace. Zde je především zásadní otázka počtu potřebných vývodů pro obsloužení všech tlačítek či diod a především výstupních řídících signálů pro výkonovou část. MCU by tedy mělo obsluhovat I/O vývody : - 17 LED diod pro signalizaci funkce uživateli - 7 tlačítek uživatelského ovládání - tlačítko pro tvrdý restart regulátoru pro nouzové případy - 5 výstupních signálů (L, P, /B, /Sr, a sdružený pro /S a /M) - vstup pro zkracovací propojku PWM_OFF To činí celkem 31 I/O vývodů.
3.2 Výběr řídícího mikropočítače Z předchozí diskuze vyplývá využití standardního 8 bitové mikropočítače. Pro aplikaci jednoduchého řízení tohoto typu se skvěle hodí, obsahuje potřebné integrované komponenty (čítače/časovače, non-volatilní paměti, integruje algoritmy pro řízení PWM atd.) a je cenově dostupný a z hlediska složitosti zapojení v obvodu nenáročný. V případě zvýšení nároků na zařízení, především jeho výpočetní výkon pak existuje možnost přechodu na vyšší architektury, neboť někteří výrobci jako například ATMEL nebo Freescale nabízejí fyzicky i bitově zaměnitelné čipy disponující 32 bitovým jádrem. Nicméně vzhledem k výpočetní nenáročnosti dané aplikace a velmi slušných výpočetních výkonů dnešních moderních 8 bitových mikrokontrolérů zůstane nejspíše tato možnost pouze teoretickou.
Analýza a návrh řešení
16
Pro výběr použitého mikropočítače existuje celá řada aspektů, ať už objektivních (použitá architektura, jádro, výkonnost) nebo subjektivních (dostupnost, zkušenosti s daným typem nebo rozšířenost). Vzhledem k nepřebernému množství nabízených variant mikrokontrolérů jednotlivých produktových rodin, kdy je nabízena v rámci každé rodiny široká škála obvodů vhodných od univerzálního až po velmi specifické nasazení, bude výběr konkrétního mikropočítače pro realizaci regulátoru medometu dvoustupňový. V prvním kroku budou srovnány jednotlivé mikroprocesorové rodiny a výsledný obvod bude již diskutován pouze v rámci jedné zvolené rodiny. Následující diskuze se týká výběru vhodné rodiny mikropočítačů. Výběr rodiny mikropočítačů Rodinou mikropočítačů (či mikroprocesorů, procesorů apod.) se označuje určitá produktová linie využívající stejnou architekturu jádra, délku operandu a programátorský model. V rámci jednotlivých rodin jsou pak nabízeny obvykle až desítky variant jednotlivých mikropočítačů lišících se výbavou (paměti SRAM, EEPROM, FLASH, A/D převodníky, čítače/časovače, komunikační linky), určením (nízkopříkonové systémy), rozměry a typy pouzder (DIL, SO, QFN) či odolností vůči vnějším vlivům. Základní aspekty výběru vhodné rodiny MCU: - architektura MCU - délka operandu - instrukční soubor Architektura MCU Existují dvě základní architektury procesorů, díky tomu, že jednočipový mikropočítač je vlastně procesor integrovaný na jednom čipu s řadiči I/O jednotek, čítači/časovači, paměťovým systémem a dalšími periferiemi, je možné dělit podle stejných kritérií i mikropočítače. Přesto je nutné zdůraznit, že moderní mikropočítače obvykle nelze zcela jasně škálovat, neboť využívají předností obou architektur. Přesto je architektura MCU, byť jen formální, důležitým ukazatelem. Von Neumannova architektura Jejím hlavním znakem je, že využívá společnou paměť pro program i data. Data nejsou od instrukcí programu v paměti nijak explicitně oddělena. Využívá paměť s lineární organizací o buňkách stejné velikosti s celočíselnou adresací. Využití společné paměti znamená potřebu pouze jedné datové sběrnice. Zároveň stačí jedna instrukce pro přístup do paměti. Není zde totiž potřeba rozlišovat adresoví prostor na prostor dat a programu.
Výběr řídícího mikropočítače
17
Obrázek 3.2.1: základní schéma von Neumannovi architektury, zdroj : X36SKD, doc. Lórencz
Harvardská architektura Jejím typickým znakem je oddělení paměti pro program a data. Toto uspořádání přináší potřebu dvou datových sběrnic, jedné pro data, druhé pro instrukce programu. Výhodou naopak je, že mohou mít různou šířku. Zároveň tím dochází k oddělení adresových prostorů. Je potřeba mít instrukce pro přístup do každé paměti zvlášť. Výhodou naopak je vyšší rychlosti zpracování, neboť je možné zároveň číst data i načítat další instrukce programu.
Analýza a návrh řešení
18
Obrázek 3.2.2: základní schéma Harvardské architektury, zdroj : X36SKD, doc. Lórencz Délka operandu Procesory se rozdělují podle délky operandu, který jsou schopny naráz zpracovat. Dělíme procesory na 4 bitové, 8 bitové, 32 bitové, 64 bitové atp. Číslo udává délku operandu, který dokáže procesor načíst a zpracovat v jednom procesorovém cyklu. Existují však i výjimky, kdy procesor zpracovává i delší operandy, avšak v odpovídajícím větším počtu cyklů. V případě většiny mikrokontrolérů zároveň odpovídá délce zpracovávaného operandu i délka paměťového místa. Běžným standardem pro výpočetně méně náročné aplikace řízení či regulace jsou 8 bitové MCU. Existují však i 32 bitové verze pro náročnější použití. Instrukční soubor Procesory se dělí podle použitého typu instrukčního souboru na ty, které využívají komplexní instrukční soubor (CISC) a na procesory využívající redukovaný instrukční soubor (RISC). Procesory využívající komplexní instrukční soubor (CISC) Jedná se o procesory disponující velkým množstvím komplexních instrukcí, které zahrnují v jedné instrukci několik akcí, např. načtení operandu z paměti, operaci s ním a opětovné uložení. Umožňuje pracovat s operandy v různých umístěních (paměť, vstupy/výstupy, registry). Výhodou je vysoká hustota kódu a vyšší rychlost v některých aplikacích. Nevýhodou naopak je složitější dekodér instrukcí a především fakt, že jedna strojová instrukce trvá několik hodinových taktů.
Výběr řídícího mikropočítače
19
Procesory využívající redukovaný instrukční soubor (RISC) Tyto procesory nemají tak komplexní instrukční soubor. Značí se to jak v počtu instrukcí, tak v možnostech, které instrukce nabízejí. Není např. možné pracovat s operandy v různých umístěních. Procesory tohoto typu obvykle pracují pouze s operandy umístěnými v registrech, proto obsahují velké množství registrů k obecnému použití. Velikou výhodou menšího množství jednoduchých instrukcí je fakt, že většina instrukcí se provádí pouze jeden hodinový takt. Zároveň tím ale vzniká potřeba většího počtu instrukcí, neboť každý přístup do paměti vyžaduje provedení další instrukce. Díky tomu klesá hustota kódu a ve finále je program větší. Na druhou stranu se významně zjednodušuje dekodér instrukcí a tím je možné zmenšit velikost čipu.
3.2.1 Rodiny 8 bitových mikropočítačů 3.2.1.1 ATMEL AVR Je dnes velmi oblíbenou a rozšířenou rodinou založenou na jádře AVR. Jedná se o procesory využívající Harvardskou architekturu s redukovanou instrukční sadou architektury „Load/Store“. Vyrábějí se jak 8 bitové verze, tak 32 bitové verze těchto kontrolérů. Většina z nich obsahuje paměť FLASH jako paměť programu. Zároveň disponují pamětí EEPROM pro ukládání nonvolatilních dat. Tyto procesory disponují velmi dobrým výkonem, díky řadě optimalizací do značné míry kompenzují nevýhody tradičních procesorů RISC. Disponují tzv. „jednotaktovým“ jádrem, kdy většina instrukcí je provedena během jednoho taktu procesoru, výjimkou jsou instrukce přístupu do paměti, ale i u těch je provádění podstatně rychlejší než u procesorů typu CISC. Díky sdílení vývodů i několika periferiemi nabízejí mikropočítače s jádrem AVR velké množství funkcí při zachování malého počtu vývodů a tím i malých rozměrů. ATMEL vyrábí 2 základní řady : •
megaAVR – jedná se o plně vybavený mikrokontrolér obsahující velké množství periferií, je možné zvolit z několika variant podle pouzdra, počtu vývodů, množství integrovaných periferií, komunikačních linek (SPI, I2C, USART) či velikosti pamětí (RAM, FLASH, EEPROM)
•
tinyAVR – jedná se o základní typ mikropočítače, nedosahuje komplexnosti řady megaAVR, vyniká však miniaturními rozměry a spotřebou
ATMEL nabízí integrované vývojové prostředí (IDE) AVR Studio, které umožňuje psaní programů v jazyce symbolických adres (assembler), ladění programů i nahrávání programů pomocí firemních programátorů a debuggerů. Díky rozšířenosti platformy AVR však existuje řada nástrojů třetích stran, často freewarových, které umožňují širší podporu programátorů. Velice užitečnou je pak knihovna AVR Libc[12], která umožňuje psaní programů v jazyce C a použití kompilátoru GCC. Balík WinAVR[13] pak umožňuje psaní a překlad programů pro AVR napsaných v jazyce C i v prostředí MS Windows. Zároveň použitím AVR Libc získává uživatel možnost psaní programů v C i v AVR Studiu.
20
Analýza a návrh řešení
3.2.1.2 INTEL 8051 Je tradiční rodinou mikropočítačů, kterou vyvinul INTEL[6] již před 30 lety. Původně se jednalo o 8 bitový mikropočítač s jádrem typu CISC Harvardské architektury. Standardní provádění instrukce trvá 12 hodinových taktů a využívá se takt jádra 12 MHz. Je typickým představitelem střadačové architektury, kdy všechny operace využívají operand ve střadači a další operandy načítají z paměti. Dnes vyrábí MCU založené na odnožích jádra původní 8051 velké množství výrobců. Jádro prošlo spoustou změn. Mezi nejvýraznější vylepšení patří implementace využívající jednocyklové jádro (obdobně jako u procesorů RISC) při zachování plné kompatibility s původním jádrem 8051. Zároveň je snaha o snižování spotřeby, což je dnes aktuální trend u vestavěných systémů mobilních zařízení. Škála integrovaných periferií však nedosahuje možností jež nabízí AVR. Běžně tyto MCU obsahují paměť FLASH(dříve pouze EPROM nebo EEPROM), komunikační linku UART a moduly čítače/časovače, watchdog časovače. Díky rozšířenosti a dlouhověkosti této platformy existuje celá řada nástrojů pro kompilaci programů v assembleru i v jazyce C. Zároveň existuje integrované vývojové prostředí AS51, umožňuje však pouze psaní programů v assembleru.
3.2.1.3 Freescale HC(S)08 a RS08 Je na rozdíl od ostatních sledovaných rodin postaven na von Neumannově architektuře a instrukční sadě typu CISC. Jádro HCS08 je moderní vysoce výkonné jádro, které umožňuje jak taktování na vysoké frekvence (40 MHz), tak velmi účinné snížení spotřeby pro bateriově napájená zařízení. Zároveň nabízí velké množství periferií a integrované paměti přímo na čipu. Přehled integrovaných periferií je takřka nevyčerpatelný a ukazuje na velkou technologickou vyspělost této rodiny MCU. Špičkové modely obsahují až 60kB paměti FLASH, nechybí řadiče USB, Ethernetu, LCD apod. Velkou výhodou těchto mikrokontrolérů je integrace ladícího rozhraní přímo na čipu, což velmi usnadňuje ladění programu přímo v zapojení bez používání drahých ladících nástrojů. Toto ladící rozhraní DBG zároveň umožňuje programování paměti v zapojení, tzv. ISP a to pouze pomocí jednoho vodiče. Jádro HCS08 zároveň nabízí interní RC oscilátor s teplotní kompenzací. Jádro RS08 poté nabízí redukovanou verzi plného jádra HCS08 pro využití v aplikacích, kde jsou kritickými parametry rozměry a spotřeba. Freescale nabízí ke svým mikrokontrolérům integrované vývojové prostředí CodeWarrior s kompilátorem pro psaní programů v jazyku C. Jeho používání je zdarma pro psaní programů do 4 kB kódu. Během vývoje se však ukázalo, že program pro řízení medometu má dvojnásobnou velikost.
Výběr řídícího mikropočítače
21
3.2.1.4 Microchip PIC Jedná se o populární řadu 8 bitových MCU, která svého času byla velkým konkurentem pro architekturu Intel x51. Využívá také Harvardskou architekturu, avšak nabízí jádro RISC se standardním prováděním instrukce během 4 hodinových taktů. Využívá jak střadače (registr W), tak banku univerzálních registrů. Výhodou je hardwarový zásobník i volně přístupný programový čítač instrukcí. Obdobně jako u rodiny založené na jádře AVR využívá se u PICu sdílení vývodů pro více periferních zařízení a tím dochází k redukci potřebných vývodů, avšak zároveň to neumožňuje využívat naráz plně všech nabízených funkcí mikrokontroléru. Výbava těchto mikrokontrolérů je velmi variabilní a zahrnuje standardní periferie jako paměti RAM, FLASH, čítače/časovače, A/D převodníky, komunikační linky SPI, I2C, ale nabízí i rozhraní USB, Ethernet či CAN. Díky velké oblibě i rozšířenosti PICů existuje i velké množství vývojových nástrojů. Především se jedná o velkou škálu kompilátorů pro PIC, umožňující psaní programů v různých vyšších programovacích jazycích. Samozřejmou je podpora jazyka C. Dále existují real-time simulátory jádra PIC pro snadné ladění programu i různé ladící nástroje pro periferie.
3.2.2 Výběr konkrétního mikropočítače Zopakujme si nyní požadavky na mikropočítač : •
8 bitová architektura
•
non-volatilní paměť pro ukládání předvoleb typu FLASH, ideálně pak EEPROM o velikosti 4*11*1 B (počet předvoleb * délka sekvence * obsazené místo jedním krokem) = 44 B
•
3 moduly čítače/časovače
•
modul pro PWM
•
31 volných I/O vývodů pro potřeby ovládání a signalizace
Z výše uvedených požadavků celkem jednoznačně vyplývá potřeba plně vybaveného mikrokontroléru vyšší řady. Takovéto obvody nabízí ATMEL v produktové řadě megaAVR a Freescale ve špičkově vybavených řadách S08. Z přehledu jednotlivých rodin je zřejmá technologická vyspělost a především vysoká míra integrace. Nevýhodou naopak je poměrně malá rozšířenost a nutnost pro větší programy pořídit si vývojový software CodeWarrior. Další nevýhodou plně vybavených špičkových modelů Freescalu je jejich velikost a počet vývodů. Naopak pro AVR hovoří jádro RISC i všeobecné rozšíření, velká dostupnost vývojových nástrojů, kvalitních kompilátorů a velká integrace periferií na čipu při minimalizaci počtu vývodů. Nakonec byl k realizaci vybrán čip ATMEL ATmega88[9], a to především z důvodu, že nižší verze má pouze 4kB FLASH, což se ukázelo být nedostatečné. Jinak je MCU vybaven
Analýza a návrh řešení
22 všemi potřebnými periferiemi a je velmi dostupný. Základní charakteristiky : •
taktovací frekvence může být až 20 MHz, při níž dosahuje až 20MIPS
•
1 kB SRAM, 512 B EEPROM a 8 kB FLASH plně dostačují pro potřeby této práce
•
jeden 16 bitový a dva 8 bitové čítače/časovače s celkem 6 PWM kanály, je možné externí časování i čítání externích zdrojů signálu
•
10 bitový A/D převodník disponuje 8 kanály
•
23 plně nastavitelných I/O linek
•
komunikační linky TWI (hardwarově kompatibilní s I2C) SPI a USART.
•
watchdog časovač a detekce nízkého napájecího napětí.
•
podpora Boot-Loaderu pro In-System Programming
Výhodou této volby je možnost psaní programu v jazyce C s využitím AVR Studia a knihovny AVR Libc což umožní efektivní vývoj. Nevýhodou tedy je, že neobsahuje 4 čítače/časovače. Tuto nevýhodu je však snadno možné odstranit, neboť pro potřeby dočasné deaktivace tlačítka a zpoždění signálu brzdy lze využít jednoho časovače namísto dvou. Další variantami jsou využití busy waitingu pro zpoždění brzdy nebo externí časovací obvod. Další nevýhodou je nedostatečný počet I/O vývodů. Je to daň za přijatelné rozměry i cenu MCU. Zde existuje několik řešení. Je žádoucí aby ovládání i výstupy byly připojeny přímo na MCU. U signalizačních diod však je možné jejich externí připojení. Výhodné by bylo přesunout na externí obvod 11 stavových diod. Nabízí se několik řešení externího připojení pro ušetření I/O linek : - využití dekodéru – pro obsluhu 16 LED by stačily 4 I/O linky mikropočítače - využití 16 bitového I/O expandéru s rozhraním SPI (využívá 4 piny) - využití 16 bitového I/O expandéru s rozhraním I2C (využívá 2 vodičové sběrnice) Z uvedených řešení se jako optimální jeví využití expandéru připojeného přes I2C sběrnici. Toto řešení zabere nejméně I/O linek, zároveň nabízí vysokou rychlost přenosu (100 nebo 400 kHz) a jednoduchý komunikační protokol. Navíc je možné připojení dalších zařízení.
Výběr řídícího mikropočítače
23
3.2.3 I/O expandér pro sběrnici I2C Sběrnice I2C je dvouvodičová multi-masterová sběrnice pro připojování periferií. Obsahuje jeden datový vodič pro sériovou komunikaci a jeden vodič pro hodinový signál. Komunikace se účastní připojení zařízení, která se dělí na zařízení typu Master, která inicializují spojení a vysílají hodinový signál, a zařízení typu Slave, která komunikují jen na vyžádání Mastera. Sběrnice umožňuje použití více Masterů díky algoritmu arbitráže. Díky adresaci umožňuje sběrnice připojit až 128 zařízení. Na sběrnici funguje potvrzování přijatých dat.
Obrázek 3.2.3: Schéma připojení sběrnice I2C Komunikace probíhá jednoduchým způsobem. První poslaná zpráva Masterem má nastavený startovací příznak a obsahuje adresu zařízení, se kterým chce Master komunikovat. Zároveň nastaví příznak čtení/zápisu. Další komunikace je již datová. Přijímací strana potvrzuje přijatá data po každém přijatém bytu. Komunikaci je poté možno ukončit nebo restartovat. Více podrobností o komunikačním protokolu obsahuje Kapitola 4. Expandér I/O je zařízení poskytující možnost rozšíření I/O portů. Konkrétně 16 bitový expandér pro sběrnici I2C umožňuje pomocí dvouvodičové komunikační linky rozšířit počet I/ O linek o 16. K tomuto účelu slouží integrovaný deserializátor, které převede sériově přenášená data na paralelní, kterými se poté nastaví zvlášť každá ze dvou 8 bitových bran expandéru. Pro použití v regulátoru medometu byl vybrán expandér Microchip MCP23017[17]. MCP23017 nabízí : •
16 obousměrných I/O linek
•
vysokorychlostní komunikaci přes I2C rychlostmi 100 kHz, 400 kHz a 1,7 MHz
•
možnost díky 3 adresním vstupům adresovat až 8 zařízení na sběrnici
•
2 výstupy INTA a INTB pro signalizaci změny na vstupních linkách, tyto lze připojit jako externí zdroje přerušení k MCU, linky jsou jednotlivě nastavitelné jako zdroje přerušení
•
resetovací vstup
•
dostupné v pouzdrech DIP28, SOIC28, SSOP28 a QFN28
24
Obrázek 3.2.4: Blokové schéma expandéru MCP23017
Analýza a návrh řešení
Analýza implementace softwaru
25
3.3 Analýza implementace softwaru Softwarová implementace je vždy závislá na hardwarové platformě, pro kterou je koncipována. Každá platforma, každá rodina MCU, má jiné chování, používá jiný assembler a především jiné označení registrů, případně i jiné způsoby adresace a práce s operandy. Není tudíž možné napsat univerzální kód, který by byl platformě nezávislý. A to ani v případě použití vyššího programovacího jazyka (C, Pascal, Fortran), který nabízí již značnou míru abstrakce. Stále tu však zůstávají problémy s odlišnými programátorskými modely a jinými registry. Vytvoření univerzálního programu použitelného na více platformách by si pak vyžádalo psaní velmi obecného kódu, používajícího velkou spoustu maker, která by se modifikovala podle platformy pro kterou by se poté program překládal. Tento způsob se využívá u tvorby knihoven, kde je žádoucí přenositelnost. V této aplikaci se spokojíme s platformě závislým kódem, který bude napsaný přímo pro mikrokontrolér ATmega88. Volba použití čipu z rodiny 8 bitových AVR je velmi výhodnou nejen z hlediska návrhu konstrukce a hardwarové části, ale i z hlediska návrhu softwaru. Mikrokontroléry s jádrem AVR jsou totiž, dle vyjádření výrobce, jediné 8 bitové mikrokontroléry optimalizované pro programy napsané v jazyce C. Což je na druhou stranu mírně paradoxní vzhledem k faktu, že ATMEL sám kompilátor jazyka C nenabízí. Psaní programu pro MCU v jazyce C má oproti assembleru řadu výhod a prakticky žádné nevýhody. Mezi výhody uveďme : •
přehlednost a srozumitelnost kódu
•
možnosti snadného řízení programu – větvení, cyklů a funkcí
•
snadné a přehledné předávání parametrů funkcím
•
možnost využívání vyšších konstrukcí – struktury, pole, řetězce, datové proudy, ukazatele
•
možnost provádění bitových operací obdobně jako v assembleru
•
velikost zdrojových souborů dramaticky nevzroste oproti assembleru
Nevýhodou pak může být potřeba kvalitního kompilátoru jazyka C, který ne vždy výrobce MCU uvolní. V případě rodiny AVR však došlo k využití velmi kvalitního kompilátoru GCC, vyvíjeného původně jako svobodný software pro operační systémy šířené pod licencí GNU. Jeho kvality ho však předurčují k využití s řadou různých knihoven, dík kterým získává široké pole působnosti. Obecně je jazyk C poměrně vhodný pro podobné aplikace. Už svým zaměřením má blíže k hardwaru (či nižších programovacím jazykům) než jiné vyšší programovací jazyky. Tohoto se poté s výhodou využívá právě pro možnost psaní programů v C pro různé druhy MCU, kdy programátor poměrně přesně ví, že to co píše, bude překladačem přeloženo tak jak očekává. Nepochybnou výhodou pak pro programátora je, pokud má zkušenosti s psaním kódu v assembleru a psaní v jazyce C pro něj tudíž není jediným možným východiskem, ale pouze vítaným zjednodušením. Takto napsané programy v jazyce C totiž nejsou o mnoho rozdílné oproti stejnému napsanému v assembleru ani co do velikosti kódu, což je u MCU sledovaný parametr díky omezené paměti, ani co do výkonu.
Analýza a návrh řešení
26
Z výše uvedených příčin jsem se rozhodl ke psaní programu pro regulátor medometu v jazyce C. Především jednodušší psaní kódu a jeho čitelnost jsou hlavní devizy tohoto řešení. A díky kvalitnímu balíku AVR Libc pro psaní, překlad a ladění programů v jazyce C pro MCU s jádrem AVR, je toto řešení zároveň velmi efektivní bez jakýchkoliv záludností či neduhů.
3.3.1 AVR Libc – jazyk C pro procesory AVR Open source projekt AVR Libc[12] je balík nástrojů a knihoven, který umožňuje velmi komfortní vývoj programů pro AVR v jazyce C pro překlad v GCC. Vzhledem k tomu, že GCC bylo vyvinuto pro Unix platformu, existuje i projekt WinAVR[13], který nabízí knihovnu AVR Libc upravenou pro platformu MS Windows. Balík WinAVR navíc obsahuje řadu dalších open source nástrojů dostupných na UNIX platformě, vyvíjené společně s překladačem GCC, zde v úpravě pro MCU AVR a používání na platformě MS Windows. V balíku se mj. nachází open source ladící software AVR GNU Debugger (GDB). Ten nabízí velkou výhodu především při použití JTAG rozhraní pro ladění cílového zařízení, které zprostředkovává nástroj AVaRICE. Pro nahrávání přeloženého programu do MCU slouží oblíbený výše zmíněný AVRDude, jenž má podobně jako AVR GCC více platformních mutací. Velmi užitečnou součástí je také nástroj MFile pro snadnou tvorbu tzv. makefile, což jsou soubory obsahující příkaz pro spuštění a parametrizaci nějakého programu, v tomto případě se jedná o spouštění kompilátoru AVR GCC a předání všech parametrů pro spuštění. Tyto soubory, hojně využívané na platformě Unix, se v prostředí MS Windows prakticky nepoužívají, namísto nich se využívá GUI, v kterém uživatel případné parametry nastaví. Balík obsahuje také potřebné knihovny a hlavičkové soubory pro využití všech funkcí 8 bitových MCU s jádrem AVR. Definuje potřebné datové typy, odpovídající prostředí 8 bitových MCU, definuje názvy registrů i komponent. Umožňuje snadnou obsluhu přerušení, zápis do paměti EEPROM i FLASH. Tyto funkce běžně C neposkytuje, neboť je vyvinuto pro platformu Intel x86, která používá von Neumannovu architekturu, čili neumožňuje oddělení programu a dat. Zároveň obsluha přerušení na platformě x86 nepřísluší programátorovi. Z těchto důvodů je potřeba vytvořit nové funkce a makra, která zprostředkují tyto pro jazyk C netypické funkce a možnosti. Velkou výhodou zde je abstrakce, kdy stačí zavolat knihovní funkci a předat jí jako parametr např. data pro zápis do paměti a dále se není o nic třeba starat. V assembleru je potřeba provést nastavení konfiguračních i datových registrů pro zápis a poté ve smyčce čekat na dokončení zápisu. Tento přínos jazyka C a knihovny AVR Libc pro přehlednost a komfortní psaní programů je jednoznačně nejcitelnější. Nad rámec standardního jazyka C přidává knihovna AVR Libc ve spojení s GCC : •
obsluhu přerušení, rovněž přiřazuje vektorům přerušení symbolická jména pro snadnou orientaci a používání
•
uchovávání proměnných v paměti FLASH nebo EEPROM
•
zápis/čtení z těchto pamětí
•
možnost přiřazení proměnné natrvalo do některého z univerzálních registrů pro rychlejší přístup (standardní proměnné jazyka C jsou v paměti RAM na tzv. „haldě“)
•
na základě znalosti pracovní frekvence MCU knihovní funkce pro busy waiting na zadanou dobu (mili- nebo nano-sekundy)
•
rovněž přidává knihovní funkce pro snadné využití periferií jako např. komunikačního kanálu USART či SPI, A/D převodník apod.
Analýza implementace softwaru
27
Vlivem značné odlišnosti a specifikům jednočipových mikropočítačů od těch „standardních“ (standard IBM PC) je však poměrně velké množství funkcí v C zapovězeno. Přesto se knihovna AVR Libc snaží co nejméně omezovat využitelný rozsah knihovních funkcí standardního jazyka C, zprostředkovává proto programátorovi používat i konstrukce a funkce, jež by při programování MCU nečekal, např. datové proudy či soubory. Velice užitečná je možnost využití řetězců a struktur. Pro balík AVR Libc existují také další knihovny. Jednou z nich je i I2C Master Library od Petera Fleuryho[14]. Tato knihovna nabízí velice jednoduché rozhraní pro komunikaci po lince I2C, kdy MCU komunikuje jako jediné Master zařízení na sběrnici. Tuto knihovnu lze s výhodou využít pro snadnou komunikaci s I2C expandérem nebo jiným typickým zařízením typu Slave.
3.3.2 Výběr implementačního prostředí V případě mikrokontrolérů s jádrem AVR není výběr implementačních prostředí nijak oslnivý. Je to dáno především faktem, že Atmel nabízí zdarma velmi kvalitní a plně vybavený balík AVR Studio[4], což je integrované vývojové prostředí (IDE) pro psaní programů v assembleru obsahující navíc možnosti simulace, ladění a programování pomocí proprietálních zařízení od společnosti Atmel. Při nainstalování balíku AVR Libc či samotného kompilátoru AVR GCC umožní i AVR Studio psaní, kompilování a nahrávání programů v jazyce C. Dalším možným vývojovým prostředím je Eclipse[18], jedná se o open source prostředí, jehož cílem je integrovat do jednoho prostředí co nejvíce jazyků a technologií. Nabízí kvalitní a vyvíjející se prostředí pro vývoj programů v Javě, C/C++, PHP a dalších. Pro verzi vývojového prostředí pro C/C++, které využívá překladač GCC, pak existuje AVR Plugin for Eclipse[19] umožňující psaní programů pro mikrokontroléry s jádrem AVR. Z toho je zřejmé, že v Eclipse se dá psát program v jazyce C, nikoliv v assembleru. Díky tomuto pluginu je také možné využívat programování zařízení s MCU pomocí oblíbeného nástroje AVRDude (open source programovací software). Další možností psaní programů pro tyto MCU je psaní programu v textovém editoru. Využít se dá běžný Notepad obsažený v MS Windows, PSPad či libovolný jiný nástroj. Balík WinAVR obsahuje pro tyto účely Programmers Notepad, což je obdoba oblíbeného PSPadu. Zdrojový kód se pak přeloží v řádkovém kompilátoru (obvykle AVR GCC) a nahraje do cílového zařízení pomocí vhodného nástroje. Tento postup se obvykle používá pouze pro jazyk C, nicméně existuje i projekt pro open source překladače assembleru. Z nástrojů pro nahrání softwaru do MCU lze jmenovat již zmiňovaný AVRDude (má UNIX i Windows verzi), dále existují nástroje Khazama AVR Programmer, eXtreme Burner – AVR, oba jsou GUI nástroje pro snadné programování ve Windows. Pro jednoduché paralelní programování se také hojně využívá oblíbený nástroj PonyProg, který navíc umožňuje práci i s paměťmi EEPROM a rozhraními SPI a I2C.
28
Analýza a návrh řešení
3.3.3 Výběr programátoru Nezbytnou součástí pro vývoj a naprogramování nové aplikace pro MCU je programátor. Jedná se o zařízení, které umožní nahrání finálního přeloženého kódu v binární formě do paměti v MCU. Pro mikrokontroléry AVR existuje řada známých zapojení programátorů pro možnost jejich stavby v domácích podmínkách. Alternativou jsou vyráběné programátory především od společnosti Atmel, které však často nabízejí více funkcí než programátory vyrobené svépomocí. Především se jedná o možnosti ladění programu přímo v zapojení. Atmel zde využívá technologii ICE prostřednictvím rozhraní JTAG. Toto rozhraní zatím žádný z alternativních programátorů nezprostředkovává. Základním typem programátoru je firemní STK200. Tento programátor je však velmi snadné postavit i v domácích podmínkách pouhým propojením vývodů MCU s rozhraním LPT v PC. Jeho jednoduchost je velkou výhodou i nebezpečím, neboť rozhraní LPT je velmi náchylné na zničení vlivem přepětí, zkratů či statické elektřiny. Je tedy potřeba dbát správného zapojení a opatrné manipulace. Výhodou je všeobecná podpora tohoto typu programátoru ze strany všech aplikací sloužících k nahrávání programů do MCU. Nevýhodou, dnes již bohužel značnou, je samotné rozhraní LPT. V určitých operačních systémech je totiž obtížná jeho konfigurace a v nových počítačích se už nevyskytuje vůbec. Velmi oblíbené je spojení programátoru STK200 a software PonyProg pro nahrávání binárních souborů do MCU. Dalším typickým představitelem je rovněž výrobek Atmelu – STK500. Jedná se o programátor připojený prostřednictvím sériového rozhraní RS232. Existují jeho modifikace pro připojení pomocí USB s převodníkem na RS232. Výhodou je opět značná podpora, ať již ze strany Atmelu v AVR Studiu, či ze strany aplikací třetích stran. Nevýhodou tohoto programátoru je fakt, že pro překlad komunikace z RS232 na AVR ISP (pro nahrávání programů do paměti mikrokontrolérů AVR) se zde využívá MCU, které je potřeba při oživení naprogramovat. Je tedy potřeba ještě jeden programátor pro prvotní nahrání firmwaru. Obdobným řešením jako STK500 disponuje i nefiremní programátor AVR Prog. Ten zachovává přednosti i nevýhody STK500. Velice sofistikovaným řešením od Atmelu je poté deska AVR Dragon. Tato vývojová deska kombinovaná s programátorem umožňuje využívat všech výhod a předností AVR. Nabízí možnost ladění jak prostřednictvím JTAG, tak prostřednictvím proprietárního ladícího jednovodičového rozhraní DebugWIRE. Zároveň umožňuje ISP, sériové i paralelní programování. K počítači se připojuje prostřednictvím USB rozhraní. Jedním z nejmodernějších a nejpokrokovějších alternativních programátorů, jež je možné si vyrobit v domácích podmínkách je programátor USBasp[11], umožnující programování mikrokontrolérů s jádry AVR, který se k PC připojuje pomocí moderního USB portu. Velkou výhodou tohoto USB programátoru je využití USB převodníku nevyžadujícího dodatečný ovladač, čili k postavení a oživení tohoto programátoru není potřeba dalšího programátoru pro prvotní naprogramování osazeného MCU, který zajišťuje komunikaci mezi cílovým (programovaným) zařízením a PC. Zároveň je výhodou, že všechny výše uvedené programy pro nahrávání softwaru do MCU tento programátor podporují. Naopak není podporován ze strany AVR Studia.
Analýza implementace softwaru
29
Obrázek 3.3.1: Jedna z variant programátoru USBasp, zdroj: www.fischl.de/usbasp/
Další možností je využití zapojení SI Prog. Toto zapojení je vytvořeno speciálně pro použití se softwarem PonyProg. Existuje řada adaptérů k základnímu zapojení, které využivá RS232 pro připojení k PC, pro programování MCU Atmel s jádry AVR a x51 a konkurenčních Microchip PIC. Zároveň ho lze využít jako programátor pamětí EEPROM připojených sběrnicemi I2C, Microwire nebo sériovou linkou SPI.
3.3.4 Použité nástroje a prostředí Po vyzkoušení všech výše uvedených možností psaní a překladu programu jsem zvolil psaní v Programmers Notepadu a PSPadu (obsahují zvýrazňování syntaxe různých jazyků, pracují s formáty textových souborů pro platformy MS DOS/Windows, UNIX i MAC) a překlad v AVR Studiu (zde se uplatňuje výhoda IDE, kdy se jedním klikem dá program přeložit i nahrát do koncového zařízení). Jako programátoru jsem zvolil zařízení USBasp[11] vzhledem k jeho dostupnosti a velmi chytrému řešení, které nevyžaduje prvotní nahrání firmwaru prostřednictvím dalšího programátoru. Zároveň disponuje z hlediska provozu bezproblémovým rozhraním USB. Touto volbou jsem se však připravil o možnost využít k nahrávání programů do MCU přímo AVR Studia. Proto jsem pro nahrávání programu do MCU (ať již testovací nebo finální desky ) zvolil Khazama AVR Programmer[16] disponující velmi intuitivním ovládáním a přívětivým uživatelským rozhraním. Schéma zapojení a návrh DPS byly vytvořeny v programu CadSoft Eagle 5.8.0 Light edition[15]. Tudíž schémata zapojení i DPS umístěná na přiloženém CD jsou ve formátu tohoto programu. Výhodou jeho použití je kvalita a především dostupnost, pro menší a maximálně dvouvrstvé DPS je k dispozici zdarma i s velkou knihovnou součástek a jejich pouzder.
30
Analýza a návrh řešení
Kapitola 4
Realizace Popis samotné realizace je rozdělen do třech částí, jedna se věnuje fyzické podobě desky plošných spojů, druhá se zaměřuje na softwarovou implementaci. Zvlášť je vyčleněna sekce zabývající se funkcí regulátoru a jeho funkčními stavy.
4.1 Hardwarová část Návrh desky plošných spojů vycházel především ze snahy o dodržení zvoleného schématu ovládání. Rovněž zde vystupovaly faktory jako snaha o maximální ochranu proti rušení. Finální podoba je deska s oboustranným tištěným spojem. Vzhledem k potřebě zabudování do panelu jsou všechny vyšší součástky namontovány nikoliv ze strany spojů, ale ze strany součástek. Jedná se o svorkovnice pro připojení napájení a výstupů. Taktéž je z druhé strany proveden napětí regulátor řady 7805 v pouzdru D2PAK. Zcela samozřejmou je montáž potenciometrů na spodní stranu desky. Panel tedy bude moct být posazen nízko nad DPS a tím bude minimálně dotčena viditelnost diod pod různými úhly. Potenciometry jsou matkami přitažené k DPS, vývody jsou připojeny propojovacími vodiči. Pro ovládání obvodu jsou na DPS osazeny tlačítka a signalizační LED. Při pohledu na DPS ze vrchní strany (tj. strany povrchové montáže součástek) se v horní levé části nachází řada 11 LED, které uživateli signalizují právě prováděný/zaznamenávaný krok sekvence. Vpravo jsou u výstupní svorkovnice osazeny LED signalizující aktivitu jednotlivých výstupních signálů. U tlačítek uživatelských předvoleb v dolní pravé části se nacházejí LED signalizující vybranou předvolbu pro provádění. Vlevo od tlačítek předvoleb se nachází červená dioda signalizující ukončení záznamu sekvence a možnost uložení do předvoleb. Nad tlačítky předvoleb, vlevo od tlačítka ZÁZNAM se nachází zelená signalizační dioda. Její svit informuje uživatele o tom, že obvod právě provádí/zaznamenává sekvenci. Tato dioda nesvítí pokud obvod přejde do manuálního řízení režimu provádění či pokud skončí provádění či záznam nové sekvence. Z hlediska vstupů ovládání obsahuje DPS na pravé straně ovládací tlačítka ZÁZNAM, START a DALŠÍ, kterými se řídí běh programu a procházení sekvencí a funkčních stavů. Pod nimi je řada 4 tlačítek PS1-4, která slouží k uložení/načtení uživatelské předvolby. Nalevo od nich se nacházejí potenciometry pro nastavení parametrů PWM pro stavy „S“ a „M“. Zhruba uprostřed desky se poté nachází tlačítko RESET, které provede restart celého obvodu. Pro externí připojení bylo využito standardních šroubovacích svorkovnic do DPS pro připojení kablíků. Tato svorkovnice ve dvoupinovém provedení je na levé straně DPS (při pohledu shora, tedy ze strany spojů) a má na starosti přivádění napájecího napětí +12V a ukostření. Na pravé straně DPS poté je 6 pinová svorkovnice, která zajišťuje připojení výstupů regulátoru na výkonovou část medometu. Nahoře se poté nachází 2 řadový 6 pinový 31
Realizace
32
konektor pro rozhraní ISP, pomocí kterého se do regulátoru programuje nový software. Zapojení tohoto konektoru je standardní dle doporučení Atmelu[8]. Zde je třeba poznamenat, že při pohledu shora je zapojení konektoru prohozené neboť konektor je také vyveden na spodní stranu DPS. Standardní zapojení je tedy při pohledu zdola(na spodní stranu DPS), kdy pin 1 z obrázku je levý spodní pin konektoru na DPS.
Obrázek 4.1.1: Doporučené zapojení konektoru pro AVR ISP Jak již bylo napsáno, řídící výstupy regulátoru jsou vyvedeny na 6 pinovou svorkovnici. Je zde tedy zachováno všech 6 řídících signálů ze zadání a tabulky spínání. Ve skutečnosti tato tabulka odpovídá stavu, kdy by se PWM řídila externími časovacími obvody. Povely /S a /M poté slouží k aktivaci příslušného časovače s tím, že výstupní PWM signál je společný pro oba povely (rozdíl je tedy pouze v nastavení parametrů PWM) a ovládá spínací tranzistor. Vzhledem k faktu, že nový regulátor provádí i řízení PWM, nebylo by nutné vyvádět oba signály, ale stačil by jeden signál, který by přímo ovládal spínací tranzistor ve výkonové části. Pro zachování zpětné kompatibility, či pro možnost případného využití externích časovacích obvodů, však byly zachovány výstupy pro všechny signály. Základním stavem je, že regulátor sám provádění řízení PWM a výstupní signál se objevuje na výstupu signálu /S. Výstup signálu /M je v tomto případě nezapojený. V případě potřeby využití externích časovacích obvodů pro řízení PWM je nutné propojit na DPS propojku PWM_OFF (deaktivace čítače/časovače Timer0, který se stará o řízení PWM) a připojit standardně výstupní signály /S i /M. V případě návratu k internímu řízení PWM je nutné opět propojku PWM_OFF rozpojit a následně připojit řídící vstup spínače výkonové části na výstup /S. Kvůli použití velkého množství signalizačních LED bylo nutné využití I/O expandéru, v tomto případě pro sběrnici I2C. Tato sběrnice ani sám expandér nevyžadují žádné speciální připojení. K MCU vedou 2 vodiče SLC a SDA sběrnice I2C (pomocí tzv. „pull-up“ rezistorů jsou připojeny na napájecí napětí +5V) a expandér má propojený pin RESET s MCU, ten je zapojen na tlačítko RESET ve střední části DPS, umožňující v případě nestandardního chování obvodu jeho tvrdý reset do výchozího stavu. Umístění expandéru respektuje snahu o to, aby délka vodičů sběrnice k MCU byla co nejkratší a pokud možno ještě byly obklopeny zemními vodiči GND či rozlitou mědí. Rovněž ze spodní strany DPS je maximum plochy pokryto rozlitou mědí pro zlepšení odolnosti vůči EMI. Následuje schéma DPS pro přehlednost bez ploch rozlité mědi. Červenou barvou jsou provedeny spoje horní strany DPS (tedy strany povrchové montáže), modrou poté spoje na druhé, spodní, straně DPS. Více schémat včetně schématu zapojení, osazovacího plánku a masek pro spodní i horní stranu DPS, se nachází v Dodatku B.
Hardwarová část
33
Obrázek 4.1.2: Schéma oboustranné DPS bez rozlité mědi
4.2 Realizace softwarové části Softwarová část tvořila hlavní část vývoje nového regulátoru. Obslužný program byl psán s ohledem na snadnou obsluhu i očekávanou funkčnost. Díky zvolení programovacího jazyka C je pak kód velmi dobře čitelný a v případě potřeby relativně jednoduše modifikovatelný. Kompletní zdrojové kódy z důvodu jejich velikosti budou přiloženy pouze na CD. Rovněž se zde nachází makefile pro přeložení všech souborů do strojového kódu pro nahrání do mikropočítače. Případné nástroje pro překlad jsou volně dostupné na Internetu.
4.2.1 Funkce vstupu/výstupu Samotná softwarová realizace je poměrně jednoduchá. Veškerá obsluha a ovládání se řeší na základě událostí – pomocí obsluhy přerušení od tlačítkových vstupů. Tlačítka DALŠÍ a ZÁZNAM používají piny INT0 a INT1 pro přivedení zdrojů externího přerušení na MCU. Tlačítka START a PSn sdílejí společnou I/O bránu, která však umožňuje maskování přerušení a jeho individuální povolení či zakázání pro každý pin zvlášť. Rozpoznání který vstup přerušení vyvolal je však už na programátorovi pomocí přečtení záchytného registru příslušného portu. Všechna tlačítka používají nastavení příslušného I/O pinu brány jako vstupu s aktivním pull-up rezistorem udržujícím pin v logické „1“. Stiskem tlačítka se poté
Realizace
34
pin ukostří, čímž dojde ke změně jeho stavu na logickou „0“. Tlačítka jsou tedy aktivní v logické „0“. Stejně tak LED jsou připojeny inverzní logikou (katodou na I/O bránu, anodou na napájení) tak, že svítí, pokud je na příslušném I/O pinu logická „0“. Ovládání signalizace programu mají na starosti 2 funkce – setLED() a resetLED() sloužící k rozsvěcení a zhasnutí LED. O které LED se jedná se předává funkcím parametrem prostřednictvím symbolických jmen, kdy je možné jedním voláním ovládat více LED. Například volání : setLED (STATE_LED | PRESET_LED);
umožňuje rozsvícení LED příslušející aktuálně prováděnému kroku sekvence a zároveň rozsvícení LED pro aktuálně vybranou předvolbu. Vzhledem k faktu, že většina LED je připojena přes I/O expandér, jsou také tyto 2 funkce jediné způsobilé ke komunikaci s expandérem. Prvotní inicializace spojení proběhne po startu zařízení, ale veškerou další komunikaci už vedou pouze funkce pro obsluhu LED.
4.2.2 Komunikace s expandérem přes I2C Zajímavou kapitolou je komunikace s expandérem od společnosti Microchip MCP23017 pro sběrnici I2C (vyrábí se i verze pro SPI). Tento expandér nabízí díky rozměrnému poli registrů nejrůznější možnosti konfigurace I/O portů, ovládání přerušení, komunikace a dalších věcí. Pro jeho funkci v této aplikaci, čili v podstatě řadiče pro LED, jsou tyto funkce nepotřebné, nicméně přesto je potřeba při inicializaci spojení nastavit příslušné registry, aby zařízení správně komunikovalo. Přehledné znázornění komunikačního protokolu je dostupné v datasheetu od Microchipu :
Obrázek 4.2.1: Formát inicializačního bytu spojení
Realizace softwarové části
35
Obrázek 4.2.2: Způsob adresace registrů expandéru pro možnost jejich konfigurace, stejně se zapisuje do výstupních registrů Jde zde především o fakt, že je nutné několikrát znovu startovat komunikaci, neboť adresu registru pro zápis si lze zvolit pouze v prvním paketu komunikace. Z tohoto důvodu a z důvodu nutného nastavení několika konfiguračních registrů při každém spuštění, je inicializace spojení poněkud náročnější než u některých konkurenčních výrobků, které nenabízejí takové možnosti využití. Výhodou jsou integrované adresní režimy, které umožňují zapisovat do expandéru data s tím, že v něm dochází k automatické inkrementaci adresy registru, do kterého se bude zapisovat. A to buď přes celé registrové pole, anebo pouze do registrů výstupních portů A a B, které se potom neustále střídají. Alternativou k tomuto je manuální adresování, které však vyžaduje vždy nové navázání spojení pro vyslání adresy registru, do kterého se bude zapisovat.
36
Realizace
Obrázek 4.2.3: Schéma komunikačního protokolu
Z výše uvedených důvodů je v této práci použito přístupu, že data jsou na expandér vysílána pouze v případě, že došlo ke změně na jeho výstupech (stavy výstupu posílaných na expandér si MCU pamatuje v lokálních proměnných). V takovém případě se pak využívá režimu neustálého zápisu do I/O registrů portů A a B.
Realizace softwarové části
37
4.2.3 Funkce času Dalšími událostmi na které MCU reaguje jsou přerušení vyvolaná čítači/časovači. Tyto obvody řídí důležité funkce jako je měření času pro jednotlivé kroky sekvence a to jak záznam tohoto času při záznamu sekvence, tak jeho odměřování při provádění. Tuto hlavní práci s časem obstarává modul čítače/časovače 1 a to proto, že je jediným 16 bitovým čítačem/časovačem v MCU Atmel ATmega88. Základní takt těchto kontrolérů je z výroby nastaven na 8 MHz, přičemž základní dělička kmitočtu, nastavená z výroby, dělí tuto frekvenci poměrem 1:8. Tudíž tento MCU poté pracuje na frekvenci 1 MHz. Pro odečítání délky jednotlivých kroků byla stavená dostatečná přesnost na jednu vteřinu. Z tohoto důvodu se velmi hodí předdělička pro modul čítače/časovače, která umožňuje dělit frekvenci jádra poměrem 1:1024. Tím se dostáváme na rozlišovací schopnost čítače/časovače cca 1 ms. Pro čítání jedné sekundy je zde využitý klasický přístup, kdy při přerušení čítače/časovače je inkrementována proměnná zaznamenávající počet minimálních časových jednotek. Zde je touto jednotkou jedna sekunda, z čehož plyne, že čítač musí načítat do hodnoty zhruba 1000 taktů (1000 ms), přesně se jedná o 977 taktů kvůli binárnímu, nikoliv dekadickému, předdělení. Vzhledem k potřebě uchovávat čísla do zhruba 1000 muselo být využito 16 bitového čítače, protože u 8 bitového by se muselo pro čítání použít vnitřních a vnějších cyklů, neboť jak známo 8 bitový registr je schopen uložit max. hodnotu 255. Nicméně oba dva 8 bitové čítače/časovače, které ATmega88 nabízí jsou využité. Čítač/časovač 2 zajišťuje ochranou prodlevu po stisku libovolného tlačítka, během níž toto tlačítko nereaguje na další stisky. Je to ochrana jak proti zákmitům tlačítek vinou konstrukce, tak vlivem nechtěného opakovaného stisknutí. Tato doba je nastavena na čítací maximum 8 bitového čítače, čili na 255 taktů, v tomto případě 255 ms, což je doba ideální, neboť stačí k bezpečnému odeznění zákmitů a zároveň nehrozí, že by uživatel během tak krátké doby chtěl tlačítko použít znovu a nemohl vlivem příliš dlouhého ochranného intervalu. Čítač/časovač 0 má na starosti řízení pulzně-šířkové modulace pro výstupní signály S a M. Je zde využito tzv. režimu „Fast-PWM“ umožňujícího dosahovat vysokých frekvencí pro spínání stejnosměrných motorů. Obvod sám podle aktuálně prováděného kroku sekvence vyhodnotí, zda má použít nastavení pro výstup z PWM pro povel „SNÍŽENÁ RYCHLOST“ či „MAXIMÁLNÍ RYCHLOST“. Podle toho poté používá integrovaný AD převodník k převedení hodnoty odporu nastaveného na příslušném ovládacím potenciometru POT_S či POT_M. Tato hodnota nastavení potenciometru se poté využívá k řízení střídy na výstupu PWM. Regulační rozsahy jsou : •
pro povel S : střída 0,25 – 0,75
•
pro povel M : střída 0,5 – 1
Této regulace se dosahuje prostřednictvím vydělení navzorkované hodnoty z AD převodníku vhodnou konstantou a jejím následným přičtením k minimální regulační hodnotě pro každý z povelů. Tím je zajištěna regulace v patřičných mezích. U obou povelů probíhá regulace v absolutním rozsahu střídy 0-0,5, rozdíl je pouze v posunutí této regulace o dané minimum – pro povel S o 0,25 a u povelu M o 0,5. Výstupní signál PWM pracuje na frekvenci přibližně 200 Hz. Pro důležitou funkci zpoždění deaktivace signálu brzdy se využívá knihovní funkce, nabízené v rámci AVR GCC. Jedná se o funkci _delay_ms(), která zajišťuje zpoždění pomocí busy-waitingu. Zadané zpoždění v ms se předává parametrem. Má prototyp : void _delay_ms
(
double
__ms
)
Realizace
38
4.2.4 Ukládání a práce s pamětí Poměrně náročným v této práci bylo vyřešení a implementování způsobu ukládání sekvencí na předvolené pozice pro jejích trvalé uložení. Velkou výhodou se zde stalo použití jazyka C s jeho mocným aparátem pro práci s ukazateli a zároveň využití balíku AVR GCC, díky němuž a jeho makrům, je v prostředí jazyka C, který jinak je zcela koncipován na von Neumannovu architekturu, velmi snadné používat oddělené paměťové prostory RAM, EEPROM a FLASH pamětí. Pouze si člověk musí dát pozor na fakt, že zatímco se základními datovými typy je manipulace velmi snadná, při použití polí a ukazatelů již jsou vyžadovány složitější postupy čtení a zápisu do paměti pomocí metod. V rámci této práce funguje načítání, ukládání a automatické načítání poslední volby při startu následovně : V paměti EEPROM jsou definovány 4 vektory, pro každou z předvoleb jeden. Zároveň jsou v paměti EEPROM uloženy proměnné : •
presetLAST,
což je 16 bitová adresa naposledy použité předvolby
•
lastPRESET_PTR,
•
usedPRESET_PTR,
což je 8 bitové pořadové číslo naposledy použité předvolby, používá se k indikaci LED a zároveň pro ověření, zda opravdu byla nějaká sekvence již prováděna což je 8 bitový příznak udávající, které předvolené pozice již byly naplněny sekvencemi, aby se zabránilo možnosti vybrání si a pokusu o provedení prázdné (neinicializované) sekvence
V programu jsou poté lokální proměnné, do kterých se výše uvedené non volatilní proměnné načtou pro rychlejší přístup k nim. V případě, že je požadavek na provádění sekvence z paměti, načte se do vektoru v RAM vybraný vektor z EEPROM a provede se. Rovněž při záznamu se zaznamenávají data do pracovního vektoru v RAM, který se po pokynu uživatele uloží na zvolenou pozici. Program dále ještě obsahuje konstantní pole výstupních stavů pro každý krok sekvence. Tyto stavy se vždy při přechodu na další krok nastaví na příslušnou výstupní I/O bránu. Při tomto nastavení se kontroluje, zda se jedná o rozběhový stav. Pokud ano dojde ke zpožděné deaktivaci brzdy pro zamezení spálení motoru či relátek rychlým překlopením směru otáčení motoru. Brzda se z bezpečnostních důvodů zpožďuje o 100 ms. Toto zpoždění se realizuje knihovní funkcí pomocí busy-waitingu díky obsazenosti všech integrovaných čítačů/časovačů mikropočítače.
Kapitola 5
Testování Původní záměr jak testovat nový obvod regulátoru sestával z dílčích testů jednotlivých funkčních bloků a komponent na testovacím (vývojovém) obvodu s následným otestováním celého obvodu jako celku v laboratorních podmínkách. Po důsledném otestování by pak došlo k ostrému testu přímo v medometu. Z tohoto důvodu by bylo vhodné vyrobení dvou vzorků, jeden by po otestování zůstal součástí medometu a druhý by sloužil pro potřeby obhajoby bakalářské práce. Během vývoje se však ukázalo, že složitost obvodu a DPS by toto řešení velmi prodražila. Z tohoto důvodu byla zvolena varianta výroby jednoho funkčního vzorku. Bohužel toto řešení bylo poněkud náročnější kvůli potřebě otestování v ostrém provozu a následném rozebrání a vyjmutí regulátoru pro potřeby obhajoby. Nakonec se však výroba regulátoru opozdila vlivem zdržení způsobených především čekáním na nedostatkové I/O expandéry a problémy při vytváření podkladů pro výrobu DPS . Toto zdržení způsobilo, že nebylo možné otestovat regulátor jako celek v ostrém provozu. Velmi nepříjemné také bylo, že program nakonec zabírá zhruba dvakrát více paměti, než se čekalo, čili nemohl být využit již připravený mikropočítač ATmega48, ale musela být sehnána jeho vybavenější verze Atmega88, která disponuje již dostatečnými 8kB paměti FLASH. První fáze testování probíhala formou testování dílčích úloh pomocí podomácku vyrobeného programátoru USBasp. K němu byl umístěn jeden MCU ATmega48 se 4 tlačítky a 4 LED pro testování jednoduchých dílčích úloh. Takto byly otestovány funkce tlačítek a reakcí na ně. Otestovány byly také funkce pro ovládání čítačů/časovačů a obslužné rutiny pro přerušení. Důležitou částí bylo otestování funkčnosti ukládání předvoleb, jejich načítání a pamatování si posledně použité předvolby. Během testování byly opraveny některé chyby. Jednalo se například o zprvu špatně naprogramované manuální mazání příznaků přerušení od různých zdrojů. Ne zcela funkční také bylo pamatování si posledně použité předvolby po startu regulátoru. Zde byl problém s výchozí hodnotou ukazatele do paměti. Standardně se za validní ukazatel považuje ten, který nemá hodnotu nula. V případě ukazatele do EEPROM paměti však může dojít k situaci, kdy validní ukazatel ukazuje na adresu nula. Z tohoto důvodu byla změněna nedefinovaná hodnota ukazatele na 0xFFh. Dílčí testování je výhodné díky jednoduchosti testované úlohy a z ní plynoucí také snadné čitelnosti výstupů a stavů v kterých se MCU nachází. Na druhou stranu nevýhodou je, že je zpravidla nutné upravovat funkce z hlavního programu pro jejich dílčí testování, což může způsobit zakrytí některých chyb. Z tohoto důvody je tedy nezbytné otestovat celý regulátor po sestavení. Nejdříve mimo zařízení pro zajištění bezpečností a snadné dostupnosti oprav v případě nalezení chyb. Poté je potřeba provedení funkčních testů na skutečném zařízení. Tyto testy v reálných podmínkách, jak již bylo zmíněno, nebyly provedeny z nedostatku času. Nicméně regulátor jako celek byl podroben základnímu testu funkčnosti alespoň mimo zařízení.
39
40
Testování
Toto testování probíhalo formou vyzkoušení možných scénářů uživatelského použití. Zkoušelo se tedy vytvořit novou sekvenci, uložit ji nebo naopak neukládat a zaznamenat novou. Načíst uloženou sekvenci z paměti. Odolnost programu proti nesprávným vstupům jako např. pokus o načtení doposud neuložené sekvence či stisknutí tlačítka ve funkčním režimu, v němž toto tlačítko nemá přiřazenou žádnou explicitní funkci. Rovněž reakce na stisk tlačítka RESET v různých režimech byla podrobena testu pro zjištění, zda nehrozí riziko poškození výkonové části medometu v případě nedeterministického nastavení výstupů. na než jsou připojeny řídící vstupy výkonové části. Testování kompletního regulátoru je poměrně náročná záležitost, především kvůli potřebě záznamu nové sekvence pro postupné ukládání. Zkoušení maximálních délek jednotlivých kroků je pak poměrně časově náročné. Výhodou by zde bylo využití ladícího rozhraní jako je JTAG nebo DebugWIRE, bohužel tyto proprietární rozhraní jsou dostupná pouze na originálních programátorech a vývojových deskách Atmelu za nemalé peníze. Bylo tedy nutné si vystačit pouze se signalizací obvodu o prováděném kroku, nastavení výstupů a aktuálním stavu (Záznam / Výchozí / Provádění). Za těchto podmínek byl regulátor úspěšně otestován a je tedy možné provést finální test přímo v reálném zařízení, kde se uplatní různé vlivy a především EMI, které nelze rozumně odsimulovat v laboratorních podmínkách mimo zařízení. Nicméně případné zvýšení mechanické odolnosti či konstrukční vylepšení pro potlačení vlivu EMI jsou záležitostí hardwarového návrhu a tudíž by tyto změny neměly nijak postihnout obslužný software.
Kapitola 6
Závěr Zadáním a cílem této práce bylo vyrobit nový programovatelný modul regulátoru stejnosměrného elektromotoru za použití mikropočítače. Tento hlavní úkol byl splněn bezezbytku. S využitím 8 bitového mikropočítače se podařilo vyrobit funkčně velice povedený obvod, který zachovává zpětnou kompatibilitu se stávajícím obvodem, přitom ale nabízí pokročilé funkce pro usnadnění a zkvalitnění uživatelské obsluhy. Velkým přínosem je možnost záznamu nové sekvence a jejího uložení pro pozdější využití, namísto jedné fixní sekvence, byť manuálně doladitelné během provádění, v původním obvodu regulátoru. Navíc nový obvod umožňuje uložení až 4 sekvencí do předvoleb pro jejich pozdější snadné vyvolání a provedení. Pro zachování možnosti manuálního doladění sekvence během provádění, jak nabízí původní modul regulátoru, je implementována možnost přerušení automatického provádění zaznamenané sekvence a jejího opětovného spuštění, kdy je navíc možnost manuálně procházet libovolný počet kroků sekvence a v případě reaktivace automatického provádění obvod bude pokračovat vždy dalším krokem od aktuálně nastaveného. Zároveň obvod po opuštění posledního kroku sekvence ukončí režim provádění a neumožní tím například manuální procházení sekvence do nekonečna. Obvod zároveň vykonává funkce, které mají zvýšit bezpečnost a bezproblémovost zařízení a vyloučit jakékoliv neočekávané či nestabilní stavy. Mezi tyto užitečné funkce patří deaktivace tlačítka po jeho stisku na zhruba 200 ms zabraňující nechtěnému několikanásobnému stisknutí. Další významnou funkcí je zpoždění deaktivace signálu pro zabrzdění při rozběhu motoru. Tato funkce chrání spínací a regulační prvky výkonové části medometu, aby nemohlo dojít k jejich zničení v případě, že by se nacházely v nestabilním stavu ve chvíli, kdy by byl motor spuštěn a tudíž by jimi prošla proudová špička. Zároveň obvod integruje, nad rámec daný původním zadáním, řízení otáček elektromotoru pomocí pulzně-šířkové regulace přímo, namísto pouhého řízení externích časovacích obvodů, jako se děje v případě původního regulátoru. Nicméně pro zachování zpětné kompatibility je zde možnost obojího využití, kdy stačí k deaktivace přímého řízení PWM připojit jinak nezapojený výstup signálu /M a spojit propojku PWM_OFF. V případě přímého řízení se pulzně-šířková modulace ovládá prostřednictvím dvou potenciometrů. Jedním se nastavuje PWM pro stavy s aktivním signálem /S a druhým PWM pro stavy s aktivním signálem /M. Každý signál má vlastní regulační rozsah a procesor umístí na výstup PWM signál odpovídající aktuálně prováděnému stavu sekvence. Z celkového pohledu tedy je nový obvod regulátoru významným evolučním krokem oproti původnímu regulátoru. Jeho univerzálnost a možnosti použití navíc umocňuje možnost implementace nových funkcí či zlepšení stávajících na základě provozních zkušeností. Toho je dosaženo použitím 8 bitového mikropočítače jako řídícího prvku regulátoru, toto řešení umožňuje aktualizace a změny softwaru, na rozdíl od původního elektronického obvodu regulátoru, který mohl měnit funkčnost pouze změnou zapojení. Nový obvod regulátoru tedy 41
42
Závěr
umožňuje velmi variabilní a flexibilní způsob ovládání stávajícího medometu. Tím došlo k významnému vzrůstu užitné hodnoty při minimalizaci ceny. Vzhledem k cenám nových medometů které se u elektrických přístrojů pohybují v mezích cca 15-60 000 Kč přičemž přístroje schopné práce na 12V patří k těm dražším a pouze nejdražší modely umožňují automatický režim vytáčení medu obdobné funkčnosti jako nabízí regulátor, jež je předmětem této práce, je zřejmé, že cenová úspora je zde oproti nově zakoupeném medometu opravdu značná. Pouhou změnou regulátoru je možné posunout toto zařízení kvalitativně o třídu výš na úroveň profesionálních výrobků. Přičemž v jistých ohledech je řešení funkce regulátoru medometu prezentované v této práci na vyšší úrovni než v zakoupených drahých přístrojích. I přes významný posun v kvalitě a funkčnosti má nový regulátor stále slabá místa. Především je to nutné spolehnutí se na uživatele, že zaznamená sekvenci korektně a tím vyloučí možnost, že by se ne zcela zabrzděný motor mohl přepnout na otáčení opačným směrem, což by mělo fatální následky. Do budoucna by obvod medometu jako celku proto mohl být v zájmu dalšího zvýšení bezpečnosti a odolnosti vylepšen. Výše popsaný problém by se dal vyřešit instalací snímače otáček elektromotoru, který by informoval řídící procesor v regulátoru o tom, zda se motor ještě dotáčí, či již stojí a je tedy možné změnit směr jeho otáčení. Dalším možným vylepšením by mohlo být využití vícekvadrantového řízení PWM pro zajištění spolehlivého dynamického brzdění elektromotoru či pro možnost využití rekuperace. Vzhledem k faktu, že je zařízení koncipováno jako mobilní a napájeno z 12V akumulátorů, mohla by tato možnost být zajímavou inovací. Ovšem vyžadovalo by to zřejmě podstatně komplexnější změnu. Musely by například přibýt obvody hlídající nabíjení akumulátorů. Velmi zajímavou možností by také byla možnost plně automatického běhu medometu, kdy by pomocí váhových senzorů sledoval vytáčení medu z pláství jako změnu hmotnosti během otáčení a podle toho by sám reguloval otáčky i řídil směr otáčení. Tato úloha by již však byla velmi náročnou na vývoj a celkově naladění optimálního nastavení pro všechny provozní situace.
Literatura [1]
Amatérské rádio, řady A a B
[2]
Rozehnal, Z.: Mikrokontroléry Motorola HC11, BEN – technická literatura, 2002, ISBN 80-86056-77-5
[3]
Mann, B.: C pro mikrokontroléry, BEN – technická literatura, 2002, ISBN 80-7300-077-6
[4]
oficiální stránky společnosti Atmel www.atmel.com , stav k 5.6.2010
[5]
oficiální stránky společnosti Freescale www.freescale.com , stav k 5.6.2010
[6]
oficiální stránky společnosti Intel www.intel.com , stav k 1.6.2010
[7]
oficiální stránky společnosti Microchip www.microchip.com , stav k 5.6.2010
[8]
Atmel : AVR: In-System Programming, Rev. 0943E–AVR–08/08 www.atmel.com/atmel/acrobat/doc0943.pdf, stav k 11.4.2010
[9]
Atmel : Atmega48/88/168 datasheet, Rev. 2545R–AVR–07/09 http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf , stav k 11.4.2010
[10]
Freescale : Data Sheet MC9S08GB60/D, Rev. 2.3, 12/2004 http://www.freescale.com/files/microcontrollers/doc/data_sheet/MC9S08GB60.pdf stav k 11.3.2010
43
Literatura
44 [11]
Thomas Fischl : USBasp - USB programmer for Atmel AVR controllers http://www.fischl.de/usbasp/, stav k 1.6.2010
[12]
oficiální stránky projektu AVR Libc http://www.nongnu.org/avr-libc/, stav k 1.6.2010
[13]
oficiální stránky projektu WinAVR http://winavr.sourceforge.net/, stav k 1.6.2010
[14]
Peter Fleury : I2C Master library http://jump.to/fleury
[15]
oficiální stránky společnosti CadSoft http://www.cadsoft.de, stav k 5.6.2010
[16]
oficiální stránky projektu Khazama AVR Programmer http://www.khazama.com/project/programmer/, stav k 1.6.2010
[17]
Microchip : MCP23017/MCP23S17 Data Sheet http://ww1.microchip.com/downloads/en/DeviceDoc/21952b.pdf , stav k 14.4.2010
[18]
oficiální stránky projektu Eclipse.org Home http://www.eclipse.org/ , stav k 14.5.2010
[19]
oficiální stránky projektu The AVR Eclipse Plugin http://avr-eclipse.sourceforge.net ,stav k 14.5.2010
[20]
R. Lórencz : přednášky předmětu X36APS https://service.felk.cvut.cz/courses/X36APS/ ,stav k 10.3.2010
Dodatek A
Seznam použitých zkratek CISC
Complex Instruction Set Computer
DBG DIL
On-Chip Debug System Dual In Line-package
DPS (PCB) deska plošných spojů (Printed Circuit Board) EEPROM
Electrically-Erasable Programmable Read-Only Memory
EMI GUI HW
Electromagnetic Interference Graphic User Interface Hardware
I2C
Inter-Integrated Circuit
ICE ISP
In-circuit Emulator In-System Programming
JTAG LED
Joint Test Action Group Light-Emitting Diode
LPT MCU
Line Print Terminal Microcontroller Unit
MIPS PC
Million Instructions Per Second Program Counter
PWM QFN
Pulse-Width Modulation Quad Flat No Leads
RISC SO,SOIC
Reduced Instruction Set Computer Small-Outline Integrated Circuit
SPI SRAM
Serial Peripheral Interface Bus Static Random Access Memory
SSOP SW
Shrink Small-Outline Package Software
45
46
Seznam použitých zkratek
Dodatek B
Schémata zapojení a DPS
Obrázek B.1: Schéma zapojení regulátoru
47
48
Schémata zapojení a DPS
Obrázek B.2: Oboustranná DPS, červená vrstva značí horní stranu, modrá spodní
Schémata zapojení a DPS
Obrázek B.3: Horní strana DPS (strana povrchové montáže)
Obrázek B.4: Spodní strana DPS s rozlitou mědí pro lepší odrušení
49
50
Schémata zapojení a DPS
Obrázek B.5: Osazovací schéma
Dodatek C
Stručná uživatelská příručka Obvod v zásadě pracuje ve 3 stavech. Pro všechny stavy platí, že tlačítka, které v daném stavu nemají přiřazenou žádnou funkci, jsou neaktivní pro zabránění neočekávanému chování obvodu. a) Výchozí stav (po (re)startu zařízení) – v tomto stavu se obvod pokusí načíst posledně použitou sekvenci (uloženou či provedenou), pokud doposud žádná nebyla uložena nedovolí spustit provádění, a čeká na povel uživatele. Uživatel může stiskem tlačítka START přejít na vykonávání naposledy použité sekvence, či si může zvolit nějakou z uložených pomocí tlačítek PS1-4. Stiskem tlačítka START se obvod dostane do stavu Provádění. Pokud uživatel namísto toho chce zaznamenat novou sekvenci, stiskne tlačítko ZÁZNAM a obvod přejde do režimu Záznamu nové sekvence. b) Provádění – po spuštění provádění sekvence uživatelem se začne automaticky provádět uložená sekvence, pokud uživatel nezasáhne, sekvence se vykoná a po skončení obvod opět přepne do Výchozího stavu. Pro variabilnější použití však má uživatel možnost stiskem tlačítka START přerušit automatické provádění. Obvod nyní stále na výstupu drží zadanou kombinaci signálů (dle aktuálně prováděného kroku sekvence), a to až do doby, kdy uživatel opětovným stiskem tlačítka START uvede obvod znovu do automatického režimu, ten přeskočí na další krok a pokračuje v sekvenci podle uložených hodnot. V případě, že by uživatel potřeboval z náhlých příčin řídit celou sekvenci, či její větší část manuálně, nebylo by vhodné neustále mačkat tlačítko START, z tohoto důvodu, pokud je obvod v režimu manuálního provádění po stisku tlačítka START, lze přejít na další krok manuálně tlačítkem DALŠÍ. Toto lze zopakovat na libovolném počtu kroků a poté lze opět přejít na automatické provádění viz výše. Jedinou výjimkou je stav, kdy se v ručním řízení projde sekvence až na konec. Poté obvod ukončí její provádění a přejde do Výchozího stavu. Ve stavu provádění je uživatel informován o automatickém provádění sekvence rozsvícenou zelenou diodou vedle tlačítka ZÁZNAM. Aktuální krok sekvence zobrazují stavové diody. Po dokončení provádění (či při přechodu na manuální režim) zelená dioda zhasne. Naopak stále svítí zelená dioda u zvolené a prováděné předvolby, zároveň svítí dioda aktuálně prováděného kroku sekvence. c) Záznam nové sekvence je stav, který je zcela řízen uživatelem. Po přechodu do tohoto stavu uživatel stisky tlačítka DALŠÍ přechází vždy na další krok sekvence, přičemž délka trvání kroku se vždy uloží. O práci obvodu informuje opět zelená dioda. Aktuálně aktivní krok sekvence signalizují příslušné LED v horní části. Zde je důležité upozornit, že obvod dokáže načíst a úspěšně zpracovat pouze sekvence, v nichž žádný jejich krok nepřekročí 4 minuty. Ve chvíli, kdy je proveden poslední krok sekvence přechází obvod s dalším stiskem tlačítka DALŠÍ do nulového kroku sekvence, kdy je medomet neaktivní. Zde se rozsvítí červená dioda(vedle tlačítek předvoleb), která uživateli signalizuje, že v případě stisku libovolného tlačítka předvolby dojde k zápisu právě načtené sekvence na předvolenou pozici, 51
52
Stručná uživatelská příručka
odkud jí bude možné opět vyvolat. V případě, že uživatel chce novou sekvenci uložit, stačí stisknout tlačítko PS1-4 pro vybranou předvolbu a obvod provede uložení nové sekvence. V případě potíží s uložením obvod uživatele informuje rozsvícením všech předvolebních diod. Uživatel poté může pokus o uložení opakovat. Po úspěšném uložení přejde obvod automaticky do Výchozího stavu. Pokud nová sekvence nemá být uložena je možné opustit režim Záznamu nové sekvence pomocí stisku tlačítka ZÁZNAM. Tím obvod novou sekvenci neuloží a přejde opět to Výchozího stavu. Ve Výchozím stavu nesvítí ani diody prováděné sekvence (tzn. nějaký z kroků), ani červená či zelená signalizační dioda. Jediné diody, které v tomto stavu mohou svítit, jsou diody označující naposledy aktivní předvolbu. V případě vyvolání restartu tlačítkem RESET zůstanou výstupy regulátoru nastaveny na hodnoty, které brzdí motor, v případě, že by se točil, tak, aby nedošlo k jeho poškození. Jako ochranu proti překlikům se tlačítko po jeho stisku stává na cca 200 ms neaktivní. Není tudíž možné provést jeden krok sekvence rychleji, než je tato minimální reakční ochranná prodleva. V případě potřeby nahrání nového softwaru či aktualizace stávajícího je možné využít rozhraní kompatibilního s AVR ISP rozhraním Atmelu. Dvouřadá pinová lišta, která slouží jako ISP konektor se nachází v horní části DPS, je však vyvedena z druhé strany DPS kvůli úspoře místa.
Dodatek D
Obsah přiloženého CD
bp.brd..................................návrh DPS pro Eagle bp.sch..................................schéma zapojení pro Eagle <sw> bp.eep.......................binární soubor pro inicializaci EEPROM bp.hex.......................binární soubor s programem <src> bp.c...........................zdrojový soubor softwaru regulátoru twimaster.c................podpůrný soubor knihovny i2cmaster i2cmaster.h................knihovna pro komunikace po I2C makefile.....................makefile pro AVR GCC bp.pdf..................................elektronická verze této práce user_guide.pdf....................stručná uživatelská příručka k obvodu v pdf user_guide.txt.....................stručná uživatelská příručka k obvodu v txt README.TXT............................popis obsahu disku
53
54
Obsah přiloženého CD