ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická
Bakalářská práce
Praha 2010
Matěj Kubeš
ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická Katedra měření
Diagnostika vodivých materiálů vířivými proudy BAKALÁŘSKÁ PRÁCE
Vypracoval: Matěj Kubeš Vedoucí práce: Ing. Jakub Král 2010
Čestné prohlášení autora práce Prohlašuji, že jsem předloženou práci vypracoval samostatně a že jsem uvedl veškeré použité informační zdroje v souladu s Metodickým pokynem o dodržování etických principů při přípravě vysokoškolských závěrečných prací. V Praze dne …………………………..
…..…………………………… Podpis autora práce
Anotace Tato bakalářská práce se bude soustředit na vysvětlení problematiky testování vodivých materiálů pomocí metody vířivých proudů. Vzhledem k výukovému charakteru této práce bude pro realizaci měřícího systému použit programovatelný vývojový kit od firmy Analog Devices. Toto zařízení bude, po připojení příslušné průmyslové sondy, měřit a zpracovávat data pro vyhodnocení vad u vodivých materiálů.
Annotation This bachelor project will be focused on explanation of testing the conductive materials with the eddy current method. Considering the education purposes of this work, we will use programmable development kit from Analog Devices as a base of our measurement system. This device, connected to the appropriate probe, will measure and process all necessary data, which will be used for evaluation of issues at conductive materials.
Poděkování Děkuji vedoucímu bakalářské práce Ing. Jakubu Královi za cenné rady a čas, které této práci věnoval, dále pak Ing. Radku Sedláčkovi za jeho ochotu při případných konzultacích. Dále bych pak chtěl nepřímo poděkovat firmě Analog Devices za jejich technickou podporu, která mi byla velice nápomocná při řešení této úlohy.
Obsah 1
Úvod ........................................................................................................................................8
2
Vířivé proudy a defektoskopie..............................................................................................9 2.1
O vířivých proudech .........................................................................................................9
2.2
Testování materiálů .........................................................................................................10
2.3
Měřící sondy a jejich typy ..............................................................................................13
2.3.1
Absolutní sondy .......................................................................................................13
2.3.2
Diferenční sondy .....................................................................................................13
2.3.3
Odrazové sondy .......................................................................................................14
2.3.4
Hybridní sondy ........................................................................................................15
2.4
Způsob vyhodnocení defektu ..........................................................................................15
3
Zapojení měřicí sondy .........................................................................................................18
4
Vývojový kit ADSP-BF548..................................................................................................21
5
4.1
Obecné informace o ADSP-BF548 .................................................................................21
4.2
Signálový procesor BlackFin BF548 ..............................................................................23
4.3
Zvukový audio kodek AD1980 .......................................................................................24
4.4
Další možnosti použití ....................................................................................................25
Programování vývojového kitu ADSP-BF548 ...................................................................26 5.1
5.1.1
První pohled na vývojové prostředí .........................................................................26
5.1.2
Kompilace zdrojového kódu a jeho optimalizace....................................................27
5.2
6
7
Prostředí VisualDSP++ a jeho funkce.............................................................................26
Obecné postupy programování .......................................................................................28
5.2.1
Systémové služby ....................................................................................................28
5.2.2
Ovladače zařízení ....................................................................................................30
5.3
Vývojový diagram a popis programu .............................................................................31
5.4
Poznámky k programu ....................................................................................................35
Výsledky měření ..................................................................................................................36 6.1
Měření na malém defektu ...............................................................................................36
6.2
Měření na větším defektu ...............................................................................................37
6.3
Poznámky k měření ........................................................................................................38
Závěr .....................................................................................................................................39
Slovník použitých termínů a zkratek .........................................................................................40 Seznam použité literatury ...........................................................................................................41 Seznam obrázků...........................................................................................................................43 Seznam tabulek ............................................................................................................................44 Obsah CD .....................................................................................................................................44 Fotodokumentace ........................................................................................................................45 7.
1 Úvod Cílem této práce bude vytvořit části systému, vhodného pro nedestruktivní testování kvality materiálů. Touto problematikou se zabývá obor zvaný defektoskopie a existují zde různé varianty a metody testování. V našem případě se zaměříme na zjišťování defektů povrchové struktury u metalických materiálů. Nejběžnější a nejpoužívanější metodou testování je bezpochyby využití vířivých proudů. Jedná se o povrchovou nedestruktivní metodu, která přináší velice dobré výsledky a umožňuje odhalit v použitém materiálu jak jemné trhliny, tak i korozní opotřebení či mechanické deformace. Technika vířivých proudů se uplatňuje v řadě technických odvětví jako například v jaderném, energetickém, automobilovém nebo leteckém průmyslu. Praktické využití této metody je často vhodné pro kontrolu neferomagnetických trubek v tepelných výměnících či u kontroly lopatek rotorů u parních nebo spalovacích turbín. Úkolem této práce bude vytvořit měřící systému, který bude pomocí příslušné sondy detekovat změny v chování vířivých proudů, a umožní nám tím zjištění případných defektů v testovaných materiálech. Při dalším vyhodnocení získaných dat můžeme následně odhalit jak charakter příslušné vady, tak i jeho velikost. Celý systém bude koncipován jako jednotné zařízení, které bude generovat jak budící signál, tak i měřit a digitalizovat výsledné hodnoty získané z připojeného snímače. Tyto hodnoty bude možné uložit do připojeného počítače a dále je tak zpracovávat. Dalším prvkem systému bude obvod pro snímání a zesilování vstupních či výstupních signálů sondy. Pro budoucí rozšiřitelnost celého systému využijeme programovatelného, vývojové kitu se signálovým procesorem s označením ADSP-BF548 od firmy Analog Devices. Toto zařízení je značně variabilní a umožňuje mnoho dalších způsobu jeho využití. Blokové schéma zapojení měřícího systému můžeme vidět na obr. 1.
PC
SONDA ZESILOVAČ
ADSPBF548
ZESILOVAČ
Obr. 1 - Blokové schéma zapojení měřícího obvodu. 8.
2 Vířivé proudy a defektoskopie V této kapitole vysvětlíme vznik a význam vířivých proudů, které budou využity coby médium pro povrchové testování materiálů. Dále zde rozebereme problematiku testování materiálů a popíšeme prostředky, které nám pomohou toto testování realizovat.
2.1
O vířivých proudech
Fenomén vířivých proudů byl objeven v roce 1851 francouzským fyzikem Léonem Foucaultem. Ten zjistil, že pokud budeme pohybovat vodičem (nebo s kovovým materiálem) v okolí magnetického indukčního toku, začnou se v tomto vodiči vytvářet indukované proudy, které mají charakter proudových smyček. Tyto cirkulující proudy vytvářejí v materiálu indukované magnetické pole působící proti směru původního pole, které tyto proudy vyvolalo. Tento jev později upřesnil německý fyzik Heinrich Lenz a formulovat tak tzv. Lenzův zákon. Znění: Indukovaný elektrický proud v uzavřeném obvodu má takový směr, že svým magnetickým polem působí proti změně magnetického indukčního toku, která je jeho příčinou. Tento zákon můžeme také odvodit z Faradayova zákona elektromagnetické indukce. V uzavřené vodivé smyčce C se změnou magnetického indukčního toku plochou smyčky S indukuje elektromotorické napětí. Proud vzbuzený elektromagnetickou indukcí působí proti změně, která jej vyvolala.
ɛ ܨሺݐሻ ൌ ݈݀ ڄ ܧ ܥׯൌ െ
݀
ܵ݀ ڄ ܤ
݈݀ ܵ
(1)
Nebo také v diferenciálním tvaru:
ߘൈ ܧൌെ
ߜܤ ߜݐ
(2)
Právě ono znaménko mínus a rovnost v obou vztazích nám dává najevo, že proud vytvořený elektromagnetickou indukcí jde proti změně magnetického indukčního toku. Pokud by toto tvrzení bylo opačné, staly by se vířivé proudy zdrojem energie a vzniklo by perpetum mobile, což není možné. Tento efekt ovšem způsobuje, že vířivé proudy generují odporové ztráty transformované na tepelnou energii neboli Joulovo teplo. V důsledku toho se materiál zahřívá a to je nežádoucí například u elektrických motorů nebo transformátorů, kde dochází ke snížení účinnosti. Tyto tepelné ztráty jsou značně závislé na frekvenci a můžeme je vyjádřit následujícím vztahem.
ܲ ݒൎ ݂ ʹ ʹܤ ڄ Kde B je velikost magnetické indukce a f je frekvence signálu budící cívky. 9.
(3)
Vliv vířivých proudů v tomto případě, se značně eliminuje použitím skládaného jádra, na kterém jsou navinuty cívky transformátoru. Jádro je tvořeno větším počtem plátů pospojovaných k sobě a vytvářejí se v něm vířivé proudy o malé intenzitě, takže vliv tepelných ztrát není nijak značný. Dalším prvkem ochrany můžou být různé nátěry či speciální laky nanesené na jádro. Vířivé proudy ovšem můžeme využít i jinak. Používají se pro identifikaci vodivých materiálů (princip hledače min), nebo lze pomocí nich taktéž vytvořit magnetickou levitaci objektů. Dalším využitím je princip indukční brzdy, kde se ovšem paradoxně využívají ony nežádoucí tepelné ztráty. Jejich nejčastějším použitím je však testování struktury materiálů. Pro představu o velikosti vířivých proudů v materiálu se můžeme podívat na obr. 2, kde je barevně zachycena jejich intenzita.
Obr. 2 - Intenzita vířivých proudů v materiálu.
Jako materiál k této kapitole byl použit zdroj [1].
2.2
Testování materiálů
Vířivé proudy lze úspěšně použít v řadě průmyslových odvětví pro hledání defektů a změn stavu testovaného materiálu. Pokud dobře známe podstatu defektu a máme pro tento případ vhodně vyrobenou měřící sondu, můžeme se dočkat velice dobrých výsledků. Vířivé proudy se nejčastěji soustředí na povrchu materiálů a jsou tak vhodné pro povrchové a podpovrchové testování trhlin na vodivých materiálech jako jsou železné nosníky, koleje, nebo například trubky. U testování trubek a jiných dutých materiálů se kromě povrchové defektoskopie využívá i měření tloušťky materiálu, nebo také jeho povrchového stavu. Můžeme tak zjistit například korozní opotřebení, či jiné ztenčení materiálu. Také můžeme tuto metodu použít pro měření tloušťky nátěrů či jiných povrchových povlaků. 10.
Z praktického hlediska je princip jednoduchý. Po zkoušeném metalickém materiálu budeme „přejíždět“
budící
cívkou,
která
je
buzena
určitým
typem
střídavého
signálu
o dané frekvenci a amplitudě. V materiálu se budou vytvářet vířivé proudy, které generují vlastní magnetické pole. Toto pole následně měříme další, snímací cívkou. Výsledný signál je střídavý a můžeme u něj pozorovat změny amplitudy a fáze, oproti signálu budícímu.
Změna naměřeného signálu oproti signálu budícímu je dána: •
Geometrii zkoušeného materiálu
•
Parametry měření (budící frekvence, uspořádání cívek)
•
Magnetickou permeabilitou a elektrickou vodivostí zkoušeného materiálů
•
Přítomností povrchových vad materiálu Na základě těchto signálových změn jsme schopni určit hloubku penetrace vířivých proudů
do materiálu. Přitom hustota vířivých proudů se snižuje exponenciálně s hloubkou penetrace v materiálech. Tento stav je nazýván povrchový jev. Určení hloubky, do které je zkoušení účinné není snadné. Pro přibližnou představu je zaveden pojem standardní hloubka vniku vířivých proudů do materiálu. Jedná se o hloubku, ve které poklesne hustota vířivých proudů na 37% hodnoty na povrchu zkoušeného objektu. Hloubka vniku se zmenšuje na základě těchto skutečností: •
větší budící frekvence
•
větší permeabilita materiálu
•
větší elektrická vodivost předmětu
Výpočet standardní hloubky penetrace vířivých proudů je popsán následujícím vztahem:
ߜൎ Kde:
ͳ ඥߨ ߪڄ ߤڄ݂ڄ
δ – Standardní hloubka penetrace (mm) f – Budící frekvence (Hz) μ – Magnetická permeabilita (H/mm) σ – Elektrická vodivost (S/mm)
Podrobnější informace k této kapitole můžeme nalézt ve zdrojích [2] a [3].
11.
(4)
V následující tabulce si uvedeme některé hloubky vniku vířivých proudů pro daný materiál při určité budící frekvenci, abychom si ověřili výše zmíněná tvrzení. Materiál
Hloubka vniku při dané budící frekvenci (μm) f = 300 kHz
f = 2 MHz
stříbro
115
45
hliník
157
59
zlato
134
53
kadmium
250
96
chrom
151
58
měď
121
46
mosaz
264
98
olovo
421
163
cín
310
113
zinek ocel
223 47
87 18
Tab. 1 - Hloubka vniku vířivých proudů do materiálu Na obr. 3 můžeme vidět hloubku penetrace vířivých proudů v materiálu v závislosti na změně frekvence. Na levé straně je testovací cívka buzena vysokou frekvencí a na pravé straně frekvencí nízkou. Je patrné, že s rostoucí frekvencí se hloubka snižuje, ale narůstá tak citlivost snímání.
Obr. 3 - Hloubka penetrace při změně frekvence.
12.
2.3
Měřící sondy a jejich typy Pro měření vířivých proudů můžeme využít nespočet různých druhů sond, které se dělí podle
druhu provozního použití. V základu rozlišujeme čtyři typy sond, a to konkrétně absolutní, diferenční, odrazové a hybridní sondy. Jednotlivé sondy se od sebe odlišují jak způsobem měření, tak také rozmístěním samotných měřících cívek. 2.3.1 Absolutní sondy Absolutní sondy obvykle obsahují pouze jednu testovací cívku, která je použita pro generování vířivých proudů v materiálu. Jelikož vířivé proudy vytvořené vlivem magnetického pole cívky mají opačnou fázi pole a jdou tedy proti poli budícímu, je ovlivněna induktivní reaktance budící cívky. Vytváření vířivých proudů tedy ubírá energii budící cívky a dochází ke vzrůstu jejího elektrického odporu. Pokud tedy budeme měřit absolutní změny impedance cívky, získáme tím informaci o stavu zkoušeného materiálu. Tyto sondy se používají jak pro testování vad materiálů a k měření tloušťek povrchu. Je možné je vhodně přizpůsobit k různým potřebám měření. Zapojení sondy můžeme vidět na obr. 4. Buzení Rezistory
Referenční cívka
Snímání
Testovací cívka
Materiál
Obr. 4 - Absolutní sonda. 2.3.2 Diferenční sondy Tento typ sondy bude využíván v našem měření. Oproti absolutní sondě obsahují diferenční sondy dvě budící cívky. Obě cívky jsou vinuty se vzájemnou protifází a jsou umístěny v určité vzdálenosti od sebe. Princip sondy je poměrně jednoduchý. Využijeme toho, že máme dvě testovací cívky a budeme sledovat jejich rozdílné chování při klouzání po materiálu. Pokud 13.
se obě cívky nachází v místě, kde je materiál bez vady, je jejich rozdílné působení minimální a diference je tedy velice malá. Pokud ovšem nastane situace, kdy jedna cívka bude umístěna v pozici nad vadou a druhá cívka bude na místě materiálu bez vady, získáváme rozdílné působení na obou cívkách. Sledováním této diference je možné odhalit vady v materiálu. Mezi výhody této sondy patří malá citlivost na okolní vlivy (například teplota) a vysoká citlivost na přítomnost vady. Tato sonda má ovšem, z principu jejího fungování, jednu nevýhodu. Jestliže materiál obsahuje defekt, který je delší než vzdálenost mezi cívkami, dojde k tomu, že při přechodu cívek po materiálu bude zaznamenán jen začátek a konec defektu. Prostřední část bude mít velice malou diferenci na obou cívkách, protože obě cívky sledují stejnou vadu. I přesto jsou tyto sondy velice často v průmyslu používány z důvodu jednoduché detekce a praktické odolnosti této sondy. Zapojení sondy je zobrazeno na obr. 5. Buzení Rezistory
Snímání
Testovací cívka
Referenční cívka
Materiál
Obr. 5 - Diferenční sonda. 2.3.3 Odrazové sondy Konstrukce odrazové sondy je podobná se sondou diferenční. Taktéž obsahuje dvě cívky, ale s tím rozdílem, že jedna cívka je použita pro generování vířivých proudů a druhá ke snímání změn v materiálu. Výhodou tohoto řešení je možnost vysoké citlivosti, kdy budící cívka vytváří silné pole v okolí cívky měřící. Pokud bude mít měřící cívka vysokou citlivost, získáme velice přesné výsledky o stavu materiálu. Zapojení sondy můžeme vidět na obr. 6.
14.
Buzení
Snímání
Generující cívka
Snímací cívka
Materiál
Obr. 6 - Odrazová sonda. 2.3.4 Hybridní sondy Hybridní sondy jsou používány a navrženy pro řešení konkrétního problému v průmyslu. Povětšinou jsou určeny pro zvláštní testovací aplikace na specifických materiálech. Sonda bývá v tomto případě navržena kombinovaně, a obsahuje v sobě několik jiných typů sond. Takovéto sondy nejsou příliš univerzální a je vhodné je tedy použít pouze v případě testování konkrétní vady. Tuto vadu jsou ovšem schopny detekovat s vysokou citlivostí. Detailnější popis jednotlivých druhů sond je možné nalézt v literatuře, z které bylo čerpáno [4].
2.4
Způsob vyhodnocení defektu
Podle typu použité sondy je nutné stanovit, jakou veličinu budeme měřit pro získání informace o defektu v daném materiálu. Nejčastější metodou vyhodnocení vady je fázový posuv měřeného signálu. Závislost mezi velikostí fázového posuvu a hloubce defektu je:
Kde:
ݔ
V radiánech:
ߠൌ
Ve stupních:
ߠ ൌ ή ͷǡ͵ι
ߜ ݔ
ߜ
(5)
(6)
θ – Fázový posun (Stupně nebo Radiány) δ – Standardní hloubka penetrace (mm) x – Vzdálenost pod povrchem (mm)
Vytváření vířivých proudů můžeme pojmout jako časový proces, kdy je nutné si uvědomit, že vířivé proudy pod povrchem materiálu potřebují ke svému vytvoření více času, než vířivé proudy vznikající na povrchu. Tím pádem jejich pronikání do materiálu vytváří časové zpoždění 15.
signálu a změnu jeho fáze. Pokud se pod povrchem materiálu nachází vada, dojde k narušení fáze (případně i amplitudy) výstupního signálu sondy. Na obr. 7 a 8 můžeme vidět vykreslení těchto posuvů při zjištění vady v materiálu, která narušila pole budící vířivé proudy.
Obr. 7 – Měření s hlubokou vadou.
Obr. 8 – Fázové zpoždění při hlubokém defektu.
Na obr. 7 vidíme pozici sondy, která se hýbe po povrchu materiálu. Defekt (černá čára) je ve velké hloubce a začíná už na povrchu, takže jeho velikost značně ovlivňuje budící pole vytvářející vířivé proudy. Na obr. 8 můžeme sledovat zpoždění signálu ze sondy, v určitých místech, po kterých se sonda pohybovala. V polohách 1 a 2 doházelo k malému zpoždění, protože daný defekt se ještě nedostal do přítomnosti pole, a nenarušoval tak vznik vířivých proudů. U dalších poloh je ovšem celý defekt přímo v budící poli (je přímo pod snímací cívkou) a zpoždění bude vzrůstat. Pokud sonda zmizí z dosahu vady, bude se posuv snižovat (vzhledem k našemu průběhu na obr. 8). 16.
Obr. 9 – Měření fázového zpoždění při podpovrchové vadě. Při podpovrchové vadě, jejíž situaci můžeme vidět na obr. 9, je defekt umístěn ve větší hloubce od povrchu a jeho malé rozměry tolik neovlivňují budící pole. Sonda zaznamenala vadu až v pozici číslo 3, a její vliv na velikost fázového posuvu byl malý, nicméně měřitelný. Podrobnější popis o způsobu vyhodnocení vířivých proudů nalezneme ve zdroji [5].
17.
3 Zapojení měřicí sondy Jak už bylo řečeno výše, v našem případě máme k dispozici diferenční typ sondy a budeme tedy pracovat s tímto typem. Sonda má označení INDETEC SP100RD.S5111. Pro sondu je nutné vytvořit zapojení, které bude obsahovat budič (zesilovač) vstupní signálu, který budeme generovat pro vznik vířivých proudů, a také rozdílový zesilovač pro měření výstupu sondy. Zapojení samostatné sondy v obvodu a jejího konektoru můžeme vidět na obr. 10.
Obr. 10 - Zapojení měřicí sondy. Sonda bude zapojena do můstku spolu s dvěma proměnnými rezistory R, kterými budeme nastavovat proud budících cívek sondy. Pro budič sondy použijeme operační zesilovač OPA552 od firmy Texas Instruments. Ten zesilovač zapojíme ve standardním neinvertujícím zapojení, dle příslušného katalogového listu [6]. Jako rozdílový zesilovač, kterým budeme snímat diferenci mezi oběma budícími cívkami, použijeme přístrojový zesilovač AD620 od firmy Analog Devices [7]. Tento operační zesilovač má tu výhodu, že stupeň jeho zesílení nastavujeme pouze jedním rezistorem RG. Oba zesilovače budou napájeny symetrickým napětím ±18 V. Pro symetrické napájení zesilovačů, vytvoříme zapojení s oddělovacími kondenzátory. Na obr. 11 je přímé zapojení konektoru sondy pro použití v našem obvodu.
18.
+Ucc
IN
OPA552
+
Is
OZ1 R ≈ 0.5k
-Ucc R1
R2
3k9
27k
R ≈ 0.5k
+Ucc + AD620
Rg
GND
Rg
OZ2 Rg
320 Ω
OUT
-
-Ucc
Sonda GND
+18V
+Ucc + 100n
100n
10u
100n
100n
10u
+ 10u
GND +
+ 10u
-18V
-Ucc
Obr. 11 – Zapojení budícího a měřicího obvodu sondy. Jako vstup IN bude sloužit střídavý budící signál z našeho generátoru. Tento signál zesílíme operačním zesilovačem OZ1 s nastaveným zesílením G1 = 8. Výstupní zesílený signál je potom přiveden na obě měřicí cívky sondy. Pomocí proměnných rezistorů R nastavíme proud budící obě cívky na hodnotu IS = 25 mA. Nyní budeme vyhodnocovat diferenci úbytku napětí na obou měřicích cívkách. K tomuto účelu použijeme rozdílový zesilovač OZ2. Jelikož diference napětí na cívkách nebude příliš velká, nastavíme pomocí rezistoru RG její zesílení na G2 = 155. Dle údajů z katalogových listů vypočítáme rezistory, kterými nastavíme požadované zesílení na obou OZ.
ͳܩൌ ͳ ʹܩൌ ͳ
ܴʹ
(5)
ܴͳ ͶͻǡͶήͳͲ ͵ ܴܩ
(6)
Rezistor R2 zvolíme s hodnotou R2 = 27 kΩ a vypočítáme zbývající rezistor R1 pro zesílení G1 = 8. 19.
ܴͳ ൌ ሺ
ʹ
ʹήͳͲ ͵
ͳ
ሺͺെͳሻ
ൌ െͳሻ
؆ ͵ǡͻπ
(7)
Dále vypočítáme rezistor RG, kterým nastavíme zesílení druhého operačního zesilovače na hodnotu G2 = 155. ܴ ൌ
ͶͻǡͶήͳͲ ͵ ሺ ʹ െͳሻ
ൌ
ͶͻǡͶήͳͲ ͵ ሺͳͷͷെͳሻ
؆ ͵ʹͲπ
(8)
Katalogové listy k jednotlivým operačním zesilovačům a sondě můžeme nalézt na přiloženém CD, nebo na internetovém odkazu uvedeném v použitých zdrojích [6], [7] a [8].
20.
4 Vývojový kit ADSP-BF548 Tato kapitola bude pojednávat o vývojové desce ADSP-BF548 od firmy Analog Devices, která v našem případě bude použita jako výkonný prostředek pro náš měřicí systém. Protože se jedná o velice multifunkční zařízení, které má spousty možností použití, popíšeme si zde jen jeho nejdůležitější části použitelné pro naše potřeby. Bude zde taktéž zmíněno další možné využití desky a případná rozšíření naší úlohy.
4.1
Obecné informace o ADSP-BF548
Vývojový kit ADSP-BF548 od Analog Devices je kompletně připravený výpočetní systém se signálovým procesorem. Celý kit si můžeme, zjednodušeně řečeno, představit jako malý počítač, na jehož základní desce jsou již integrovány všechny potřebné prvky pro zpracovávání dat a komunikaci s okolím. Uvedeme si zde některé parametry desky. Procesor:
Signálový procesor Blackfin BF548 s taktem až 600 MHz
Paměť:
SDRAM – 64 MB Rychlá Flash paměť – 32 MB NAND Flash paměť – 2 GB 2,5‘‘ Pevný disk o kapacitě 40 GB
Zvuk:
Integrovaný audio kodek AD1980 s podporou šesti kanálového zvuku
Obraz:
Dotykový, 4,3‘‘ TFT LCD displej o rozlišení 480x272 pixelů
Další prvky: Síťové
rozhraní,
sériový
port,
čtečka
paměťových
karet
typu
SD,
několik programovatelných spínacích tlačítek, polohový rotační enkodér.
Na obr. 12 si můžeme prohlédnout, jak celý vývojový kit vypadá. Jako celek deska obsahuje ohromné množství konektorů a spínačů. Kompletní rozmístění všech prvků vidíme na následujícím blokovém schématu na obr. 13. Pro naše potřeby můžeme pozorovat, že audio kodek AD1980 je propojen se signálovým procesorem pomocí sériového komunikačního kanálu SPORT a tento kanál je pro kodek dedikovaný, tudíž neměnný.
21.
Obr. 12 - Vývojový kit ADSP-BF548
Obr. 13 - Blokové schéma zapojení ADSP-BF548
Pro podrobnější informace o vývojovém kitu a jeho dalších vlastnostech je k dispozici katalogový list na internetových stránkách výrobce [9]. 22.
4.2
Signálový procesor BlackFin BF548
Pojem „signálový procesor“, neboli DSP, je používán pro označení mikroprocesoru, jehož návrh je optimalizován pro algoritmy zpracovávající digitálně reprezentované signály. Jsou zde kladeny především nároky na rychlé a kontinuální zpracování velkého množství dat, která protékají mikroprocesorem. Digitální signálový procesor BlackFin BF-548 je moderní varianta DSP, která je hojně používaná u digitálního zpracovávání různých typů signálů. Z pohledu zařízení jako takového, se jedná o 32-bitový mikroprocesor s redukovanou instrukční sadou (architektura RISC). Vzhledem k charakteru DSP se data zpracovávají tak, že jedna instrukce z instrukční sady je schopna zpracovávat více různých dat. Toto uspořádání se nazývá SIMD architektura. Z hlediska celkového řešení jádra je DPS postaveno na modifikované Harvardské architektuře, a obsahuje tak oddělenou paměť pro data a samotný program. Ovšem modifikace této architektury spočívá v tom, že je paměť pro program a paměť pro data využívají společnou paměťovou sběrnici. Jedná se tedy spíše o jakousi kombinaci Harvardské a Von Neumannovi architektury (společný prostor pro data i program). Tím pádem máme možnost snadno přenášet data mezi jinak rozdělenými paměťmi.
Obr. 14 - Blokové schéma zapojení signálového procesoru Blackfin. Na obr. 14 je zobrazeno blokové schéma zapojení mikroprocesoru. Můžeme zde vidět, že DSP komunikuje se čtyřmi vyrovnávacími paměťovými bloky (cache). Paměťový blok úrovně jedna je označen L1 a sám se dělí na několik samostatných úložišť pro ukládání instrukcí programu a uložení zpracovávaných dat. Tyto bloky jsou velice rychlé paměti typu SRAM (plus jedna paměť typu ROM) a díky jejich, téměř nulové, latenci při komunikaci s mikroprocesorem slouží k bezproblémové výměně dat. Se svým okolím komunikuje DSP prostřednictvím několika 23.
portů, které jsou ve výchozím stavu dedikovány pro určité periferie. Data z těchto portů jsou pomocí přímého přístupu do hlavní (externí) paměti, následně načítána vyrovnávacími paměťovými bloky a následně zpracovávána samotným mikroprocesorem. Všechny tyto porty jsou schopny vygenerovat signál přerušení, a můžeme je tedy v daném pořadí obsluhovat.
Nastavení interních registrů a popis jednotlivých prvků mikroprocesoru je uveden v katalogovém listu zařízení [10].
4.3
Zvukový audio kodek AD1980
Audio rozhraní kitu je reprezentováno integrovaným audio kodekem AD1980 od firmy Analog Device. Kodek je kompatibilní se zvukovým standardem AC’97 ve verzi 2.3 a podporuje přehrávání zvuku až na šesti kanálech (formát 5.1). Každý kanál obsahuje vlastní DAC převodník a příslušnými výstupními filtry. Pomocí registrů můžeme libovolně měnit zapojení výstupních 3.5 mm konektorů a přizpůsobit tak výstup na různý počet kanálů. Samotný kodek je propojen s hlavním mikroprocesorem pomocí vyhrazeného sériového kanálu číslo 0 (SPORT0). Možnosti kodeku, pro možnosti audio reprodukce, jsou plně srovnatelné s dnešními integrovanými zvukovými kodeky v osobních počítačích.
Obr. 15 - Schéma zapojení zvukového kodeku AD1980
24.
Na obr. 15 můžeme vidět interní zapojení celého kodeku. Vstupní a výstupní data signálového procesoru jsou přivedeny na piny SDATA_IN a SDATA_OUT. Tyto data jsou následně zpracována pomocí standardizovaného rozhraní AC ’97, které je vyhodnotí a zašle na jednotku rozdělující data pro D/A převodníky. Ve schématu je důležitá sekce CODEC CORE, která obsahuje samostatné převodníky signálů. Můžeme pozorovat, že v horní části se nacházejí dva A/D převodníky. Tyto 16-bitové převodníky jsou použity pro vstupní signály z mikrofonu a jsou přivedeny na rozhraní AC ’97 pro další vyhodnocení mikroprocesorem. Ve spodní části sekce se potom nacházejí 20-bitové D/A převodníky pro všech šest výstupních kanálů.
Audio kodek pracuje s maximální vzorkovací frekvencí 48 kHz. Je sice možné pracovat i v režimu dvojnásobné vzorkovací frekvence, ovšem toto není příliš doporučováno z důvodu občasných problémů. Budeme tedy pracovat se standardní frekvencí. Vzhledem k tomu, že po překročení poloviny vzorkovací frekvence dochází k aliasingu, je možné maximálně generovat výstupní frekvenci až 24 kHz (v manuálu se uvádí maximální hodnota 20 kHz). Tato hodnota bude pro naše potřeby dostačující. Nastavení kodeku do daného režimu se provádí pomocí interních registrů, které je potřeba správně nastavit. Všechny tyto registry jsou podrobně popsány v příslušném katalogovém listu pro daný kodek [11].
4.4
Další možnosti použití
Vzhledem k tomu, že naše úloha bude počítat pouze s konzolovým programem, který bude nucen komunikovat s uživatelem pomocí příkazové řádky programu VisualDSP++, bylo by vhodné rozšířit úlohu také o zapojení dalších interních zařízení desky. Bylo by například možné použít grafický displej pro komunikaci s uživatelem. Uživatel by si zadával data přímo na displeji prostřednictvím numerické klávesnice, a samotné výsledky měření by se zobrazovaly přímo na displeji zařízení. Taktéž by bylo možné výsledná data uchovávat uvnitř zařízení prostřednictvím pevného disku. Jako celek by ovšem takový program byl velice složitý, až profesionální a z časových důvodů jsme se tomuto řešení vyhnuli. Možnosti vývojové kitu ovšem ani zdaleka nekončí pouze zpracováváním audio signálu. Je možné jej použít například pro kódování a dekódování videa či pro vytváření výpočetních analýz. Ve spojení s operačním systémem uClinux, který lze do zařízení nahrát, jej můžeme taktéž použít pro monitoring síťového připojení, nebo také jako multimediální přehrávač.
25.
5 Programování vývojového kitu ADSP-BF548 Tato kapitola bude pojednávat o interním programu vývojového kitu ADSP-BF548, který zajišťuje funkčnost celého systému. Jeho hlavní funkcí je generovat budící signál pro měřicí sondu a následně měřit z obvodu sondy výstupní rozdílové napětí. Vzhledem k délce programu zde bude uveden pouze vývojový diagram s popisem funkce programu. Kompletní program bude možné nalézt v příloze. Celý kód je psán v jazyku C a byl vytvořen ve vývojovém prostředí VisualDSP++ od firmy Analog Devices (demo verze je dodávána spolu s deskou).
5.1
Prostředí VisualDSP++ a jeho funkce
5.1.1 První pohled na vývojové prostředí Pro programování našeho vývojového kitu je téměř nutné používat toto prostředí vyvinuté přímo firmou Analog Devices. Tímto prostředím je program VisualDSP++, který obsahuje vše potřebné pro vývoj aplikací, určených pro firemní DSP systémy. Tyto aplikace je program schopen přímo zkompilovat a následně nahrát do interní paměti samostatného vývojového kitu. V základu je možné používat programovací jazyky C a C++, které jsou nejpoužívanějšími jazyky pro programování mikroprocesorů obecně. Přirozeně je zde také možnost psát vlastní kód přímo pomocí nejnižšího programovacího jazyku, tedy assembleru. Prostředí jako takové se příliš neliší od jiných vývojových nástrojů pro tvorbu aplikací, jako jsou například Dev-C++ nebo NetBeans, a jeho náhled je zobrazen na obr. 16.
Obr. 16 - Prostředí programu VisualDSP++ 26.
Hlavní okno programu je složeno z několika částí, přičemž prostřední část zaujímá prostor pro samotný editor zdrojového kódu. Levá část obsahuje inspektor souborů a napravo můžeme vidět okno, které zobrazuje (po kompilaci programu) celý náš kód ve formě posloupnosti kódu v assembleru. Spodní část okna obsahuje výstup informační konzole. Program VisualDSP++ můžeme používat i v případě, že nevlastníme žádný vývojový kit se signálovým procesorem, jelikož toto prostředí obsahuje i virtuální simulátory zařízení, které nám dovolují vytvářet jednoduché programu a doslova si tak samotné programování „osahat“. Přirozeně však emulují pouze část procesoru, nikoliv připojených periférií jako například audio kodek či rozhraní ethernet. Další funkce tohoto prostředí jsou již velice úzce svázány s konkrétním typem připojeného zařízení a dovolují nám například výpis kompletního obsahu paměti, kterou program při svém běhu použil (tzv. memory dump), nebo obsluhu telemetrických kanálů a práce s nimi. Tyto kanály jsou vytvořeny a deklarovány přímo ve zdrojovém kódu programu a jsou přiřazeny konkrétní proměnné hodnotě v našem kódu. Díky tomu je následně možné sledovat průběh změn této proměnné v reálném čase běhu programu. Navíc pomocí těchto funkcí můžeme vytvářet grafy a statistiky těchto změn. 5.1.2 Kompilace zdrojového kódu a jeho optimalizace Kompilace kódu ve VisualDSP++ probíhá v několika fázích, jejichž cílem je vytvořit výsledný spouštěcí soubor s příponou *.DXE (obdoba spouštěcích programů *.EXE na osobních počítačích), nebo přímo nahrávací soubor *.LDR, který se bude přímo spouštět z interní paměti na vývojovém kitu. Pro zpřehlednění těchto fází se můžeme podívat na diagram na obr. 17. Volitelné knihovny třetích stran (*.DLB)
Soubory zdrojového kódu (*.asm pro Assembler nebo *.c pro C/C++)
Debug Kompilace
Objektové soubory (*.DOJ)
Linkování
Spouštěcí soubory (*.DXE) Nahrávání
Volitelný spouštěcí kód (*.s)
Popisovač linkování (*.LDF)
Bootovací kód (*.DXE)
Obr. 17 - Sekvence kompilace zdrojového kódu.
27.
Debugger prostředí VisualDSP++
Bootovací obraz (*.LDR)
Jak můžeme vidět, základem pro celkovou kompilaci kódu do formy vhodné pro signálový procesor, je nejprve „klasická“ kompilace zdrojového jazyka C/C++ do podoby samotného strojového kódu (Assembler). K tomuto výsledku je ještě nutné přidat spouštěcí kód, který nastaví mikroprocesor do výchozího (nebo uživatelem definovaného) stavu. Při tvorbě jednodušších aplikací není nutné tento kód vytvářet, protože VisualDSP++ si vytvoří svůj výchozí. Dalším prvkem v kompilaci je linkování. Jelikož vývojový kit obsahuje spousty pamětí, které nejsou dynamického charakteru a musíme je tak definovat, musí mít každá aplikace prvek zvaný linker. Linker je zdrojový soubor, který popisuje alokace paměťového prostoru vyžadovaného samotným zdrojovým kódem. Říkáme tím samotnému mikroprocesoru, jaký paměťový prostor by měl být, v té či oné paměti, k dispozici pro příslušnou akci. Pokud není linker definován, bude při linkování paměti použít výchozí generický linker, který ovšem pracuje s menším rozsahem použité paměti (pouze interní paměti). Pokud linkování proběhlo úspěšně a program má dostatek definovaného paměťového místa, můžeme vytvořit výsledný *.DXE spouštěcí soubor. Tento soubor je ve výsledku kompaktní projekt programu, který je možné kdykoliv spustit. Pro spouštění těchto souborů je ovšem nutné mít k dispozici nějakou formu operačního systému, který bude na vývojovém kitu nahrán (například Linux nebo VDK od Analog Devices). V opačném případě je možné výsledný *.DXE soubor „přetvořit“ na program bootovací (*.LDR), který se bude vykonávat hned po spuštění zařízení. Další informace k této kapitole můžeme nalézt ve výukové přednášce přímo od Analog Devices [12]
5.2
Obecné postupy programování
Při obecném návrhu programu pomocí prostředí VisualDSP++ se nemusíme spoléhat pouze na standardní postupy programování, ale můžeme využít již předpřipravené prvky, které nám naše programování zpříjemní. Je nutné si tedy uvědomit základní rozložení vytvářených aplikací a využít následně služeb vývojového kitu. Prostředí VisualDSP++ dělí tyto prvky na oblast systémových služeb (Systém Services) a na ovladače připojených zařízení (Device Drivers). 5.2.1 Systémové služby Systémové služby můžeme rozdělit do několika kategorií, ale v základu se jedná o softwarové knihovny a o soubory ucelených rozhraní pro programování aplikací (API). Cílem je zajistit flexibilitu, variabilitu a přenositelnost aplikací v rámci různých verzí hardwaru. 28.
Základní představa je taková, že máme aplikaci, která obsahuje několik ovladačů zařízení. Tyto ovladače následně komunikují se systémovými službami. Mezi položky systémových služeb patří tyto prvky: x
EBIU (Rozhraní vnější přenosové sběrnice)
x
Dynamic power management (Ovládání napájení, frekvencí a funkčních režimů)
x
Interrupt manager (Správce přerušení)
x
DMA manager (Správce přímého přístupu do paměti)
x
Deferred callback (Odložená zpětnovazební volání programu)
x
Flag kontrol (Nastavování příznakových registrů)
x
Timer kontrol (Nastavování časovačů)
x
Port kontrol (Ovládání portů zařízení)
Jednotlivé položky systémových služeb jsou spolu provázány v následujícím seskupení, které můžeme vidět na obr. 18. EBIU
Dynamic Power
Interrupt Manager
DMA Manager
Deferred Callback
Flag Control
Timer Control
Port Control
Obr. 18 - Souvislosti systémových služeb. Jak můžeme vidět, tak systémové služby jsou velice úzce propojeny, tudíž je vhodné počítat se všemi prvky, které nabízejí. Ovšem tyto funkce nám pouze napomáhají k nastavení vývojového kitu do optimálního módu práce (nastavení frekvence, rychlost po sběrnici či přerušení). Tím pravým prostředkem pro práci s vlastnostmi desky jsou až ovladače zařízené, která nám dávají kontrolu nad jednotlivými zařízeními vývojové kitu jako například práce se sériovou linkou, grafický displej, nebo například náš používaný audio kodek. Informace o této kapitole byly přebrány z výukových materiálů o systémových službách od firmy Analog Devices. Odkaz nalezneme v použité literatuře [13]. 29.
5.2.2 Ovladače zařízení Přestože náš program nebude používat tuto třídu, uvedeme si pro doplnění její krátký popis. Ovladače zařízení, neboli anglicky Device Drivers jsou knihovny připravené firmou Analog Devices pro použití periferních zařízení vývojových desek. Jedná se o soubor funkcí (API), které zlepšují inicializaci jednotlivých komponent či složek dodatečného hardwaru a umožňují lepší práci s těmito objekty. Každé přídavné zařízení, jako například LCD displej, sériová linka nebo pevný disk mají k dispozici svůj vlastní ovladač určený k jejich chodu. Jedná se prakticky o obdobu klasických ovladačů hardwaru na osobních počítačích. Samotné ovladače, kvůli svému charakteru knihoven, operují na vrstvě mezi systémovými službami a výslednou aplikací. To znamená, že pro jejich chod musí být správně nastaveny patřičné systémové služby! Ovladače zařízení mají oproti tradičnímu stylu programování (používání přerušení, přímé zápisy do registrů atd.) pevnou posloupnost a jejich uspořádání kódu je svým způsobem pevně dáno. Pokud budeme programovat aplikaci využívající ovladač zařízení, tak musíme provést několik úkonů, které ovladač inicializují. Nejprve je nutné připojit hlavičkové soubory (soubor header), které obsahují deklarace funkcí používaných později. Těmito soubory jsou hlavičkové soubory pro definici funkcí systémových služeb, manažer zařízení (Device Manager) a nakonec samotný soubor pro ovladač daného zařízení. Dále je nutné si uvědomit, že oproti klasickým aplikacím, kde můžeme využít dynamicky alokovanou paměť, aplikace postavené na ovladači zařízení potřebují mít definovanou paměť statickou! To znamená, že všechny paměťové zásobníky musí mít správně přidělené místo v určitém typu paměti. Soubor obsahující informace o těchto alokacích paměťového prostoru se nazývá linker a je možné ho pomocí manažeru ve VisualDSP++ vytvořit automaticky s definovanými parametry. Pro ukládání dat do paměti máme k dispozici čtyři typy tzv. bufferů neboli zásobníků. V základu je můžeme rozdělit na jednorozměrné, dvourozměrné, sekvenční jednodimenzionální a kruhové. Pro jejich zápis či čtení se používají příkazy adi_dev_Write() a adi_dev_Read(). Nastavení bufferů je poměrně komplexní a tudíž každému musíme nastavit parametry jako typ datového toku, řazení nebo jeho návratovou funkci (Callback function), která zajišťuje opakování zápisu/čtení do bufferů podle daného řetězení. Celou programovací sekvenci lze rozdělit do jednotlivých bloků. Tuto posloupnost můžeme vidět na obr. 19. Další podrobnosti o funkci a inicializaci ovladačů zařízení najdeme ve výukových materiálech firmy Analog Devices [14]. 30.
Strana aplikace
Konfigurace parametrů zařízení a definování stylu jeho datového toku (Dataflow).
Přiřazení bufferu ovladače ke čtení či zápisu pomocí adi_dev_Read() / adi_dev_Write().
Povolení stylu datového toku bufferů (povolit mód Dataflow).
Ovladač vytvoří „Callback“ pokud je buffer plný, a oznámí to aplikaci.
Callback
Strana ovladače zařízení
Otevřít ovladač zařízení a definovat jeho handler.
Zásobování bufferů pomocí čtení či zápisů, tak aby docházelo k jejich plnění.
Obr. 19 - Rozložení programu při použití ovladačů zařízení
5.3
Vývojový diagram a popis programu
Pro naše použití bude nejprve nutné deklarovat a nastavit proměnné, které později požijeme v jednotlivých, za sebou volaných funkcích. Samotný kodek má několik variant inicializace vstupů a výstupu a je potřeba tento mód řádně nastavit v programu. Stejně tak je nutné vytvořit pole registrů, které nastaví kodek do výchozího (nebo uživatelsky změněného) stavu. Tímto stavem se myslí registry ovlivňují nastavení počtu kanálů, použité vzorkovací frekvence pro DAC převodníky nebo pro volbu konektorů. Rozpis jednotlivých adres registrů a jejich nastavení je možné nalézt v příslušném katalogovém listu pro kodek AD1980. Je třeba upozornit na to, že ne všechny registry je nutné definovat a nastavit. Ovšem toto je „populární“ metoda nastavení registrů a je převzata z ukázkového programu přímo od Analog Devices (všechny doplňkové příklady jsou k dispozici v nápovědě pro program VisualDSP++). Program je primárně složen z několika po sobě volaných inicializačních funkcí, které mají nastavit kodek do požadovaného režimu. Všechny funkce jsou poměrně jednoduché a pomocí zápisu do registrů nastavují jednotlivé možnosti kodeku do určitých stavů. Program jako celek pracuje s přerušením, v kterém se neustále vykonává zasílání vygenerovaných hodnot signálu na výstup audio kodeku. V tomtéž přerušení se taktéž provádí odměr dat z mikrofonního vstupu zařízení a data jsou následně ukládána do paměti. Jelikož není k dispozici (téma jiné práce) 31.
inicializace displeje či pevného disku, spokojíme se pouze s digitalizací dat v paměti. Export těchto dat je možné provést naprogramováním dalšího datového zařízení, přenesením obsahu paměti do počítače pomocí prostředí VisualDSP++, nebo použitím telemetrického kanálu desky pro zasílání dat přes programovací port USB. Celý program je možné nalézt na přiloženém CD ve složce Program. Jedná se o kompletní projekt, který jednoduše otevřeme v prostředí VisualDSP++. Projekt zkompilujeme a spustíme. V konzolovém okně na spodní straně obrazovky bude uživatel nejprve vyzván, aby zadal počet kanálů, na kterých se má generovat budící signál (1 nebo 2 kanály). Dále je potřeba vyplnit pro každý kanál parametry signálu dle nápovědy. Na výstupu zařízení se následně objeví generované signály a vstupní konektor (mikrofon) desky bude simultánně měřit vstupní signál z obvodu sondy. Nyní si stručně popíšeme jednotlivé funkční bloky programu. x
Tabulka výstupního signálu
Tímto blokem schématu se myslí dvě funkce nazvané LEFT_Wave a RIGHT_Wave. Každá funkce je určena pro jeden výstupní kanál generovaného signálu. Funkce má tři parametry a to typ (1 pro sinus a 2 pro obdélník), frekvence a amlituda. Z těchto vstupních hodnot se nejprve vypočítá počet vzorků na jednu periodu signálu jako podíl vzorkovací frekvence (fVZ = 48 kHz) a frekvence požadované. Frekvenci musíme nastavit pouze takovou, aby výsledný počet vzorků na periodu byl celé číslo (uplatnilo by se prosakování do okolních spekter signálu a došlo by k deformaci) a aby frekvence nebyla větší než polovina frekvence vzorkovací. Následně se pomocí takto získané hodnoty a vstupních parametrů vypočítají jednotlivé vzorky signálu, kterése uloží do příslušného pole. x
Audio_Reset ()
Jednoduchá funkce, ve které nastavíme resetovací pin kodeku nejprve na hodnotu jedna (pro jistotu) a následně, kvůli inverzní logice, na hodnotu nula abychom resetovali kodek. Nakonec nastavíme reset opět do jedničky a tuto hodnotu nadále nebudeme měnit. Po každém nastavení resetu následuje zpožďovací cyklus, který zajistí dobu nutnou pro zotavení obvodu z resetu. x
Init_Sport0()
Tato funkce inicializuje sériovou komunikaci mikroprocesoru s kodekem pomocí sériového portu SPORT0. Nejprve povolíme a zaregistrujeme patřičné piny portu a následně provedeme reset registrů nastavujících příchozí a odchozí data. V dalším kroku nastavíme registry pro dělič 32.
frekvence, na kterém sériový port poběží (vše necháme na výchozích hodnotách a nastavíme tak pouze nulu). Jako poslední krok budeme nastavovat resetované registry pro příchozí a odchozí data. Do registrů RCR2 a TCR2 vložíme hodnotu, která nám určí velikost přenášeného slova po naší sběrnici. Pro 16-bit slovo nastavíme dle katalogového listu hexadecimální hodnotu 0x000F. x
Init_DMA()
Tato funkce nastavuje přímý přístup do paměti pro příchozí a odchozí kanál sériového portu. Použijeme tedy dva DMA kanály, kterým přiřadíme naše buffery pro tyto data. Nejprve namapujeme kanály sériového portu 0 na oba kanály přímého přístupu do paměti a následně těmto kanálům v paměti přiřadíme příslušné buffery pro příchozí a odchozí data. x
Enable_SPORT0_DMA_TDM_Streams()
Protože naše buffery musí obsahovat více druhů slotů pro komunikaci s kodekem (víceúrovňový buffer), musíme toto multikanálové zasílání dat nastavit. Dále zde povolíme oba DMA kanály a registrujeme handler přerušení na námi definovaný Sport0_TX_ISR. x
Enable_Codec_Slot16_Mode()
Náš odchozí buffer Tx0Buffer má několik slotů, které nám umožní zasílat různá data přímo do audio kodeku. Přestože jsme již povolili pomocí registrů Slot16 mód pro přenos dat ve formátu 16-bit slova, potřebujeme tento mód povolit ještě jednou přímo v kodeku. Zašleme tedy kodeku zprávu a na příslušné adrese tak změníme hodnotu registru. Po tomto nastavení chvilku počkáme, a budeme naslouchat příchozímu bufferu, zda kodek zašle potvrzující data (první nastavený bit v jednom přijatém rámci). x
Init_AD1980_Codec()
Tato funkce nastaví kodek AD1980 do námi požadovaného režimu činnosti tím, že zašle na příchozí kanál kodeku pole konfiguračních registrů sCodecRegs. Toto pole obsahuje adresy a hodnoty registrů pro nastavení úrovní hlasitosti výstupů, počtu kanálů a podobně. x
Obsluha přerušení
Zde budeme obsluhovat přerušení, definované handlerem Sport0_TX_ISR, pro zapisování dat na výstupní konektor kodeku a také zde budeme ukládat hodnoty z konektoru vstupního (mikrofon) do paměti. Do odchozího bufferu Tx0Buffer tedy postupně zapisujeme data z tabulky našeho generovaného signálu, a čteme data přicházející z bufferu Rx0Buffer. Oba buffery jsou vícerozměrné a umožňují nám tak pracovat s daty obou vstupních / výstupních kanálů kodeku (pravý a levý kanál audio konektoru). 33.
Na obr. 20 můžeme vidět vývojový diagram programu, který zobrazuje posloupnost volaných funkcí a vykonávání cyklu přerušení. Main
Načtení vstupních parametrů signálů.
Vytvoření tabulky výstupního signálu pro levý a pravý kanál.
Audio_Reset() [Resetování kodeku]
Init_Sport0() [Inicializace rozhraní]
Init_DMA() [Přímý přístup do paměti]
Enable_SPORT0_DMA_ TDM_Streams() [Povolení streamu signálů po rozhraní]
Enable_Codec_Slot16 _Mode() [Mód kodeku Slot16]
Init_AD1980_Codec() [Inicializace kodeku]
Registrace handleru přerušení
Konec generování? [While cyklus]
Vnější přerušení programu
Zápis / čtení dat
Ukončení služeb a uzavření bufferů
End
Obr. 20 - Vývojový diagram programu. 34.
Paměť
5.4
Poznámky k programu
Výsledný program je pouze konzolového charakteru a k jeho provozu je nutné mít připojený počítač s prostředím VisualDSP++. Taktéž výstupní data načítáme z desky pomocí tohoto prostředí. Důvodem je, že se v základu této práce nepočítalo s inicializací grafického displeje či pevného disku pro uchování dat. Náš program je tedy spíše takovou ukázkou práce s vývojovým kitem a složitější programy můžeme nalézt v ukázkových příkladech od Analog Devices. Z těchto programů bylo v našem případě čerpáno několik inicializací zařízení, jelikož samotný hardwarový manuál vývojového kitu je pro rozsah naší práce příliš složitý a obsahuje ohromnou spoustu nastavení příslušných registrů. Tyto poznatky by mohly být použity při případném rozšíření této práce a umožnili by „autonomní“ chování desky bez nutnosti připojeného počítače.
35.
6 Výsledky měření Zde budou shrnuty výsledky měření při různých situacích na daných testovacích materiálech. Data a grafy z vývojového kitu jsou zpracovány programem Matlab. Bohužel, z důvodu nefunkčního ukládání dat do souboru (data jsou pouze v paměti přístroje) a nedostatku času, jsme byli nuceni použít pro uložení naměřených hodnot osciloskop. Výsledky ovšem odpovídají měřením s použitím vývojového kitu.
6.1
Měření na malém defektu
Pro toto měření byl, na daném testovacím kusu materiálu, vybrán defekt s hloubkou přibližně 1 mm pod povrchem. Pro buzení sondy budeme generovat sinusový signál o frekvenci 6 kHz a amplitudě 2 V. Naměřené hodnoty vstupu a výstupu můžeme vidět na obr. 21. Měření na defektu o velikosti 1.2 mm 2.5 Budící signál Snímaný signál 2
1.5
Amplituda (V)
1
0.5
0
-0.5
-1
-1.5
-2
0
0.5
1
1.5
2
2.5 Časová osa (s)
3
3.5
4
4.5
5 -4
x 10
Obr. 21 - Měření na defektu o hloubce 1.2 mm Pro výpočet hloubky defektu použijeme vzorec (4) z kapitoly 2.2 a vzorec (5) z kapitoly 2.4. Testovaný materiál má následující vlastnosti: Budící frekvence
f = 6000 Hz
Magnetická permeabilita
μ = 1.2569701 ·10-6 H/m
Elektrická vodivost
σ = 37.8 · 106 S/m
Fázový posun (odečteno z grafu)
θ = 1.1075 rad 36.
Nejprve použijeme vzorec (4) a vypočítáme ze známých hodnot standardní hloubku penetrace ࢾ v metrech. Jelikož jsme změřili z grafu velikost fázového posuvu, dosadíme nyní obě známé hodnoty do vzorce (5) a vyjádříme neznámou vzdálenost pod povrchem x. Vypočítáme standardní hloubku penetrace ࢾ ze vztahu (4): ͳ
ߜൎ
ඥߨ ߪ ڄ ߤ ڄ ݂ ڄ
ൌ
ͳ ξߨ ڄͲͲͲ ͳ ڄǤʹͷͻͲͳ ή ͳͲെ ͵ ڄǤͺ ή ͳͲ
ൌ ͳǤͲͷ ή ͳͲെ͵
Ze vztahu (5) vyjádříme neznámou x: Ö
6.2
ݔൌ ߜ ή ߠ ൌ ͳǤͲͷ ή ͳͲെ͵ ή ͳǤͳͲͷ ൌ ͳǤͳͲʹ ή ͳͲെ͵ ݉
Měření na větším defektu
Pro stejná nastavení budícího signálu jako v předchozím případě budeme testovat detekci většího defektu o hloubce 2 mm. Vstupní a výstupní signál obvodu sondy můžeme pozorovat na obr. 22. Měření na defektu o velikosti 2 mm 2.5 Budící signál Snímaný signál 2
1.5
Amplituda (V)
1
0.5
0
-0.5
-1
-1.5
-2
0
0.5
1
1.5
2
2.5 Časová osa (s)
3
3.5
4
4.5
5 -4
x 10
Obr. 22 - Měření na defektu o hloubce 2 mm θ = 1.7956 rad
Fázový posun (odečteno z grafu)
Standardní hloubka penetrace ࢾ bude pro daný materiál shodná s předchozím příkladem a bude mít hodnotu ࢾ ൌ ͳǤͲͷ ή ͳͲെ͵ . 37.
Ze vztahu (5) vyjádříme neznámou x: Ö
6.3
ݔൌ ߜ ή ߠ ൌ ͳǤͲͷ ή ͳͲെ͵ ή ͳǤͻͷ ൌ ͳǤͺͻ ή ͳͲെ͵ ݉
Poznámky k měření
Měření bylo úspěšné a jako celek vývojový kit ADSP-BF548 s našim program funguje správně. Generovaný signál sice není možné nastavit v pevném kroku, ale možnosti, s kterými generuje výsledný signál, jsou pro naše testovací použití dostatečné. Snímací funkce desky, kdy vývojový kit funguje pro měření vstupního signálu, taktéž funguje a ukládá data do interní paměti desky. Zde ovšem nastal problém s jejich opětovným získáním do počítače, neboť počet snímaných vzorků je pro přenos po programovacím portu USB příliš pomalý a zdlouhavý. Další možností získání dat by bylo využití telemetrického kanálu pro vykreslení pole hodnot, ten ovšem z blíže nezjištěných důvodů odmítal v prostředí VisualDSP++ fungovat. Celkovým řešením pro získání dat z přístroje, by byla inicializace některého paměťového nosiče (pevný disk nebo paměťová karta), ke které bohužel v důsledku nedostatku času nedošlo. Bylo by tedy vhodné rozšířit program o další funkční část, která by toto umožňovala.
38.
7 Závěr Cílem práce bylo vytvořit základ měřicího systému, který bude schopen, po připojení příslušné sondy, detekovat vady v materiálech a připravovat získaná data o těchto vadách pro další zpracování počítačem. Díky vývojovému kitu ADSP-BF548 jsme byli schopni tento systém úspěšně navrhnout a převést toto řešení do praxe. Vývojový kit je nyní schopen pracovat jako jednoduchý generátor funkcí a jeho vstup měří napětí na něj přivedené, tudíž můžeme snadno pracovat s daty získanými ze sondy. Naměřené výsledky odpovídali, po příslušných výpočtech, skutečným hodnotám, a přesnost zjištěné hloubky defektu v materiálu byla za těchto podmínek dostačující. Bohužel nebylo v našich silách vytvořit program, který by pracoval zcela samostatně, neboť je potřeba mít k celému systému neustále připojený počítač. Tento problém by bylo možné vyřešit důkladnějším seznámením s celkovou koncepcí vývojového kitu a také použitím složitějších metod či ovladačů zařízení. Toto celé řešení je ovšem pouze jednoduchou ukázkou možností vývojového kitu. Samotný měřicí systém, včetně jeho programu, není dokonalý a bylo by potřeba ho obohatit o další funkce tak, aby jej bylo možné použít coby samostatnou měřicí jednotku. Jako další rozšíření úlohy by bylo vhodné naprogramovat obsluhu pro další periférie, kterými deska disponuje, jako například LCD displej či pevný disk. Ovšem takový počet složitých prvků vyžaduje veliké znalosti každého použitého hardwaru a programování těchto komponent by bylo příliš časově náročné. Pro možnost lepšího ovládání a práce s deskou se jeví jako nejlepší volba využití některého operačního systému, kterým je možné desku obsluhovat (uClinux nebo VDK). Za těchto předpokladů by se jednalo o vskutku multifunkční zařízení, které by bylo možné jednoduše upravit pro dané potřeby individuálního měření.
39.
Slovník použitých termínů a zkratek ADC
-
Analogovo-číslicový převodník (Analog-to-Digital Converter).
API
-
Sbírka procedur, funkcí či tříd knihovny programu (Application Programming Interface)
Buffer
-
Zásobník vytvořený k ukládání daných hodnot.
DAC
-
Číslicově-analogový převodník (Digital-to-Analog Converter).
DMA
-
Způsob přístupu do operační paměti bez účasti procesoru (Direct Memory Access).
DSP
-
Označení pro digitální signálový procesor nebo pro modul, který jej obsahuje (Digital Signal Procesor).
EBIU
-
Jednotka pro přístup na externí sběrnici zařízení (External Bus Interface Unit).
Kodek
-
Zařízení (nebo program), které je schopno zpracovávat datové proudy či signály ve formě audia či videa. Kódují daný signál pro lepší způsob přenosu.
LCD
-
Displej na bázi tekutých krystalů (Liquid Crystal Display).
RISC
-
Označení procesorů s redukovanou instrukční sadou (Reduced Instruction Set Computer).
ROM
-
Typ paměti, jejíž obsah nelze přepsat běžným způsobem (Read-Only Memory).
SIMD
-
Označení pro architekturu počítačových systémů, u kterých existuje celá řada zpracovaných datových toků na základě jediného seznamu instrukcí (Single Instruction, Multiple Data).
SPORT -
Označení pro sériový port mikroprocesoru, kterým tento mikroprocesor komunikuje s dalšími připojenými zařízeními.
-
Typ statické paměti s náhodným přístupem (Static Random Access Memory).
uClinux -
Upravený operační systém Linux, který je možné spustit na mikroprocesorech
SRAM
či signálových procesorech. VDK
-
Neboli VisualDSP Kernel. Jedná se o jednoduchou formu operačního systému pro vývojové kity od firmy Analog Devices.
40.
Seznam použité literatury [1] - Peter J. Shull (2001), Nondestructive evaluation and Applications, Vydavatelství Marcel Dekker.
-
Theory,
Techniques,
[2] - Marcel Kreidl a kol. (2001), Diagnostické systémy, Praha: Vydavetelství ČVUT, ISBN 80-01-02349-4. [3] - Internetové stránky věnující se problematice nedestruktivního testování materiálů a metod využití vířivých proudů. Tato kapitola pojednává o zjištění hloubky penetrace vířivých proudů v materiálu. http://www.ndted.org/EducationResources/CommunityCollege/EddyCurrents/Physics/depthcurrentdensit y.htm [4] - Stránky firmy Olympus, kde jsou podrobně popsány jednotlivé typy sond pro měření vířivých proudů. http://www.olympus-ims.com//cs/ndt-tutorials/eca-tutorial/probes/ec-probes/ [5] - Internetové stránky věnující se problematice nedestruktivního testování materiálů a metod využití vířivých proudů. Tato kapitola pojednává o fázovém posuvu. http://www.ndted.org/EducationResources/CommunityCollege/EddyCurrents/Physics/phaselag.htm [6] - Manuál k operačnímu zesilovači OPA552 firmy Texas Instruments. Volně dostupný na internetové adrese a na přiloženém CD: http://focus.ti.com/docs/prod/folders/print/opa552.html [7] - Manuál k přístrojovému operačnímu zesilovači AD620 firmy Analog Devices. Volně dostupný na internetové adrese a na přiloženém CD: http://www.analog.com/en/other-products/militaryaerospace/ad620/products/product.html [8] - Stránky výrobce a manuál diferenční sondy INDETEC SP100RD.S5111 pro měření vířivých proudů. Volně dostupný na internetové adrese a na přiloženém CD: http://www.indetec.cz/index.php?action=products&cat=35 [9] - Manuál a základní popis práce s vývojovým kitem ADSP-BF548 od firmy Analog Devices. Volně dostupný na internetové adrese a na přiloženém CD: http://www.analog.com/en/embedded-processing-dsp/blackfin/adspbf548/processors/product.html [10] - Manuály k signálovému procesoru Blackfin BF548 od firmy Analog Devices. Volně dostupné na internetové adrese a na přiloženém CD: http://www.analog.com/static/imported-files/processor_manuals/bf54x_phwr_vol-1.pdf http://www.analog.com/static/imported-files/processor_manuals/bf54x_pphwr_vol-2.pdf
41.
[11] - Manuál ke zvukovému kodeku AD1980 od firmy Analog Devices. Volně dostupný na internetové adrese a na přiloženém CD: http://www.analog.com/en/audiovideo-products/audiocodecs/ad1980/products/product.html [12] - Výukové materiály pro pochopení činnosti vývojového prostředí VisualDSP++ od firmy Analog Devices. Volně dostupné na internetové adrese a na přiloženém CD: http://www.analog.com/static/importedfiles/online_training/Basics_of_Building_A_Blackfin_Application_slides.pdf [13] - Výukové materiály pro použití systémových služeb na vývojových DSP kitech firmy Analog Devices. Volně dostupné na internetové adrese a na přiloženém CD: http://www.analog.com/static/importedfiles/online_training/Blackfin_System_Services_slides.pdf [14] - Výukové materiály pro použití ovladačů zařízení na vývojových DSP kitech firmy Analog Devices Volně dostupné na internetové adrese a na přiloženém CD: http://www.analog.com/static/imported-files/online_training/device_driver_slides.pdf
42.
Seznam obrázků Obr. 1 - Blokové schéma zapojení měřícího obvodu.
8
Obr. 2 - Intenzita vířivých proudů v materiálu.
10
Obr. 3 - Hloubka penetrace při změně frekvence.
12
Obr. 4 - Absolutní sonda.
13
Obr. 5 - Diferenční sonda.
14
Obr. 6 - Odrazová sonda.
15
Obr. 7 – Měření s hlubokou vadou.
16
Obr. 8 – Fázové zpoždění při hlubokém defektu.
16
Obr. 9 – Měření fázového zpoždění při podpovrchové vadě.
17
Obr. 10 - Zapojení měřicí sondy.
18
Obr. 11 – Zapojení budícího a měřicího obvodu sondy.
19
Obr. 12 - Vývojový kit ADSP-BF548
22
Obr. 13 - Blokové schéma zapojení ADSP-BF548
22
Obr. 14 - Blokové schéma zapojení signálového procesoru Blackfin.
23
Obr. 15 - Schéma zapojení zvukového kodeku AD1980
24
Obr. 16 - Prostředí programu VisualDSP++
26
Obr. 17 - Sekvence kompilace zdrojového kódu.
27
Obr. 18 - Souvislosti systémových služeb.
29
Obr. 19 - Rozložení programu při použití ovladačů zařízení
31
Obr. 20 - Vývojový diagram programu.
34
Obr. 21 - Měření na defektu o hloubce 1.2 mm
36
Obr. 22 - Měření na defektu o hloubce 2 mm
37
43.
Seznam tabulek Tab. 1 - Hloubka vniku vířivých proudů do materiálu
12
Obsah CD /Text
Tato práce ve formátu PDF.
/Program
Projekt s programem, který je spustitelný v prostředí VisualDSP++.
/Literatura
Použitá volně šiřitelná literatura použita při vypracování této práce.
/Fotodokumentace
Fotografie související s celou prací.
44.
Fotodokumentace
Měřicí sonda INDETEC SP100RD.S5111
Vývojový kit ADSP-BF548 45.
Zapojení měřicího obvodu v nepájivém poli.
Testovací vzorek materiálu s různými povrchovými vadami.
46.