České vysoké učení technické v Praze Fakulta elektrotechnická
Bakalářská práce
Jednotka pro měření větru a globální radiace Jindřich Fiedler
Vedoucí práce: Ing. Martin Novotný
Studijní program: Elektronika a výpočetní technika strukturovaný bakalářský Obor: Informatika a výpočetní technika červen 2006
ii
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 žádný 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 Českých Budějovicích dne 26.6. 2006
……………………………………….
iii
iv
Abstrakt Obsahem práce je zkonstruování převodníku dat, jehož vstupem jsou analogové signály od připojených snímačů albedometru, pyranometru nebo anemometru. Převodník tyto vstupní signály převede na výstupní data v podobě rychlosti a směru větru nebo hodnoty globální radiace a odešle je pomocí rozhraní RS485 firemní nadřazené řídící jednotce typu M4016 nebo do počítače s nainstalovaným obslužným programem MOST.
Abstract The task of project is to create a data converter. The main feature is changing analog input signals to values (typical SI-units) of wind speed and direction or global solar radiation. After converting, the results are being sent to a main master unit called M4016 or to PC with installed program MOST.
v
vi
Obsah: Seznam obrázků ............................................................................................................ ix Seznam tabulek ............................................................................................................. xi 1.
Úvod........................................................................................................................ 1
2.
Požadavky na převodník ........................................................................................ 3 2.1. 2.1.1. 2.1.2. 2.1.3. 2.1.4.
2.2. 2.2.1. 2.2.2. 2.2.3. 2.2.4.
3.
Napájení............................................................................................................................. 3 Vstupy................................................................................................................................ 3 Výstupy.............................................................................................................................. 3 Funkce ............................................................................................................................... 4
Podrobný popis funkce............................................................................................ 4 Měření rychlosti a směru větru - Anemometr.................................................................... 4 Měření globální radiace ..................................................................................................... 5 Čidlo relativní vlhkosti a teploty vzduchu ......................................................................... 5 Výstupy.............................................................................................................................. 6
Analýza ................................................................................................................... 7 3.1. 3.1.1. 3.1.2.
3.2. 3.2.1.
3.3. 3.3.1. 3.3.2. 3.3.3.
4.
Stručný přehled funkcí............................................................................................ 3
Zvažované realizace................................................................................................. 7 varianta A – autonomní provoz převodníku ...................................................................... 7 Varianta B – převodník závislý na nadřazené jednotce. .................................................... 7
Volba mikrokontroléru ........................................................................................... 8 Stručná charakteristika ATmega32/L ................................................................................ 9
Volba A/D převodníku ............................................................................................ 9 Funkce delta-sigma převodníku....................................................................................... 10 A/D převodník – přesnost měření .................................................................................... 10 AD převodník ADS1112 ................................................................................................. 11
3.4.
Volba prvků napájecího bloku ............................................................................. 12
3.5.
Volba komparace vstupních pulzů....................................................................... 14
Návrh hardware ................................................................................................... 17 4.1.
Blokové schéma převodníku ................................................................................. 17
4.2.
Napájecí část .......................................................................................................... 17
4.3.
Pomocné výpočty při návrhu schématu (MKO) ................................................. 18
4.4.
A/D převodník........................................................................................................ 19
4.4.1.
Komunikace A/D převodníku .......................................................................................... 20
4.5.
Komunikační rozhraní .......................................................................................... 21
4.6.
Mikrokontrolér a komplexní propojení............................................................... 24
5.
Realizace hardwaru v praxi ................................................................................. 31
6.
Návrh softwaru..................................................................................................... 33 6.1.
Programovací jazyk a vývojové prostředí ........................................................... 33
6.2.
Teoretický úvod ..................................................................................................... 34
6.2.1. 6.2.2.
Přípravy před samotným programování........................................................................... 34 Stručně o parametrech procesoru..................................................................................... 35
6.3.
Programovací styl .................................................................................................. 35
6.4.
Nástin funkčnosti programu................................................................................. 36
vii
6.5.
Inicializace .............................................................................................................. 37
6.6.
Implementace měřící funkce ................................................................................. 39
6.6.1. 6.6.2. 6.6.3. 6.6.4.
7.
Měření rychlosti větru ...................................................................................................... 39 Měření směru větru .......................................................................................................... 40 Měření globální radiace.................................................................................................... 40 Měření teploty a vlhkosti vzduchu ................................................................................... 41
6.7.
Komunikace............................................................................................................ 41
6.8.
Uspávání ................................................................................................................. 43
Testování...............................................................................................................45 7.1.
Hardwarové části zařízení..................................................................................... 45
7.2.
Testování celkové funkčnosti ................................................................................ 46
8.
Závěr .....................................................................................................................49
9.
Seznam literatury..................................................................................................51
A
Specifikace mikrokontroléru ATmega32.............................................................53
B
Realizace plošného spoje......................................................................................55
C
Fotografie .............................................................................................................59
D
Obsah přiloženého CD .........................................................................................61
viii
Seznam obrázků Obrázek 1.1 Blokové schéma propojení měřících prvků systému.................................. 1 Obrázek 2.1 Průběhy napěťových pulzů anemometru při vychýlení růžice o 100º........ 5 Obrázek 3.1 Princip funkce delta-sigma převodníku.................................................... 10 Obrázek 4.1 Blokové schéma převodníku .................................................................... 17 Obrázek 4.2 Typické ideální průběhy při komunikaci po rozhraní RS485 .................. 23 Obrázek 4.3 Pouzdro TQFP procesoru ATmega32/L s popsanými vývody ................ 24 Obrázek 4.4 Odběr proudu v aktivním stavu v závislosti na frekvenci ........................ 26 Obrázek 6.1 Vývojový diagram programu ................................................................... 36 Obrázek 6.2 Cyklus čtení dat ze snímače typu SHTxx................................................. 41 Obrázek 7.1 Oprava původního schématu .................................................................... 46 Obrázek B.1 Schéma převodníku ................................................................................. 55 Obrázek B.2 Plošný spoj – strana součástek (B - TOP) ............................................... 56 Obrázek B.3 Plošný spoj – strana spojů (A - BOTTOM)............................................. 57 Obrázek C.1 Osazený plošný spoj ................................................................................ 59 Obrázek C.2 Anemometr .............................................................................................. 60 Obrázek C.3 Snímač globální radiace........................................................................... 60
ix
x
Seznam tabulek Tabulka 3.3-1 Rozlišení měřeného signálu pro různé typy A/D převodníků. .............. 11 Tabulka 3.4-1 Výpočet maximální oteplení stabilizátoru se snímačem proudového výstupu globální radiace ............................................................................................... 13 Tabulka 3.5-1 Vstupně-výstupní úrovně komparátoru ................................................. 14 Tabulka 3.5-2 Výpočet rezistorů pro nastavení hystereze komparátoru MAX931 ...... 15 Tabulka 4.3-1 Výpočet hodnot RC členů MKO ........................................................... 18 Tabulka 4.6-1 Chybovost u různých rychlostí komunikace vzhledem ke krystalu ...... 29 Tabulka 6.5-1 Nastavení portu D – registry DDRD a PORTD .................................... 38 Tabulka 7.2-1 Testování měření směru větru ............................................................... 47 Tabulka 7.2-2 Naměřené hodnoty spotřeby.................................................................. 47 Tabulka D.1 Stromová struktura přiloženého CD ........................................................ 61
xi
Kapitola 1.Úvod
1
1. Úvod Zadavatelská firma vyrábí telemetrické stanice, které se využívají převážně pro měření hladin v otevřených tocích, ve vrtech, v čistírnách odpadních vod a obecně ve vodárenství. Někteří zákazníci projevili zájem také o sledování meteorologických veličin jako je rychlost a směr větru, globální radiace, teplota vzduchu nebo relativní vlhkost vzduchu. Připojení snímačů těchto veličin k telemetrické stanici snižuje počet využitelných vstupů stanice a v některých případech ani není možné z důvodu nestandardního výstupního signálu snímače (snímač směru větru, čidlo vlhkosti vzduchu). Převodníky signálu pro tyto speciální snímače dostupné na trhu jsou drahé, s velkou proudovou spotřebou, a nehodí se pro bateriový provoz. Proto vznikl požadavek na zkonstruování univerzálního a proudově úsporného převodníku dat (dále nazýván jako převodník Meteo), který bude komunikovat s různými meteorologickými snímači a jejich signál bude převádět na standardní rozhraní RS485.
Obrázek 1.1 Blokové schéma propojení měřících prvků systému
Kapitola 2. Požadavky na převodník
3
2. Požadavky na převodník Před započetím analýzy a návrhu převodníku je potřeba si co nejpřesněji definovat konkrétní požadavky na převodník a jeho vstupy. Po obecnějším přehledu následuje již přesný popis vstupních signálů od jednotlivých snímačů, které se budou k převodníku připojovat.
2.1. Stručný přehled funkcí 2.1.1.
Napájení
Napájení převodníku Meteo by mělo být v rozmezí od 5V do 12 V. Popřípadě by bylo vhodné, aby se mohla jednotka připojit i na 24V, neboť se toto napětí s oblibou využívá v průmyslových sítích. Počítá se s napájením síťovým, ale ve většině aplikací bude převodník pracovat z dobíjecího bezúdržbového akumulátoru (bateriové napájení 12V).
2.1.2.
Vstupy
Převodník by měl provádět sběr dat až ze čtyř připojených snímačů – jeden snímač rychlosti a směru větru anemometr, dva pyranometry (čidlo snímající globální radiaci dopadající na zemský povrch) nebo jeden albedometr (čidlo rozdílu dopadlé a odražené globální radiace). Na poslední vstup bude možné připojit čidlo relativní vlhkosti vzduchu a teploty typu SHT1x/SHT7x.
2.1.3.
Výstupy
Jednotlivé firemní přístroje lze pojmout jako vzájemně propojitelný stromový systém, který komunikuje mezi sebou po sběrnici RS485. Kořenem celého stromu může být hlavní řídící jednotka nebo počítač vybavený příslušnou RS485 PCI kartou a firemním softwarem. Proto by měl převodník Meteo podporovat sběrnici RS485. Dále ho bude možné připojit třeba i k obyčejnému stolnímu počítači, pokud bude vybaven danou RS485 PCI kartou nebo konvertorem RS485 na RS232 nebo na rozhraní USB a snadno testovat jeho činnost při kalibraci a implementaci.
Kapitola 2. Požadavky na převodník
4
2.1.4.
Funkce
Převodník bude vstupní signály připojených snímačů měřit a vyhodnocovat. Změřené a přepočítané aktuální hodnoty budou připraveny v jeho vnitřní paměti, aby se na vyzvání od řídící jednotky nebo od počítače odeslaly po sběrnici RS485 řídící straně. Převodník tedy bude pracovat v tzv. Master-Slave módu. Výstupní signály z čidel globální radiace by měly být měřeny s vysokou přesností. Proto se předpokládá využití samostatného A/D převodníku a průměrování dat z více měřených vzorků.
2.2. Podrobný popis funkce 2.2.1.
Měření rychlosti a směru větru - Anemometr
Při bezvětří, kdy je rotor anemometru v klidu, je napájecí proud anemometru konstantní a je daný spotřebou vysílací LED diody zabudované uvnitř mechanického tělesa snímače. Působením větru se rotor roztočí a skrze clonky dojde ke krátkodobému osvitu fototranzistoru, který je spolu se zatěžovacím kolektorovým rezistorem zapojen paralelně k napájecímu napětí. Výsledkem je kolísající proudový odběr snímače. Četnost pulzů s větším proudovým odběrem je tak přímo úměrná měřené rychlosti větru. Jedné otáčce rotoru anemometr odpovídá 36 pulzů. Používané anemometry jsou většinou kalibrovány na rychlost větru 30 m/s, tedy 108 km/h, čemuž odpovídá výstupní frekvence pulzů okolo 1400 Hz. Velikost odebíraného proudu v době trvání jednotlivých pulzů není konstantní a nabývá dvou rozdílných hodnot v závislosti na poloze korouhve anemometru. Kryje-li se korouhev se značkou na těle anemometru, mají všechny pulzy vyšší proudovou spotřebu. Z poměru pulzů s nižší a vyšší proudovou spotřebou tak lze vypočítat polohu korouhve (směr větru) s přesností 10 stupňů. Při instalaci anemometru je nutné použít kompas a nastavit značku na anemometru severním směrem. Proudové pulzy budou v navrhovaném převodníku transformovány pomocí sériově zapojené indukčnosti na napěťové pulzy, které budou dále tvarovány a podle své velikosti separovány do dvou oddělených cest pro další vyhodnocení směru a rychlosti větru. Následující obrázek znázorňuje průběh a velikost napěťových pulzů.
Kapitola 2. Požadavky na převodník
5
Obrázek 2.1 Průběhy napěťových pulzů anemometru při vychýlení růžice o 100º
2.2.2. Čidlo
Měření globální radiace globální
radiace,
pyranometr,
se
skládá
z černých
a
bílých
trojúhelníkových výsečí, které jsou střídavě poskládány do kruhu. Celý kruh je pak schován pod skleněnou polokoulí. Sluneční záření procházející sklem dopadá na černé výseče, které se ohřívají. Teplotní rozdíl mezi černým a bílým povrchem je snímám termočlánkovými snímači a následně zesílen na standardní signál 0-2V (4-20mA) již uvnitř tělesa pyranometru. Výstupní signál bude přiváděn na vstup převodníku. Zadavatel požaduje, aby převodník uměl zpracovávat signál od dvou pyranometrů najednou, protože existuje ještě obdobné čidlo, tzv. albedometr, který se prakticky skládá ze dvou pyranometrů otočených polokoulemi od sebe. Jeden z pyranometrů měří dopadající energii od slunce a druhý energii, která se odráží od země. Převodník bude mít na starosti vzájemné odečtení změřených hodnot, aby se získalo množství energie, které si ponechá země, především okolní flora.
2.2.3.
Čidlo relativní vlhkosti a teploty vzduchu
Vstup pro měření relativní vlhkosti a teploty bude uzpůsoben pro čidlo SHT1x/SHT7x. Čidlo v sobě již obsahuje 14-bitový A/D převodník, tudíž jeho výstupní signál Data se již nemusí nijak upravovat a lze ho spolu se signálem Clock přivést přímo na vstup řídícího čipu navrhovaného převodníku. Čidlo neobsahuje žádné ze standardních komunikačních rozhraní. Výrobce však na svých webových stránkách [11] poskytuje podrobný popis a potřebné komunikační programové vybavení. Mezi výhody SHT1x/SHT7x čidla patří kalibrace provedená již při jeho výrobě, malá spotřeba, miniaturní velikost a snadná výměna při poruše čidla nebo na konci jeho doby života.
Kapitola 2. Požadavky na převodník
6
2.2.4.
Výstupy
Komunikací na fyzické vrstvě je sběrnice RS485, jak již bylo uvedeno výše. Nad touto vrstvou se data posílají pomocí vlastního firemního protokolu Finet, který je používán jako standard pro všechny stávající přístroje zadavatelské firmy. Převodník tedy musí umět zapouzdřit naměřená data do rámců Finet protokolu a poslat je řídící jednotce.
Kapitola 3. Analýza
7
3. Analýza V následujících podkapitolách je popsán postup uvažování při koncipování převodníku a důvody zvolené realizace. Důraz je kladen na získání přesnosti pro budoucí měření a minimalizování spotřeby výběrem vhodných součástek pro jednotlivé bloky zařízení.
3.1. Zvažované realizace 3.1.1.
varianta A – autonomní provoz převodníku
Převodník by měl v tomto režimu samostatně měřit vstupní veličiny a následně je přeposílat do nadřazeného systému (PC, ŘJ) nebo je dokonce sám zobrazovat, např. by se mohl implementovat výstup na řadič displeje např. často používaného standardu HD44780, což by umožnilo zobrazení dat na jednoduchém LCD displeji. Schéma by mimo jiné muselo navíc obsahovat RTC (real time clock) prvek probouzející jednočip v předem nastavených intervalech měření. Externí časování by se dalo obejít vnitřními čítači procesoru, které by však při každém přetečení vyvolaly přerušení zbytečně probouzející procesor a vybíjející akumulátor. Pravděpodobně by se plošný spoj musel osadit i integrovaným obvodem Flash paměti uchovávajícím změřená data, která by se nevešla do vnitřní paměti jednočipu. Ze zamýšlené funkce autonomního převodníku se nedá předpokládat, že by zařízení bylo permanentně připojeno k nadřazenému sběrnému zařízení. Rozhodujícím argumentem, proč byla implementace varianty A zavržena, byla celková koncepce firemních stanic. Anemometr bývá ve většině případů součástí většího systému (meteostanice) a přidané obvody by v podstatě duplovaly stejné obvody, které se nacházejí v nadřazené jednotce.
3.1.2.
Varianta B – převodník závislý na nadřazené
jednotce. Koncepce varianty B předpokládá, že převodník bude pracovat bez archivace dat a změřená data
po přepočítání na vyžádání odešle do nadřízeného systému.
Převodník tedy obsahuje jen nejnutnější obvody pro zpracování a přepočítání vstupních signálů a pro následné odesílání změřených hodnot protokolem Finet.
Kapitola 3. Analýza
8 Varianta
B
sice
omezuje
použití
převodníku
jako
primitivnějšího
individuálního zpracovatele měřených dat, to však není v rozporu s firemní koncepci telemetrického systému, ba naopak.
3.2. Volba mikrokontroléru Vzhledem k výše popsaným požadavkům na převodník bude nejvýhodnější použít mikrokontrolér jako řídící člen celého zařízení. Mikrokontrolér však musí umožňovat komunikaci s ostatními nadřazenými členy firemního systému přes speciálně navržený protokol spojové (linkové) vrstvy, nazvaný Finet. Protokol je využíván na fyzické vrstvě RS485. Sběrnice tohoto typu se využívají především v průmyslu a valná část mikrokontrolerů nedisponuje patřičným rozhraním. Abychom nebyli požadavkem sběrnice omezeni, vydáme se cestou substituce rozhraní a nastíněný problém vyřešíme převodníkem UARTu na RS485, neboť rozhraní UART je oproti RS485 vůbec nejběžnějším rozhraním mikrokontrolérů. Při výběru mikrokontroléru nesmíme pominout fakt, že by zadávající firma přivítala, pokud by byl použit jeden z čipů, které již sama používá v jiných zařízeních nebo alespoň čip ze stejné řady, tzn. Atmel AVR. Firma by zvýšila odběry součástek, přitom by ale nerozšiřovala jejich různorodost, což by usnadnilo servis, zásobování a v neposlední řadě by bylo možné častěji aplikovat množstevní slevy při doobjednávání součástek. Dalším důvodem užití daných jednočipů je firemní vlastnictví hardwarového zařízení emulujícího AVR ATmega jednočipy společnosti Atmel, které například umožňuje programátorovi krokovat program přímo v procesoru. Zbývá rozhodnout o velikosti programovatelné systémové Flash paměti obsahující samotný program. ATmega procesor totiž patří do skupiny procesorů s tzv. harvardskou architekturou souboru instrukcí. Hlavním rysem této architektury je oddělení paměti programu od paměti dat. Zkoumáním velikosti firmwarů pro již naprogramovaná firemní zařízení zjistíme, že budoucí program převodníku bude pravděpodobně zabírat od 10kB do 20kB programové paměti. Nyní jsme získali dostatečné množství informací, abychom mohli snadněji rozhodnout o výběru vhodného jádra našeho zařízení. Zmíněným podmínkám vyhovují 8-bitové AVR mikrokontroléry s 16kB a 32kB programovatelnou pamětí. Cenový rozdíl obou kusů je řádově v jednotkách Kč, proto zvolíme raději verzi s větší pamětí. Menší paměť by pravděpodobně stačila a ušetřily by se materiálové náklady, pokud však víme, že převodník bude vyráběn spíše kusově než ve velkých sériích a případné
Kapitola 3. Analýza
9
přesáhnutí 16kB by znamenalo zaplatit čas programátora, který by daný kód optimalizoval na méně kB, volíme raději variantu s větší pamětí. Nehledě k tomu, že v případě potřeby není nijak náročné mikrokontroléry zaměnit a některé plošné spoje osadit verzí s menší pamětí, neboť se oba čipy vyrábějí v identických pouzdrech. Z dostupných verzí AVR čipů byla nakonec vybrána verze ATmega32L s nižší spotřebou energie, který je široce využívá v zadavatelské firmě.
3.2.1.
Stručná charakteristika ATmega32/L
Zvolený model procesoru spadá do kategorie procesorů RISC. Jedná se o osmibitový čip, obsahující klasicky 32 osmibitových pracovních registrů. Z podstaty procesorů RISC navíc vyplývá, že ATmega podporuje pouze zarovnaná data a pevnou délku instrukcí (podporuje 131 instrukcí). Procesor obsahuje 2 násobičky, 1kB EEPROM, 2kB SRAM a důležité rozhraní JTAG, které umožňuje programování a řízení procesoru firemním emulátorem JTAG ICE. Další důležité součásti čipu jsou vstupně-výstupní čtyři 8-bitové porty (značené A,B,C,D) a například rozhraní UART, které bude používáno pro komunikování s nadřazenou jednotkou. Využívané bloky procesoru budou podrobněji popsány v dalších kapitolách.
3.3. Volba A/D převodníku Zadavatelská firma vyžaduje vysokou přesnost měření odražené globální radiace pro různé typy ekosystémů. Pro splnění tohoto požadavku a z důvodu využití 16-bitové archivace měřených hodnot v telemetrickém systému M4016 nebudu možné použít 10-bitový A/D převodník implementovaný v čipu ATmega32L, který by celý rozsah měření rozdělil pouze na 1024 úrovní. Získané hrubé rozlišení by mohlo způsobit, že by drtivá většina naměřených hodnot za den byla identická a měnila by se pouze skokově několikrát za den. Měření by ztratilo vypovídající funkci. Bude proto nezbytné přidat externí A/D převodník, nejlépe v integračním provedení delta-sigma, neboť dle odborné literatury je tato konstrukce nejvhodnější pro zpracování signálů ze snímačů [7]. Z výše popsaných důvodů volíme 16-bitový delta-sigma A/D převodník ADS1112 s přesnou vnitřní referencí a komunikačním rozhraním I2C.
Kapitola 3. Analýza
10
3.3.1.
Funkce delta-sigma převodníku
Analogově-číslicový převodník delta-sigma (ΔΣ) se skládá ze dvou hlavních částí modulátoru a decimátoru. Jádrem každého převodníku je modulátor. Z modulátoru vychází bitový proud (tok), který odpovídá, při analogovém vstupním signálu, pulzně polohové modulaci (PPM). Střední hodnota toku odpovídá úrovni vstupního signálu. Sled bitů, sériově získávaných z výstupu celého AD převodníku, je nazýván pulzně kódovou modulací (PCM). Hodnoty bitů reprezentují velikost vstupního signálu.
Obrázek 3.1 Princip funkce delta-sigma převodníku
Decimátor zpracovává (oslabuje) příliš kategorické jednobitové reakce sigmadelta modulátoru na vstupní signál tím, že je „průměruje“. Dále čítá po delší časový interval, slouží tedy jako zádrž pro vysoké frekvence změn výstupu (chová se vlastně jako digitální dolnopropustný filtr). Jinými slovy se můžeme na bitový tok dívat jako na signál s informativní částí v nízkém kmitočtovém pásmu a ostatní považovat za velké množství šumu.
3.3.2.
A/D převodník – přesnost měření
Hodnoty globální radiace v České republice dosahují v letním poledni hodnot 1000 až 1100 W/m2 a klesají prakticky k nule v zimních měsících v nočních hodinách. Horní mez globální radiace si pro jistotu určíme vyšší na 1500 W/m2. Podle katalogového listu dodávaného s čidlem globální radiace, odpovídá záření 1500 W/m2 napětí o velikosti 2V. Rozsah získávaných hodnot od A/D převodníku spočítáme následovně: teoretický rozsah napětí vstupu číslicového převodníku:0 ~ 2V
Kapitola 3. Analýza
11
teoretický rozsah měřeného signálu na vstupu číslicového převodníku: 0 ~ (1500 ⋅ 10) W/m2 Při vstupním signálu 2V by měl mít převodník rozlišení alespoň 0,1 W/m2, tj. 15 000 dílků, což je limitní hodnota. Tabulka 3.3-1 Rozlišení měřeného signálu pro různé typy A/D převodníků.
rozlišení
10-bitový
16-bitový
24-bitový
2,56 (rozsah 0-5V)
2,048
2,5
(vnitř. komparátoru v ATmega)
(externí)
(externí)
rozlišení pro 2V
0 - 410
0 - 64000
0 - 13 ⋅ 10 6
mV na dílek
2560 = 2,5 1024
2048 = 0,03125 65536
2500 = 0,00015 16777216
W/m2 na dílek
1500 = 3,66 410
1500 = 0,0234 64000
1500 = 0,00011 13421773
reference [V]
Z tabulky je zřejmé, že pro měření globální radiace nelze použít interní 10-bitový převodník. Dosažená přesnost měření je u tohoto převodníku jen 3,66 W/m2. Naopak použitím 16-bitové verze A/D převodníku získáme požadované rozlišení dokonce s rezervou. Použití 24-bitového převodníku je z hlediska přesnosti použitého snímače zbytečné a prodražilo by navrhovanou konstrukci.
3.3.3.
A/D převodník ADS1112
Zadávající firma používá v několika zařízeních převodník ADS1241. Model umožňuje rozlišení 24-bitů, obsahuje 8 vstupů a dalších několik robustních funkcí. Bylo by užitečné ADS1241 použít minimálně ze dvou důvodů; pokud ho firma osazuje do jiných zařízení má připraveny knihovny a zdrojové kódy pro snadnou implementaci a zadruhé by se snížily náklady na servis, protože vždy je perspektivnější využívat méně různých druhů součástek. Přesto je ADS1241 příliš robustním řešením, neboť pro měření anemometru a dvou globálních radiací stačí pouhé tři vstupy a také dle předchozí tabulky je zřejmé, že postačující by bylo rozlišení 16-bitů namísto 24-bitů. Lepším řešením je osazení převodníkem ADS1112, který disponuje 16-bitový rozlišením a 4 vstupy. Čtvrtý vstup bude volný, bude připraven pro pozdější použití, kdyby bylo potřeba.
Kapitola 3. Analýza
12
Analogový vstup – přesnost měření ADS1112 Chyba reference ........ 0,05% Chyba linearity ......... 0,01% Měřící odpor při použití čidla globální radiace s proudovým výstupem Přesnost …………… 0,1% Bude se softwarově korigovat kalibrací. Ostatní chyby jsou vůči ní zanedbatelné. Celková chyba:…………0,16% Analogový vstup - chyba způsobená změnou teploty Referenční napětí převodníku ………... 2,048 V pro 20 °C Teplotní drift ref.napětí převodníku… 5ppm Teplotní drift měřícího odporu ……….. 15ppm Předpokládaný pracovní teplotní rozsah ……. -20 °C až 60 °C = Δ 80 °C tj. 20 °C ±40 °C Celkový teplotní drift = 5ppm + 15ppm = 20ppm/°C 2,048 ⋅ 40 ⋅ 20 ⋅ 10 −6 = 1,64 ⋅ 10 −3 V Maximální chyba teploty: Procentuální vyjádření teplotní chyby: 2,048 ± 0,08% V PPM je jednotkou relativního množství z anglického parts per million, tedy kolik dílů je na milion dílů (1 výskyt za 106). Soustava SI její používání nepovoluje, typicky se však v ppm udávají stability vlastností elektrických součástek při změně teploty, jako např. velikost elektrického odporu. V procentech by se 1 ppm dalo převést na 0,0001%. Příklad pro názornost: 1 ppm odpovídá zhruba 1 vteřině za 280 hodin.
3.4. Volba prvků napájecího bloku Dle napájecích požadavků jednotky se jeví jako vhodné použít stabilizátor s označením LM2936. Pokud se podíváme do jeho katalogového listu, zjistíme, že jeho výrobce se chlubí speciálním uzpůsobením pro použití v systémech pracujících na baterie. Obvod obsahuje ochranu proti prohození vodičů baterie nebo automatické vypnutí při přehřívání. Nejvyšší pracovní napětí stabilizátoru je 40V, což stačí i na provoz z běžných průmyslových sítí (24V). Dalším důležitým kladem stabilizátoru je minimální klidový proud, který se pohybuje pod hranicí 15µA. Pouzdro zvolíme TO252, které odvádí přebytečné teplo do desky plošného spoje. V případě většího
Kapitola 3. Analýza
13
zahřívání lze zvětšit podkladovou vodivou vrstvu plošného spoje pro zvýšení odvodu tepla (1 palec2 = zvýšení o 50°C). Jak ale vyplývá z následujícího výpočtu, zvětšení vodivé vrstvy nebude potřeba. Výpočet maximálního oteplení stabilizátoru Výpočet maximálního oteplení stabilizátoru se snímačem napěťové výstupu globální radiace
Napájení ………………. max.24V Výstup ………………… 5V
Pz = I MAX ⋅ (U nap − U výst )
Odběr obvodu ATmega32L(3,684Mhz)....max.6mA (Aktivní) Anemometr ……………...max.8mA
Pz = 0,014 ⋅ ( 24 − 5) Pz = 0,266W
(Spotřeba pyranometru s napěťovým výstupem a snímače teploty a vlhkosti vzduchu je možné zanedbat.)
Tepelný odpor pouzdra TO-252 stabilizátoru LM2936-5.0 dle katalogového listu je 136°C/W. Maximální oteplení stabilizátoru nad okolní teplotu: Δt = 0,266 ⋅ 136 = 36,2 °C Ve většině případů se k měření globální radiace využívá snímač s napěťovým vstupem, ale konstruovaný převodník bude navržen, aby podporoval i druhý typ snímačů globální radiace s proudovým výstupem (4-20mA). Oteplení bude spočítáno i pro extrémní případ, kdy by albedometr byl postaven ze dvou snímačů s proudovým vstupem.
Tabulka 3.4-1 Výpočet max. oteplení stabilizátoru se snímačem proudového výstupu glob. radiace
Napájení ………………. Výstup …………………
max.24V 5V
Odběr obvodu ATmega32L(3,684Mhz) v aktivním stavu 1x anemometr 1x pyranometr (s proudovým vstupem) albedometr (2x pyranometr) teoretický odběr až Maximální odběr obvodu s pyranometrem Maximální odběr obvodu s albedometrem
Pz = I MAX ⋅ (U nap − U výst ) 6mA 8mA 20mA + 20mA 34mA 54mA
Pz = 0,034 ⋅ ( 24 − 5) Pz = 0,646W
Pz = I MAX ⋅ (U nap − U výst ) Pz = 0,054 ⋅ ( 24 − 5) Pz = 1,026W
Připojením jednoho snímače s proudovým výstupem se razantně zvýší spotřeba a stabilizátor se teoreticky může ohřát až na Δt = 0,646 ⋅ 136 = 87,9 °C nad teplotu
Kapitola 3. Analýza
14
okolí. Hodnota je sice vysoká, ale dosažitelná pouze teoreticky, neboť počítaný odběr proudu 20mA je při maximální velikosti globální radiace 1500 W/m2. Např. v České republice dosahuje globální radiace maximálně hodnot kolem 1100 W/m2, a to pouze několikrát za celý rok. Přepočítáním zjistíme, že hodnotě 1100 W/m2 odpovídá oteplení 64°C. Připojení albedometru nebo dvou pyranometrů s proudovým výstupem generuje spotřebu 54mA, která se radikálně promítne do celkového oteplení stabilizátoru. Výsledné oteplení o 139,5°C je příliš vysoké. Provoz dvou snímačů s proudovým výstup tedy není možný, protože není vyloučeno nevratné poškození obvodu převodníků.
3.5. Volba komparace vstupních pulzů Anemometr díky svému pulzně-proudovému odběru generuje na sériové indukčnosti hluboké a mělké pulzy podle natočení korouhve vůči značce na těle přístroje (viz. kapitola 2.2 Podrobný popis funkce). Aby bylo možné mělké a hluboké pulzy od sebe vzájemně odlišit, bude potřeba použít komparátor s nastavenou komparací do míst těstě pod hranici mělkého pulzu. Pro komparaci výstupních signálů anemometru lze použít buď vnitřní komparátor procesoru nebo externí komparátor. Každý z nich má svá pro i proti. Pokud by se použil externí komparátor, zvýšila by se proudová spotřeba převodníku a zvětšila by se plocha plošného spoje, čímž by vzrostly i náklady nehledě na samotnou cenu součástky, ale zpřesnila by se komparace díky stabilní referenci a především by se usnadnil vývoj firmwaru, protože interní komparátor by znamenal zvětšení kódu, a tím i zvětšení rizika možného zavlečení chyby při programování. Volíme tedy externí komparátor, který zprůhlední kód a celou funkci jednotky. Komparátor by měl mít také schopnost potlačovat zákmity, které mohou vznikat na hranách napěťových pulzů.
Tabulka 3.5-1 Vstupně-výstupní úrovně komparátoru
vstup: výchozí hodnota signálu mělký pulz hluboký pulz
2,5 V 1,25 V 0V
Pozn.: Komparace je při 1,182 V.
výstup: výchozí hodnota signálu hluboký pulz
5V 0V
Kapitola 3. Analýza
15
Uvedeným požadavkům vyhovuje komparátor typu MAX931, který obsahuje vlastní zdroj referenčního napětí o velikosti 1,182V, má nastavitelnou hysterezi a vyznačuje se velmi nízkou proudovou spotřebou v řádu jednotek µA. Hystereze Šířku pásma hystereze komparátoru jsme zvolili VHB = 100mV a proud IREF = 3,5µA.
Tabulka 3.5-2 Výpočet rezistorů pro nastavení hystereze komparátoru MAX931
R1 =
VHB 2 ⋅ I REF
V ⎞ ⎛ ⎜U REF − HB ⎟ 2 ⎠ R2 = ⎝ I REF
R1 =
VHB = 14k =& 15k 2 ⋅ I REF
0,1 ⎞ ⎛ ⎜1,182 − ⎟ 2 ⎠ R2 = ⎝ = 323k =& 330k −6 3,5 ⋅ 10
Poznámka: Uvedené vzorce vycházejí z katalogového listu obvodu MAX931.
Kapitola 4. Návrh hardware
17
4. Návrh hardware Po podrobné diskuzi řešení v předchozí analytické kapitole přichází na řadu detailní popis realizace daných částí převodníku. Pro snazší pochopení si nejdříve sestavíme blokové schéma zapojení a následně se budeme věnovat konstrukci napájení, komunikační části, způsobu připojení snímačů a na závěr zapojení mikrokontroléru.
4.1. Blokové schéma převodníku Před vlastním návrhem jednotlivých částí převodníku Meteo si nastíníme blokovým schématem budoucí strukturu zařízení.
Obrázek 4.1 Blokové schéma převodníku
4.2. Napájecí část Převodník je napájen z řadového konektoru označeném na schématu jako J1. Na pin 4 je přivedeno kladné stejnosměrné napětí o maximální velikosti 40V. V cestě napájecího napětí je v sérii zapojena polymerová vratná pojistka (RXE070). Jedná se o tepelnou pojistku s kladným teplotním koeficientem (PTC). Pokud se obvod nachází ve standardním stavu, tváří se pojistka jako běžný malý sériový odpor (0,3Ω). Při abnormálním zvýšení protékajícího proudu vstupem a tedy i pojistkou, které by mohlo poškodit vnitřní logické obvody převodníku, zareaguje pojistka téměř skokovým nárůstem vlastního odporu, čím omezí protékající proud. Použitý typ ve schématu je dimenzován na zkratový proud až 0,75A při okolní teplotě 23ºC. Za pojistkou je paralelně transil (1.5KE27A), který omezuje přepěťové špičky a zároveň slouží, ve spojení s vratnou pojistkou, jako ochrana proti přepólování
Kapitola 4. Návrh hardware
18
napájecího napětí. Za přepěťovou ochranou následuje filtrační LC obvod (typ DSS306) omezující pronikání vysokofrekvenčního rušení z/do zařízení. Již bylo zmíněno, že pro stabilizaci jsme si vybrali obvod LM2936 s výstupním napětím 5V, které je použito pro napájení celého převodníku. Na vstup i výstup stabilizátoru jsou připojené blokovací kondenzátory proti zemi, napomáhající obvodu LM2936 kompenzovat proudové výkyvy celého obvodu. Další kondenzátory s podobnou funkcí jsou osazeny i u obvodů, které se vyznačují nekonzistentním odběrem proudů. V těchto případech slouží kondenzátory jako zásobárny energie při zvýšeném odběru zmíněných logických obvodů např. procesoru. V klidovém „uspaném“ stavu POWER-DOWN odebírá mikroprocesor jen malý proud v řádu desítek µA, po probuzení se však jeho odběr skokově zvyšuje až na 7mA (platí pro napájecí napětí 5V a frekvenci 3,6864 MHz). Vzniklá skoková změna odběru proudu bez přítomnosti blokovacích kondenzátorů v těsné blízkosti mikroprocesoru by mohla způsobit vlastní rušení MCU i okolních součástek (např. přesného AD převodníku) a znehodnotit tak výsledky měření.
4.3. Pomocné výpočty při návrhu schématu (MKO) Napěťové pulzy od anemometru jsou dlouhé 3µs a procesor je taktován krystalem o frekvenci 3,6864 MHz, která odpovídá periodě 0,3µs. Procesor tedy může vykonat po dobu trvání pulzu pouze několik málo instrukcí. Abychom nemuseli riskovat, že nebudeme stíhat dokončit případný dlouhý kód obsluhy přerušení, popřípadě se neobjevily jiné problémy s krátkým pulzem spojené, prodloužíme si pulzy na několikanásobek. Prodloužení pulzu bude realizováno známým obvodem typu 555 ve funkci monostabilního klopného obvodu. Délku obdélníkového impulzu, který chceme mít na vstupech jednočipu, jsme si stanovili na 100µs pro mělké a 200µs pro hluboké pulzy, hodnotu kapacity pak 10nF. Tabulka 4.3-1 Výpočet hodnot RC členů MKO
R=
R=
T C ⋅ ln(3)
R=
T C ⋅ ln(3)
R=
100 ⋅ 10 −6 = 9k 10 ⋅ 10 −9 ⋅ ln(3) 200 ⋅ 10 −6 = 18k 10 ⋅ 10 −9 ⋅ ln(3)
zvolíme nejbližší hodnotu
T = 1,1 ⋅ 10000 ⋅ 10 ⋅ 10 −9 = 110μs
R = 10k zvolíme nejbližší hodnotu
R = 18k
T = 1,1 ⋅ 18000 ⋅ 10 ⋅ 10 −9 = 198μs
Kapitola 4. Návrh hardware
19
4.4. A/D převodník V kapitole 3.3 Volba A/D převodníku jsme vybrali vhodný analogově-číslicový převodník, spočítali a vysvětlili jsme si důvody jeho implementování do zařízení. Nyní si pečlivě popišme jeho zapojení. O blokovacích kondenzátorech jsme se už zmínili. Převodník disponuje třemi měřícími vstupy (AIN0 - AIN2) a jedním referenčním (AIN3C), ke kterému se ostatní tři vstupy vztahují, pokud jsou nastaveny na tzv. single-ended mód. Protože budeme provozovat čidla globální radiace proti zemi, musíme čtvrtý referenční vstup uzemnit a na první dva vstupy pak připojíme pyranometry (čidla globální radiace). Třetí vstup je pak ponechán nepřipojen, například jako rezerva pro další rozšiřování funkce převodníku. Každý vstup převodníku má předřazen ochranný rezistor 10kΩ, který brání poškození vstupního obvodu převodníku indukovanými proudovými rázy. Zadání od zákazníka také poukazuje na možnost připojení albedometru, což je vlastně rozdíl hodnot dvou pyranometrů instalovaných vůči sobě s natočením o 180 stupňů (více v kap. globální radiace). Popsané měření by se dalo, krom jistého softwarové způsobu odečtením hodnot dvou pyranometrů, realizovat hardwarově připojením pyranometrů (albedometru) na vstupy AIN0, AIN1 a přepnutí A/D převodníku do druhého módu tzv. diferenčního. Napětí se pak neporovnává vůči vstupu AIN3C (aktuálně zemi), ale bere se vzájemný rozdíl mezi prvním a druhým vstupem obvodu. Z důvodu jednoduchosti a univerzálnosti zapojení vstupů převodníku se bude hodnota globální radiace připojeného albedometru vypočítávat softwarově. Čidla globální radiace se vyrábějí ve verzi napěťové nebo proudové. Napěťová verze se dá bez problémů připojit přímo na vstupy převodníku, neboť její výstup se pohybuje mezi hodnotami 0 až 2V, což nepřesahuje vnitřní referenci 2,048V měřícího obvodu. V drtivé většině případů se bude k převodníku připojovat právě napěťová verze čidla, ale abychom mohli k zařízení připojovat i proudovou verzi čidla globální radiace, která disponuje výstupem 4-20mA, bude potřeba zakomponovat do schématu snímací rezistory velikosti protékajícího proudu. Na těchto rezistorech vznikne při průtoku proudu z čidel proudové globální radiace úbytek napětí, který bude měřen A/D převodníkem. Převedeme tedy měření proudu opět na měření napětí. Pokud víme, že maximální výstupní proud čidla bude 20mA, snadno určíme podle Ohmova zákona velikost potřebného rezistoru na 100Ω. Běžné rezistory často mívají své hodnoty až o procenta odlišné od deklarovaných nebo jsou teplotně nestabilní, což by v našem
Kapitola 4. Návrh hardware
20
případě mohlo znamenat nemalé znehodnocení výsledků a 16-bitový převodník by ztratil na efektivnosti. Proto musí být při měření čidly proudové globální radiace plošný spoj osazen speciální verzí rezistorů, která minimalizuje možné nuance. V extrémním případě při proudu 20mA a odchylce měřícího rezistoru 0,1% od své jmenovité hodnoty vznikne na vstupu A/D převodníku chyba způsobující odchylku od správné hodnoty o 0,002V. Jak bylo uvedeno v kapitole 3.3 Volba A/D převodníku 2V ( 20mA ⋅100Ω ) jsou ekvivalentní 1500W/m2 a odchylka 0,002V pak znamená teoretickou chybu měření o celých 1,5W/m2. Ve většině aplikací bude zařízení převodníku dodáváno přímo s čidly a další prohazování vstupních zařízení se již nebude provádět. Pokud se tedy bude zákazníkovi montovat zařízení s napěťovým čidlem globální radiace, měřící odpory se neosadí. A naopak bude-li se realizovat čidlo proudové, rezistory se osadí.
4.4.1.
Komunikace A/D převodníku
Prostudováním dokumentace k převodníku ADS1112 od firmy Texas Instruments se dozvíme, že obvod komunikuje pomocí průmyslového dvoudrátového rozhraní I2C. Standard I2C podporuje adresovatelnost, protože však využíváme pouze jedno zařízení na tomto rozhraní, můžeme adresní piny (A0,A1) uzemnit jako výchozí nastavení (adresa 1001000). Zbylé dva piny (SDA,SCL) slouží jako hlavní signálové vodiče, po kterých probíhá komunikace. Rozhraní I2C Rozhraní I2C (inter-integrated circuit) je dvoudrátové rozhraní podporující připojení více zařízeních, jak podřadných (slave) tak vedoucích (master), na jednu sběrnici. V klidovém stavu je sběrnice pomocí vytahovacích rezistorů v logické 1. Všechna zařízení mohou řídit sběrnici jejím uzemněním na logickou 0, ale žádné zařízení se ji nesmí snažit přepnout na logickou 1. Na I2C sběrnici mohou v jeden moment komunikovat vždy pouze dvě zařízení, jedno jako master a další jako slave. I zde platí ono pravidlo, že slave může zapisovat pouze pokud je vyzván masterem. V našem případě je masterem procesor AVR ATmega32L a žádá si data od převodníku ADS1112. Pro komunikaci jsou potřeba dva vodiče značené jako SDA a SCL. Signál SDA je nosičem dat a SCL hodinových pulzů. Data jsou vždy posílána po 8 bitech. Abychom mohli poslat bit po sběrnici, musíme nastavit na SCL log.0, pak na SDA příslušná data a znovu zahýbat signálem SCL do logické 1 a zpět, čímž se tzv. taktne
Kapitola 4. Návrh hardware
21
jeden bit do vysílacího registru. Signál pro data SDA je společný pro vysílání i příjem, když čte master od slava, ovládá SDA slave. Naopak když master vysílá, prohodí si obě stanice řízení (master ovládá SDA). Pravidlo, které se však u masterů není, že master ovládá hodiny, platí i u rozhraní I2C. Sběrnice je povětšinu času v nečinnosti v tzv. idle módu. Začátek komunikace je určen uzemněním SDA signálu (hodiny jsou v log.1). Konkrétně se komunikace odstartuje přechodem signálu dat z 1 do 0. Inverzně ke startu je stop komunikace, který je způsoben přechodem dat z 0 do 1. Obě značky jsou podmíněny hodinovým signálem v log.1. Pokud by hodiny byly uzemněny a hýbalo by se se signálem SDA, pokládal by to přijímač za další posílaná data. Po každém startu následuje byte mastera, kterým si vybírá protějšek ke komunikaci (adresový byte). Každé zařízení připojené na sběrnici I2C má svou 7bitovou adresu (výjimečně i 10-bitovou). Do osmi posílaných bitů však jeden bit schází, tím master říká zda chce z druhého zařízení číst či do něj zapisovat. Každý byte posílaný po sběrnici I2C musí být potvrzován, ať jsou to data či adresa. Master odešle data (řídí SDA) tedy jeden byte a přenechá řízení datového vodiče podřazenému zařízení, které mu jeho uzemněním potvrdí příjem bytu, na to master pošle hodinový pulz jako akceptování potvrzovacího bitu a komunikace muže pokračovat. Nepřítomnost slava při jeho snaze masterem ho adresovat způsobí vlastně nepotvrzení, protože nikdo neuzemnil datový vodič. Komunikace končí stop bitem a sběrnice znovu přechází do klidového idle módu.
4.5. Komunikační rozhraní Zadavatelským
požadavkem
je
komunikace
převodníku
s nadřízeným
systémem pomocí rozhraní RS485. Vybraný procesor ATmega32 bohužel nedisponuje rozhraním RS485, proto bude potřeba použít konvertor, v našem případě z rozhraní UART (Universal Asynchronous Receiver/Transmitter) na RS485. Výběr vhodného integrovaného obvodu nebyl obtížný, protože zadávající firma u většiny svých zařízení používá již osvědčené zapojení s integrovaným obvodem typu MAX483. Obvod se vyznačuje zpomalením náběžných a sestupných hran datových linek s pozitivním dopadem na velikost rušivého vyzařování z hlediska EMC (Electromagnetic Compatibility).
Kapitola 4. Návrh hardware
22
Obvod disponuje standardními signály UARTu TxD, RxD a dvěma řídícími signály /RE a DE. Ty jsou připojené přímo na hlavní procesor ATmega, který pomocí nich řídí jednak přepínání směru datové komunikace obvodu MAX483 a dále umožňuje nastavit tento integrovaný obvod do idle módu. Každému signálovému vodiči rozhraní RS485 značenému A a B je ještě sériově předřazen rezistor 33Ω pro potlačení rušivých vlivů z vedení a paralelně transil 1.5KE5V8 pro svod přepětí naindukovaného do vedení. Obvod MAX483 je tak chráněn proti náhodným vysokým špičkám napětí, které se mohou na vedení objevit. Poslední dva nezmíněné rezistory ze schématu (hodnot 10kΩ) slouží pro definování úrovně napětí na A,B vodičích sběrnice RS485 v jejím klidovém stavu. Protože při komunikaci po lince RS485 se vysílače odpojují, dochází k časovým úsekům, kdy na linku žádné zařízení nevysílá. Připojená zařízení jsou ve stavu vysoké impedance. V této době není stav linky definován a linka je extrémně citlivá na indukovaná napětí (poruchy), které se jeví jako přicházející data. Proto je nutné definovat klidový stav linky připojením zmiňovaných rezistorů. Rezistory zapojujeme podle předpokladu, že signál vodiče A je v klidovém stavu kladnější než signál vodiče B. Rozhraní RS485 RS485 je název pro sběrnici užívanou především v průmyslových aplikacích. Podle komunikačního modelu standardů OSI deklarujícího sedm protokolových vrstev, patří RS485 do nejnižší vrstvy nazývané fyzická, která popisuje elektrické signály při komunikaci (typ media, elektrické signály atd.). Sběrnice je dvoudrátová, poloduplexní a sériová, umožňující multipoint komunikaci. Na jedno signálové vedení lze tedy připojit více zařízeních. V drtivé většině případů se RS485 používá v módu Master/Slave, kde Master řídí spojení a Slave může vysílat (odpovídat) pouze pokud je vyzván tzn. naadresován nadřazeným Masterem. V používaném měřícím systému zadavatelské firmy je to ve většině případů řídící jednotka typu M4016, v autonomním módu by to mohl být například počítač. Méně využívaným způsobem spojení RS485 je multiprocesorová komunikace, kde může více zařízení plnit funkci Masterem. Každé zařízení může ohlásit vysílání a začít posílat data. Po odeslání čeká na potvrzení, zkontroluje jestli se někdo nesnaží poslat urgentní data a může vysílat dále. Díky zmíněnému vyčkávání a možným kolizím, pokud započne vysílat více zařízení ve stejnou dobu, klesá efektivnost
Kapitola 4. Návrh hardware
23
komunikace až ke 37%. Proto se tato metoda využívá pouze v aplikacích, kde je dávána přednost možnosti neprodleného vysílání před efektivností celkového spojení. Princip komunikace a přenášení dat sběrnicovým standardem RS485, někdy správněji nazývaným EIA-485, je ve změně napětí tzv. diferenčního napětí, mezi oběma vodiči. Jedna napěťová polarita znamená logickou 1, opačná polarita logickou 0. Velikost diferenčního napětí vodičů musí být alespoň 0,2V, aby komunikace správně fungovala, ale typicky se nastavuje rozdíl kolem 2V. Maximální přepětí na lince je +12 ~ -7V, což znamená, že diferenční napětí může dosahovat jakékoliv velikosti napětí ve zmíněném intervalu. Pokud by ale rozdíl mezi zeměmi příjemce a vysílače překročit hodnotu napětí 7V, mohlo by dojít k zahlcení příjemce a přerušení spojení. V klidovém stavu je neinvertující vodič A často značený také jako RxD+/TxD+ na vyšším napětí než invertující vodič B (RxD-/TxD-). Start bit se generuje inverzním zvětšením diferenčního napětí. Jinými slovy jeho prohozením ze stavu logické 1 do stavu logické 0. Při ideální komunikaci se signály čistě prohazují, jak je vidět na obrázku níže.
Obrázek 4.2 Typické ideální průběhy při komunikaci po rozhraní RS485
Sběrnice RS485 specifikuje pouze elektrické vlastnosti vysílače a přijímače a neříká nic o nutnosti použití datového protokolu ve vyšších vrstvách. Její užití je vhodná i pro nízkorozpočtové aplikace v lokálních sítích. Při komunikaci na vzdálenost do 10 m se může rychlost přenosu dat vyšplhat až k 35Mb/s. Linka by měla být koncipována do linie s krátkými odbočkami nikoliv do hvězdy či stromu. Pro komunikaci na delší vzdálenosti nelze spojení realizovat pomocí běžných vodičů. Zařízení se musejí propojit kroucenou dvoulinkou, která minimalizuje efekt vzájemného elektromagnetického rušení a potlačí i šum, neboť vodiče jdou stejnou
Kapitola 4. Návrh hardware
24
trasou a zmíněné neduhy se na nich projeví stejnou měrou. Diferenční napětí mezi A a B tedy zůstane stejné, změní se pouze střední hodnota.
4.6. Mikrokontrolér a komplexní propojení V kapitole Volba mikrokontroléru byly popsány důvody výběru právě modelu AVR ATmega32L jako jádra celého převodníku. Nyní si podrobněji popíšeme vlastnosti procesoru, funkce jeho vstupně-výstupních portů a ostatních bloků. Zvláště se
budeme
věnovat
jejich
konkrétnímu
použití
a
funkci
ve
vztahu
k
právě konstruovanému převodníku v této práci. Pokud se podíváme na schéma, navrhli jsme zatím obvod komunikace, AD převodník a dále jsme si vyrobili pomocí monostabilních klopných obvodů a jednoho komparátoru dva signály, které nám podávají informaci o rychlosti a směru větru. Podrobný popis viz. Volba komparace), kapitola 3.5. Jak využít a připojit upravené vstupy k procesoru bude popsáno v dalších odstavcích.
Obrázek 4.3 Pouzdro TQFP procesoru ATmega32/L s popsanými vývody
Kapitola 4. Návrh hardware
25
Procesor má 44 vývodů a zadavatelská firma jej nakupuje ve čtvercovém pouzdru TQFP (Thin Profile Plastic Quad Flat Package). Na každé straně pouzdra jsou vyvedeny signály zem a napájecí napětí, které umožňují snadnější návrh designérům plošných spojů. S popisem dalšího zapojení začneme od pinu 1 dle oficiálního značení. Prvních 6 vývodů slouží k programování procesoru pomocí SPI. Vývody jsou propojeny s konektorem, na který se nasadí kabel od modulu AVRprog. Rezistor hodnoty 33kΩ na vstupu procesoru /RESET nastavuje úroveň resetovacího signálu. Při návrhu a ladění přípravku (prototypu) se ale využívá jiná metoda nahrávání firmwaru, programování se provádí přes tzv. rozhraní JTAG. Konektor pro SPI programování přesto vyvedeme na plošný spoj, bude použit při sériovém programování ve výrobě. Další piny 7,8 (značené XTAL2, XTAL1) slouží k připojení externího generátoru frekvence procesoru. Protože pro měření rychlosti větru budeme potřebovat přesně změřit časový interval mezi pulzy, nemůžeme využít zabudovaný RC oscilátor v mikrokontroléru, ale bude potřeba použít stabilní vnější krystal jako zdroj hodinové frekvence mikrokontroléru. Velikost krystalu je nutné zvolit s ohledem na proudovou spotřebu
běžícího
MCU
a
na
možnosti
snadného
nastavení
standardních
komunikačních rychlostí zabudovaného UARTu. Z následujícího obrázku znázorňujícího funkční závislost mezi frekvencí oscilátoru mikrokontroléru a odebíraným proudem můžeme vypozorovat, že nevýhodou rychlosti (vysoké frekvence) je spotřeba. Například pro 16MHz a napájecí napětí 5V si procesor odebírá v aktivním stavu něco přes 22mA naopak pro 8MHz je to skoro polovina. Jelikož konstruujeme zařízení, které má pracovat především v terénu, někde na větrném místě – kopci, často bez elektrické rozvodné sítě, budeme upřednostňovat minimální spotřebu před rychlostí zpracování, která v převodníku nehraje valnou roli. Jako kompromis mezi rychlostí a spotřebou jsme vybrali externí krystal 3,6864MHz, připojený mezi svorky XTAL1-2. Spotřeba procesoru by pak teoreticky měla klesnout na hodnotu kolem 5mA v aktivním stavu. Hodnota krystalu rovněž plně vyhovuje z hlediska nastavování přenosové rychlosti rozhraní UART viz. Tabulka 4.6-1 Chybovost u různých rychlostí komunikace vzhledem k volbě krystalu
Kapitola 4. Návrh hardware
26
Obrázek 4.4 Odběr proudu v aktivním stavu v závislosti na frekvenci
Následuje osm pinů portu D (9-16). Než si popíšeme zapojení jednotlivých vývodů, vysvětlíme si obecně způsob používání a funkci portů. Paralelním portem rozumíme skupinu vývodů, která je z hlediska mikrokontroleru chápána jako celek. Většina bitů každého portu má dvě funkce; zaprvé klasickou vstupně-výstupní funkci, kdy port slouží jako 8-bitový paralelní vstup nebo výstup, a zadruhé má každý jednotlivý pin portu svou specifickou funkci např. přerušení (INT0, INT1, ..), AD převodník (ADC0, ADC1,… ADC7), komunikace (RxD, TxD, … SCL, SDA), je totiž vnitřně sdílen se zabudovanými periferiemi v procesoru. Všechny porty mohou pracovat jako vstup nebo výstup a výstupní proud může dosahovat 20mA, čehož se využívá například pro přímé buzení LED. Ve schématu převodníku je kontrolní LED dioda umístěna na 11. nožičce a bude využívána pro vizualizaci aktivního stavu procesoru. Zpět k portu D, dva nejnižší bity jsou součástí rozhraní USART, které si popíšeme později, až narazíme na jeho řídící piny. Další čtyři bity portu D (12,13,14,16) budou nastaveny jako vstupy s interním vytahovacím rezistorem, pomocí něhož bude možné rozlišit stav připojeného přepínače. Funkce přepínače v době návrhu nebyla konkrétně určena, ale při programování většinou přepínač pomáhá s laděním a v konečné fázi výroby se plánuje jeho použití ke konfiguraci připojených snímačů na vstupy konstruovaného převodníku METEO. Asi
Kapitola 4. Návrh hardware
27
nejdůležitějším pinem z portu D je sedmí bit (PD6), který je nastaven jako vstup a přepnut do své druhé funkce tzv. ICP (Input Capture Pin) vztahující se k čítači T1. Procesor si po přijetí pulzu zaznamená stav čítače, touto metodou se dá lehce změřit frekvence či perioda příchozích pulzů (viz kapitola 6.6.1 a 6.6.2). Port C zprostředkovává programování a ladění procesoru. Piny PC2-PC5 ve svém neportovém módu umožňují komunikaci rozhraní JTAG. Rezistory 10kΩ na vstupech slouží jednak pro definování úrovní těchto signálů a dále umožňují pomocí pájení připojení vodičů od JTAG ICE emulátoru společnosti Atmel. JTAG emulátor se využívá pouze při odlaďování programového vybavení na jednom konkrétním plošném spoji, a proto není potřeba navrhovat na plošném spoji připojovací JTAG konektor. Nejnižší dva bity portu C jsou připojeny na ADS1112 převodník. Signálové vodiče se nazývají SCL (hodinový signál) a SDA (datový signál) a patří ke sběrnici I2C popisované v kapitole 4.4.1. Obvod komunikující v popisovaném převodníku METEO pomocí rozhraní I2C je převodník ADS1112 chovající se pochopitelně jako slave. Ostatní bity portu C zůstanou nezapojeny. Další v pořadí využité vývody jsou řídící signály směru toku dat /RE, DE pro komunikaci rozhraním RS485. Zbytek bitů portu A nebudeme potřebovat. Pro detekci přítomnosti pulzů obsahující informaci o směru větru slouží bit PB1 (pin 41), který je nastaven jako vstup. Na tento vstup nepřichází všechny pulzy od anemometru, ale pouze „mělké“ pulzy. Kontrolováním bitu PD6 a PB1, pak budeme počítat poměr hlubokých a mělkých pulzů, čímž získáme směr větru. Konečně bity PB3 a PB4 jsou připojeny přímo na vstup celého převodníku a budou sloužit jako signálové vodiče pro speciální sběrnici miniaturního čidla měřícího relativní vlhkost a teplotu vzduchu. Rozhraní USART Komunikační rozhraní USART (The Universal Synchronous and Asynchronous serial Receiver and Transmitter) asi není nutné dlouze představovat, neboť je nejhojněji používaným sériovým rozhraním. Paralelně uložíme data do jeho výstupního posuvného registru a rozhraní data sériově odešle po lince. Umožňuje současnou oboustrannou komunikaci (full-duplex), asynchronně nebo synchronně, přenášená data mohou být zabezpečena sudou nebo lichou paritou (i dalšími druhy parit) a dokonce mohou být i různých délek od 5 do 8 bitů. Rozhraní USART mikrokontroléru ATmega32 dokáže detekovat chybu rámce nebo overrun (zahlcení).
Kapitola 4. Návrh hardware
28
V asynchronním módu jsou data uvozena start bitem a stop bitem. Start bit je vždy opačné polarity než je normální klidový stav na lince. Stop bit je opakem start bitu (hrana přechodu nízké - vysoká). Oba speciální režijní bity vytváří potřebnou mezeru pro synchronizování vysílače a přijímače a zároveň oddělují jednotlivá data. V synchronním módu získává přijímač synchronizační informaci přímo z oddělených hodin narozdíl od asynchronního módu, kde je tedy synchronizace realizována pomocí start a stop bitů, které uvozují každý rámec dat. Absence pomocných bitů zefektivní přenos, neboť se režijní bity (start, stop) odstraní, a tím se stane více bitů datových. Výhodou asynchronního přenosu je, že pokud se linkou nepřenáší žádný payload (uživatelská data bez režijních dat linky) může se celá linka uspat. Synchronní mód však vyžaduje zasílání znaku (angl. pad) pro synchronizování přijímače a vysílače. Častou značkou je ASCII znak SYN, který je většinou posílán automaticky bez nutné ruční obsluhy. AVR ATmega32 obsahuje oba typy spojení, ale v převodníku bude používat pouze asynchronní mód, neboť je linka po většinu času v klidovém idle módu a data se posílají pouze výjimečně. Docílíme tak možnosti uspání komunikačních obvodů, která efektivně snižuje spotřebu až k µA. Sériový přenos na straně vysílače začíná bitem s nejnižší váhou LSB a postupně jsou do linky vysunovány i ostatní bity, konče posledním MSB bitem. Rychlost posílání (baudrate) se určuje v baudech [Bd]. Typická hodnota bývá 9600 – 115 200 baud. Jednotka baud znamená počet změn signálu na lince. Často se plete s dalším podobným údajem, a to s počtem přenesených symbolů za vteřinu (bitrate) udávaných v jednotkách bit/s, protože pro většinu rozhraní (kromě např. QAM) se hodnoty obou jednotek rovnají včetně U(S)ARTu. Můžeme tedy počítat s bity za vteřinu (bit/s). U jednotky UART procesorů AVR vzorkuje přijímač každý bit 16-krát tzn. 16krát rychleji než je nastavena přenosová rychlost (baudrate). Chyba při vzorkování jednotlivých bitů způsobí nahození bitu FE (Frame Error) ve stavovém registru přijatých dat USR (UART Status Register). Když je přijat celý byte, přenese se do registru přijatých dat UDR. Není-li UDR registr před zápisem prázdný, nahodí UART příznak OF (Overrun Flag) v registru USR. Registr UDR je nulován (vyprazdňován), když byla data z UDR již přečtena. Neprázdný registr tedy značí, že přijímač je zaneprázdněn, neboť si ještě nestačil načíst data (byte) z předchozího rámce. V dokumentaci procesoru ATmega32L jsou konkrétní tabulky k nastavování vhodné rychlosti k různým frekvencím oscilátorů, nebo-li rychlosti hodinových pulzů
Kapitola 4. Návrh hardware
29
procesoru, včetně informací a obrázků o principu vzorkování a inicializaci rozhraní UART. Dále zmíníme snad jen tabulku pro externí krystal 3,6864MHz Tabulka 4.6-1 Chybovost u různých rychlostí komunikace vzhledem k volbě krystalu
a obecný vzorec pro výpočet hodnoty registru UBRR, z kterého procesor určuje rychlost přenosu baudrate. UBRR =
fosc −1 16 ⋅ baudrate
kde fosc je frekvence hodinových pulzu procesoru. Registr UBRR může být pouze celé číslo, proto je pochopitelné, že přenosová rychlost nemůže být ledajaká. Výsledné hodnoty dělení nesmí generovat chybu přenosové rychlosti větší než 1,5 - 3% podle situace. Vzorkování bitů by pak probíhalo s chybou, která se u jednotlivých bitů načítá a u posledního stop bitu by způsobila již velkou odchylku.
Kapitola 5. Realizace hardwaru v praxi
31
5. Realizace hardwaru v praxi Schéma převodníku jsem si nechal zadat jako semestrální projekt již v zimním semestru v rámci předmětu Konstrukce a realizace elektrických obvodů (X13KEO). Když bylo schéma navrženo, otestoval jsem důkladně jeho funkčnost na nepájivém kontaktním poli. Dalším krokem bylo schéma správně označit a hlavně vybrat součástkám vhodná pouzdra. Poté došlo k vyexportování schématu a vytvoření tzv. netlistu, který se přenesl do další etapy vedoucí k výrobě plošného spoje. Před samotným pozicováním součástek na desku plošného spoje bylo potřeba dokreslit obvody, které nebyly standardně v knihovnách návrhového programu. V případě převodníku měřícího globální radiaci a vítr se jednalo především o A/D převodník s označením ADS1112, který se doplnil pomocí jeho dokumentace obsahující přesné rozměry pouzdra. Po volbě pouzder a dokreslení potřebných obvodů se již mohlo přistoupit k samotnému umísťování entit na plošný spoj. Práce byla vedena s ohledem na eliminování možného výskytu nežádoucích vlastností vodivých cest při špatném návrhu. Důraz byl kladen na správné rozmístění součástek z hlediska minimalizace délky propojovacích signálů a přitom zachování malých rozměrů navrhovaného plošného spoje. Především by to mělo platit u hlavních vodivých cest jako jsou napájení a země. Hustě propletené cesty nebo smyčky mohou zapříčinit zvýšení indukčnosti obvodu, která může způsobit neočekávané změny v chování celého zapojení. Dále lze při propojování součástek doporučit nastavení odpovídající tloušťky cesty vzhledem k množství protékajícího proudu. Asi nejdůležitějším pravidlem je správné, co nejtěsnější, umístění blokovacích kondenzátorů k jednotlivým obvodům, aby nedocházelo k vzájemnému odebírání energie obvody.
Kapitola 6. Návrh softwaru
33
6. Návrh softwaru Po zkonstruování plošného spoje můžeme přikročit k programování firmwaru. Navrhneme si základní strukturu programu, vysvětlíme stěžejní funkce a postupy práce, ale nejdříve se seznámíme s použitým způsobem programování, vývojovým prostředím a vlastnostmi procesoru, které jsou z pohledu programátora důležité.
6.1. Programovací jazyk a vývojové prostředí Řadu let se pro programování mikrokontrolérů používal převážně assembler. Jen u větších aplikací se zapojovaly i další vyšší jazyky jako C, Pascal nebo Basic. V současné době se od assembleru upouští a kromě primitivních mikrokontrolérů se hojně využívá vyšších programovacích jazyků (VPJ), neboť assembler je méně přehledný, hůře upravovatelný a špatně přenositelný kód oproti jeho nástupcům. Programování mikrokontrolérů ve VPJ přináší omezení funkcí a celkový záběr je oproti klasickým vyšším programovacím jazykům používaných na PC minimální. Proto se nedá pokládat programování MCU s pomocí VPJ za výrazně neefektivní oproti striktně úspornému assembleru. Dnes se již nemusíme příliš ohlížet na kódem zabírané místo v MCU, protože cena paměťového prostoru dostatečně klesá a je tedy výhodnější zaplatit větší paměť a programátora VPJ než ušetřit na paměti a připlatit za zdlouhavou práci na vývoji v assembleru. Dalším důvodem rozšíření VPJ je fakt, že výrobci mikrokontroléru začali před několika lety uvádět na trh nové čipy uzpůsobené pro snadnější programování ve vyšších jazycích. Mezi tyto MCU patří i procesor 8bitový ATmega firmy Atmel, který je používán v konstruovaném převodníku, proto také bude firmware programován ve vyšším programovacím jazyce ANSI-C. Přístup k psaní kódu pro mikrokontrolér se liší od běžného programování pro platformu PC nepřímo úměrně velikosti MCU. Pro malé 8-bitové mikrokontroléry musí být programátor připraven řešit problémy s rozmísťováním dat a kódu (specifické modely paměti), s používáním správných datových typů a správné adresace a například obsluhy přerušení. Efektivnost kódu záleží na citu programátora při jeho tvorbě a hlavně na výběru kompilátoru vyššího jazyka, kterých je dnes k dispozici velké množství lišících se různě uživatelsky příjemným prostředím a efektivností při převodu kódu. Správná optimalizace dokáže zkrátit výsledný kód někdy až o mnoho procent oproti původní velikosti. Optimalizační metody jsou vůbec to nejcennější, co v sobě překladače skrývají.
Kapitola 6. Návrh softwaru
34
Zadavatelská firma vlastní licenci na poměrně kvalitní kompilátor ICC AVR firmy ImageCraft, ve kterém bude programován i konstruovaný převodník. Drobným neduhem jinak efektivního kompilátoru je jeho uživatelské prostředí, které se vždy nechová intuitivně, proto jsem k úpravě kódu často používal další utility, např. široké veřejnosti známý freewarový editor PSPad od českého autora. ICC AVR je vývojové prostředí, které obsahuje překladač jazyka C a velké množství podpůrných knihoven s předpřipravenými makry a funkcemi, které neuvěřitelně ušetří práci programátorovi, neboť se ve většině případů může oprostit od práce s hexadecimálními čísly, např. místo 0x15 lze zapisovat PORTC, což se snáze zapamatuje. Nahazování a shazování bitových položek, adresy přerušení, porty i specifické registry každého AVR procesoru mají obšírně zpracovaná makra uložená většinou v souboru ioxxx.h, kde x odpovídá typu MCU. Pro jejich použití stačí pouze připojit patřičný hlavičkový soubor ke konkrétnímu typu mikrokontroléru. Přeložený program byl načítán do AVR Studia, odkud byl nahráván do programovaného převodníku a posléze laděn. Nahrávání i ladění bylo prováděno přes zapůjčený emulátor JTAG ICE firmy Atmel. Emulátor využívá pro komunikaci speciální rozhraní JTAG navržené speciálně pro tuto funkci Atmelem. Kromě ladění převodníku přímo AVR Studiem umožňujícím nastavování většiny jednotlivých bitů snad každého registru procesoru (bity portů, čítače, atd.) jsem dále využíval osobní počítač s programem Terminal [12], který byl připojen k plošnému spoji přes redukci rozhraní RS232 na RS485. Počítač mi sloužil jako budoucí nadřazená jednotka převodníku.
6.2. Teoretický úvod 6.2.1.
Přípravy před samotným programování
JTAG konektor se používá pouze pro ladění při vývoji a plošný spoj jím není osazen, proto bylo potřeba naletovat vodiče emulátoru přímo na destičku. Po odladění při sériové výrobě se na programování používá rozhraní SPI, jehož konektor již osazen je. Před započetím práce s procesorem je nutné nastavit tzv. pojistky (propojky) angl. FUSES, kterými se nastavují základní parametry procesoru např. volba rozhraní pro programování nebo volba externího krystalu.
Kapitola 6. Návrh softwaru
6.2.2.
35
Stručně o parametrech procesoru
Přestože bude programování procesoru prováděno na vyšší vrstvě v jazyce C nikoliv v assembleru, je vhodné zmínit se v krátkosti o struktuře jádra a parametrech AVR čipu. ATmega32L je 8-bitový procesor typu RISC. Jeho architektura souboru instrukcí (ISA) je tedy redukovaná. Každá instrukce (až na výjimky) má délku 16 bitů (dvoubytové slovo). Podle teoretických předpokladů zaujímá kód firmwaru více místa, ale vykonávání instrukcí je o několik taktů rychlejší, cca až desetkrát oproti běžnému CISC, jak udává firma Atmel. Harvardská architektura předurčuje procesoru společnou paměť programu a dat. U modelu ATmega32L je paměť technologie FLASH a pojme 32kB. Paměť programu je dále rozdělena do dvou bloků označovaných jako zavádějící (zavaděč – angl. bootldr) a aplikační část. Zavaděč bývá zpravidla na začátku paměti a zastává stejnou funkci jako u stolních počítačů; obsahuje základní kód. Další pamětí je SRAM obsahující data, která se často mění např. uživatelské registry, protože na rozdíl od (levnější) FLASH paměti není citlivá na množství přepisů. Pro uchování informace musí být bohužel stále napájena, její kapacita je 2kB. Poslední pamětí je 1kB EEPROM, která uchovává většinou neměnné hodnoty, protože oproti předchozímu zmiňovanému typu paměti je několikrát pomalejší. V převodníku ji pravděpodobně ani nebudeme využívat. Procesor disponuje 32 registry, dvěma 8-bitovým a jedním 16-bitovým inteligentním čítačem (funkce porovnávání, dělička, capture) a množstvím již zevrubně popsaných periférií. Další informace jsou obsaženy v příloze.
6.3. Programovací styl Projekty vytvářené v prostředí ICCAVR mají klasikou stromovou strukturu se soubory jazyka C; soubor kódu (*.c) a k němu náležící hlavičkový soubor (*.h). Projekt programu je členěn na partie dle obsluhy jednotlivých čidel a komunikace. Kód se tak stává přenositelnějším a přehlednějším. V drtivé většině případů platí, že makro se jmenuje stejně jako registr v oficiální dokumentaci k procesoru. Při programování se nezačalo na „zelené louce“, ale s výhodou se některé části kódu již připravené k implementování na webových stránkách výrobců čipů převzaly
Kapitola 6. Návrh softwaru
36
např. zdrojové kódy pro obsluhu snímače vlhkosti a teploty vzduchu nebo rozhraní I2C, které se s malými úpravami daly snadno použít pro aplikaci převodníku.
6.4. Nástin funkčnosti programu Stručná kostra budoucího programu by měla vypadat podobně jako v bodech navržená osnova níže. U některých bodů však nemusí být přesně dodrženo pořadí, ve kterém budou vykonávána. •
•
Inicializace procesoru 1. Inicializace portů 2. Nastavení ostatních registrů na potřebné výchozí hodnoty programu 3. Nastavení přerušení 4. Inicializace Watchdogu Hlavní nekonečná smyčka programu 5. Testování, zda nechce komunikovat nadřazená jednotka 6. Případné navázání spojení a odeslání dat 7. Měření jednotlivých veličin 8. Uspání v době nečinnosti
Obrázek 6.1 Vývojový diagram programu
Kapitola 6. Návrh softwaru
37
Nesmíme však zapomínat, že do nastíněné kostry programu mohou zasahovat i různá přerušení, která často radikálně ovlivní průběh programu. Samotný kód přerušení by měl být krátký, aby procesor stihl obsloužit i další přerušení, která se mohou objevit těsně za sebou. V inicializaci (bodech 1 až 4) se nastaví všechny potřebné hodnoty, pro start převodníku po prvním spuštění nebo resetování. Inicializační procedury jsou tedy vykonávány pouze jednou na začátku programu, pak následuje hlavní smyčka programu, která by měla stále dokola měřit snímané veličiny a ukládat je do paměti nebo dle požadavků řídící jednotky je v určitých intervalech na vyzvání posílat přes UART potažmo RS485, jak bylo popsáno v předešlých kapitolách.
6.5. Inicializace Začátek programu pro mikrokontrolér musí deklarovat výchozí nastavení portů. Každý bit portu se dá nastavit jako výstup či vstup pomocí makra DDRn, kde n je substituentem za jedno z písmen A až D podle portu. Makro DDRn odpovídá stejnojmennému 8-bitovému registru a jednotlivé bity odpovídají číselně pinům portu. Registr PORTn nastavuje logickou úroveň bitu (pinu). Pokud je bit výstupem, znamená nahození odpovídajícího bitu v PORTn, že na výstupu bude log.1 v opačném případě log.0. Ve stavu, kdy je bit vstupem (bit portu DDRn = 0), PORTn určuje existenci vytahovacího (pull-up) rezistoru na vstupu. Vzhledem ke kapitole 4.6 o mikrokontroléru můžeme prohlásit, že nejdůležitějším portem převodníku je port označovaný D, proto si podrobněji popíšeme jeho výchozí nastavení v konstruovaném převodníku. Nejnižší bit portu PD0 by měl pracovat jako přijímací datový pin pro UART, proto ho bude potřeba nastavit vstup. Naopak PD0 sloužící k vysílání UARTem bude nastaven na výstup. Třetí pin slouží k buzení LED diody proudem z mikrokontroléru. Dioda je připojená proti napájení, aby při svícení neodebírala proud přímo z MCU. Bit PD2 by tedy měl být nastaven jako výstup a nahazováním (dioda nesvítí) nebo shazováním (dioda svítí) patřičného bitu registru PORTD se dá později v programu ovládat dioda. Na podobném principu je připojeno pole přepínačů. Poslední nožička portu PD6 bude využívána ve funkci Input Capture, proto musí být na sedmou pozici do registru DDRD uložena log.0 (vstup) a do PORTD také log.0 (bez vytahovacího rezistoru). Jak bude vypadat kompletní nastavení celého portu D je znázorněno další tabulkou a výpisem kódu.
Kapitola 6. Návrh softwaru
38
Tabulka 6.5-1 Nastavení portu D – registry DDRD a PORTD bit 0 1 2 3
vstup/výstup in out out in
úroveň pull-up log.1 log.1 pull-up
bit 4 5 6 7
vstup/výstup in in in in
úroveň pull-up pull-up pull-up
/* PORT D */ /*vstup/výstup*/ #define RESET_DDRD
BIT(1)|BIT(2)
/* úroveň*/ #define RESET_PORTD
BIT(0)|BIT(1)|BIT(2)|BIT(3)|BIT(4)|BIT(5)|BIT(7)
Makrem RESET_DDRn a RESET_PORTn se pak v inicializační funkci naplní registry DDRn a PORTn. Přednastavením registrů a datových struktur na potřebné výchozí hodnoty máme namysli např. nastavení registrů čítačů nebo připojených zařízení. Konkrétnější informace se objevují v následujících kapitolách o softwarové implementaci. Dalším inicializačním krokem je nastavení potřebných přerušení procesoru. Ve firmwaru převodníku nebude využíván žádný z externích interuptů, kromě situace kdy je procesor uspaný, pak se procesor probouzí právě externě z I/O rozhraní. Proto je nyní možné externí přerušení maskou zakázat. Z interních přerušení využije přerušení u čítačů a rozhraní, ty budeme nastavovat později. Watchdog Dá se říci, že watchdog (překl. hlídací pes) je služba obvodu, která slouží ke kontrole běhu programu. Pokud watchdog usoudí, že se program zasekl nebo překročil jemu vymezenou oblast paměti, způsobí resetování celého procesoru. Princip hlídání spočívá v inkrementování speciálního čítače taktovaného samostatným oscilátorem. Kmitočet taktování může být dále dělen vestavěnou děličkou, což umožňuje u ATmega32L nastavit interval čítání od 16ms do 2048ms. V rámci zvoleného intervalu musí dojít někde v programu k nulování čítače watchdogu jinak dojde k přetečení, které nastaví příznak pro resetování procesoru.
Kapitola 6. Návrh softwaru
39
Správné nastavení děliče pro čítač je jedna z obtížných pasáží programování mikrokontrolérů. Při krátkém intervalu může dojít k předčasnému resetování MCU, dříve než se doměří směr větru. Naopak při dlouhém intervalu může zabloudivší procesor poškodit data v paměti (viz. testy EMC). V našem případě je nejkritičtější doba měření směru větru při bezvětří.
6.6. Implementace měřící funkce Námi konstruovaný převodník Meteo měří volitelný počet veličin, o kterých je potřeba předávat si několik stavových hodnot nebo výsledků. Proto je pro každou veličinu vytvořen jeden prvek v poli datových struktur nazvané AktVal obsahující potřebné proměnné specifikující daný měřený subjekt (směr větru, hodnota globální radiace). Měřené veličině budeme dále také říkat kanálová veličina nebo přímo kanál. Jedním z parametrů kanálu je typ připojeného zařízení, který se bude využívat v měřící funkci. V hlavní smyčce programu, která byla popsána na předchozích stránkách, se při požadavku na měření volá funkce, která postupně získává hodnoty jednotlivých kanálových veličin. Cyklus si ve funkci načte parametry jednotlivých kanálů a spouští příslušné obslužné kódy pro každé připojené zařízení. Na konci měření je výsledek uložen do proměnné Vysledek, a pokud se objevila chyba je nastavena i stavová proměnná. Po každém vyhodnocení kanálu je volána funkce vypoctimereni, která naplní odpovídající prvek pole datových struktur hodnotami výsledku.
6.6.1.
Měření rychlosti větru
Informaci o rychlosti větru získáváme pomocí vstupu přivedeného na pin procesoru číslo 15. Četnost pulzů je přímo úměrná rychlosti větru. Stačí tedy určit frekvenci, pomocí které pak lze dopočítat samotnou rychlost. Signál je připojen na vstup se speciální funkcí Capture, umožňující si zaznamenávat stav jednoho z čítačů (counter T1) procesoru při příchodu pulzu na vstup. Jak celé měření funguje? Při prvním příchodu pulzu si ve vyvolané obsluze přerušení nastartujeme vnitřní čítač, který se nám inkrementuje přednastavenou rychlostí vztaženou k frekvenci krystalu procesoru. Frekvence mikrokontroléru musí být dělena s ohledem na přesnost a předpokládanou rychlost větru (v našem případě 8x). Čítač tedy běží a při příchodu dalšího pulzu nám jeho hodnotu procesor přenese do registru (ICR1L/H). Získanou hodnotu si uložíme do pole vzorků , abychom celý postup mohli znova
Kapitola 6. Návrh softwaru
40
opakovat a nedošlo k přepsaní starší hodnoty v registru. S nabývajícími hodnotami začínáme čísla průměrovat, dostaneme tak přesnější výsledky. Rychlost větru nakonec získáme spočítáním trojčlenky z parametrů anemometru (hz_paranem - frekvence odpovídající 30 m/s) a frekvence inkrementování čítače, kterou určíme z počtu taktů mezi dvěma příchozími pulzy.
Rychlost =
6.6.2.
f MCU 30m / s ⋅ hodnotaT 1 hz _ paranem
Měření směru větru
Měření směru větru je lehčí úlohou než měření rychlosti, ale žádá si ošetření stavů bezvětří či slabého větru, kdy se vrtulka anemometru nemusí celá otočit. V tomto případě pak nemůžeme napočítat všech 36 pulzů, z kterých se směr určuje. Musíme proto kontrolovat počet přetečení čítače a po určitém počtu přetečení prohlásit, že vítr přestal foukat. Jinak bychom mohli čekat donekonečna na pulz, který nemusí přijít (bezvětří). Při příchodu přerušení od čítače způsobené objevením se pulzu na vstupu (pinu 15) uložíme hodnotu registru ICR1, ale také inkrementujeme proměnnou, která nám bude odpočítávat počet pulzů, tedy modulo 36. Dále budeme při každém přerušení kontrolovat logickou úroveň signálu na pinu 41, udávající nám, zda jde o pulz hluboký či mělký. Jeden z typů pulzů je pak potřeba počítat další proměnnou, abychom zjistili poměr jejich výskytů. Pokud zjistíme, že daný pulz je právě třicátým šestým pulzem máme všechny potřebné hodnoty pro vyhodnocení směru větru. Počet hlubokých či mělkých pulzů nám udává 10-krát zmenšenou hodnotu počtu stupňů vychýlení korouhve anemometru od severní světové strany (pokud je anemometr správně nainstalován viz. předchozí kapitoly).
6.6.3.
Měření globální radiace
Měření globální radiace spočívá v načítání registru analogově-číslicového převodníku ADS1112 komunikujícího po rozhraní I2C. Při programování komunikace jsem si ušetřil práci stažením již předpřipraveného návodu s řešením (Application Notes) z webových stránek výrobce čipů firmy Atmel [2] a [3]. Na první pohled se sice jedná o jiné neznámé rozhraní TWI, ale ve skutečnosti jde o stejné I2C. Změna
Kapitola 6. Návrh softwaru
41
označení na TWI (two-wire interface) je zřejmě z důvodu nezakoupení autorských práv od firmy Philips, jakožto majitele. Hodnotu vyčtenou z A/D převodníku stačí pouze přepočítat z dílků (0-64000) na jednotky globální radiace [W/m2] a uložit do patřičné proměnné.
6.6.4.
Měření teploty a vlhkosti vzduchu
Pro měření teploty a vlhkosti vzduchu bylo zapotřebí seznámit se se specifickým rozhraním čidla SHT1x/SHT7x, které je podobné rozhraní I2C, ale vyjadřuje jinak start/stop bit. Přímo na stránkách výrobce [11] a na [14] je k dispozici ukázkový kód pro komunikaci, který jsem rovněž s výhodou použil jako při programování I2C a jen mírně upravil např. vyhodnocování chyb. Obrázek níže ilustruje nejužívanější způsob výměny dat – čtení registru snímače. Bit TS označuje začátek přenosu – Transmission Start.
Obrázek 6.2 Cyklus čtení dat ze snímače typu SHTxx
Zavoláním funkce merSHTxx, kterou jsem si upravil z
main funkce
ukázkového přikladu, pak přímo plním proměnné výsledku kanálů pro teplotu a vlhkost vzduchu v měřící smyčce programu.
6.7. Komunikace Po vykonání měřící funkce máme k dispozici výsledky měření popřípadě číslo chyby díky funkci vypoctimereni, která nám naplnila pole datových struktur AktVal[číslo kanálu] a můžeme přistoupit k odeslání dat. Ve firmwaru převodníku jsou naprogramovány dva způsoby odesílání dat – tzv. Debug a Finet metoda. Metoda Debug byla využívána při programování a ladění firmwaru. Odesílání Debug umožňuje přečíst si změřené výsledky přes freewarový program Terminal [12], windowský terminál nebo jiný program schopný získávat data ze sériového rozhraní počítače. Příkazy metody jsou v současné verzi uvozeny podmínkou, aby se odesílání aktivovalo pouze při debugování a nekolidovalo s druhou metodou komunikace, ale snadnou úpravou by se dalo mezi oběma metodami přepínat např. jednou z klávesek na „piánku“.
Kapitola 6. Návrh softwaru
42
Druhou možností odesílání je komunikace Finet. V hlavní smyčce programu se testuje podmínka s FINETRequest, která rozhoduje o uložení dat do vnitřní paměti EEPROM převodníku Meteo nebo odeslání řídící jednotce protokolem Finet. Příchod požadavku na komunikování způsobí okamžité odeslání dat bez uložení do paměti převodníku. V opačném případě se data neodešlou, ale pouze uloží do paměti. FINETRequest je nastavován, pokud přijde na vstup převodníku požadavek pro komunikaci a je shazován po dokončení komunikace. Soubory s implementovaným firemním protokolem Finet i s principem ukládání dat do paměti jsem převzal z firemních firmwarů k ostatním používaným snímačům v zadavatelské firmě. FINET FINET je binární protokol s pevným rámcem (úvodní a ukončovací znak) určený pro přenos po duplexních i poloduplexních komunikačních kanálech. Každý měřící přístroj (dále MP) se vždy chová jako SLAVE zařízení. Komunikaci vždy navazuje nadřízený systém na principu dotaz odpověď. MP odpovídá na každý dotaz pro něj určený, pokud ne, jedná se o závažnou chybu v komunikaci. Důležitým parametrem je doba označená jako klid na lince. Ta je podmínkou pro rozeznání začátku bloku dat. Obvykle je nastavena na trojnásobek doby potřebné k odeslání jednoho bytu. Tato prodleva je nutná jak na straně SLAVE mezi přijetím dotazu a odesláním odpovědi, tak i na straně MASTER po přijetí odpovědi před vysláním dalšího dotazu. Druhým časovým parametrem je maximální doba mezi jednotlivými byty zprávy. Po jejím vypršení je zbytek zprávy ignorován a čeká se na příchod nové zprávy (SLAVE) nebo se vyšle opakovaný dotaz (MASTER). Obvyklé nastavení kom. portu je 19200 baud, 8 bitů, žádná parita , 1 stop bit a žádné řízení toku dat. MASTER zařízením může být jiný přístroj firmy FIEDLER-MÁGR nebo PC s programem MOST.
Kapitola 6. Návrh softwaru
43
Směr PC -> MP - Zpráva (dotaz) bez datového pole SD1 DA SA FC FCS ED Směr PC -> MP - Zpráva (dotaz) s datovým polem SD2 LE LER SD2R DA SA FC DATA.. FCS ED Směr MP -> PC - Odpověď bez datového pole - krátké potvrzení SACK Směr MP -> PC - Odpověď s datovým polem SD2 LE LER SD2R DA SA FC DATA.. FCS ED
SD1 – úvodní znak 1 SD2 – úvodní znak 2 LE – délka dat, je roven vlastní délce dat + 3 (DA,SA,FC) LER – opakovaná délka dat SD2R – opakovaný úvodní znak 2 DA – cílová adresa SA – zdrojová adresa FC – řídící byte – definuje konkrétní službu protokolu FINET DATA – vlastní předávaná data FCS – kontrolní součet jako bytový součet všech bytů položek DA,SA,FC a DATA se zanedbáním vyšších řádů vzniklých přenosem (modulo 256) ED – koncový znak SACK – krátké potvrzení
6.8. Uspávání Uspávání jednotky není přímo řízené na určitou dobu, ale funkce pro uspávání nazvaná aplsmycka je volána průběžně v místech zdrojového kódu, kde se očekává nějaká doba nečinnosti procesoru. Příkladem může být například čekání mezi dvěma pulzy anemometru, kdy stačí, aby běžel pouze čítač a zbytek mikrokontroléru může být tvrdě uspán a vyčkávat na externí přerušení. Uspávání je velmi efektivním prostředkem ke snižováním spotřeby převodníku. Funkce aplsmycka má i další úkoly jako občerstvování výše zmíněného watchdogu. Proto je vhodné ji volat, kdykoliv je to možné.
Kapitola 7. Testování
45
7. Testování 7.1. Hardwarové části zařízení Po osazení plošného spoje součástkami jsem provedl postupné testování jednotlivých obvodů. Naměřené hodnoty proudové spotřeby a délky jednotlivých pulzů generovaných monostabilními obvody odpovídaly teoretickým a předem spočítaným. Komplikace nastala u komparátoru MAX931, kde vznikl problém nedůsledným prostudování katalogového listu. Parametry použitého obvodu v SMD provedení byly odlišné od parametrů obvodu použitého při testování funkce na nepájivém poli. Stalo se tak, že komparátor nedokázal zareagovat na krátký pulz (3 µs) od anemometru, protože byl pomalý a reagoval až na pulzy dvakrát delší. Problém se zdál být vyřešen odstraněním diody paralelně k indukčnosti. Po „vyštípnutí“ diody vznikly sice zákmity na signálu, ale komparátor již bezchybně komparoval. Zákmity se odstranily na následném monostabilním klopném obvodu. Vedlejším efektem úpravy bylo mírné prodloužení pulzů, to však nemělo vliv na jejich vyhodnocování mikrokontrolérem. Bohužel se destička neprověřila celá a přehlédlo se, že vznikl problém na jiném místě. Funkce MKO, které mělo prodlužovat všechny pulzy přicházející od anemometru, začalo prodlužovat pouze hluboké pulzy, protože dělič před MKO nestahoval napětí až pod aktivní úroveň klopného obvodu. Shodou okolností se popsaný problém zjistil až při programování firmwaru a značně zpomalil vývoj prací. Konečné plně funkční řešení pak vzniklo přerušením cesty od rezistorového děliče k vstupu obvodu 555 a naletováním vazebního kondenzátoru s děličem na vstup monostabilního klopného obvodu. Kondenzátor tedy oddělil stejnosměrnou složku před děličem od vstupu MKO a propustil pouze špičky – pulzy. Schéma opravy je vidět na následujícím obrázku, kde jsou změny vyznačeny barevně. Všimněte si, že schází dioda a je přerušena cesta z děliče na vstup obvodu 555, kterou bylo nutné přerušit mechanicky. Celé schéma převodníku naleznete v příloze.
Příloha
46
Obrázek 7.1 Oprava původního schématu
7.2. Testování celkové funkčnosti Testování správných výsledků měření bylo v některých případech obtížné, protože jsem neměl k dispozici potřebné referenční přístroje, s jejichž hodnotami bych mohl absolutně porovnávat výsledky, např. rychlosti větru. Proto jsem některé veličiny ověřoval pouze s pomocí osciloskopu a spoléhal se na papírově předpokládané fyzické vlastnosti snímačů. Správnost některých veličin se tedy pouze teoreticky odhadla. Testování se často omezilo na prověřování vstupu převodníku vůči jeho výsledku na výstupu bez vztahu k externím fyzickým okolnostem (skutečná rychlost větru). Některé výstupy snímačů byly pouze simulovány. Platí-li, že vztahy pro vypočítání měřených jednotek jsou ve zdrojovém kódu správně napsány, dá se ze softwarového hlediska očekávat, že hodnoty na výstupu převodníku Meteo budou: chyba, nulová hodnota nebo přesný výsledek. Usuzuji tak z faktu, že ve většině případů se vlastně jednalo spíše o získávání již správně určených hodnot z registrů A/D převodníku než o přímé měření. Přesnost by měla být dána již analýzou konstrukce. Při testování směru větru se však žádné referenční přístroje používat nemusely a o správnosti výsledků se mohlo rozhodnout přesně. Hodnoty a poloha korouhve, které byly zjištěny testováním, jsou přehledně zapsány do následující tabulky.
Kapitola 7. Testování
47
Tabulka 7.2-1 Testování měření směru větru
pozice korouhve na značce anemometru vychýlení kolem 3 stupňů vychýlení kolem 7 stupňů proti značce anemometru vychýlení kolem -7 (353) stupňů vychýlení kolem -3 (357) stupňů
odesílaný výsledek 0 0 10 180 350 0
Měření rychlosti větru bylo prověřeno pomocí ventilátoru, s kterým se podařilo naměřit maximální rychlost cca 6 m/s (22 km/h), což odpovídá frekvenci 280 Hz objevování pulzů na vstupu převodníku. Součinností s osciloskopem se dále testovala minimální měřitelná rychlost větru. Při frekvenci kolem 7 Hz ještě posílal převodník nenulové informace o rychlosti větru (cca 0,15 m/s), pod touto hrací však již odesílal nulu. Snímač globální radiace jsem byl nucen simulovat pouze zdrojem napětí od 02V. Při zkratování vstupů pro snímač (0V) převodník ukazoval malou chybu kolem 40 dílků, která byla pravděpodobně způsobena nepřesně vyrobeným měřícím odporem a neideálností přívodních cest k A/D převodníku. Odchylka bude jistě pro každý výrobek specifická, proto by bylo vhodné naprogramovat převodníku režim kalibrace, který by dané nuance eliminoval. Jelikož se nepočítá s velkovýrobou převodníků, vyřešil jsem kalibraci ručním nastavením počátečních koeficientů při programování zařízení. Lepším řešením by bylo samozřejmě implementovat složitější rozhraní pro ovládání převodníku přes RS485, které by kalibraci umožňovalo, což by ale nebylo efektivní při vyrobeném počtu kusů. Chyba určování globální radiace před zmíněným seřízení by dělala méně než 1 W/m2. Převodník byl navrhován s ohledem na spotřebu, proto je důležité také změřit odběr proudu zařízení v různých režimech, abychom si mohli udělat představu o výdrži akumulátoru. Tabulka 7.2-2 Naměřené hodnoty spotřeby
stav spotřeba aktivní režim procesoru 8 mA s komunikací 13 mA s připojeným anemometrem 16 mA s anemometrem a komunikací 20 mA
Připojení snímače globální radiace by pravděpodobně zvýšilo spotřebu o dalších až 20 mA. Bohužel jsem snímač neměl k dispozici na otestování.
Kapitola 8. Závěr
49
8. Závěr Firemní problém s nekomplexností současných převodníků na trhu a nedostatkem vstupů u jednotky M4016 jsem vyřešil vytvořením převodníku dat pro zpracování signálů od měřících snímačů, který dovoluje připojení několika snímačů najednou. Tento převodník, označovaný jako Meteo, také umožní připojení specifických snímačů, které u zadavatelské firmy zákazníci poptávali, ale firma nebyla schopná jejich požadavky uspokojit. Převodník dat Meteo je realizován přesným 16bitovým analogově-číslicovým převodníkem a procesorem AVR ATmega32L firmy Atmel, který složí ke komunikaci a zpracovávání dat z připojených snímačů a A/D převodníku. Parametry se budou nastavovat přes řídící jednotku M4016, což bude obsahem dalších prací na převodníku spolu s realizací zobrazování výsledků měření na internetu. Komplexnější uživatelské prostředí pro správu přes PC nebylo realizováno, protože firma do budoucna neočekává jeho využívání. Firmware převodníku byl programován v jazyce ANSI C, využitím programů ICC AVR a AVR Studio. Pro ladění sloužil emulátor JTAG ICE určený pro procesory AVR. Přesnost měření převodníku je silně závislá na kvalitně vyrobených měřících rezistorů. Při realizaci jsem použil rezistory s teplotním driftem 15ppm, což umožnilo měření vstupních signálů s přesností 0,16% pro měření globální radiace, která je nejrizikovější. U anemometru přesnost zpracování několikrát přesahovala konstrukční přesnost. Díky volbě součástek s nízkou spotřebou a snížením frekvence procesoru externím krystalem jsem docílil nízkého odběru proudu převodníku (až 8mA). Velikost spotřeby odpovídá požadavkům zadavatelské firmy. Po odzkoušení obvodu na nepájivém poli byl navržen plošný spoj, na jehož realizaci byly použity jiné typy součástek (SMD verze). Díky rozdílným vlastnostem součástek a nevhodnému návrhu části obvodu pak vznikla chyba. Obvod komparátoru přestal reagovat na krátké pulzy od snímače anemometru, což způsobilo nemožnost měření směru větru. Oprava byla provedena mechanickou úpravou plošného spoje a doplněním vazebního kondenzátoru.
Kapitola 9. Seznam literatury
51
9. Seznam literatury [1]
Atmel AVR 8-bit RISC http://www.atmel.com/products/avr/overview
[2]
AVR 8-Bit RISC - Application Notes http://atmel.com/dyn/products/app_notes.asp?family_id=607
[3]
AVR315: Using the TWI module as I2C master http://atmel.com/dyn/resources/prod_documents/doc2564.pdf
[4]
AVR Freaks http://www.avrfreaks.net
[5]
Cuthbert Nyack, Page Index For Analog Signal Processing http://cnyack.homestead.com/files/idxpages.htm
[6]
Guidelines for Proper Wiring of an RS-485 (TIA/EIA-485-A) Network, Application Note 793, Maxim Dallas Semiconductor http://www.maxim-ic.com/appnotes.cfm?appnote_number=763&CMP=WP-1
[7]
Haasz V., Novák J., přednášky předmětu Měření na číslicových obvodech
[8]
HW group (hw server), informace o sběrnicích http://www.hw-group.com http://www.hw.cz
[9]
Electronic Components Datasheets http://www.datasheetarchive.com
[10]
O. Vysoký a kol., materiály k předmětům Elektronické systémy I a II
[11]
Sensirion, the sensor company – ukázkové zdrojové kódy pro snímač SHTxx http://www.sensirion.com/images/getFile?id=235
[12]
Terminal Br@y’s http://bray.velenje.cx/avr/terminal
[13]
Wikipedia – the free encyclopedia http://www.wikipedia.org
[14]
Zdrojový kód pro snímač SHTxx ftp://ftp.onsetcomp.com/Public/TattleTale/Manuals/Sample_Code_SHTxx_E_v20.pdf
Příloha
53
A Specifikace mikrokontroléru ATmega32 • •
•
•
•
• •
Výkonný 8bitový AVR Mikrokontroler Vylepšená RISC Architektura o 131 instrukcí (většina vykonávána v jediném hodinovém cyklu) o 32x8 univerzálních pracovních registrů o až 16 MIPS při 16 MHz o On-chip 2cyklový multiplikátor Nezávislá programová a datová paměť o 32 kB Flash paměti – In-System, Self-Programmable (až 10 000 cyklů zápis/vymazání) o Boot Code sekce s nezávislými Lock Bity o 1024 Bytů EEPROM (100 000 cyklů zápis/vymazání) o 2kB interní SRAM o programovací zámek pro bezpečnost softwaru Periferie o dva 8bitové časovače/čítače s oddělenými Prescaler a Compare módy o čtyři 16bitové časovače/čítače s oddělenými Prescaler, Compare a Capture módy o Real time counter s odděleným oscilátorem o čtyři PWM kanály o 8kanálový 10bitový ADC 8 single-ended kanálů 7 diferenčních kanálů 2 diferenční kanály s programovatelným zesílením 1x, 10x nebo 200x o Bitově orientované dvoudrátové sériové rozhraní o programovatelný sériový USART o Master/Slave sériové rozhraní SPI o programovatelný Watchdog timer se samostatným On-chip oscilátorem o On-chip analogový komparátor Speciální vlastnosti MCU o Power-on Reset a programovatelná Brown-out detekce o Interní kalibrovaný RC oscilátor o Externí a interní zdroje přerušení o šest režimů spánku: Idle, ADC Noise Reduction, Power-save, Powerdown, Standby a Extended Standby I/O o 23 programovatelných I/O linek Pracovní napětí: 2.7 až 5.5V
Příloha
55
B Realizace plošného spoje
Obrázek B.1 Schéma převodníku
Příloha
56
Obrázek B.2 Plošný spoj – strana součástek (B - TOP)
Příloha
57
Obrázek B.3 Plošný spoj – strana spojů (A - BOTTOM)
Příloha
59
C Fotografie
Obrázek C.1 Osazený plošný spoj
Příloha
60
Obrázek C.2 Anemometr
Obrázek C.3 Snímač globální radiace
Příloha
61
D Obsah přiloženého CD Tabulka D.3 Stromová struktura přiloženého CD
Katalogové listy k použitým součástkám Text práce ve formátu MS Word a PDF Zdrojové kódy firmwaru