VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky
U n i v e r z á l n í ro z h r a n í p ro P C bakalářská práce
Autor: Petr Vávra Vedoucí práce: Ing. Bc. David Matoušek Jihlava 2011
Anotace Bakalářská práce Univerzální rozhraní pro PC popisuje návrh a výrobu zařízení, popis jeho komunikace s PC a návrh komunikační knihovny v podobě DLL knihovny pro windows. Součástí práce je i jednoduchá ukázková aplikace a vlastní zařízení.
Klíčová slova Jednočipový mikropočítač, ATMega16, rozhraní pro PC, DLL knihovna, C++ Builder
Anotation Bachelor thesis Universal interface for PC describes
the design and manufacture
of
equipment, contains description of their communication with the PC, design and deicribes communication libraries as DLLs for Windows operating systems. The work also includes a simple sample application and device which were built.
Keywords Microcontroler, ATMega16, interface for PC, DLL library, C++ Builder
Poděkování Na tomto místě bych rád poděkoval vedoucímu práce, Ing. Bc. Davidu Matouškovi za odborné připomínky a publikovanou literaturu, která mi pomohla s realizací bakalářské práce. Také bych chtěl poděkovat své rodině, bez jejíž pomoci a tolerance by nebylo studium a vypracování této práce možné.
Prohlašuji, že předložená bakalářská práce je původní a zpracoval jsem ji samostatně. Prohlašuji, že citace použitých pramenů je úplná, že jsem v práci neporušil autorská práva (ve smyslu 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ů, v platném znění, dále též „AZ“). Souhlasím s umístěním bakalářské práce v knihovně VŠPJ a s jejím užitím k výuce nebo k vlastní vnitřní potřebě VŠPJ . Byl jsem seznámen s tím, že na mou bakalářskou práci se plně vztahuje AZ, zejména § 60 (školní dílo). Beru na vědomí, že VŠPJ má právo na uzavření licenční smlouvy o užití mé bakalářské práce a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.). Jsem si vědom toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem VŠPJ, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených vysokou školou na vytvoření díla (až do jejich skutečné výše), z výdělku dosaženého v souvislosti s užitím díla či poskytnutím licence. V Jihlavě dne 10.6.2011
Podpis
Obsah Obsah ................................................................................................................................ 7 1
Úvod a cíl práce ......................................................................................................... 9
2
Teoretická část ......................................................................................................... 10 2.1
Volba procesoru ............................................................................................... 10
2.1.1
3
Procesor Atmel AVR ATMega16............................................................. 11
2.2
Digitální vstupy a výstupy ............................................................................... 12
2.3
Analogové vstupy a výstupy ............................................................................ 12
2.3.1
Obvod analogového vstupu ...................................................................... 13
2.3.2
Obvod analogového výstupu .................................................................... 14
2.4
Propojení s počítačem ...................................................................................... 15
2.5
Napájecí obvody............................................................................................... 15
Praktická část ........................................................................................................... 17 3.1
Návrh zapojení ................................................................................................. 17
3.1.1
Mikroprocesor, digitální vstupy a výstupy ............................................... 19
3.1.2
Komunikace přes USB, galvanické oddělení ........................................... 20
3.1.3
Analogové vstupy ..................................................................................... 20
3.1.4
Analogové výstupy ................................................................................... 22
3.1.5
Napájecí obvody ....................................................................................... 24
3.2
Návrh plošného spoje, osazení desky............................................................... 24
3.2.1
Osazení vyrobené desky plošných spojů .................................................. 27
3.2.2
Naprogramování procesoru, kontrola funkce ........................................... 28
3.3
Programové vybavení mikroprocesoru ............................................................ 29
3.3.1
Čtení analogového vstupu ......................................................................... 30
3.3.2
Zápis na analogový výstup ....................................................................... 31
3.3.3
Nastavení směru digitálních portů ............................................................ 32
7
3.3.4
Čtení digitálního vstupu ............................................................................ 32
3.3.5
Zápis na digitální výstup ........................................................................... 33
3.3.6
Další části programového vybavení mikroprocesoru ............................... 33
3.3.7
Příkazy rozpoznávané deskou univerzálních rozhraní.............................. 34
3.4
3.4.1
Knihovna IOBRD_DLL – popis funkcí poskytovaných knihovnou ........ 37
3.4.2
Ukázka aplikace pro vyzkoušení funkcí desky univerzálních rozhraní .... 38
3.5 4
Obslužná DLL knihovna pro PC v C++ Builderu ............................................ 35
Praktické zkušenosti z realizace a některé naměřené hodnoty......................... 39
Závěr ........................................................................................................................ 43
Literatura ......................................................................................................................... 44 Seznam obrázků .............................................................................................................. 46 Přílohy............................................................................................................................. 47
8
1
Úvod a cíl práce
Jako téma své bakalářské práce jsem si vybral vytvoření univerzálního rozhraní pro PC. Toto rozhraní by mělo být použitelné při výuce, mě téma zaujalo jako zajímavá výzva k bližšímu seznámení se s použitím jednočipových mikropočítačů a možnosti jejich využití k vytvoření periferních zařízení k osobním počítačům. Pro samotné vyřešení problému návrhu rozhraní jsem musel jednak podle možností najít vhodný jednočipový mikropočítač a seznámit se s jeho vlastnostmi a programováním. Další neméně zajímavou částí je návrh rozhraní pro zvolený mikropočítač tak, aby splňovala zadání bakalářské práce a současně aby výsledné zařízení bylo dostatečně odolné proti chybám zapojení a použitelné při výuce pro samostatnou práci studentů. Neméně zajímavou částí je vlastní výroba zařízení, návrh desky plošných spojů, její výroba a oživení a návrh programového vybavení mikropočítače i obslužné knihovny pro jeho použití s počítačem.
9
2
Teoretická část
2.1
Volba procesoru
Po prozkoumání možností jednočipových mikropočítačů jsem pro použití ve své práci zvolil jednočipový mikropočítač firmy Atmel Corporation z řady osmibitvých mikropocesoru AVR ATMega. Procesory Atmel AVR jsou procesory s redukovanou instrukční sadou RISC, jejich výkon je 1MIPS na 1MHz hodinového kmitočtu. Pro realizaci práce jsem potřeboval procesor, který bude mít dostatek vstupních a výstupních portů, bude vybaven A/D převodníkem pro realizaci analogových vstupů a umožní D/A převod pro realizaci analogových výstupů. Současně jsem hledal procesor, který bude umožňovat komunikaci s osobním mikropočítačem. Řada procesorů AVR ATMega mě zaujala jednak existancí všech potřebných periferí, ale také tím, že firma ATMEL k nim nabízí pokročilé rozhraní pro tvorbu aplikací a jejich ladění – AVR Studio, které umožňuje tvorbu a ladění aplikací jednak v Assembleru, ale především v C a C++, k čemuž využívá volně dostupného GNU C++ překladače. Během studia jsem se seznámil s procesory řady 8052 firmy Intel, které jsou dodnes používané a vyráběné, ale nedisponují potřebnými periferiemi a především používají komerční překladače a nástroje pro ladění, které přináší při použití volně dostupné verze omezení nejčastěji ve velikosti výsledného kódu. Stejně tak pro procesory PIC firmy Microchip, které jsou modernější a splňovaly by požadavky na vstupní a výstupní rozhraní jsem nenašel vhodný překladač programovacího jazyka C nebo C++, který by byl volně dostupný a neměl omezení velikosti výsledného kódu. V neposlední řadě byla zajímavým parametrem i cena, kdy procesory AVR ATMega vhodné pro realizaci byly levnější než procesory PIC firmy Microchip. Nejlevněji vycházejí procesory Intel 8052, ale neobsahují například A/D převodník, což by pro realizaci zadání znamenalo použití samostatného A/D převodníku a tím nutnost volby komplikovanějšího obvodového řešení. Při hledání vhodného modelu procesoru s ohledem na jednoduchost dalších periferních obvodů jsem zvolil procesor firmy Atmel z řady procesorů AVR ATMega, konkrétně model ATMega16, případně ATMega32, který je vyráběn a prodáván i v pouzdře PDIP40 umožňujícím osazení procesoru v patici a jeho snadnou výměnu v případě poškození. Pro minimalizaci rizika poškození procesoru jsou jednotlivé vstupy a výstupy odděleny v případě digitálních vstupů a výstupů obousměrnými budiči sběrnice, analogové obvody vstupů a výstupů jsou navrženy tak, aby jednak zvládly 10
krátkodobé přivedení vyššího napětí, než je požadovaný měřicí rozsah a současně použitý operační zesilovač snáší krátkodobě zkrat na výstupu.
2.1.1 Procesor Atmel AVR ATMega16 Použitý procesor je používá pokročilou RISC architekturu, jeho instrukční sada tak disponuje pouze 131 instrukcemi, z nichž většina je proveditelná v jednom hodinovém cyklu. Pro práci je k dispozici 32 osmibitových registrů. Procesor má k dispozici i hardwarovou děličku, která dokáže provést operaci celočíselného dělení ve dvou hodinových cyklech. Jako zdroj hodinového kmitočtu se dá použít jednak interní RC oscilátor v procesoru pracující volitelně na frekvenci 1, 2, 4 nebo 8MHz, případně externí zdroj hodinového kmitočtu nebo oscilátor s krystalovým rezonátorem. V případě použití externího zdroje hodinového kmitočtu je možné procesor používat podle výrobce na frekvenci až 16MHz a dosahuje pak výpočetního výkonu až 16MIPS. Při realizaci jsem ale zvolil oscilátor s krystalovým rezonátorem na frekvenci nižší, konkrétně 14.7456MHz, která umožňuje dosažení přesnějšího hodinového signálu pro sériový přenos. Procesor obsahuje 16 kilobytů paměti Flash pro umístění programu a podporuje programování osazeného procesoru v obvodu. Pro běh programu je k dispozic 1024 bytů paměti SRAM a 512 bytů paměti EEPROM pro uchování dat. Za běžných provozních podmínek by data v paměti Flash a EEPROM měla vydržet 100 let, paměť Flash vydrží podle výrobce 10 tisíc cyklů zápisu a mazání, paměť EEPROM až 100 tisíc cyklů zápisu a mazání. Procesor disponuje poměrně velkým počtem použitelných periferií. Mnoho vývodů procesoru tedy sdílí několik různých funkcí podle nastavení příslušných registrů. Jejich kompletní popis je dostupný v dokumentaci výrobce, ze které jsem údaje pro tento stručný přehled čerpal. (1) Pro realizaci jsem univerzální desky rozhraní jsem použil celý port A procesoru, jehož jednotlivé piny jsou současně vstupy A/D převodníku pouze pro měření napětí. Celý port B je přes obousměrný oddělovač sběrnice vyveden jako osmibitový digitální vstupní nebo výstupní port 1. Současně jsou na desce vyvedeny na pinovou lištu signály pro ISP programování především pro potřeby oživování a vývoje programového
11
vybavení doplněné o RESET signál procesoru tak, aby bylo možné procesor programovat bez nutnosti vyjímat ho z patice. Port C procesoru je opět celý vyveden přes obousměrný oddělovač sběrnice jako vstupní nebo výstupní digitální port univerzální desky rozhraní. Na portu D procesoru jsou k dispozici periferie, které jsem využil pro realizaci dalších funkcí. Pro komunikaci s počítačem je použit sériový port USART komunikující prostřednictví signálů příjmu (RXD) na pinu 0 portu D a vysílání (TXD) na pinu 1 portu D. Pro realizaci analogového výstupu jsem použil možnosti samotného procesoru a to funkce PWM jeho obvodů čítače a časovače. V režimu FastPWM, který je použit pro generování signálů s proměnnou střídou impulsů na dvou kanálech řízených společně čítačem/časovačem 1 slouží jako výstupy piny 4 (OC1A) a 5 (OC1B). Ze zbylých 4 pinů portu D jsou dále 3 použity jako řízení směru oddělovačů sběrnic digitálních vstupů a výstupů komunikačního modulu a jeden řídí signál, který ovládá třístavové výstupy budičů sběrnic. Na tyto tři signály jsou připojeny i indikační LED diody.
2.2
Digitální vstupy a výstupy
Jako digitální vstupy a výstupy jsou použity přímo porty procesoru, které jsou na výstupní konektory typu MLW10 zapojené podle (2) tak, aby bylo možné na ně přímo připojit některé ve škole při výuce používané přípravky, vyvedeny přes obousměrné osmibitové oddělovače/budiče sběrnice realizované integrovaným obvodem 74245 (3). Oddělovače zajistí bezpečnější provoz procesoru a umožní větší zatížení výstupů. Obousměrné oddělovače/budiče sběrnice jsem zvolil pro lepší možnosti využití digitálních portů. Oba osmibitové porty mohou být programově nakonfigurovány buď jako vstupní, nebo jako výstupní. Nastavení portu jako výstupního je indikováno LED diodou. Použité obvody 74245 mají třístavové výstupy a po resetu univerzálního rozhraní jsou přepnuty softwarově do stavu s vysokou impedancí. Tento signál je společný pro oba budiče, programově je deaktivován při konfiguraci některého z budičů sběrnice jako vstupního nebo výstupního.
2.3
Analogové vstupy a výstupy
Pro realizaci analogových vstupů a výstupů je použito možností procesoru. Analogové signály zpracovává v procesoru vestavěný A/D převodník s postupnou aproximací a 12
analogovým multiplexorem vstupů. Výstupní signál pro analogový výstup je získáván pomocí jednoduchého RC článku připojeného na výstup PWM signálů procesoru. Tento RC článek filtruje frekvenci PWM signálu a zůstává na něm stejnosměrné napětí odpovídající měnitelné střídě impulsů v PWM signálu. Pro úpravu rozsahu vstupního a výstupního napětí je použito zapojení s operačním zesilovačem. Svými parametry se výborně hodí čtyřnásobný operační zesilovač TL074 (4) – jde o čtveřici nízkošumových operačních zesilovačů ve společném pouzdře s JFET vstupy s velkou vstupní impedancí a s ochranou proti zkratu na výstupu. Alternativně lze použít obvody TL084, které mají nepatrně horší šumové parametry, což v použité aplikaci nevadí, případně nízkopříkonový model TL064.
2.3.1 Obvod analogového vstupu Analogový signál je na desce univerzálních rozhraní převáděn na digitální prostřednictvím A/D převodníku s postupnou aproximací obsaženém v použitém procesoru. Pro zajištění požadovaného rozsahu vstupních napětí univerzálních analogových vstupů je ale potřeba signál pro převodník v procesoru upravit a také zajistit ochranu vstupu procesoru tak, aby se na něm nemohlo objevit napětí mimo povolené úrovně. Pro použití u analogového vstupu se jako nejvhodnější ukázala volba použít diferenciální zesilovač, který se pro měření napětí ideálně hodí. Na výstupu diferenciálního zesilovače získáme napětí úměrné rozdílu napětí mezi vstupy zesilovače. Obrázek 1. Schéma zapojení diferenciálního zesilovače
Parametry diferenčního zesilovače určují hodnoty rezistorů. Běžně se volí shodné velikosti rezistorů na pozicích R1=R3 a R2=R4. V literatuře (5) najdeme kompletní 13
odvození vztahu pro výstupní napětí operačního zesilovače v diferenciálním zapojení v závislosti na napětí vstupním a velikosti odporu použitých rezistorů. Při zachování uvedeného předpokladu volby shodných dvojic rezistorů platí pro výstupní napětí vztah:
Kromě změny velikosti napěťového rozsahu je pro potřeby A/D převodníku nutné posunout stejnosměrnou napěťovou úroveň. Při návrhu konstrukce jsem potřebného posunu napětí dosáhl změnou zapojení a neinvertující vstup operačního zesilovače jsem pomocí rezistoru R2 připojil nikoliv na potenciál signálové země, ale na napětí odpovídající polovině rozsahu A/D převodníku. Toto napětí je poskytnuto napěťovou referencí TL431 (6), jejíž základní napětí je právě 2.5V. V neposlední řadě je nutné zajistit, aby napětí z analogového vstupu po průchodu operačním zesilovačem nemohlo ohrozit vstup A/D převodníku procesoru. Ochrana vstupu je realizována dvojicí opatření. První opatření je volba vstupního rozsahu o něco většího tak, aby mezní hodnoty s rezervou dostačovaly. Pokud by i tak došlo k výraznému překročení (více než dvojnásobek definovaného rozsahu vstupu), objeví se na výstupu operačního zesilovače napětí, které by mohlo poškodit procesor. Pro zamezení tohoto možného poškození je výstup chráněn zenerovou diodou, která v závěrném směru spolu s ohranými obvody proti zkratu na výstupu zajistí, že napětí nepřesáhne ani při chybě bezpečné hodnoty pro A/D převodník procesoru. V opačné polaritě měřeného napětí se ochranná zenerova dioda otevře v propustném směru. Tím je jednoduše zajištěna ochrana před poškozením procesoru. Nevýhodou ochrany se zenerovou diodou je její vyšší kapacita, která by mohla při větších frekvencích měření ovlivňovat.
2.3.2 Obvod analogového výstupu Pro realizaci analogových výstupů jsem zvolil prakticky stejné zapojení diferenciálního zesilovače jako u vstupních obvodů. U výstupních obvodů je neinvertující vstup přes rezistor R2 spojen s napětím poskytnutým napěťovou referencí a výstupní napětí je dáno zesílením rozdílu napětí mezi filtrovaným PWM signálem a napětím z napěťové reference.
14
2.4
Propojení s počítačem
Pro komunikaci univerzální desky s počítačem bylo specifikováno použití USB rozhraní. Komunikaci přes USB bohužel jednoduché a levné jednočipové mikropočítače přímo neumějí, je tedy nutné řešit jinou metodu propojení. Jedna z možností je použití softwarové emulace USB pomocí samotného mikroprocesoru. Pro procesory Atmel existují funkční implementace toho propojení. Druhá možnost byla využít standardní vyráběné součástky například v podobě obvodů firmy Future Technology Device International Ltd. Toto řešení je sice dražší, ale spolu s obvodem získává zákazník z hlediska specifikací USB správné identifikátory výrobce a zařízení (USB Vendor ID a USB Product ID). Pro sériovou komunikaci je k dispozici čip FT232R, který poskytuje vše potřebné pro realizaci rozhraní pro připojení procesoru prostřednictví sériové komunikace a minimem vnějších součástek. Obvod FT232R (7) obsahuje i paměť EEPROM, v níž je uložena jeho konfigurace. Pro galvanického oddělení komunikační a měřicí části jsou pro přenos dat mezi procesorem a řadičem použity optočleny. Univerzální deska rozhraní tak neohrozí činnost připojeného počítače. Část univerzální desky rozhraní s obvodem FT232R a optočleny je napájena přímo z USB sběrnice a není se zbytkem obvodu nijak vodivě spojena.
2.5
Napájecí obvody
Pro univerzální desku rozhraní potřebujeme několik různých napětí. Současně je ale požadavek na napájení desky pouze jedním běžným napájecím zdrojem. Vzhledem k předpokládanému odběru jednotlivých částí, kde největší proudový odběr bude mít samotný mikrokontrolerr, rozhodl jsem se základní napájecí napětí přizpůsobit právě procesoru. Použitý procesor Atmel ATMega 16 v základní verzi pracuje s napájecím napětím 4.5V až 5.5V. S dostatečnou tolerancí pro jeho napájení vyhoví běžný 5V stabilizovaný zdroj. Jako ochrana proti přepólování zdroje je použita běžná křemíková dioda, která chrání obvody před připojením napájecího napětí s opačnou polaritou. Napájecí napětí přímo z napájecího adaptéru napájí procesor a oddělovače digitálních vstupů a výstupů. Přes LC článek je z něj podle doporučení výrobce procesoru napájen i A/D převodník procesoru. Pro
analogovou
část
je
potřeba
získat
několik
dalších
napětí.
Vzhledem
k požadovanému rozsahu výstupního napětí -10V až +10V je potřeba, aby běžný 15
operační zesilovač byl napájen napětím asi o 2V vyšším. Potřebujeme tedy získat symetrické napájecí napětí pro operační zesilovač alespoň -12V a +12V. Po prozkoumání nabídek integrovaných obvodů realizujících nábojové pumpy jsem zjistil, že pro tak vysoké napětí na výstupu při dostatečném výstupním proudu není možností s ohledem na dostupnost mnoho. Vyrábějí se ale monolitické DC/DC měniče v nejrůznějších výkonech a v širokém rozsahu vstupních i výstupních napětí. Rozhodl jsem se použít měnič firmy QLT Power z 5V vstupních na +15V a -15V výstupních, který poskytne pro napájení analogové části dostatečné napětí i proud. Základní údaje o těchto měničích najdeme na internetu (8) Poslední použité napájecí napětí na univerzální desce je napětí 2.5V získávané z integrované napěťové reference TL431. Toto napětí se používá pro stejnosměrný posun napětí analogových vstupů a výstupů. Pro realizaci se hodí, že je to právě polovina napájecího napětí a současně i polovina zvoleného referenčního napětí A/D převodníku v procesoru. Vzhledem k tomu, že rozsah vstupního napětí A/D převodníku je poměrně velký, používá se napěťová reference i pro kalibraci PWM výstupu po zapnutí a zjištění odchylky napájecího napětí od známého stavu při kalibraci.
16
3
Praktická část
3.1
Návrh zapojení
Ze stavebních prvků popsaných v teoretickém úvodu jsem navrhl zapojení obvodu pro univerzální rozhraní. Při návrhu jsem vycházel především z katalogových údajů výrobců. Některé části obvodu jsem realizoval pokusně na nepájivém kontaktím poli, abych si ověřil jejich funkčnost a vlastnosti, některé bylo nutné doladit až po ověření na prvním funkčním vzorku. Při návrhu jsem bral v úvahu především použití ve škole a případnou snadno opakovatelnou výrobu dalšího kusu. Při návrhu jsem musel využít i součástek v provedení SMD pro povrchovou montáž, částečně z důvodu neexistence součástky v klasickém provedení (například obvod FT232R je k dispozici pouze v SMD provedeni), částečně z důvodu úspory místa (většina pasivních součástek). Kompletní schéma je i součástí elektronických příloh.
17
Obrázek 2. Schéma zapojení - Univerzální rozhraní pro PC
18
3.1.1 Mikroprocesor, digitální vstupy a výstupy Základní zapojení mikroprocesoru odpovídá katalogovým údajům a běžně používanému zapojení uvedenému v literatuře. (2) Mikroprocesor je použit v provedení PDIP40, je osazen v patici pro případnou výměnu nebo pro možnost jeho přeprogramování mimo desku univerzálních rozhraní. Jako zdroj hodinového kmitočtu je použit externí krystal Q1 s kondenzátory C4 a C5. Základní frekvenci jsem volil nižší než maximální především z důvodu jejího možného vydělení tak, aby byl získán co nejpřesnější kmitočet pro sériové rozhraní. Kapacitu kondenzátorů C4 a C5 jsem volil podle doporučení v dokumentaci výrobce procesoru (měla by být v rozsahu 12pF až 22pF). (1) Pro napájení A/D převodníku procesoru jsem použil filtraci napájecího napětí pomocí LC článku tvořeného cívkou L1 a kondenzátorem C6. Zapojení nepoužívá žádný resetovací obvod, konfigurací procesoru je zajištěn start programu až uběhnutí 64 tisíc hodinových cyklů, což postačuje pro ustálení napájecího napětí. Navíc jsem v konfiguraci mikroprocesoru aktivoval hardwarovou kontrolu podpětí, která po poklesu napájecího napětí pod povolenou mez provede reset procesoru. Pro účely ladění programu jsou vyvedeny signály pro ISP programování na pinovou lištu SV3. Je určena pouze pro oživování a ladění na prvních kusech, nemusí být osazována. Pro ISP programování je navíc nutné vyjmout z patice budič sběrnice IC2. Signály portů B a C jsou vyvedeny na obousměrné osmibitové budiče sběrnice reprezentované obvody IC2 a IC3, které jsou umístěny v paticích. Tyto obvody zajišťují oddělení digitálních portů dostupných uživateli od samotného procesoru. Obousměrné budiče sběrnic jsem volil z důvodu možnosti konfigurace portu jako vstupu nebo výstupu, což je realizováno jejich vstupem DIR ovládaným z mikroprocesoru prostřednictvím bitů 6 a 7 portu D. Na ovládací signály jsou připojeny LED diody LED1 a LED2 indikující, že port je nastaven jako výstupní. Obvody 74245 jsou vybaveny třístavovým výstupem, který umožní přepnutí pinů do stavu s vysokou impedancí. Přepnutí do tohoto stavu zajišťuje signál G, ovládaný je společně pro oba budiče bitem 3 portu D, na tento signálový vodič je opět připojena LED dioda LED7, která indikuje neaktivní digitální vstupy a výstupy na univerzální desce rozhraní.
19
Digitální porty jsou vyvedeny na konektory SV1 a SV2, po mechanické stránce jde o konektory MLW10G a jejich zapojení jsem volil shodné se zapojením popsaným v literatuře (2) a používaným ve škole při výuce. Některé moduly tak půjde použít i při práci s touto deskou rozhraní.
3.1.2 Komunikace přes USB, galvanické oddělení Pro spojení s počítačem pomocí sběrnice USB jsem zvolil řešení využívajícího čipu FT232RL firmy FTDI. (7) Na schématu je to obvod IC6. Vyniká minimem potřebných vnějších součástek. Jeho použití ale znamená nutnost pracovat s SMD součástkami, v klasickém pouzdře se nevyrábí. Je použit v základním katalogovém zapojení s napájením z USB konektoru. Zapojení je doplněno o LED diody které indikují napájení z USB sběrnice LED5 a přenos dat pomocí LED3 a LED4. Požadavek na galvanické oddělení je řešen pomocí optočlenů OK1 a OK2, které oddělují signály spojené s USB sběrnicí od zbytku obvodu. Jako optočleny jsou použity běžné optočleny FOD817 nebo jejich ekvivalenty, podle výrobce je jejich udávané izolační napětí až 5kV. Tyto optočleny jsou podle výrobce určeny pro použití v obvodech napájecích zdrojů a v mikroprocesorové technice. Na straně mikroprocesoru jsou připojeny optočleny k vývodů RXD a TXD, které jsou společné s bity 0 a 1 portu D mikroprocesoru a představují vestavěný obvod UART. Hodnoty kolektorových rezistorů R30 a R32 jsem určil experimentálně měřením v zapojení na kontaktním poli. Případnou inverzi signálu dokáže řešit použitý obvod FT232RL svou konfigurací, obě zapojení optočlenů jsou tedy shodná, z kolektoru připojeného pře rezistor na napájecí napětí se odebírá logická úroveň, emitor je spojen s příslušnou signálovou zemí buď v obvodu USB rozhraní, nebo v obvodu mikroprocesoru.
3.1.3 Analogové vstupy Pro realizaci vstupních analogových obvodů jsem zvolil zapojení operačního zesilovače jako diferenciálního zesilovače. V tomto zapojení je zpracováváno napětí přiváděné přes rezistory na vstupy operačního zesilovače. Pro co nejnižší ovlivňování měřeného obvodu jsem volil na vstupu rezistory s větším odporem.
V návrhu jsem počítal
s přesnějším výběrem rezistorů pro nastavení zesílení, ale nakonec jsem tuto možnost
20
nevyužil. Při použití rezistorů s tolerancí 20% bylo vybírání kusů a přesné nastavování obvodu zbytečně náročné a zvolil jsem tedy využití dalšího zpracování počítačem a výpočtu správné hodnoty z kalibračních hodnot. Při kontrole této varianty v testovacím zapojení na kontaktním poli jsem zjistil, že tolerance rezistorů způsobují zlom charakteristiky výstupního napětí v oblasti nulového napětí, pro výpočet tedy používám dva lineární úseky charakteristiky. Dělicím bodem je právě zkalibrované nulové napětí, další kalibrované body jsou požadované maximum pro kladný rozsah a požadované minimum pro záporný rozsah. Při návrhu zesílení vstupního diferenčního zesilovače jsem volil parametry tak, aby výsledné zesílení bylo menší, než poměr požadovaného rozsahu vstupního napětí a rozsahu napětí zpracovaného A/D převodníkem. Vstupní rozsah napětí v zadání práce je 20V. Vstupní rozsah A/D převodníku v procesoru je dán velikostí připojeného referenčního napětí. V práci používám nastavení převodníku takové, že jako referenční napětí se používá napětí napájecí, vstupní rozsah převodníku je tedy 5V. Požadované zesílení operačního zesilovače je tedy maximálně 0,25. Navíc je třeba počítat s rezervou pro možné nižší napájecí napětí procesoru, ta je podle katalogových údajů 10%, další rezervu je třeba nechat na tolerance použitých součástek, která je 20% a také mírnou odolnost proti chybě obsluhy. V návrhu obvodu jsem tedy volil zesílení obvodu 0,15 až 0,20. Při zesílení 0,15 a desetibitovém převodu vychází napětí na převodníku v požadovaném maximu na 20V*0,15=3V. Toto napětí odpovídá po převodu s referencí 5V hodnotě 614.
Potom velikost napětí odpovídající jednomu kroku A/D převodu bude:
Nejmenší měřitelný krok napětí tedy odpovídá 33mV. Podle měření pokusného zapojení a možností jednoduchého obvodu jsem si jako dosažitelnou přesnost měření stanovil hranici 100mV. Konkrétní hodnoty rezistorů v zapojení jsem volil (značení rezistorů je pro první analogový vstup) takto: R1=R5
2,7MΩ
R2=R3=R4=R34
560kΩ
21
Výsledné zesílení obvodu teoreticky vychází takto:
Toto zesílení je v předpokládaném rozsahu 0,15 až 0,20. Pro posun napětí jsem využil experimentálně ověřenou možnost připojit rezistor R2 nikoliv na střed napájecího napětí, ale na výstup napěťové reference zvolené jako polovina výstupního rozsahu. Operační zesilovač pak při nulovém vstupním napětí udržuje na výstupu právě napětí získávané z použité reference. To umožňuje jedním operačním zesilovačem řešit celé zpracování vstupního analogového signálu pro vstup A/D převodníku. Na výstupu operačního zesilovače je přes rezistor R6 připojena zenerova dioda D1 se stabilizačním napětím 5,1V. Funguje jako další ochranný prvek při překročení vstupního rozsahu a omezuje maximální možné napětí na vstupu převodníku, případně napětí záporné. Rezistor R6 se uplatní pouze v teoretickém případě zničení operačního zesilovače takového, že by se na jeho výstupu objevilo celé napájecí napětí. Za normálních okolností jeho funkci zastane ochrana použitého operačního zesilovače typu TL074 proti zkratu na výstupu.
3.1.4 Analogové výstupy Použitý mikroprocesor Atmel ATMega 16 nedisponuje interním D/A převodníkem. Obecně se D/A převodníky řeší častěji externím integrovaným obvodem. Mezi další možnosti patří například realizace D/A převodníku pomocí rezistorové sítě připojené na port procesoru, případně s využitím jiné funkcionality běžné u většiny mikroprocesorů – výstupu s pulzní šířkovou modulací – PWM. Princip pulzní šířkové modulace spočívá v generování impulzů dané frekvence s proměnnou střídou. Střída generovaného pravoúhlého signálu pak určuje střední hodnotu odpovídajícího stejnosměrného napětí jednoduchou lineární závislostí, kdy při střídě 0%, tj. žádné impulsy, máme napětí nulové, při střídě 50% právě poloviční a při střídě 100% získáme maximální napětí, v případě výstupu procesoru jde cca o jeho napájecí napětí. Použitý procesor nabízí několik režimů generování PWM signálu, na desce univerzálních vstupů a výstupu se počítá s režimem FastPWM, který umožňuje dva PWM kanály řízené společným čítačem/časovačem s desetibitovým rozlišením. Z výstupu OC1A (případně OC1B), který je součástí portu D procesoru na získáváme pravidelný obdélníkový signál s proměnnou střídou. (1) Stejnosměrné napětí z něj získáme filtrací jednoduchým RC 22
článkem, který je v navrhovaném schématu zapojení realizován rezistorem R14 a kondenzátorem C2. Ten je potřeba navrhnout tak, aby jeho frekvence byla alespoň o řád vyšší, než frekvence generovaného PWM signálu. V zapojení použiji nejvyšší možnou frekvenci generovaného PWM signálu bez předdělení, aby kapacita výstupního kondenzátoru nevycházela zbytečně vysoká. Frekvenci generovaného PWM signálu zjistíme z frekvence procesoru jejím vydělením počtem úrovní PWM signálu. Při desetibitovém rozlišení signálu budeme dělit 1024. Z použité frekvence procesoru 14,7456MHz vychází, že výstupní PWM signál bude mít frekvenci 14,4kHz. Integrační RC článek složený rezistoru R14 a kondenzátoru C2 by měl mít frekvenci o dva řády nižší, aby poskytované napětí mělo malé zvlnění. Pro výpočet jsem použil vztah:
Po úpravě a dosazení zvolených hodnot součástek:
Hodnoty součástek nejsou kritické, při ověření a měření na kontaktním poli zvyšování velikosti kapacity kondenzátoru již nepřinášelo měřitelné zlepšení filtrace PWM signálu. Za integračním článkem je připojen operační zesilovač opět v diferenciálním zapojení. Ve výstupním obvodu je na neinvertující vstup přivedeno napětí z integračního článku, na invertující vstup je přivedeno napětí z napěťové reference 2,5V. Při strídě PWM signálu z impulsů o napětí 5V je tedy a výstupu operačního zesilovače napětí 0V. Požadovaný rozsah výstupního napětí určuje zesílení operačního zesilovače. Ze vstupního rozsahu 5V potřebujeme výstupní rozsah 20V, minimální zesílení obvodu musí být 4, se zohledněním tolerancí použitých součástek jsem volil zesílení 4,5 až 5, které vyhoví z hlediska tolerancí součástek, přesné napětí se opět dopočítá softwarově po kalibraci skutečného obvodu. Výpočet pro konkrétní hodnoty součástek: R16=R17
56kΩ
R38=R39
270kΩ
23
Výstup operačního zesilovače je přímo připojen na výstupní svorku. Podle výrobce má ochranu proti výstupnímu zkratu, při pokusných měřeních jsem zjistil, že tato ochrana opravdu funguje a při zkratu se obvod pouze nepatrně zahřívá. Nevýhoda tohoto jednoduchého řešení výstupního obvodu spočívá v zesílení všech vstupních signálů, tedy i případného zvlnění filtrovaného PWM signálu. Při volbě běžných součástek bez vybírání je patrný zlom jinak lineární charakteristiky v oblasti nulového napětí na výstupu. Nejjednodušší řešení je opět dopočítání softwarem podle hodnot získaných při kalibraci při výstupním napětí 0V a při výstupních napětích -10V a +10V.
3.1.5 Napájecí obvody Pro napájení zařízení se používá běžný stabilizovaný zdroj stejnosměrného napětí 5V. V napájecí větvi jsou filtrační elektrolytické kondenzátory, doplněné blokovacími keramickými kondenzátory s kapacitou 100nF, které jsou umístěny v napájení číslicových obvodů. Pro získání napájecího napětí pro operační zesilovače jse použit integrovaný DC/DC měnič DC1, který napájí operační zesilovače. Na jeho výstupech jsou připojeny filtrační a blokovací kondenzátory v obou větvích napájecího napětí. Součástí napájecích obvodů je i obvod napěťové reference VR1 s přeřadným rezistorem R13 a filtračním kondenzátorem C1, který poskytuje výstupní napětí 2,5V používané jako střed rozsahu A/D převodníku v analogové části a pro základní kalibraci během inicializace programu mikroprocesoru po zapnutí. Použitý obvod napěťové reference TL431 by měl mít podle výrobce dobrou napěťovou a teplotní stabilitu.
3.2
Návrh plošného spoje, osazení desky
Plošný spoj pro výrobu desky jsem navrhoval v návrhovém programu Eagle. Vzhledem k možnostem výroby vlastní desky jsem použil jednostranný plošný spoj s několika drátovými propoji na straně součástek. Použité součástky jsou z velké části v provedení pro povrchovou montáž a umístěné ze strany spojů. Pasivní součástky jsem volil v rozměru 1206, se kterým se mi při ručním osazování lépe pracuje. Při návrhu jsem se snažil o logické uspořádání vstupů a výstupů na okraji desky a o oddělení jednotlivých částí. Rozměr výsledné desky jsem volil podle rozměrů platových krabiček používaných ve škole pro výrobu podobných zařízení jako učebních pomůcek. Výsledný návrh obrazce spojů a osazení součástkami je na následujících obrázcích. 24
Obrázek 3. Navržená předloha DPS
Obrázek 4. Osazení desky plošných spojů součástkami
Seznam součástek použitých pro osazení jedné desky je v následující tabulce. Celková cena součástek při odběru malého počtu kusů v běžných maloobchodech se pohybuje do 650Kč, nejdražšími součástkami je kromě procesoru (cca 120 Kč) obvod rozhraní pro USB sběrnici FT232RL (cca 140 Kč) a DC/DC měnič použitý pro napájení analogové části (podle prodejce od 150Kč do 250Kč). Většina dalších součástek jsou položky 25
v jednotkách korun, včetně použitých integrovaných obvodů operačních zesilovačů a budičů sběrnic použitých pro analogové porty. Obrázek 5. Seznam použitých součástek Součástka
Hodnota
Pouzdro
Počet
C6, C9, C11, C12, C16, C17, C18 C13, C14 C4,C5 C2, C3 C1, C10 C7, C8, C15 C20 C19 D1, D2 D3 DC1 IC1 IC2, IC3 IC3 IC4 IC6 J1 L1 LED3, LED4 LED5, LED1, LED2 LED6, LED7 OK1, OK2 Q1 R22, R23, R24, R26, R33 R25, R29 R27, R28 R20, R21, R30, R36, R37 R6, R12 R13 R31 R32 R14, R15 R38, R39, R40, R41 R1, R5, R7, R9 R2, R3, R4, R8, R10, R11, R34, R35 R16, R17, R18, R19 SV1, SV2 SV3 VR1 X1, X2, X3, X4 X5 Patice 1 Patice 2,3 Patice 4
100n C1206 10uF E2,5-7 18p C1206 1uF E2,5-5 220n C1206 220uF E5-13 330n C025-050X050 470uF E5-8,5 BZX55 5V1 DO35Z10 1N4004 DO41-10 5V -> 2x15V NMA Atmel ATMEGA16-P DIL40 74AC245N DIL20 74AC245N DIL20 TL074P DIL14 FT232RL SSOP28DB DCJ0202 DCJ0202 0.1mH 0207/10 LED zluta LED3MM LED cervena LED3MM LED zelena LED3MM LTV817 DIL04 14.7456 MHz HC49/S 0 R1206 330 R1206 330 0207/10 470 R1206 560 R1206 820 R1206 1k2 R1206 1k5 R1206 1k8 R1206 270k R1206 2M7 R1206 560k R1206 56k R1206 ML10 ISP MA04-1 TO92-CLP AK500/2 USB+SHIELD USB-B-PTH DIL14 DIL20 DIL40
7 2 2 2 2 3 1 1 2 1 1 1 2 1 1 1 1 1 2 3 2 2 1 5 2 2 5 2 1 1 1 2 4 4 8 4 2 1 1 4 1 1 2 1
26
3.2.1 Osazení vyrobené desky plošných spojů Deska byla vyrobena běžnou, v amatérských podmínkách realizovatelnou, fotocestou a ručně vyvrtána. Pro osazení je nejvhodnější osadit nejprve drátové propoje a SMD součástky. Po jejich osazení a kontrole osadit kompletní část USB rozhraní, kde po osazení SMD součástek zbývá osadit ze strany součástek USB konektor, dvojici rezistorů, tři LED diody a dvojici optočlenů a tuto zkontrolovat – obvod FT232RL je samostatně funkční, pokud je správně osazena USB část, měl by jej po připojení počítač rozpoznat. Pokud počítač nalezne nové zařízení a vytvoří pro něj nový sériový port, je tato část zapojení funkční. Po kontrole USB části je možné pokračovat osazením patic a pasivních součástek, po kontrole osadíme i LED diody, zenerovy diody D1 a D2, stabilizátor VR1 a kompletní napájecí část. Po připojení napájení zkontrolujeme, zda svítí dioda LED6, pokud ano, je napájecí napětí správné polarity a v napájecí části není zkrat. Před osazením integrovaných obvodů do patic alespoň voltmetrem překontrolujeme, zda napájecí napětí je na správných pinech, přeměříme také napětí na napěťové referenci, mělo by být 2,5V, pokud se postupovalo správně. Pokud je vše v pořádku, osadíme DC/DC měnič a zkontrolujeme napětí na jeho výstupu. S použitými měniči pravděpodobně naměříme napětí naprázdno vyšší, než očekávaných 15V, ale již odběr několika mA stačí, aby se napětí snížilo na očekávaných 15V. Po vypnutí napájecího napětí vybijeme filtrační kondenzátory na výstupu měniče, nebo chvíli počkáme a osadíme operační zesilovač. Zatím neosazujeme mikroprocesor a překontrolujeme alespoň voltmetrem výstupní napětí operačního zesilovače. Na vstupech procesoru (možno měřit na zenerových diodách) by mělo být napětí přibližně 2,5V, téměř shodné stejné na obou diodách. Na analogových výstupech by se napětí mělo pohybovat kolem -12V. V této chvíli je možné i ověřit že analogová část funguje podle očekávání přivedením napětí na vstupy a kontrolou napětí na diodách, podobně přivedením napětí +5V na kontakty 18 a 19 patice procesoru by se mělo na analogovém výstupu objevit napětí kolem +12V. Pokud vše dosud funguje podle očekávání, je možné osadit již naprogramovaný procesor, nebo použít procesor nový a naprogramovat jej pomocí ISP rozhraní programátorem. Budeme-li programovat procesor zapojený v obvodu, neosadíme zatím budič sběrnice na pozici IC2.
27
V tomto stavu by celá deska měla mít odběr do 200mA. Pokud připojíme ISP programátor můžeme zkusit identifikovat procesor, při správné detekci můžeme postupovat dále k naprogramování procesoru
3.2.2 Naprogramování procesoru, kontrola funkce Obsah paměti procesoru je součástí dokumentace. Při programování jsem používal ISP programátor USBASP zkonstruovaný již dříve podle návodu na internetu. (9) Je možné použít jakýkoliv programátor s podporou ISP programování. Pro správnou funkci je třeba nakonfigurovat parametry procesoru uložené v takzvaných FUSE bitech. Při této operaci je vhodné dávat pozor na nastavení, případná chyba může znamenat, že procesor bude nutné přeprogramovat programátorem podporujícím paralelní programování. Pro správnou funkci přípravku používám nastavení H-Fuse bytu na hodnotu 0xD1, pro provoz desky rozhraní je nutné především vypnutí On Chip Debugeru a zakázání rozhraní JTAG pro programování a ladění progamů – toto rozhraní je-li aktivní blokuje část portu C, který je použit pro digitální vstup a výstup. Pokud se funkce JTAG nezakáže, nebudou některé bity portu C funkční. Naopak povolené musí zůstat SPI programování, aby bylo možné měnit v případě potřeby program mikroprocesoru. Byte L-Fuse používám nakonfigurovaný na 0x0F, což nastaví použití externího krystalového oscilátoru s vyšší frekvencí a zpoždění náběhu programu o tisíc hodinových cyklů a 64ms. Současně toto nastavení povolí detekci poklesu napájecího napětí pod 4V. Po konfiguraci FUSE bitů můžeme do procesoru nahrát připravený program – je součástí .hex souboru v elektronické příloze práce. Po naprogramování by měla po resetu svítit dioda LED7 – pokud se rozsvítila, procesor s programem funguje, je funkční krystalový oscilátor, zatím ale nefunguje komunikace pomocí USB rozhraní. Nyní je třeba ještě nakonfigurovat čip FT232R – pomocí aplikace FT Prog dostupné na webu výrobce (7) nastavíme inverzi signálu pro TX výstup a v sekci IO Controls pak signál C0 jako TXLED# a C1 jako RXLED#. V sekci USB String Description můžeme změnit řetězec Product Description – stejně pak je nutné upravit i volání obslužné DLL knihovny, která se připojuje k zařízení právě podle tohoto řetězce.
28
Obrázek 6. Nastavení parametrů čipu FT232R
Po zapsání konfigurace se mi osvědčilo zařízení od USB sběrnice odpojit a zase ho připojit, aby se zapsané změny konfigurace projevily.
3.3
Programové vybavení mikroprocesoru
Pro vytvoření programového vybavení procesoru jsem použil prostředí AVR Studio ve verzi 5, které umožňuje pohodlné programování v C++ pro všechny mikroprocesory firmy Atmel. Samotný program čte příkazy z UART rozhraní pomocí hotové knihovny pro obsluhu UART publikované autorem pod GNU GPL licencí. (10) Po inicializaci se provádí cyklicky čtení znaků z přijímacího bufferu a hledá se znak konce řádku. Pokud je přijat znak konce řádku, provádí se identifikace přijatého příkazu a jeho potvrzení textem „OK\r\n“, případně výpis vrácené hodnoty v textu zakončený znakem konce řádku a následovaný potvrzovacím řádkem. Pokud dojde k zaplnění bufferu a nepodaří se identifikovat příkaz, obsah buffer se celý ignoruje, při příjmu konce řádku neobsahujícího příkaz se také celý obsah bufferu ignoruje. Příkazy jsou 29
zadávané po sériové lince jako textové zkratky následované identifikací portu a parametry, při konfiguraci a testování jsem používal terminálovou aplikaci komunikující po sériové lince. Zvolená rychlost sériové komunikace je vzhledem k použití komunikace bez potvrzovacích a řídících signálů 9600Bd, při vyšších rychlostech docházelo již ke zvýšené chybovosti, která zpomalovala komunikaci. Speciálním příkazem je příkaz RESET, jehož přijetí vyvolá softwarový reset mikroprocesoru a jeho novou inicializaci. Důležité části použitého kódu uvádím níže.
3.3.1 Čtení analogového vstupu Pro čtení hodnot A/D převodu se v programu mikroprocesoru používá funkce ADC_read, která jako vstupní parametry očekává číslo měřeného kanálu a počet převzorkování měření. Převzorkování jsem doplnil poté, co jsem zjistil, že několik po sobě jdoucích měření stejného napětí vrací při desetibitovém rozlišení převodníku různé výsledky. V dokumentaci procesoru je uvedeno, že přesnost měření je +/- 2 LSB a výrobce v aplikační poznámce AVR121 (11), kterou jsem nalezl až po naprogramování, uvádí metody zpřesnění A/D převodu a jednou z nich je právě průměrování několika po sobě následujících měření. Již průměr 4 vzorků dává dostatečně stabilní výsledky měření. Vlastní realizace měření vypadá takto: uint16_t ADC_read(uint8_t ch, uint8_t resample) { int i,outadc; if (resample==0) resample=1; if (resample>16) resample=16; ADMUX=(1<
// // // //
rezim jednotliveho prevodu cekani na dokonceni prevodu vynulovani priznaku pricteni vysledku prevodu
// vypocet prumeru namerenych hodnot
}
Po dokončení měření je vrácena naměřená hodnota.
30
3.3.2 Zápis na analogový výstup Operace zápisu na analogový výstup je podstatně jednodušší. Po nakonfigurování PWM režimu je nastavení napětí pouhý zápis hodnoty do příslušného registru OCR (Output Compare Register). Příslušná obslužná funkce očekává dva parametry, číslo výstupu a zapisovanou hodnotu. void PWM_out(int outx, int outval) { if (outx==1) OCR1A=outval; if (outx==2) OCR1B=outval; if (outx==0) { OCR1A=outval; OCR1B=outval; } }
Poněkud komplikovanější je úvodní inicializace prováděná po resetu. Ve funkci realizující inicializaci PWM výstupu se provádí i kalibrace nulového napětí na výstupu. Skutečné nulové napětí se může mírně lišit podle skutečného napájecího napětí 5V. Úkolem kalibrace je přizpůsobit napětí generované filtrací z PWM a napětí z napěťové reference. Právě v případě, kdy je na oba vstupy diferenciálního zesilovače analogového výstupu přivedeno stejné napětí dosáhneme nulového napětí na výstupu. Nejprve se nastaví vhodná výchozí hodnota, která se dále zpřesňuje. Po dokončení inicializace zůstávají nastaveny globální proměnné s kalibračními údaji. void PWM_setup(void) { int pom; //konfigurace PWM rezimu TCCR1A = (1<<WGM11)|(1<<WGM10)|(1<
//nastavení odhadovane 0 //precteni napeti z reference //nastaveni napeti z reference na oba vystupy //zpresneni nuly, dokalibrace
//srovani napeti z PWM s referenci if (ADC_read(6,4)>ADC_read(4,4)) pom--; else pom++; PWM_out(0,pom); //nastavuje oba PWM kanaly _delay_ms(50); //cekani na ustaleni napeti z PWM
} while (ADC_read(6,4)!=ADC_read(4,4)); PWMCal1=pom; do {
//nastaveni kalibracni hodnoty
//totez pro druhy analogovy vystup if (ADC_read(5,4)>ADC_read(4,4)) pom--; else pom++; PWM_out(2,pom); _delay_ms(50);
} while (ADC_read(5,4)!=ADC_read(4,4)); PWMCal2=pom; return; }
31
3.3.3 Nastavení směru digitálních portů Oba digitální porty desky univerzálních rozhraní jsou navrženy tak, aby mohly fungovat buď jako vstupní, nebo jako výstupní. Přepnutí směru je ovládáno programově. Konfiguraci zajišťuje přímo funkce zpracování příkazu v bufferu a spočívá v konfiguraci portu procesoru, nastavení DDR registru příslušného potu a přepnutí směru budiče sběrnice prostřednictvím ovládacího bitu na portu D. Současně první použití této funkce zapíná oba digitální porty. Část kódu realizující přepnutí portu 1: // set direction digital 1 a 2 SDxI a SDxO c = strstr(s, "CMD SD"); if (c) { //zpracovani prikazu SD, dalsi znak je cislo portu a smer if (Buffer[6]=='1') { if (Buffer[7]=='I') { DDRB=0b00000000; PORTB=0b11111111; PORTD &=~(1<<7); PORTD &=~(1<<3); } else if (Buffer[7]=='O') { DDRB=0b11111111; PORTD |= (1<<7); PORTD &=~(1<<3); } else cmdErr++; } }
3.3.4 Čtení digitálního vstupu Aktuální stav digitálního vstupu opět přímo zjišťuje funkce zpracování příkazu, jde o jednoduché čtení stavu portu s odesláním hodnoty. Při příjmu příkazu se neověřuje, zda je port nastaven jako vstupní nebo výstupní. Část kódu realizující čtení stavu digitálního portu 1: //digital read DR1 a DR2 c = strstr(s, "CMD DR"); if (c) { if (Buffer[6]=='1') { printf("%u#", PINB); } };
//vypis hodnoty
32
3.3.5 Zápis na digitální výstup Stejně jako při čtení se ani při zápisu neověřuje, zda je digitální port momentálně nastaven jako vstupní nebo výstupní. Podobně jako čtení realizuje zápis také přímo obsluha zpracování příkazů, doplněná o přečtení požadované hodnoty ze vstupního řetězce. Část kódu zpracovávající příkaz zápisu na digitální výstup: //digital write DWx int c = strstr(s, "CMD DW"); if (c) { pomx=0; if (Buffer[6]=='1') pomx=1; if (Buffer[6]=='2') pomx=2; if (pomx==0) cmdErr++; pomCMD=7; //posun bufferu o delku prikazu doleva for (i=pomCMD;i<strlen(Buffer);i++) Buffer[i-pomCMD]=Buffer[i]; //zpracovani zadane hodnoty a jeji zapis na port i=sscanf(Buffer,"%d",&pom); v = strstr(s, "\r"); if (pomx==1) PORTB=pom; if (pomx==2) PORTC=pom; };
3.3.6 Další části programového vybavení mikroprocesoru Hlavní činnost programového vybavení spočívá v cyklickém pokusu o čtení dat z přijímacího bufferu UART rozhraní a jejich zpracování. Vlastní čtení obsluhuje převzatá knihovna UART, která je řízena přerušeními od UART rozhraní procesoru. Načtené znaky se ukládají do řetězce příkazů, který se v případě že je delší než pět znaků a současně obsahuje znak konce řádku zpracovává pomocí funkce ZpracujBuffer. Provede se kontrola zda v řetězci je začátek příkazu, při výskytu začátku příkazu v podobě řetězce CMD se odstraní všechny znaky před začátkem příkazu, v případě nalezení příkazu RESET se vrátí kód požadavku na reset mikroprocesoru. Také se kontroluje délka bufferu. Na základě návratové hodnoty zpracování bufferu je pak provedena buď kompletní detekce příkazu funkcí ZpracujCMD a jeho zpracování, nebo reset mikroprocesoru, je-li požadován, případně je odeslána chybová zpráva a smazán obsah bufferu. Pro uložení kalibračních hodnot konkrétního kusu univerzálního rozhraní se používá paměť EEPROM procesoru ATMega16, ve které jsou uloženy kalibrační konstanty analogové části desky. Tyto kalibrační konstanty pak využívá obslužná knihovna v PC 33
pro přepočty hodnot získaných A/D převodem a pro nastavení správné hodnoty pro D/A převod.
3.3.7 Příkazy rozpoznávané deskou univerzálních rozhraní S deskou univerzálních rozhraní je možné komunikovat i pomocí sériového portu, který se v počítači vytvoří po jejím připojení. Komunikační parametry jsou rychlost 9600Bd, 8 bitů, 1 stop bit, bez parity. Všechny příkazy je nutné psát velkými písmeny. Lze použít tyto příkazy: RESET – provede reset desky, vrací OK po úspěšném provedení. CMD ARx – čtení analogového vstupu x, vrací řetězec ve tvaru xxx#OK, kde xxx je čtená hodnota z A/D převodníku v rozsahu 0-1023. CMD AWx yyy – zápis hodnoty yyy na analogový výstup x, provedení potvrdí řetězcem OK. Rozsah hodnoty yyy je 0-1023. CDM SDxY – nastavení směru digitálního portu x jako vstup pro Y=“I“ nebo výstup pro Y=“O“, provedení potvrdí řetězcem OK. CMD DRx – čtení digitálního portu x, vrací řetězec ve tvaru xxx#OK, kde xxx je čtený stav portu v rozsahu 0-255. CMD DWx yyy – zápis hodnoty yyy na digitální port x, provedení potvrzuje řetězcem OK, hodnota yyy z rozsahu 0-255. CMD RCx – čtení kalibrační konstanty číslo x, kde x je z rozsahu 0-15. Vrací řetězec ve tvaru xxx#OK, kde xxx je číslo v rozsahu 1-1022. Čísla vrácená mimo tento rozsah znamenají, že v EEPROM paměti nejsou kalibrační údaje zapsány. CMD WCx yyy – zapsání kalibrační konstanty číslo x s hodnotou yyy, provedení potvrzuje řetězcem OK, číslo x je z rozsahu 0-12; Význam kalibračních konstant je následující: 0
analogový výstup 1 0V
1
analogový výstup 1 +10V
2
analogový výstup 1 -10V
34
3
analogový výstup 2 0V
4
analogový výstup 2 +10V
5
analogový výstup 2 -10V
6
analogový vstup 1 0V
7
analogový vstup 1 +10V
8
analogový vstup 1 -10V
9
analogový vstup 2 0V
10
analogový vstup 2 +10V
11
analogový vstup 2 -10V
12
napětí změřené na napěťové referenci při pořízení kalibračních údajů
13
napětí změřené na napěťové referenci při posledním resetu (jen čtení)
14
hodnota změřená pro 0V při posledním resetu pro analogový výstup 1 (jen čtení) hodnota změřená pro 0V při posledním resetu pro analogový výstup 2 (jen
15
čtení) Kalibraci jsem prováděl prostřednictvím terminálu a ručního zadání příkazů, z nastavené hodnoty a na výstupu změřeného napětí jsem dopočítal odhad pro příslušné napětí a zpřesnil nastavení, nastavené hodnoty jsem zapsal do příslušných kalibračních konstant.
Vstupy
je
možné
nakonfigurovat
pomocí
přivedení
napětí
z
nakonfigurovaného výstupu, je potřeba nastavit vždy oba okraje a střed rozsahu. Již jednou nakonfigurovanou desku univerzálních rozhraní není třeba znovu kalibrovat, pokud nedojde k výměně některé ze součástek analogové části nebo samotného mikroprocesoru.
3.4
Obslužná DLL knihovna pro PC v C++ Builderu
Zadáním práce bylo kromě návrhu a výroby univerzální desky rozhraní i příprava softwaru pro komunikaci v podobě Windows DLL knihovny vytvořené v prostředí C++ Builder a ukázkovou aplikací pro práci s univerzálním rozhraním pro PC. Výrobce použitého obvodu pro USB sběrnici poskytuje ovladače, dokumentaci a příklady pro další programování aplikací. Při tvorbě této části práce jsem používal příklady a dokumentaci z webu výrobce čipu (11) a knihu o prostředí C++ Builder. (13)
35
Samotná DLL knihovna poskytuje základní funkce pro obsluhu univerzálních rozhraní. Jednotlivé funkce poskytované DLL knihovnou umožňují připojení k desce, její reset do výchozích nastavení, nastavování a čtení hodnot vstupů a výstupů. Při práci s analogovými vstupy a výstupy knihovna provádí přepočet hodnot podle nastavených kalibračních hodnot, aplikace pracuje se stovkami milivoltů. Samotné odesílání příkazů a zpracování odpovědí provádí DLL knihovna postupně. Všechny funkce nejprve kontrolují zámek realizovaný globální proměnnou, čekají na jeho uvolnění, před provedením operací s deskou rozhraní jej nastaví a po ukončení zase uvolní. Toto chování zabezpečí, že nedojde ke kolizi mezi zpracovávanými požadavky z různých událostí v aplikaci, například mezi ručním nastavením výstupu a čtením vstupu vyvolaným časovačem. V případě, že by k takové kolizi došlo, mohla by nastat záměna odpovědí na jednotlivé příkazy od desky univerzálních rozhraní. Deska samotná tyto požadavky zpracuje postupně, ale pro co nejrychlejší komunikaci jsou odpovědi desky co nejkratší a neobsahují identifikaci odpovědi, pouze potvrzení že se příkaz vykonal a u některých příkazů i vrácenou číselnou hodnotu čtecích operací. Knihovna pro komunikaci s univerzální deskou pro svou činnost používá funkce poskytované z DLL knihovny ftd2xx.dll poskytované výrobcem čipu FT232R. Samotná DLL knihovna výrobce čipu je obsáhlá a poskytuje skupinu základních metod přístupu k zařízení, kterou jsme se zabývali i ve škole v přemětu Ovládání zařízení pomocí PC. Použití těchto přístupových metod ale způsobovalo ve srovnání s prací v režimu sériového portu značné zpomalení komunikace. Abych se vyhnul vazbě obsluhy zařízení na sériový COM port, která by byla problematická pro uživatele v nutnosti výběru COM portu při startu aplikace, ale také v tom, že zařízení může dostat přidělen COM port s číslem větším než 10, které mi ale nedokázala detekovat a použít aplikace vytvořená v C++ Builderu verze 6. Proto jsem vyzkoušel sadu funkcí knihovny ftd2xx.dll používajících Win32 API funkcí a komunikace pomocí těchto funkcí byla již dostatečně rychlá a bezproblémová. Pro uživatele výsledné DLL knihovny pro komunikaci s deskou univerzálních rozhraní toto rozhodnutí nemá vliv, vše vyřeší připravené funkce DLL knihovny, uživatel pro práci s deskou rozhraní nepotřebuje znát detaily komunikace po USB.
36
3.4.1 Knihovna IOBRD_DLL – popis funkcí poskytovaných knihovnou Popis funkcí DLL knihovny je i součástí hlavičkového souboru, který má uživatel k dispozici pro vytvoření vlastní aplikace používající DLL knihovnu a je součástí elektronické přílohy bakalářské príce. FTBRD_open(char
usbname[30])
–
funkce
se
pokusí
spojit
se
zařízením
identifikovaným USB Product Description řetězcem. Pokud zařízení najde, pokusí se nastavit komunikační parametry a přečíst kalibrační hodnoty z paměti procesoru na desce univerzálních rozhraní. Pokud kalibrační hodnoty nejsou nastaveny, například při použití nezkalibrované desky univerzálních rozhraní, použijí se výchozí hodnoty získané jako průměr hodnot naměřených na dvou vyrobených kusech. V návratové hodnotě je předán pouze stav provedené operace. Handle zařízení je definován jako globální v rámci DLL knihovny – uživatel s ním nemusí nijak přímo pracovat. FTBRD_close(void) – funkce uzavře otevřený handle zařízení. Nevrací žádné stavové parametry. FTBRD_reset(void) - funkce pošle příkaz „RESET“ desce univerzálních vstupů a výstupů a počká na její inicializaci. FTBRD_AW(int outvolt, int outport) – funkce provede zápis hodnoty na analogový port. Parametry funkce jsou výstupní napětí ve stovkách milivoltů a číslo výstupního portu. Rozsah napětí je -100 a +100, port je určen číslem 1 nebo 2. Funkce provede přepočet zadaného napětí podle kalibračních parametrů daného portu odešle univerzálnímu rozhraní příkaz „CMD AW x y“, kde x je číslo portu a y přepočtená hodnota napětí. Přepočet napětí ze zadávaného rozsahu na číselnou hodnotu použitou pro desku univerzálních provádí tato část programového kódu (část pro outport==2 jsem vynechal, liší se jen indexem v poli CalibD obsahujícím ze univerzální desky přečtené nebo výchozí kalibrační údaje): if (outport==1){ if (outvolt>=0) { pom=outvolt*(CalibD[1]-CalibD[0])/100.0 + CalibD[0]; } else { pom=CalibD[0] + outvolt*(CalibD[0]-CalibD[2])/100.0; } } sprintf(Buf,"CMD AW%i %i\r\n",outport,pom);
37
FTBRD_AR(int inport) – funkce provede čtení hodnoty napětí na analogovém portu zadaném parametrem. Vrácená hodnota je napětí na daném portu ve stovkách milivoltů, případně indikace chyby při provádění. Desce univerzálních rozhraní odešle příkaz ve tvaru „CMD ARx“ kde x je číslo analogového vstupu a hodnotu získanou od procesoru pomocí kalibračních konstant převede na odpovídající hodnotu napětí. FTBRD_SD(int outdir, int outport) – nastaví směr komunikace digitálního portu. Parametry je určen směr toku dat a číslo digitálního portu. Desce rozhraní odesílá příkaz „CMD SDxy“, kde x je číslo portu a y směr toku dat. FTBRD_DR(int inport) – čte data z digitálního vstupu jehož číslo je zadáno parametrem. Funkce nekontroluje zda port je nastaven jako vstupní. Vrácenou hodnotou je přečtený byte, případně hodnota chybového stavu, je-li vráceno záporné číslo. Desce rozhraní odesílá příkaz „CMD DRx“, kde x je číslo digitálního vstupu. FTBRD_DW(int outbyte, int outport) – zapíše hodnotu zadanou parametrem na port, jeho číslo je zadáno druhým parametrem. Nekontroluje, zda je port nastaven jako výstupní, volání funkce na port nakonfigurovaný jako vstup ovlivní konfiguraci vstupního portu procesoru. Desce univerzálních rozhraní se posílá příkaz „CMD DWx y“, kde x číslo portu a y zapisovaný byte. FTBRD_RC(int calibdata) – funkce vrátí kalibrační údaj s daným číslem pozice v rozsahu 0-15. Je volána funkcí FTBRD_open při otevírání komunikačního kanálu, vrácené hodnoty jsou kalibrační údaje používané při výpočtech. Uživatel tuto funkci na zkalibrované desce nemusí používat. FTBRD_WC(int calibdata, int calibvalue) – funkce určená pro zápis kalibrační konstanty do EEPROM paměti procesoru na desce komunikačních rozhraní. Zapisovat lze pouze hodnoty konstant 0-12, hodnoty kalibračních konstant 13 až 15 jsou pouze pro čtení a jsou měřeny vždy při resetu desky univerzálních rozhraní.
3.4.2 Ukázka aplikace pro vyzkoušení funkcí desky univerzálních rozhraní Pro možnost jednoduchého ověření funkcí desky univerzálních rozhraní jsem připravil jednoduchou ukázkovou aplikaci použití desky a volání funkcí DLL knihoven z prostředí C++ Builderu. Pomocí této jednoduché aplikace se dá ověřit a vyzkoušet funkce desky univerzálních rozhraní pro PC a podívat se na volání jednotlivých 38
knihoven. Uživatelské rozhraní aplikace je na obrázku 8. Kompletní zdrojové kódy ukázkové aplikace i DLL knihovny jsou součástí elektronické přílohy bakalářské práce. Obrázek 7. Uživatelské rozhraní demo aplikace
Ukázková aplikace provádí obsluhu základních událostí kliknutí na prvky pro zápis hodnot na porty a volání příslušných funkcí DLL knihovny. Jako obsluhu události časovače dovoluje průběžně zjišťovat hodnoty čtené ze vstupních rozhraní univerzálních rozhraní.
3.5
Praktické zkušenosti z realizace a některé naměřené hodnoty
Po sestavení desky a přípravě softwaru pro mikroprocesor na desce univerzálních rozhraní jsem přeměřil základní parametry desky, abych mohl potvrdit očekávané chování navrženého obvodu. Po odstranění několika chyb v softwaru mikroprocesoru se pomocí navržených příkazů již deska univerzálních rozhraní dala ovládat pomocí běžného terminálového programu ručním zadáváním příkazů. Jeden z prvních problémů, na které jsem narazil při ověřování funkce bylo nečekaně velké kolísání naměřených hodnot z A/D převodníku. Měření voltmetrem podivné chování nevysvětlilo, pomohl až osciloskop. Použitý DC/DC měnič způsoboval na napájecím 39
napětí poměrně výrazné impulsní rušení na své pracovní frekvenci 80kHz. Zajímavým poznatkem byla skutečnost, že různé kusy měničů vykazovaly různá rušení, ze tří měřených kusů byl jeden zcela bezproblémový, zbylé dva už při nepatrné zátěži produkovaly poměrně velké impulzní rušení na napájecím vedení. Po odstranění problému osazením cívky 100µH místo drátové propojky vedoucí napájení k měniči se parametry zlepšily. Dále mě zajímalo, jak se chová převod PWM signálu na analogové napětí, výstupní signál z procesoru při různé střídě a výstupní napětí je na následujících obrázcích z osciloskopu. Navíc jsem v průběhu realizace změnil rozlišení převodu z osmibitového na popisované desetibitové, což snížilo frekvenci generovaného PWM signálu. Obrázek 8 - PWM signál 25%, napětí výstupu -5V
Obrázek 9 -PWM Signál 75%, napětí výstupu +5V
Na obou oscilogramech je velmi dobře patrné rušení na analogovém výstupu, porovnal jsem tedy výstupní signál z analogového výstupu s výstupním napětím jednoduchého laboratorního zdroje Voltcraft PS-1302D. Na následujícím obrázku 10 je červený graf výstup analogového portu univerzálního rozhraní při nastaveném napětí +5V a žlutý 40
graf je výstupní signál laboratorního zdroje při napětí +5V. Mezivrcholové napětí měřené osciloskopem je u obou signálů prakticky shodné. Signál z univerzální desky obsahuje rušivé složky z D/A převodu, ale ani zvýšení kapacity kondenzátoru v integračním článku je již nedokázalo vylepšit. Nevýhodou použité metody zesílení napětí operačním zesilovačem je i zesílení všech rušivých signálů a chyb. Obvod analogových vstupů je v použitém zapojení citlivý, s velkou vstupní impedancí. Do programového vybavení mikroprocesoru bylo nutné doplnit vícenásobné přeměření výsledku A/D převodu a následné zprůměrování výsledku měření. Digitální porty fungovaly podle očekávání hned po zapojení a nebyly s nimi komplikace. I na nich se projevuje velká vstupní impedance a čtení hodnoty z nezapojeného vstupu vrací podle okolního rušení logické 0 i 1. Obrázek 10 - Porovnání analogového výstupu s výstupem laboratorního zdroje
Odběr samotné desky univerzálních rozhraní při komunikaci s PC jsem naměřil 120mA. Překvapila mě odolnost použitých součástek. Ochrany na výstupech operačních zesilovačů fungují velmi dobře, stejně tak mikroprocesor Atmel ATMega16 je poměrně odolný a všechny experimenty s deskou i chyby při experimentech vydržel. Také volba rezerv na použitých rozsazích analogových vstupů a výstupů dopadla podle očekávání. Na měřeném vzorku se při nastavení mezních hodnot PWM signálu výstupní napětí pohybovalo na úrovni 12,5V. Podobně vstupní analogový obvod dodal maximum pro A/D převodník při 15V na vstupu, při dalším zvyšování napětí pomocí laboratorního zdroje pracovala podle očekávání ochranná zenerova dioda až do maxima napětí z laboratorního zdroje, které bylo 30V. Vstupní obvod tedy snese až trojnásobek očekávaného vstupního napětí bez poškození.
41
Největší problém se softwarovou částí práce bylo nalezení vhodného a dostatečně rychlého komunikačního modelu. Postupným zkoušením možností se podařilo najít poměrně rychlý a spolehlivý způsob komunikace, který kromě obsluhy pomocí DLL knihovny dovolí i ručně uživatelsky posílat příkazy pro univerzální rozhraní z jakéhokoliv komunikačního programu fungujícího pro sériovou linku. Při testování to byla velmi užitečná vlastnost. Během realizace zadání bakalářské práce jsem získal především zajímavé zkušenosti s prací s mikroprocesory a jejich použitím a možnostmi. Velmi zajímavou pro mě byla realizace komunikace zařízení univerzálního rozhraní s PC, vyzkoušení si možností a limitů daného zadání. Součástí elektronických příloh nejsou dokumenty uvedené v seznamu použité literatury, které jsou dostupné volně na internetu, ale jejich další šíření vyžaduje mnohdy souhlas autora. Obrázek 11 - Osazená funkční deska univerzálních rozhraní pro PC
42
4
Závěr
Cílem bakalářské práce byl návrh univerzálního rozhraní pro PC a vytvoření softwaru pro jeho další používání. Ve vlastní práci jsem se snažil popsat návrh a výrobu desky univerzálního rozhraní a navrhnout a naprogramovat její komunikaci s počítačem. Vytvořená DLL knihovna poskytuje možnosti pro vývoj dalších aplikací. Během realizace práce jsem se seznámil s možnostmi programování m jednočipových mikropočítačů, programováním sériové komunikace s počítačem a tvorbou DLL knihovny, umožňující další použití zařízení na počítači.
43
Literatura 1. Atmel Corporation. ATMega16 Documents - Datatsheets. Atmel Corporation. [Online]
2011.
[Citace:
1.
6
2011.]
http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf. 2. Aplikace procesoru ATmega644 v jazyce C. Ing. Bc. Matoušek, David. místo neznámé : AMARO, s.r.o., 3.2.2011, Konstrukční elektronika - A Radio. 3. ON Semiconductors. MC74ACT245: Octal Bidirectional Transceiver with 3-State Inputs/Outputs.
ON
Semiconductor.
[Online]
[Citace:
1.
6
2011.]
http://www.onsemi.com/PowerSolutions/product.do?id=MC74ACT245. 4. Texas Instruments. TL074 - Quad Low-Noise JFET-Input General-Purpose Operational
Amplifier.
Texas
Instruments.
[Online]
[Citace:
1.
6
2011.]
http://www.ti.com/lit/gpn/tl074. 5. Mancini, Ron. Op Amps For Everyone. Texas Instruments. [Online] [Citace: 1. 6 2011.] http://focus.ti.com/lit/an/slod006b/slod006b.pdf. 6. Texas Instruments. TL431 - Adjustable Precision Shunt Regulator. Texas Instruments. [Online] [Citace: 1. 6 2011.] http://www.ti.com/lit/gpn/tl431. 7. Future Technology Device International Ltd. FT232R - USB UART IC. Future Technology
Devices
International
Ltd.
[Online]
[Citace:
1.
6
2011.]
http://www.ftdichip.com/Products/ICs/FT232R.htm. 8. Aimtec. AM1D-0515D-NZ - 1 Watt DC/DC Encapsulated. Aimtec - your power partner.
[Online]
[Citace:
1.
6
2011.]
http://www.aimtec.com/site/Aimtec/files/Datasheet/HighResolution/AM1D-N-Z.pdf. 9. Fischl, Thomas. USBasp - USB programmer for Atmel AVR controllers. Thomas Fischl. [Online] [Citace: 1. 6 2011.] http://www.fischl.de/usbasp/. 10. Fleury, Peter. Peter Fleury Online. AVR Sotfware - UART Library. [Online] [Citace: 1. 6 2011.] http://homepage.hispeed.ch/peterfleury/avr-software.html. 11. Atmel Corporation. ATMega16 Documents. Atmel Corporation. [Online] [Citace: 1. 6 2011.] http://www.atmel.com/dyn/resources/prod_documents/doc8003.pdf.
44
12. Future Technology Devices International Ltd. C++ Builder Code Examples. Future Technology Devices International Ltd. [Online] [Citace: 1. 6 2011.] http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples/C++Builder.htm. 13. Ing. Bc. Matoušek, David. C++ Builder, vývojové prostředí. 3. vydání. Praha : BEN - technická literatura, 2002. ISBN 80-7300-064-4.
45
Seznam obrázků Obrázek 1. Schéma zapojení diferenciálního zesilovače ................................................ 13 Obrázek 2. Schéma zapojení - Univerzální rozhraní pro PC .......................................... 18 Obrázek 3. Navržená předloha DPS ............................................................................... 25 Obrázek 4. Osazení desky plošných spojů součástkami ................................................. 25 Obrázek 5. Seznam použitých součástek ........................................................................ 26 Obrázek 6. Nastavení parametrů čipu FT232R .............................................................. 29 Obrázek 7. Uživatelské rozhraní demo aplikace ............................................................ 39 Obrázek 8 - PWM signál 25%, napětí výstupu -5V ....................................................... 40 Obrázek 9 -PWM Signál 75%, napětí výstupu +5V ....................................................... 40 Obrázek 10 - Porovnání analogového výstupu s výstupem laboratorního zdroje .......... 41 Obrázek 11 - Osazená funkční deska univerzálních rozhraní pro PC ............................ 42
46
Přílohy Elektronická příloha - CD se zdrojovými kódy a aplikacemi Osazená deska plošného spoje univerzálního rozhraní k PC
47