AD7864-1
Martin Samek
SamekMar@seznam.cz
Obsah:
1. Úvod
2. AD7864-1
3. Knihovna
AD7864.h
AD7864.c
4. Zkouška rychlosti převodníku
5. Závěr
6. Přílohy
7. Použitá literatura
1. Úvod
Cílem tohoto projektu je vytvořit univerzální knihovnu pro
procesory Atmel, které využívají externí analologově číslicový převodník
AD7864-1, dále vytvořit krátký program demonstrující použití vytvořené knihovny
a změřit možnou periodu vzorkování.
2. AD7864-1
Obvod
AD7864-1 je
vysokorychlostní čtyřkanálový 12-bitový
analogově číslicový převodník
umožňující měřit napětí v rozsahu -5V až +5V nebo
-10V až +10V. Rozsah měření může být pro každý
kanál jiný. V jakém rozsahu bude možné na
kanálu měřit, určuje propojení vstupních pinů
jednotlivých kanálů. Na obr.1 je blokové
schéma jednoho ze čtyř měřících kanálů
obvodu AD7864-1. Pro
měření v rozsahu -5V až +5V je nutné piny VINA a VINB
propojit a přivést měřené napětí na oba piny
současně. Pro měření v rozsahu -10V až +10V se pin VINB
připojí k zemi a měřené napětí se
přivádí na pin VINA.
Obr.1: Blokové schéma měřícího kanálu [1]
Výběr kanálů, které budou
převedeny, je možné provést dvěma
způsoby a to buď softwarově nebo hardwarově. Blokové
schéma části obvodu
AD7864-1 pro výběr kanálů je na obr.2. Pro
softwarový výběr kanálů je nutné na
pin H/S SEL obvodu AD7864-1 přivést +5V a pro hardwarový
výběr je nutné tento
pin připojit k zemi. Je-li použit hardwarový výběr
kanálu, pak to jaké kanály
budou měřeny určuje úroveň napětí přivedená na
piny SL1 až SL4 obvodu AD7864-1.
Je-li pin připojen k +5V, bude daný kanál měřen, a naopak
je-li pin připojen k
zemi, daný kanál měřen nebude. Pokud je
použit hardwarový výběr kanálu,
musí být
stav každého pinu SL1 až SL4 definován, tedy každý
pin musí být připojen buď k
+5V nebo k zemi. Je-li použit softwarový výběr
kanálu, tak to které kanály budou
měřeny, je odesíláno po paralelním rozhraní
na bitech DB0 až DB3.
Obr.2: Vnitřní blokové schéma A/D převodníku pro výběr kanálů [1]
Příklad
připojení obvodu AD7864-1 k mikroprocesoru
ATmega16 je na obr3. Naměřená 12-bitová data jsou do
mikroprocesoru přenášena pomocí
paralelního rozhraní DB0 - DB11.
K řízení komunikace mezi mikroprocesorem
a A/D převodníkem slouží signály
/CS, /RD a /WR. Všechny tři signály
mají klidovou úroveň v +5V tedy v logické
úrovni 1. Stažením signálu /CS k nule dojde
k výběru obvodu. Pokud je obvod vybrán a signál
/RD je v nízké úrovni,
dojde k zápisu naměřených dat na paralelním
rozhraní A/D převodníku. Naopak
pokud je obvod vybrán a signál /WR je
v nízké úrovni, pak je obvod
připraven na zápis dat. Zápis dat do převodníku je
využit jen pro odeslání
informace, které kanály mají být měřeny.
Obr.3: Propojení A/D převodníku s mikroprocesorem ATmega16
Naměřená
data je možné z obvodu AD7864-1 číst dvěma
způsoby. Jeden ze způsobů jak číst data spočívá
v tom, že výsledek převodu je
čten po dokončení převodu daného kanálu a mezi
tím je převáděn kanál další.
Tento proces se opakuje, dokud nejsou převedeny všechny
vybrané kanály. O
ukončení převodu daného kanálu informuje
signál /EOC, který je vhodné připojit
na externí přerušení mikroprocesoru.
Dle dokumentace výrobce trvá
převod jednoho kanálů
1,65uS. Tedy při převodu všech čtyř kanálů budou
vyvolána čtyři přerušení
přibližně po 1,65uS. To je krátká doba na
přijetí a uložení naměřených
dat. Například mikroprocesor ATmega16 s krystalem 16MHz zvládne mezi
jednotlivými přerušeními vykonat
přibližně 26 instrukčních cyklů. Je třeba si uvědomit, že po
vyvolání
přerušení potřebuje mikroprocesor několik
instrukčních cyklů k dokončení
právě prováděné instrukce a k uložení
návratové adresy. Dalších pár
instrukčních cyklů zabere obsluha přerušení,
v tomto případě přečtení a
uložení naměřených dat. Po dokončení obsluhy
přerušení je v několika
instrukčních cyklech obnovena návratová adresa. Z
předešlého je zřejmé, že
pokud mikroprocesor stihne vykonat obsluhu přerušení,
tedy přečíst a uložit
naměřená data a nepromešká mezi tím
další přerušení, tak nezbývá
mnoho času na
provedení dalších instrukcí mimo
přerušení. Proto mi tento způsob čtení
naměřených dat nepřipadá příliš vhodný pro
mikroprocesory s malým výpočetním
výkonem.
Druhý způsob čtení dat z A/D
převodníku je založen na čtení
dat po dokončení převodu všech zvolených
kanálů. O ukončení převodu všech
kanálů informuje signál BUSY, který je
vhodné připojit na externí
přerušení mikroprocesoru. Tento způsob čtení je
využit ve vytvořené knihovně
pro A/D převodník. Vývoj signálů při
čtení tímto způsobem pro kanály 1,2 a
4 je na obr.4. Po zahájení převodu stažením
signálu /CONVST na nízkou úroveň
dojde k nastavení signálu BUSY na vysokou úroveň.
Na nízkou úroveň se vrátí po
dokončení převodu všech zvolených kanálů.
Pro čtení naměřených dat je nutné na
pinech /CS a /RD generovat záporný pulz. Data jsou z
převodníku odesílána
vždy od nejnižšího převáděného
kanálu. Například pokud je zvolen převod na
2 a 4 kanálu, tak při prvním čtení obvodu budou
odeslána data z druhého kanálu a při
dalším
čtení odeslána data ze čtvrtého
kanálu.
Obr.4: Časový diagram převodu a čtení dat [1]
3. Knihovna
Vytvořená knihovna byla
testována na vývojové desce s
mikroprocesor ATmega16 s krystalem o frekvenci 16MHz. Knihovna je
složena ze
souborů AD7864.c a AD7864.h.
/***********************************************************************************************************************************
*
AD7864H -----< AD7864.h>-----
*
************************************************************************************************************************************/
Pro správnou funkci knihovny je nutné v souboru
AD7864.h definovat piny, které jsou použity pro komunikaci mezi mikroprocesorem
a A/D převodníkem. Definice 12-bitového paralelního rozhraní je rozdělena na
dvě části. Část kde se definuje osmice pinů (DB0-DB7), a část kde se definuje
zbývající čtveřice pinů (DB8-DB11) paralelního rozhraní. Předpokládá se, že obě
definice budou provedeny formou portu s tím, že nejnižší pin portu
mikroprocesoru je připojen k nejnižšímu pinu paralelního rozhraní A/D
převodníku. Dále je nutné definovat piny mikroprocesoru, které jsou použity
jako signály /CS, /RD, /WR a /CONVST.
Po definici komunikačního rozhraní zbývá říci programu jakým
způsobem je proveden výběr měřených kanálu, a které kanály budou použity. Jakým
způsobem je proveden výběr kanálů určuje nastavení definice HS_SEL. Pokud
je HS_SEL 1, tak jsou kanály vybrány softwarově a pokud
je HS_SEL 0, tak
jsou kanály vybrány hardwarově. Výběr
měřených
kanálu je prováděn nastavením definice SL1 až SL4
na jedničku nebo nulu. Pokud
je SL nastaven na jedničku je daný kanál měřen. Pokud je
SL nastaven na nulu,
tak daný kanál měřen není. Nastavení SL1 až
SL4 je nutné provést i v případě, že je
používán hardwarový výběr kanálů.
/***********************************************************************************************************************************
*
AD7864c -----< AD7864.c>-----
*
************************************************************************************************************************************/
V
souboru AD7864.c se nacházejí veškeré
funkce, které jsou pro práci s A/D
převodníkem potřeba. První funkce v tomto souboru je
funkce ad_init, která se můsí volat jako první.
Jedná se o funkci, která nastaví
směry portů, tedy jestli mají být porty na vstup nebo na
výstup a dále nastaví
klidové úrovně jednotlivých signálů. Je-li
použit mód převodník, kdy je výběr
kanálů prováděn softwarově, je nutné jako
další funkci volat funkci
select_channel. Mohlo by se zdát, že funkce musí
mít nějakou proměnnou jako
vstup, která by určovala, které kanály mají
být měřeny. Opak je ale pravdou.
Pro zachování smysluplnosti celé knihovny jsou
všechny definice ovlivněné
zapojením a použitím převodníku uloženy v souboru
AD7864.h, kde jsou uloženy i
definice použitých kanálů (SL1 až SL4). Tyto definice
jsou právě vstupem funkce
select_chanel. Po provedení inicializace převodníku a po
případném odeslání
informace, které kanály mají být měřeny, je
možné spustit převod. Převod je
spouštěn funkcí start_convert.
Tato funkce nedělá
nic jiného, než že vygeneruje
krátký záporný pulz na signálu
/CONVST čímž dojde ke spuštění převodu.
Téměř
všechny signály jsou vzorkovány s určitou
periodou. Proto bude tato funkce nejčastěji volána z
přerušení čítače časovače odměřujícího periodu vzorkování.
Jak již bylo řečeno výše, knihovna
je uzpůsobena pro čtení dat po ukončení převodu
všech zvolených kanálu. O tom,
že byl převod všech kanálů dokončen informuje
signál BUSY, který je připojen na
externí přerušení mikroprocesoru. V programu tedy
musí být definováno externí
přerušení, ve kterém bude docházet ke
čtení a uložení naměřených dat. Naměřená
data jsou ukládána do pole data. Pole data má
velikost čtyř 16-bitových čísel.
Výsledky převodu jsou do pole ukládána
následujícím způsobem:
data[0] = Kanál 0
data[1] = Kanál 1
data[2] = Kanál 2
data[3] = Kanál 3
Nezáleží přitom, zda je měřen jeden nebo více kanálů.
Způsob uložení zůstane vždy stejný.
Funkce, která uloží výsledky měření do pole
data má název get_data. V této funkci je volána funkce na čtení portu read_port
tolikrát, kolik je převáděno kanálů.
Funkce read_port vrací výsledek
měření přijatý po paralelním rozhraní mezi A/D převodníkem a mikroprocesorem.
Protože je paralelní rozhraní A/D převodníku připojeno na dva porty
mikroprocesoru, je nutné přeskládat přijatá data na 16-bitové číslo.
V
sekci přílohy jsou ke stažení tři verze knihovny.
První verze nazvaná Knihovna obsahuje pouze soubory
AD7864.c a AD7864.h. Soubor AD7864.c obsahuje pouze funkce pro
práci s převodníkem. V souboru AD7864.h je nutné
definovat komunikační rozhraní mezi A/D
převodníkem a mikroprocesorem. Místa kde jsou potřeba
provést definice jsou označena (...).
Další verze knihovny je ukázkový projekt
(program). Jedná se o program, který změří
všechny kanály a výsledky jednotlivých
měření zobrazí na LCD displeji. Program je uzpůsoben pro
školní vývojovou desku obsahující
mikroprocesor ATmega16.
Poslední verze knihovny je projekt (program). Jedná se o
program, který je zobrazen v levé části
této stránky. Je určen pro mikroprocesory ATmega16. V
programu je předdefinována funkce main, nastavení externího přerušení,
spuštění převodníku a přečtení
naměřených dat. Jedná se o startovací program,
který také nejlépe demonstruje
nejvhodnější sled volání
jednotlivých funkcí ze souboru AD7864.c. Funkci start_convert je
nejvhodnější volat v přerušení od
čítače časovače odměřujícího přesnou periodu
vzorkování.
4. Zkouška rychlosti převodníku
Na základě
vytvořené knihovny byla
provedena zkouška maximální frekvence
vzorkování na jednom až čtyřech kanálech. Z
naměřených
hodnot uvedených níže v tabulkách je
patrné, že při hardwarovém výběru kanálu je
možné dosáhnou vyšší
vzorkovací frekvence než při softwarovém výběru
kanálu. Tento výsledek byl ale očekáván.
Protože při softwarovém výběru kanálu
musí docházet k zápisu dat do
převodníku, které určují, na kterých
kanálech bude převod
prováděn. Z naměřených výsledků je dále
patrná doba
zápisu dat do A/D převodníku. Tato doba je přibližně
6,3us.
Měření
maximální vzorkovací frekvence
probíhalo v idealizovaných podmínkách. Tedy
v přerušení, které bylo vyvoláno
dokončením převodu všech vybraných kanálů
se přečetla a uložila naměřená data a znovu se spustil převod.
Při využití mikroprocesoru s vyšším
výpočetním výkonem by mohlo být dle
mého odhadu dosaženo vzorkovací frekvence až kolem
300kHz-400kHz.
Softwarový výběr kanálu:
Počet kanálů |
1 |
2 |
3 |
4 |
Perioda vzorkování |
22,60us |
28,3us |
37,4us |
46,4us |
Frekvence vzorkování |
48,54kHz |
43,46kHz |
26,74kHz |
21,60kHz |
Hardwarový výběr kanálu:
Počet kanálů |
1 |
2 |
3 |
4 |
Perioda vzorkování |
15,3us |
22,6us |
31,4us |
40,1us |
Frekvence vzorkování |
65,36kHz |
44,25kHz |
31,85kHz |
24,94kHz |
5. Závěr:
Vytvořil jsem
knihovnu
určenou mikroprocesorům Atmel, které používají
externí A/D převodník AD7864. Dále jsem vytvořil
program demonstrující použití vytvořené
knihovny. Z naměřených výsledků maximální
vzorkovací frekvence vyplývá, že při
použítí mikroprocesoru s vyšším
výpočetním výkonem je
možné použít převodník ke
vzorkování
rychle se měnících signálů. Dle mého
názoru bude A/D převodník ve většině
případů používán v režimu hardwarového
výběru kanálů, protože softwarový výběr
kanálů zpomaluje mikroprocesor.
6. Přílohy:
Datasheet převodníku AD7864
Knihovna-
Pouze soubory AD7864.h a AD7864.c. Jen funkce pro
práci s převodníkem a definice komunikačního
rozhraní. V souboru AD7864.h je nutné
na místech
označených ... definovat
komunikační rozhraní!
Ukázkový program pro školní vývojovou desku s procesorem ATmega16 - Program měří všechny vstupy a zobrazuje naměřené hodnoty na LCD displeji
Program s předdefinovaným externím přerušením a funkcí main - Program pro mikroprocesory ATmega16 s přednastaveným externím přerušením a funkcí main
7. Použitá literatura:
[1]
AD7864 [online]. [s.l.] : Analog Devices, 2009 [cit.
2010-04-21]. Dostupné z WWW: <www.analog.com>.