Budapesti Műszaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar Méréstechnika és Információs Rendszerek Tanszék
Szabó Tamás
ADC ALAPÚ ULTRAHANGOS SPIROMETRIAI MÉRÉSI RENDSZER TERVEZÉSE
KONZULENSEK
Dr. Kovácsházy Tamás Csiszlér Gergely BUDAPEST, 2011
Tartalomjegyzék ADC alapú ultrahangos spirometriai mérési rendszer tervezése................................4 Tartalomjegyzék..............................................................................................................6 Összefoglaló......................................................................................................................8 Abstract............................................................................................................................9 1. Bevezetés.....................................................................................................................10 2. A spirometriai mérések.............................................................................................11 3.A jelenlegi rendszer elemzése....................................................................................17 4.A rendszer megtervezése............................................................................................29 5.A szukcesszív approximáció......................................................................................39 6.A szoftver felépítése....................................................................................................44 7.Optimalizációk a mikrovezérlőkre írt kódokban....................................................48 8. A mérési eljárás kidolgozása....................................................................................50 9. Az interpoláció...........................................................................................................54 10. Továbbfejlesztési lehetőségek.................................................................................57 Összefoglalás..................................................................................................................59 Szószedet.........................................................................................................................60 Függelékek, mellékletek................................................................................................62 Köszönetnyilvánítás.......................................................................................................63 Irodalomjegyzék............................................................................................................64
HALLGATÓI NYILATKOZAT Alulírott Szabó Tamás, szigorló hallgató kijelentem, hogy ezt a szakdolgozatot meg nem engedett segítség nélkül, saját magam készítettem, csak a megadott forrásokat (szakirodalom, eszközök stb.) használtam fel. Minden olyan részt, melyet szó szerint, vagy azonos értelemben, de átfogalmazva más forrásból átvettem, egyértelműen, a forrás megadásával megjelöltem. Hozzájárulok, hogy a jelen munkám alapadatait (szerző(k), cím, angol és magyar nyelvű tartalmi kivonat, készítés éve, konzulens(ek) neve) a BME VIK nyilvánosan hozzáférhető elektronikus formában, a munka teljes szövegét pedig az egyetem belső hálózatán keresztül (vagy autentikált felhasználók számára) közzétegye. Kijelentem, hogy a benyújtott munka és annak elektronikus verziója megegyezik. Dékáni engedéllyel titkosított diplomatervek esetén a dolgozat szövege csak 3 év eltelte után válik hozzáférhetővé. Kelt: Budapest, 2011/ 05/ 13/
Szabó Tamás hallgató
Összefoglaló A dolgozatom célja a spirometriai mérési eljárások egy lehetséges fajtájának, az ultrahangos spirometriai mérés megvizsgálása. Az első részben kitérek röviden a spirometriai mérések elveire és mérnöki szempontból elemzem azokat, mivel egy orvosi témájú mérési elv részletezésénél a gyógyászati oldalon kívül a mérnöki oldalt sem lehet figyelmen kívül hagyni. Mivel a dolgozatom egy jelenleg is működő rendszer továbbgondolása, ezért a második részben kitérek a jelenlegi rendszerre, részletezem a rendszer működési elvét, elemzem a rendszer hibalehetőségeit, egyes esetekben javaslatot teszek a hibák javítási lehetőségeire. Már a dolgozatom témájának kiírása előtt felvetődött bennem, hogy a Thormed Kft.-nél
munkám
során
megismert
spirometriai
mérési
rendszerének
egyik
továbbfejlesztése az lehetne, ha a null átmenet-detektálás helyett magát a jel amplitúdóját mérnénk az időben. Leírom az ADC alapú mérések elvét, illetve a harmadik részben összehasonlítom a jelenleg használatos rendszerrel. A mérések megvalósítására terveztem egy ADC alapú mérési rendszert. A továbbiakban leírom az alkatrészek kiválasztását, a nyomtatott áramkör megtervezését, a szoftver megírását, a tervezés közben adódott problémákat, illetve azok megoldását. Ezek után a dolgozat végén összefoglalom a tervezés tapasztalatait, leírom hogyan
lehetséges
működőképes
rendszert
alkotni
a
munkámból,
összehasonlítom a jelenlegi rendszert a szakdolgozatomban készült rendszerrel.
illetve
Abstract Designing an ADC based ultrasonic spirometry system. This thesis is about analyzing one type of ultrasonic spirometry measurement. In the first part I describe the basis of spiromery from the engineers and the medical point of view. The second part of the paper is about the Thormed Ltd.'s currently used measurement system. I describe the measuring mechanics, analyze the faults and malfunction sources of the current configuration, and I attempt to reduce the impact of the problems. As I was working for Thormed Ltd. I had an idea, instead of detecting the zerocross we could improve the resolution of the measurement by measuring the magnitude of the signal. I describe the basis of analog-to-digital converters and compare them to the current system's comparator in the third part. I've designed an ADC based system to validate my theory. Henceforward I describe the component selection, the printed circuit board design, the software, the emerging problems, and the solutions for them. In the end I summarize the observations of the design and describe how to build a more accurate, well functioning measuring system comparable to the zero-cross detection based measurement.
Szabó Tamás
1. Bevezetés A modern technika fejlődése lehetővé tette számunkra, hogy az ember egészségesebb életet éljen, ez által az emberek várható élethossza rohamosan megnövekedett az utóbbi időkben. Ezt a fejlődést nagyrészt az orvostudomány fejlődésének köszönhetjük. Az orvostudományon belül is egyre jobban megfigyelhető a megelőzésre, illetve a korai diagnosztizálásra való törekvés, mert egy betegség korai diagnosztizálásával a gyógyulás esélyei nagymértékben megnőnek. Ezért manapság már rengeteg háztartásban megtalálhatóak a személyi mérlegek, amik a súlyproblémák észrevételében
segítenek,
a
vérnyomásmérők,
amik
a
keringési
problémák
felderítésében segédkeznek, vagy a vércukorszint mérők, amely rengeteg cukorbeteg ember életének elengedhetetlen kelléke. Reményeink szerint a házi spirométer is ezen otthoni műszereknek a sorába áll, és segítségével a légúti megbetegedések korai felismerésén keresztül sikerül életeket menteni. A Thormed kft.-nél töltött munkám során megismerkedtem az általuk használt mérési rendszerrel, illetve annak működési elvével. A rendszer tanulmányozása során minduntalan ötletek merültek fel bennem, hogy milyen módon lehetne a mérési pontosságot növelni, vagy a zaj és hibaforrásokat csökkenteni. A szakdolgozatom keretében az egyik ilyen ötlet megvalósítását tanulmányozom, illetve jó esetben akár a rendszer újratervezése után egy pontosabb, olcsóbb spirométer megvalósításához is hozzájárulhatok.
10
ADC alapú ultrahangos spirometriai mérési rendszer tervezése
2. A spirometriai mérések „A légzési funkció megítélésében a tüdőtérfogatok meghatározása alapvető jelentőségű. A mindennapi orvosi gyakorlatban a statikus és a dinamikus tüdőtérfogatok vizsgálata ún. spirométerrel történik, mely a ki- és belélegzett levegő mennyiségét és a légmozgás sebességét képes rögzíteni. A statikus tüdőtérfogatok az időtől függetlenek, a légző izmok állapotáról és a légzésfunkció más vonatkozásairól nyújtanak hasznos információt. A légzési funkció dinamikus vizsgálata az időegység alatt megmozgatott levegő mennyiségét méri. Az így kapott értékek elsődlegesen a légutak állapotától, az ún. áramlási ellenállástól függenek.” [1] Lássuk milyen értékek, illetve mérési módszerek vannak a spirometriai mérések során, illetve az egyes méréseket milyen névvel illette az Amerikai tüdőgyógyász közösség, illetve az Európai Respirációs Közösség! 2.1 •
Statikus tüdőtérfogatok: IVC (Inspiratory Vital Capacity): A belégzési vitálkapacitás az a levegőmennyiség, amelyet a páciens teljes kilégzést követő teljes belégzés végéig belélegez.
•
IRV (Inspiratory Reserve Volume): A belégzési tartaléktérfogat az a legnagyobb levegőmennyiség, amelyet a páciens képes belélegezni az átlagos nyugodt belégzési véghelyzettől mérve.
•
ERV (Expiratory Reserve Volume): A kilégzési tartaléktérfogat az a legnagyobb térfogatmennyiség, amelyet a páciens képes kilélegezni az átlagos nyugodt kilégzési véghelyzettől mérve.
•
TV (Tidal Volume): A légzési térfogat a nyugodt légzés során légzési ciklusonként megmozgatott levegőmennyiségek átlaga.
•
SVC (Slow Vital Capacity): A kilégzési vitálkapacitás az a levegőmennyiség, amelyet a páciens teljes belégzést követi teljes kilégzés végéig kilélegez.
11
Szabó Tamás 2.2
Dinamikus tüdőtérfogatok:
2.3
FVC (Forced Vital Capacity): Az a levegőmennyiség amelyet a páciens teljes
belégzés után a lehető legnagyobb sebességgel minél mélyebb kilégzés során megmozgat. •
FEV 0,5 (Forced Expiratory Volume 0,5 sec): A forszírozott kilégzés során az első 0,5 sec alatt kilélegzett levegő mennyisége.
2.3 •
Maximális akaratlagos ventiláció: MVV (Maximal Voluntary Ventilation): A maximális akaratlagos légzés során mért egy percre kivetített légzési térfogat.
•
MVV*f (Maximal Voluntary Ventilation Frequency): A maximális akaratlagos légzés során mért egy percre kivetített légzési frekvencia. A fenti felsorolásból kiderül, hogy a spirometriai mérések nagy része
térfogatmennyiség mérés. A légzési térfogatot nem lehet a lehető legegzaktabb módszerrel megmérni, mivel a páciens tüdeje nem hozzáférhető az orvos számára. Ezek miatt a régebbi mérési eljárások úgy működtek, hogy példaként a páciens egy lezárt edényből lélegzett, aminek az egyik fala mozgatható volt, és az elmozdulásból meg lehetett állapítani a belélegzett mennyiséget. Ezeknek a mechanikus mérési eljárásoknak sok hátrányuk volt, például a légzés nem volt ellenállásmentes, hiszen egy mechanikai rendszert kellett mozgatnia, vagy a zárt térfogatban gyorsan elhasználódott az élethez szükséges oxigén. A
technika
fejlődésével
lehetőség
nyílt
közvetett
mérési
módszerek
alkalmazására, ahol már nem a levegő mennyiségét mérjük meg (közvetlen mérés) hanem a levegőáramlás nagyságát (közvetett). Egyszerű elgondolni, hogy a levegőmennyiség/idő alapon megadott levegőáramlásból egy idő szerinti integrál képzéssel megkapható a kívánt térfogat. Ezek szerint ha megmérjük egy adott keresztmetszetű csőben a levegő áramlási sebességét az időben, akkor a fent említett fontosabb
spirometriai
térfogatokat,
és
módszerekkel meghatározhatjuk.
12
áramlási
sebességeket
matematikai
ADC alapú ultrahangos spirometriai mérési rendszer tervezése Az áramlásmérőknek a mérendő fizikai paraméterek szerint négy nagy csoportját különböztetjük meg. A mérhető mennyiségek alapján tehát van: 2.4.1
Áramlási sebesség mérők, amiknek a további csoportosítása:
•
Turbinás mérők
•
Szárnykerekes mérők
•
Örvénytestes mérők
•
Indukciós áramlásmérők
•
Ultrahangos áramlásmérők
2.4.2
Térfogat kiszorításos mérők
•
Forgódugattyús mérők
•
Bolygódugattyús mérők
•
Oválkerekes átfolyás mérők
•
Fogaskerekes áramlásmérők
•
Bolygótárcsás áramlásmérők
•
Csigakerekes áramlásmérők
•
Forgódobos áramlásmérők
•
Membrános gázmérők
2.4.3
Tömegáram mérők
•
Termometriás mérők
•
Coriolis elvű mérők
•
Giroszkópos mérők
•
Hidraulikus Wheatstone mérők
2.4.4
Közvetett működésű mérők
•
Torló cső
•
Mérőperem
•
Rotaméter
•
Céltáblás mérő [2]
13
Szabó Tamás Nem célom minden egyes mérési módszernek a részletezése, ez nem is férne bele a dolgozatom tartalmi kereteibe. Tekintsük át, miért az ultrahangos mérési eljárások terjedtek el a spirometria területén, és milyen eljárások alakultak ki! „Ultrahangos térfogatáram mérés több módon valósulhat meg, Doppler-elven, időkésés alapján vagy nyílt felszínű áramlás esetén a víz felszínéről való visszaverődés alapján. Kis gáztartalmú folyadékok, vagy gázok esetén az időkésés alapján történő mérést alkalmazzák. Ekkor az egyes jeladók által kibocsátott és a másikon felfogott ultrahang jelek időbeli eltolódásából számítható az áramlás sebessége. Az áramlás irányában kibocsátott ultrahang gyorsabban ér el a másik érzékelőhöz, mint az áramlással szemben kibocsátott ultrahang. Ismerve a jeladók távolságát, csőátmérőt, a visszaverődéseket, stb. a sebesség kiszámítható.” [3] Az ultrahangos térfogatáram mérés legnagyobb előnye a többi áramlásmérővel szemben, hogy nem tartalmaz könnyen elromló mozgó alkatrészt. Van benne mozgó alkatrész, hiszen az ultrahangos adó-vevők, az úgynevezett transducerek fizikai mozgást végeznek, azonban ez a mozgás csak egy mechanikai rezgés, ami nem jelent akkora fizikai elmozdulást, mint mondjuk egy csapágy. Ezért a továbbiakban az ultrahangos áramlásmérőket mozgó alkatrész nélkülinek tekintem. A másik nagy előnye, hogy szélesebb méréshatárok között alkalmazható mint a mozgó alkatrészeket használó mérési elvek. Következő lépésként megvizsgáltam, hogy milyen tartományokban, és milyen pontossággal kell működnie egy spirometriai mérőműszernek. Erre egyértelmű utasításokat közöl a „ATS/ERS task force: Standardisation of lung function testing” című dokumentum, ami az orvosi szakma két legelfogadottabb szervezete készített. A dokumentumból megtudható, hogy a három legfontosabb követelmény az idő felbontása, az térfogat felbontása és az áramlási sebesség felbontása, amelyeket az alábbi táblázat (2.1) tartalmaz:
14
ADC alapú ultrahangos spirometriai mérési rendszer tervezése
2.1. táblázat: A spirometriai mérések felbontása.[4]
A mérésről még megtudhatjuk hogy a mérés időtartama: 30 másodperc, illetve a mérési tartomány: 0-14 L/s, illetve hogy a készüléknek 3,5%-os pontosságot kell elérnie, vagy 65 mL-es pontosságot 3 literes pumpás ellenőrzésnél. A 2.2. képen látható egy egészséges emberen végzett FVC mérés ábrája, rajta megjelölve a fontosabb paraméterekkel. A 2.3. képen pedig néhány légúti megbetegedés FVC görbéjét láthatjuk. Megfigyelhetőek a görbéken a nagyfokú elváltozások, amikből az orvosok következtetni tudnak a tüneteket okozó betegségekre.
2.2. kép. Egy egészséges ember FVC görbéje.
15
Szabó Tamás
2.3. kép. Különböző légúti megbetegedések tipikus FVC görbéje.[5]
Az 2.3. lép első ábráján egy rögzült felső-légúti obstukció (akadályozás), a második ábrán egy változó, belső eredetű felső légúti obstrukció, a harmadik ábrán pedig egy változó, külső eredetű felső-légúti obstukció. Az első részben tehát áttekintettük a spirometriát, illetve megismerkedtünk a mérések elvégzéséhez szükséges eszközök jellegével. A következő fejezetben egy konkrét eszköz elemzése következik.
16
ADC alapú ultrahangos spirometriai mérési rendszer tervezése
3. A jelenlegi rendszer elemzése A következő két ábrán két modern spirométer látható.
3.1.-3.2. képek. Az NDD EasyOne (balra) és a Thormed SpiroThor (jobbra).
A spirométer mérő része egy csőből áll, amin a páciens fúj át. A cső belsejében helyezkednek el az ultrahangos adó-vevők (transducerek) amik a levegő sebességét mérik meg. Többfajta elrendezést használnak a gyártók, a jellemző transducer szám 2-4 db. A csőre csatlakozik egy bakteriális szűrő, aminek a feladata a fertőzések elkerülése. A szűrő cserélhető, a cserét páciensenként kell elvégezni. A cső a készülékházhoz csatlakozik. A készülékházzal kapcsolatban elvárjuk hogy ergonomikus legyen. A spirométernek van egy felhasználói felülete, ez általában egy képernyőből és egy gombsorból tevődik össze. A másik lehetőség az érintőképernyő használta, nem szükséges részleteznem, hogy egy grafikus érintőképernyős készülék mennyiben megkönnyíti a felhasználói felület használatát. Harmadik lehetőség, hogy a készüléken nem találhatóak kezelőszervek, hanem PC-hez csatlakozik (USB, Bluetooth stb.. kapcsolattal), folyamatosan küldve az áramlás adatokat, és a PC szoftver valósítja meg a grafikus ábrázolást, illetve a mért értékek kiszámítását. A spirométernek lehetnek egyéb csatlakozói, hogy a töltést, az adatkommunikációt, közvetlen nyomtatást, USB OTG-n keresztül meg lehessen valósítani.
17
Szabó Tamás
3.3. ábra. A jelenlegi rendszer blokkdiagramja.
Az ultrahangos áramlásmérési módszer a jelenlegi rendszerünkben, mint a 3.1. képen látható SpiroThor készülékben is, terjedési idős mérés. A rendszer blokkdiagramja a 3.3. ábrán látható. Az adót egy pár impulzusból álló négyszögjel sorozattal gerjesztjük. Ez hanghullámokat hoz létre, amik elkezdenek az áramló közegben terjedni. A hanghullámokat kettő, az adótól két irányban elhelyezett transzducerrel vesszük. A vevőről lejövő jelet egy kétfokozatú analóg műveleti erősítős kapcsolás felerősíti az eredeti jel mintegy százszorosára, illetve megszűri. Ezután egy null átmenet detektor következik (komparátor), aminek a kimeneti jelét egy mikrokontrollerbe vezetjük be, ugyanabba a mikrovezérlőbe, ami a négyszögjelet is előállítja. Így kapjuk meg az eltelt időt az adás és a vétel között. A hanghullám terjedési sebessége függ az áramló közeg sebességétől, a jel eredő sebessége a hang és a közeg sebességének vektoriális összege lesz, így a két transducerhez a hanghullám eltérő időben ér oda. A terjedési idők különbségéből kiszámolható a levegő áramlási sebessége a Thormed kft. által bejegyzett szabadalommal. Első lépésként elemezzük a jelenlegi rendszer zajforrásait! 3.1.
Adási pontatlanság:
Adáskor a transducerre kívülről kényszerítünk rá egy négyszögjelet, és nem a fizikai paraméterei által meghatározott frekvencián rezgetjük fel.
18
ADC alapú ultrahangos spirometriai mérési rendszer tervezése Méréseket végeztem annak eldöntése érdekében, hogy milyen modellel lehet a transducert a lehető legpontosabban leírni. A modell szerint a transducer egy kondenzátor és egy ellenállás soros vagy párhuzamos kapcsolatával írható le, amivel sorsosan kapcsolódik egy tekercs. A modellben az ellenállás a fizikai mozgással rendelkező rendszer ellenállását jelképezi, a kondenzátor azt, hogy a rendszernek egy fizikai rezgőmozgást végző testhez hasonlóan van egy maximális kitérése, illetve aluláteresztő képessége, a tekercs pedig a mozgásba hozott test lendületét írja le. Az első kérdés az volt, hogy a soros vagy párhuzamos leírás illik jobban a rendszerre.
3.4-3.5. ábrák. A transducer soros és párhuzamos modellje.
A 3.4 képen a transducer soros modelljéről a BME alaplaborjaiban található Wayne Kerr impedancia analizátorral készült mérés látható. A mérést a modellben használt 40 KHz-es frekvenciájú jellel végeztem. A mérésből arra következtettem, hogy bár a soros modell jobban leírja a működést, a transducernek azonban van párhuzamos ellenállása amit a modellből nem lehet kihagyni. A következő mérésben arról bizonyosodtam meg, hogy mi történik a transducerrel, amennyiben 40 KHz-től eltérő frekvenciával hajtjuk meg. Mivel a nagyfrekvenciás ultrahangokat sokkal jobban elnyeli a levegő, ezért a mérést a 30-50 KHz-es tartományba korlátoztam.
19
Szabó Tamás
3.6. kép. A transducer ellenállása a frekvencia függvényében
A 3.6. képen azt láthatjuk, hogy a transducernek 39.8 KHz-nél a legkisebb az ellenállása, illetve hogy a mérési tartományt jól vettem fel. Nagyobb gondot jelentett az, amikor a frekvencia-kapacitás menetét mértem meg a transducernek.
3.7-3.8. kép. A transducer kapacitása a frekvencia függvényében
A 3.7. képen látszik, hogy a kapacitást semmiképpen sem lehet állandónak tekinteni a vizsgált frekvencia közelében, mivel a kapacitás változása épp a hasznát frekvencia közelében a legnagyobb.
20
ADC alapú ultrahangos spirometriai mérési rendszer tervezése 3.2.
Hang terjedése a levegőben
A mérési rendszer a legtöbb zajt a hang levegőben való terjedése közben veszi fel. A 3.9. ábrán látható a visszhangok hatása, a levegőben lévő ultrahangok befolyásolhatják a mérést,
illetve
sajnos
nincs
semmilyen
ismeretünk
a
transducer
iránykarakterisztikájáról. A számításoknál gömbsugárzóval számolunk, holott a valóságban ez már csak azért sem lehetséges, mivel a két oldala az alkatrészlábak miatt nem egyforma. A levegőben kialakulhat doppler-effektus, illetve maga a mért áramlás ultrahangot generál. Nagy probléma az, hogy a mérési rendszerben felhasznált cső esetén a fizikai kialakítás miatt a mérhető maximális áramlási sebességet korlátozza a csőben keletkező ultrahang, mert a mérési elv még rendelkezik tartalékokkal, de a fentiek miatt szükséges a maximális áramlási sebességet 10-11 L/s alatt tartani. A pontosság növelésének egyik legkézenfekvőbb módja a cső keresztmetszetének csökkentése lenne, azonban kisebb keresztmetszetű csőben már kisebb áramlási sebességeknél is ultrahang keletkezik. Azért ideális a jelenlegi csőátmérő, mivel az ember tüdeje nem képes ilyen nagyságú térfogatváltozásra. 3.3.
Vételi hibák
Mivel a transducer ellenállása nagyságrendekkel kisebb 40 KHz környékén, mint a környező frekvenciákon, ezért joggal feltételezhető az is, hogy a vételi oldalon a 40 KHz-es hanghullámra fogja a legnagyobb amplitúdójú elektromos jelet kibocsátani. Sajnos nem volt számomra elérhető semmilyen
hangforrás, ami a kívánt
frekvenciatartományban jól meghatározható jelet bocsátott volna ki, ezért ennek az állításnak a helyességéről nem volt alkalmam meggyőződni. 3.4.
Analóg erősítés hibái
Az erősítőnek a jelet a feldolgozáshoz a transducerről érkező jel mintegy százszorosára kell erősítenie. Itt a legnagyobb gondot az okozza, hogy a műveleti erősítőkből megépített kapcsolásnál a valós műveleti erősítőknek van ofszet feszültsége, illetve hogy ez az ofszet feszültség összemérhető a transducer jelével. Emiatt az egyes fokozatoknak soros kondenzátorral, AC csatolással kell összekötni. A második fokozat és a komparátor közé is AC csatolás kerül, ami miatt a második fokozatból érkező
21
Szabó Tamás nagyfrekvenciás jelek folyamatosan vezérlik a komparátort, így amikor nincs bejövő jele a transducernek, a komparátor folyamatosan billeg a két kimeneti állapot között. 3.5.
Az analóg szűrés hibái
A szűrő, ami egy kétfokozatú sáváteresztő szűrő egybe van építve az analóg panelen az erősítővel. A szűrő ott okozhat problémát, hogy mint minden szűrőnek, nem lapos a fáziskarakterisztikája a sáváteresztés középfrekvenciája közelében. Leszimuláltam a szűrőt a működési frekvencia közelében, és arra jutottam, hogy egy 39 KHz-es jelhez képest egy 41 KHz-es jel több fokos fázistolást szenved. Ez abból a szempontból mindenképp rossz, hogy a mérési információt is az idő hordozza. 3.6.
Komparátor által okozott mérési hibák
„Az analóg komparátor két bemenő jel különbségének előjelét (null-átmenetét) generálja (ZX: zero crossing) és azt logikai állapotként kódolja. Az 1 bites adat kimenet megadja, hogy az egyik analóg bemenet: a referencia pillanatértékéhez képest a másik jel pillanatértéke nagyobb-e vagy kisebb. "[6] Az analóg komparátor egy egy bites ADC, így az általános ADC-kre jellemző hibák egy része nem jelenik meg (linearitási hiba, monotonitási hiba), ellenben az alábbi hibák igen (a hibák részletezésére az LM 139-es komparátort vettem alapul): 3.7.1. A komparátor bemeneti árama: 100 nA a vizsgált áramkörnél. Mivel a bemeneti ellenállás nem 0 Ω ezért az erősítőnek van bemeneti árama, ami elronthatja például egy előtte lévő ellenállásosztó arányát. 3.7.2. A komparátor bemeneti ofszet feszültsége: 2 mV az LM139-nél. A komparálási feszültség eltér a bemeneti feszültségtől. Egy DC feszültségtől mentes szinusz bemeneti jelre a komparátor kimenetén nem 50%-os kitöltési tényezőjű periodikus jel jelenik meg. Ha a két adatcsatornán a komparátor bemeneti offset-je eltér, akkor egy időkülönbségként jelenik meg, ami állandó hiba a mérési eredményeken.
22
ADC alapú ultrahangos spirometriai mérési rendszer tervezése 3.7.3. A komparátor válaszideje : 300 nS -1,3 μS között van. A bemeneti jel változására a kimenet nem azonnal reagál, hanem késéssel. A nagyobb baj, hogy ez a késés nem determinisztikus hanem a bemenő jel amplitúdójától, a gyártási szórástól, a tápfeszültségtől és egyéb körülményektől függ. Ez szintén zajt jelent, hiszen növeli a jel késleltetését. 3.7.4. Kimeneti jel felfutási ideje: A kimeneti áram a komparátor által limitált. A kimeneten az MCU, a vezetősávok és a szórt kapacitások egy kapacitást alkotnak, amit az erősítő nem tud "azonnal" feltölteni az MCU bemenetének a komparálási feszültsége fölé. 3.8.
Elektronikus, rádiófrekvenciás zavarok:
Mint minden készülékre, a spirométerre is hatnak az elektromágneses kompatibilitás tudományág által vizsgált zavarok. 3.9.
Elektronikus, működésből adódó zavarok
Az egyik zavarforrás az ultrahangos adáshoz felhasznált tápfeszültség előállítása során keletkezik. A nagyobb amplitúdójú hang eléréséhez nagyobb feszültségre van szükség, amit csak kapcsoló üzemű feszültség konverterrel, vagy úgynevezett charge-pump áramkörrel lehet elérni, amiknek az elektronikus zaja számottevő. Mivel egy mixedsignal áramkörről van szó, ezért a digitális áramkörök működése is termel zajt. 3.10.
Az alkatrészek gyári paramétereinek a szórása:
Igyekszünk
a
legkisebb
tűréshatárral
rendelkező
alkatrészeket
használni
a
készülékeinkben, de a paraméterek szórása mégis gondot okozhat. Ha két invertáló, műveleti erősítős kapcsolás két-két ellenállásának a tűrése 1%, akkor a két csatorna között 4%-os feszültségerősítési különbség lehet, worst-case összegzéssel. 3.11. •
Digitális rendszer pontatlansága:
Frekvencia pontatlanság: Mivel a mérés időmérésen alapul, ezért a rendszerben
használt kvarcok 60 ppm pontossága az egész rendszer pontosságát meghatározza.[7]
23
Szabó Tamás •
A kvarc frekvenciája változik a hőmérséklet hatására. [8]
•
Az MCU PLL-jének a hibája. A vizsgált esetben ±0,25%-os, ami összeszorzódik a kvarc hibájával.[9] Digitális jitter: "A digitális jel jellegzetes tulajdonsága, hogy a jelsorozat időzítése
•
bizonytalan, a jelsorozat állapotváltásai a névleges időponthoz képest eltérnek. Ez a tulajdonság - amennyiben az eltérések rövid időtartamúak - a jitter (remegés, dzsitter), mely nem más mint egy nemkívánatos fázis moduláció." Mivel időmérésen alapszik a mérési módszer, ezért a jitter zajként jelentkezik a rendszerben, és meghatározza a mérési pontosságot.[10] A kvarc oszcillátor jittere: Egy kvarc oszcillátornak nem csak frekvenciahibája
•
van, hanem jittere is. •
Az MCU PLL-jének ±0,25%-os jittere. [11]
•
Az adás frekvenciájának pontatlansága: A frekvencia pontatlanságból illetve a jitterből következik, hogy az MCU által előállított PWM jel különbözik a 40 KHzes frekvenciától, amire a transducer, illetve az analóg áramkörök méretezve vannak. A szoftveres megvalósítás hibáiból keletkező pontatlanság: Egy régebbi
•
szoftververzióban volt egy hiba, ami az előírtnál hosszabb adásként jelentkezett. Az interruptok le lettek tiltva egy deadlock elkerülése érdekében, így nem futott le mindig időben az adást kikapcsoló interrupt. 3.12
Reflektálódás a cső faláról:
Amint látható a 3.9. ábrán látható, a 4 adójel kibocsátása után (bal oldalon, narancssárga színnel) nem 4 jelet veszünk a vevővel, hanem sokkal többet (türkiz színű jelek). Az ultrahang visszaverődik a cső faláról, és a szenzorba jut, ezzel korlátozva a másodpercenként elvégezhető mérések számát.
24
ADC alapú ultrahangos spirometriai mérési rendszer tervezése
3.9. ábra. A cső faláról reflektálódó hanghullámokról készült oszcilloszkópos mérés
3.13
A transducer tartó hang vezetése:
Mivel a három transducer hozzá van rögzítve a csőhöz, és a hanghullámok a szilárd anyagokban gyorsabban terjednek, mint a levegőben, ezért a csőben terjedő hangokat a vevő hamarabb érzékeli, mint a levegőben terjedő hangokat. Szoftveres szűréssel kell figyelmen kívül hagyni ezeket a hullámokat. 3.14
A transducerek gyártási szórása:
A transducereknek van gyártási szórása, így a középfrekvenciájuk, de a maximális fizikai kitérésük is változó lehet. Ebből következik, hogy két készülék adásának az amplitúdója más és más, illetve hogy egy készüléken belül a két vevő eltérő amplitúdójú jelet bocsát ki magából. 3.15
A cső méreteinek pontatlansága:
A csőnek, amiben a levegő áramlik, van egy gyártási szórása, ami a mért idők és az ehhez tartozó átáramlott levegőmennyiség közötti együtthatót változtatja meg. 3.16
Hőmérsékleti változás:
A levegőben terjedő hanghullám sebessége függ a hőmérséklettől. A fizikailag nem egy helyen lévő vevőknél a levegő hőmérséklete lehet különböző, amit nem lehet egyszerűen kompenzálni, az egy adós-egy vevős készülékeknél pedig a hőmérséklet időbeni változása okoz hibát. Ha a környezeti hőmérséklet 20 °C akkor a hang
25
Szabó Tamás sebessége 344 m/s, az ember által kifújt 36 °C-os levegőben pedig 354 m/s. Az eltérés jelentős, mintegy 3%-os, (3.8) alapján kiszámolva.
C = ( 331,5 + ( 0,606 °C -1 ∙ T ) ) m / s 3.17
(3.8)
Páratartalom változás:
Kevésbé ismert dolog, de a levegő páratartalmától is függ a hang sebessége. Ez normál alkalmazásoknál nem okoz gondot, hiszen a páratartalom lassan változik, de a spirometriában a környezeti páratartalom 30% is lehet, az ember által kifújt levegő páratartalma pedig lényegében 100%-os. 3.18
Levegő összetételének változása:
Az egyik irányban áramló levegő a környezeti levegő, aminek kicsi a széndioxid tartalma, a kilélegzett levegőnek meg nagyobb. Bár jóval csekélyebb mértékben, de ez is befolyásolja a hang terjedési sebességét. 3.19
Nyomásváltozás:
Bár a hang levegőben való terjedési sebességét nem változtatja meg a légnyomás, de a transducer rezgésére hatással lehet a nyomásváltozás. Ezt a hatást még nem tanulmányozták. 3.20
Turbulenciák a csőben, nem lamináris áramlás miatti pontatlanság:
Amikor terjedési időkből meghatározzuk az áramlási sebességet, feltételezzük, hogy a levegő áramlási sebessége lamináris, ami nagyobb sebességeknél nem áll fent. 3.21
A transducerek fizikai elhelyezkedése miatti eltérő terjedési idők:
Ha 1s/80.000.000*330 m/s= 0,004 mm-el közelebb van az egyik vevő az adóhoz,az már az 1 órajelnyi eltérést okoz a vételi oldalon. Ekkora gyártási pontosságot nem várhatunk el a jelenlegi csőgyártási technológiáktól. Látható a fenti felsorolásból, hogy rengeteg tényező van a rendszerben, ami mérési hibát okozhat, és amely tényezők csökkentése, vagy megszüntetése még nem megoldott. Példaként vizsgáljuk meg a 3.15-3.16 pontokban felsorolt tényezők csökkentésére alkalmazott matematikai eljárás. Az eljárás neve az ASPS-BTPS korrekció.
26
ADC alapú ultrahangos spirometriai mérési rendszer tervezése Az eljárás lényege, hogy feltételezzük, hogy a mérés során nem változik meg a környezeti hőmérséklet, páratartalom, és nyomás, a páciens által kilélegzett levegő 37°C hőmérsékletű, illetve a relatív páratartalma 100%, akkor egy korrekciós tényező adható meg (3.10) segítségével, ahol V a térfogatot, P a nyomást, T pedig a hőmérsékletet jelenti. A képlet nem tartalmazza a tüdőnkben a levegőbe kerülő vízpára parciális nyomása miatti térfogatváltozást.
(3.10)
A 3.12-3.21 pontokban felsorolt hibajelenségek kiküszöbölése nem a villamosmérnökök feladata, mivel más szakemberek sokkal járatosabbak a témában. A 3.7.- 3.11 pontokban azonban nagy előrelépést lehet tenni! Amennyiben a komparátort egy ADC-re cseréljük, a 3.7. pontban felsorolt problémák megszűnnek. A 3.11 pontban felsorolt problémákat csökkenteni lehet, ha a digitális rendszer frekvenciáját növeljük, mert így a mérés pontosságának növekedésével csökken az órajel hibák nagysága. A 3.8-3.10 pontokon pedig körültekintő áramköri tervezéssel lehet segíteni. Bár a 3.5-3.6 pontokban felsorolt hibákat is csökkenteni lehetne egy új analóg áramkör megtervezésével, a feladat nagysága miatt ez a szakdolgozatom kereteibe nem fért bele. Sajnos nem kaphatóak olyan külső komparátorok, amelyekkel jobb eredményt lehetne elérni. A félvezető áramkör gyártók termékpalettájának egy korábbi vizsgálatakor bebizonyosodott, hogy a rendszerben használt komparátornál nem lehetséges kisebb válaszidővel, illetve válaszidő diszperzióval rendelkező komparátort kapni. Emiatt a mérési rendszer pontosságának további növelése egyszerű alkatrészcserével nem megoldható, hanem a rendszert új alapokra kell helyezni. Kézenfekvő az ADC használata. Még ha nem is dolgozok ki a null átmenet detektálástól eltérő mérési elvet, akkor is megoldható egy 80 MSPS-nál gyorsabb ADC használata, amivel tovább lehet pontosítani a mérést. A nyilvánvaló problémát az okozza, hogy egy ilyen áramkörnél sokkal nagyobb számítási kapacitásra van szükség. Most egy 80 MHz-es 32 bites MCU képes a mérés összes feladatának a feldolgozására.
27
Szabó Tamás Amennyiben ilyen mértékben megnöveljük az adatok mennyiségét, szükségessé válik egy DSP vagy FPGA használata, ami az ár, fogyasztás, fejlesztési idő szempontjából nem megengedhető. Komparátoros mérés esetén a visszhangok lecsillapodását nem ismerjük a mérés idejében, és előre kell megválasztani a mérések közötti időt. Ez alapján vagy a várakozással töltött idő lesz nagyobb, mint a szükséges, vagy az adás és a viszhangok szuperponáltját mérjük meg. ADC-s mérésnél pontosan látjuk mekkora az amplitúdója a csőben lévő hangoknak, így optimálisan lehet megválasztani a várakozást, ami a gyakorlatban több mérést eredményezhet másodpercenként, ami a pontosságot növeli. ADC hasznával ismerjük a vett jel amplitúdóját is, ami további információkkal szolgálhat a mérésről. A 3.1. pontban említettem, hogy a jelenlegi mérési elv nem veszi figyelembe, hogy melyik frekvencián van a transducereknek a legnagyobb amplitúdója. ADC-s méréssel ez megállapítható, ezáltal a frekvenciát optimálisan megválaszthatjuk. Ezzel nagyobb jel-zaj arányt érhetünk el.
28
ADC alapú ultrahangos spirometriai mérési rendszer tervezése
4. A rendszer megtervezése A tanulmány elkészítéséhez szükségessé vált egy olyan prototípus elkészítése, amivel a két csatorna adatai valós időben lesznek mérhetők, és az adatok továbbíthatóak lesznek számítógép felé. Ez a kritérium azért került a prototípus leírásába, mert még nincs ismeretünk arról, hogy a null átmenet detektáláson kívül milyen módszerrel lehetséges megállapítani a terjedési időket, illetve nem áll rendelkezésemre oszcilloszkópos méréseken kívül nagyobb adattömeg, amit statisztikus módszerekkel tanulmányozni lehetne. Lássuk először hogy mik az előzetes elvárások a prototípussal szemben: •
2 db ADC
•
MCU vagy FPGA az adatok feldolgozására, illetve későbbiekben kód futtatására
•
Nagysebességű PC kapcsolat, lehetőleg USB
•
Saját tápellátás
•
Az adás jeleinek előállítása
4.1. ábra. A rendszerterv.
A terv szerint az analóg jelformáló rész nem kerül rá a prototípusra, hogy az eredményei összehasonlíthatóak legyenek a jelenlegi rendszerrel. Amennyiben más
29
Szabó Tamás paraméterű jelre van szükség a mérésekhez, az analóg panelen való módosítással érjük el a változtatást. Elvégeztem
egy
előzetes
számítást
a
PC
felé
továbbítandó
adatok
sebességigényéről. Eszerint 16 bites, 4 MSPS mintavételezést feltételezve 2 csatornán ~15 MBps adatátviteli sebesség szükséges (USB 2.0 sebessége ~60 MBps). Ez több problémát felvetett a tervezéssel kapcsolatban. Először is a panelon szükség van egy ilyen sebesség elérésére képes USB vezérlőre, más részről egy mikrovezérlőre ami ezt a nagy mennyiségű adatot továbbítani tudja. Alapból ki lehet zárni az USB 1.1 illetve 1.0ás vezérlőket, mert az USB 1.1 12 Mbps sebességet biztosít legfeljebb. Szintén ki lehetett zárni a soros-USB átalakítókat, hiszen ennek az adatnak az átvitelére a soros port start/stop bit overheadje miatt 150 Mbps-es soros port megléte lenne szükséges. Ellenben az FTDI FT2232H típusú USB vezérlője párhuzamos interfésszel képes akár 25 MBps sebességet elérni. A vezérlő NYÁK tervezéssel kapcsolatos főbb tulajdonságai: •
12 MHz-es külső kvarcot kell használni.
•
A tápellátás megoldható egy 3,3 V-os LDO segítségével a 4.2. ábrán látható módon
•
Az ADBUS és az ACBUS jelei szükségesek a kommunikációhoz.
4.2. kép. Az FT2232H tápellátása.[12]
30
ADC alapú ultrahangos spirometriai mérési rendszer tervezése
Az ADC kiválasztására alapvetően három lehetőség adódik: •
Egy MCU saját, beépített ADC-jának a használata (4.1.1-4.1.2)
•
Külső ADC chip használata (4.2.1-4.2.2)
Lássuk milyen előnyök, illetve hátrányok adódnak a választásokból: 4.1.1 •
Egy MCU saját, beépített ADC-je a használatának előnyei:
Kevesebb overhead: egy MCU belső perifériájának a címzése sokkal könnyebb. a belső periféria buszra van csatolva, nem kell külső kommunikációs csatornát igénybe venni.
•
A regiszterek írása, olvasása lényegesen gyorsabb, nagyobb sebességet érhetünk el ugyanazzal a mikrovezérlővel.
•
Az ADC és a MCU szinkron órajelről működik. Ez a kitétel fontos a terjedési idő meghatározásánál.
•
Könnyebb megvalósítás: Az ADC külön megszakítással rendelkezik, ami megkönnyíti a szoftver írását.
•
A dsPIC családnál dedikált kimeneti adatregiszter található minden analóg bemenethez. [13]
•
Tervezhető a konverziós idő a programban.
•
Kevesebb alkatrész használata: a mikrovezérlők beépített analóg multiplexerekkel rendelkeznek, és akár már az egyszerűbb mikrovezérlők is tartalmaznak PGA-t, ami a jelszinttel támasztott követelményeket egyszerűsíti.
4.1.2 •
Egy MCU saját, beépített ADC-je a használatának hátrányai:
Kisebb sebesség: A mai mikrovezérlőkben nem terjedt el még a nagyobb sebességű (10< MSPS) ADC-k a perifériák között. Ezzel szemben például a Texas Instruments-nek van 1 Gsps sebességű ADC-je (ADS5400).
•
Kisebb jel/zaj arány: Diszkrét elemekből épített megoldás esetén kisebb jel-zaj aránnyal számolhatunk.
31
Szabó Tamás
4.3. ábra. A mixed signal IC zajának modellezése.
A 4.3. ábra alapján látható, hogy egy ún. mixed signal IC belsejében a digitális jelek változása hatást gyakorol az analóg áramkörökre, annak működésétől függetlenül, ami zajként jelentkezik a rendszerben. [14] 4.2.1
Külső ADC chip előnyei:
•
Nagyobb pontosság
•
Nagyobb sebesség
•
Több fajta interfész közül lehet választani
•
Kevesebb zaj
4.2.2 Külső ADC chip hátrányai: •
A nagyobb sebességet-gyorsaságot nem biztos hogy fel tudjuk dolgozni
•
Nagyobb sebességnél csak a párhuzamos interfésszel lehet kapni
•
Magasabb ár Az előnyök-hátrányok figyelembevételével végül egy beépített ADC-vel
rendelkező mikrokontroller mellett döntöttem. Egy 40 KHz-es szinusz jel megméréséhez 2 MSPS-es ADC-t használok, akkor a jel 50 mérési eredményből fog előállni, ami megfelelő lesz tanulmányozásra.
32
ADC alapú ultrahangos spirometriai mérési rendszer tervezése Amennyiben az eredmények megfelelők, még mindig van lehetőség a rendszer újratervezésére, és külső ADC használatára, de az egyszerűbb felépítés miatt gyorsabban érhetünk el eredményt a beépített ADC használatával. A többszörös túlmintavételezés lehetővé teszi az ADC bemeneti szűrőjének az egyszerűsítését, mivel a mintavételezendő jel frekvenciája (40 KHz) és a mintavételi frekvencia (1-2 MHz) távol van egymástól, így az anti-aliasing szűrő meredekségének nem kell 20-40 dB/dekádosnál meredekebbnek lennie. A mikrovezérlő kiválasztásánál elsődleges szempont volt, hogy beépítve tartalmazza az ADC-ket, így a fejlesztési idő és (későbbiekben) az ár is csökkenthető. Hosszas kutatás után a Microchip dsPIC33 családjában találtam meg a nagysebességű beépített ADC-t. Microchip: Egy arizonai székhelyű félvezető tervező és gyártó vállalat, nagy terméklistával, analóg és digitális chipek gyártásával. A 16 bites processzoraik között találjuk a dsPIC33 családot, amit kifejezetten jelfeldolgozásra
fejlesztettek
ki.
Ezek
a
mikrovezérlők
utasításszinten is jelfeldolgozásra vannak optimalizálva.
4.4. ábra. A dsPIC33 architektúra [15]
33
perifériaszinten,
és
Szabó Tamás Főbb tulajdonságai a dsPIC33 mikrovezérlőknek: •
40 MIPS számítási kapacitás
•
24 bites utasításhossz
•
16 bites adathossz
•
Módosított Harvard architektúra
•
Egy órajel alatt végrehajtható 16 bites szorzás, osztás
•
Egy órajel alatti utasítás végrehajtás, bitmanipulálás
•
Determinisztikus, 5 órajel alatti interrupt
•
Barrel shifter (állítható lépésméretű léptetőregiszter) A termékcsaládon belül találjuk meg a GS szériát, amit bár főleg kapcsolóüzemű
tápegységekhez terveztek, de az analóg perifériák miatt ez felel meg a legjobban a jelen alkalmazáshoz. Az ADC tulajdonságai: •
10 bit felbontás
•
12 analóg bemeneti pár
•
4 MSPS felbontás
•
Saját eredmény buffer mindegyik bemenetnek
•
Saját konverzió indítás minden bemenetnek.
•
Ezen kívül a mikrovezérlők rendelkeznek nagysebességű PWM-el, amivel meg lehet valósítani a későbbiekben az adást. [16] A kiválasztott típus a dsPIC33FJ64GS608. A prototípus tervezésével
kapcsolatos tudnivalók: •
2 db 4 MSPS sebességű 10 bites ADC, az analóg portok között multiplexelhető.
•
Szabadon
változtatható
3
programozói
interfész,
ebből
alapesetben
a
PGEC1/PGED1 aktív. •
20 MHz-es külső kvarc szükséges a 40 MHz-es belső utasítás végrehajtáshoz.
•
3,3 V-os tápfeszültség, maximum áramfelvétel 100 mA alatt marad.
•
Az E port alsó 8 Bitje ki van vezetve a lábakra így ideális összeköttetésre az USB vezérlővel.
34
ADC alapú ultrahangos spirometriai mérési rendszer tervezése •
Az RE8-RE9 lábra lehet beállítani él- vagy szint érzékeny megszakítást, így ezek ideálisak az USB vezérlő vezérlőjeleinek. [17]
4.4. ábra. A TS1117 LDO ajánlott kapcsolása [18]
A tápellátást egy 3,3 V-os LDO-val oldottam meg, típus szerint: TS1117CW3.3, aminek a maximális árama 800 mA (ez megfelelő, tekintve hogy az USB port maximális árama 500 mA). A 800 mA-es áramkorlát jó döntés volt, mert a fejlesztés közben egy pillanatra rövidzárlat keletkezett a 3,3 V-os tápfeszültség, illetve a föld között. Mivel az LDO áramerőssége a bemeneti, illetve a kimeneti oldalon ugyan akkora, emiatt nem károsodott az áramkör, mivel a számítógép USB portja érzékelte, hogy az eszköz átlépte az 500 mA-es áramkorlátot, és lekapcsolta a portot. Az LDO ki és bemenetre egy-egy 10 μF-os tantál kondenzátor szükséges, a 4.4. ábrán látható módon.
4.5. ábra. A rendszer blokkdiagramja
További megfontolásképp a dsPIC összes lába kivezetésre került csatlakozókra, hogy a későbbiekben könnyebben módosítani lehessen az áramkört. A specifikációk
35
Szabó Tamás alapján elkészült a kapcsolási rajz, ami az 1-es függelékben látható, a rendszer jobb átláthatósága érdekében a blokkdiagramja a 4.5. ábrán látható. Ez után a PCB-hez szükséges dokumentumok készültek el. Mivel a prototípusgyártás lehetővé tette, ezért a kivezetéseket felirattal láttam el, illetve a monogramomat is felvittem a panelra. A gyártáshoz szükséges fájlokat elektronikusan mellékeltem, illetve a nyomtatott áramkör a 2. függelékben is megtalálható. A kapcsolási rajz, illetve a nyomtatott áramkör gyártásához szükséges dokumentumok elkészítéséhez az Altium Designer 2009-eti használtam. A Panelt az Eurocircuits [19] készítette el. A tervezés során törekedtem arra, hogy minél kevesebb furatszerelt alkatrészt alkalmazzak, a helyigényük miatt. Végeredményképp a két kvarc, illetve az USB csatlakozó kivételével az összes alkatrész SMD kiszerelésben került a tervbe. A tervezés során felhasználtam a cégnél lévő alkatrészkönyvtárat, mivel így csökkent a tervezési idő, és nem kellett foglalkoznom több alkatrész beszerzésével. A tápfeszültség szűrésére használt 47 μF-os kondenzátorok kivételével minden kondenzátornak és ellenállásnak 0603-as tokozásút választottam. Ezek méretét egy esetleges újratervezésnél javaslom 0805 vagy nagyobb méretűre növelni, megkönnyítendő az összeszerelést. Fontos volt a tervezésnél a tápfeszültség megfelelő szűrése. Az USB 5 V-os tápfeszültséget biztosít a slave egységek számára legfeljebb 100 mA áramigénnyel, illetve amennyiben az eszköz igényli, 500 mA áramfelvételt tud kérvényezni a Host-tól, egy erre szolgáló paranccsal. Az USB nem regulált tápfeszültség, ez azt jelenti, hogy a szabvány 5,25 illetve 4,75 V között bármekkora feszültséget megenged, sőt, az USB 2.0-s szabványban a minimális feszültségszintet 4,4 V-ra csökkentették. Emiatt, illetve hogy a szabvány nagyon megengedő a tápfeszültség zajossága szempontjából, illetve hogy a gyártók sok esetben nem is tesznek eleget ezeknek a szabványoknak, nem engedhető meg, hogy ez a tápfeszültség a mérésben bármilyen áramköri egységet energiával lásson el. Ha a tápfeszültségen 5,25-4,75/5V = 10% tápfeszültség ingadozás lehetséges, az a mérésben megengedhetetlenül nagy hibát okoz. [i]
http://www.altium.com/ 36
ADC alapú ultrahangos spirometriai mérési rendszer tervezése A tápfeszültség zaját az alábbi módokon csökkentettem: •
Alacsony ESR-ű tantál elektrolit kondenzátor az USB feszültség szűrésére (Vbus C19) és a mérés tápfeszültségének szűrésére (V33 – C18).
•
A normál elektrolit kondenzátorok nagy ESR-el rendelkeznek, a használt elektrolit kondenzátorok ezzel szemben sokkal alacsonyabb ESR értékkel rendelkeznek. Az ESR abból a szempontból fontos a jelenlegi alkalmazásban, hogy változó áramerősségnél
egy
nagy
ESR-rel
rendelkező
kondenzátorral
stabilizált
tápegységnek nagyobb az ekvivalens belső ellenállása, mivel a kondenzátor a belső ellenállásával párhuzamosan van kapcsolva a tápegység belső ellenállásával. A tápegység egy fogyasztó állandó áramát tökéletesen képes kiszolgálni, viszont abban a helyzetben, ha a fogyasztó árama változik, a tápegység IC ezt a változást egy feszültség visszacsatolással tudja szabályozni. Viszont a feszültségesésre az eddigre feltöltött kondenzátor képes a fogyasztó áramigényét kiszolgálni. A kondenzátor feszültsége ebben az esetben leosztódik a fogyasztó ellenállásán és a kondenzátor belső ellenállásán, ezért előnyös minél kisebb ellenállású kondenzátort használni. LDO használata a mérés tápfeszültségének előállítására (V33). •
A használt TS1117CW típusú LDO 60-70dB-es tápfeszültség-zajelnyomással rendelkezik.
•
Szűrőkondenzátorok közel elhelyezve a tápfeszültség lábakhoz (C1 C2 C3 C5 C9 C15 C11). A szűrőkondenzátorok az adatlapon meg vannak jelölve, mint szükséges elemek a dsPIC illetve az FTDI alkatrészek számára de további előnyük, hogy aluláteresztő szűrőként viselkednek az IC-ből származó zajok szempontjából.
•
Földfólia a PCB mindkét oldalán. Többfunkciós a földfólia használata. Ezáltal egyszerűsödik az áramkör tervezése, hiszen a földpontok bekötése nem lesz szükségszerű. Más szempontból hatékony védelmet nyújt az elektromágneses sugárzások okozta zajártalmakkal szemben. Ugyanakkor parazitakapacitások jönnek létre a vezetőrétegek, illetve a földfólia között, ami abból a szempontból jó, mert a legmagasabb frekvenciás jel az órajelek kivételével a párhuzamos kommunikáció legfeljebb 2-3 MHz-es négyszögjel, ezek a parazitakapacitások aluláteresztő-szűrő tulajdonságukkal jó védelmet biztosítanak a magasabb frekvenciás zajokkal szemben. [20]
37
Szabó Tamás •
A későbbiekben: az MCU nem használt részegységeinek a lekapcsolásával.
A két-két kondenzátor aluláteresztő hatása, illetve az LDO 60dB-es tápfeszültségzajelnyomását összegezve 100dB-es zajelnyomást feltételezhetünk az USB felől érkező magas frekvenciás zajokra, ami megfelelő érték. Mivel prototípusként készült el a panel, ezért a gyárban 100%-os CAM ellenőrzésen esett át a panel a szállítás előtt. A CAM ellenőrzés lehetővé tette, hogy a megérkező panelt mérés nélkül jónak fogadjam el, az áramkör elkészítésénél már csak az SMD alkatrészek beültetése volt szükséges, amit kézi forrasztásos módszerrel kiviteleztem, a céges konzulensem segítségével.
38
ADC alapú ultrahangos spirometriai mérési rendszer tervezése
5. A szukcesszív approximáció A dsPIC33 két szukcesszív approximációs, vagy más néven fokozatos közelítésű ADC-t tartalmaz beépítve. Ez az eljárás több előnnyel is rendelkezik a többi ADC struktúrával szemben. Ehhez azonban először nézzük meg hogyan működik az ADC:
5.1. ábra. A szukcesszív-approximációs ADC blokkdiagramja.
Az ADC bemenete egy analóg jel, ebben az esetben egy 0 és 3,3 V közötti jel. Ezt a jelet első lépésként mintavételezzük. Az ADC tartalmaz egy kondenzátort, amit rövid ideig rákapcsoljuk az analóg jelre, ekkor történik meg a mintavételezés. Következő lépésként a jel és a kondenzátor kapcsolatát megszüntetjük, a kondenzátort az ADC bemenetére kapcsoljuk. Ez után megkezdődik a digitalizálás. A mintavételezett jelet összehasonlítjuk egy DAC kimenetével. A DAC ugyanannyi bites, mint az ADC (n bit), az átalakítás n lépésben történik, minden lépésben az MSB-től kezdve a következő bitet határozzuk meg. Amennyiben a mintavételezett jel nagyobb mint a DAC kimenete, akkor 1 íródik be a SAR-be, amennyiben a DAC kimenete nagyobb akkor 0. A DAC vezérlése a SAR érvényes bitjeivel, illetve egy utána írt "100.."-val történik. Az egész struktúra lényege, hogy minden lépésben megfelezzük azt a tartományt, amiben a mintavételezett jel lehet. Így a mai technika segítségével egy 8-16 bites, ~5 MSPS sebességű ADC-t lehet előállítani.
39
Szabó Tamás Látható, hogy ebben az esetben ha a DAC kimenete lineáris, akkor az ADC bemenete is lineáris lesz, illetve az ADC pontosságát a DAC pontossága fogja meghatározni. Ezért tudja ráírni a gyártó, hogy ±1 LSB pontosságú az ADC-je. 5.1. 5.1.1.
A szukcesszív-approximációs struktúra előnyei: Determinisztikus konverziós idő: Nem függ sem a bemeneti jel
nagyságától (mint például a dual slope ADC esetében), sem a jelváltozási sebességtől ( mint a követő ADC esetében) a konverziós idő 5.1.2.
Nagy sebesség: gyorsabb, mint mondjuk az audiótechnikában népszerűen
alkalmazott Delta-sigma ADCk (~768 KSPS). 5.1.3.
A kimenet akkor is kiértékelhető, ha a konverzió még nincs kész:
amennyiben nincsen idő megvárni a konverzió végét, akkor a SAR MSB-től kezdve annyi bitje helyes lesz, ahány lépést megtett a konverzióból az ADC, ebből következik a következő előny is. 5.1.4.
Lehet növelni a sebességet a felbontás rovására: amennyiben a gyártó
ehhez lehetőséget ad, a mintavételezés, illetve regiszter szinten ez megoldható. Például ha csak 8 bit felbontás szükséges, le lehet állítani az átalakítást, újra lehet mintavételezni, és fel lehet dolgozni az eredményt korábban. 5.1.5.
A mintavételezés sebességétől függ a fogyasztás: egy alacsony mintavételi
sebességet kívánó alkalmazás során előny lehet, hogy a szukcesszív approximációs ADC-vel kisebb fogyasztást lehet elérni, mint egy flash ADC segítségével 5.2 5.2.1.
A struktúra hátrányai: A mintavételi frekvenciája elmarad az akár több GSPS-es Flash
konverterekétől. 5.2.2.
Bonyolultabb megvalósítani mint sok más struktúrát, emiatt nagyobb
területet foglal el a chipből. Ebből következően: 5.2.3.
Kevés az olyan MCU, amelyik egy ADC-nél többet tartalmazna beépítve.
Hogy mégis több bemenetet tudjanak megmérni, ezért analóg multiplexereket építenek be a mikrovezérlőkbe. Viszont az analóg multiplexerek átkapcsolása is időbe telik:
40
ADC alapú ultrahangos spirometriai mérési rendszer tervezése
5.2. táblázat. Az Atmega 48 ADC konverziós idői.
5.2.4.
Amennyiben több bemenetet kell megmérni, úgy a másodpercenkénti
mintavételezések száma csökken, mivel a multiplexer átváltására is várni kell. Ennek hatását az 5.2. táblázatban láthatjuk [21]. 5.2.5.
Probléma az, hogy az ADC-k úgy vannak kialakítva az MCU belsejében,
hogy a nagyobb sebesség érdekében a mintavétel már akkor megtörténik egy másik S/H áramkörrel, mielőtt a konverzió végére érnénk, emiatt egy átlapolódás történik a konverzió és a mintavételezés között időben. Sokszor azonban több jel vizsgálatánál ez az átlapolás nem megoldható. 5.2.6.
Mivel nincsen több ADC és S/H beépítve a mikrovezérlőbe, ezért amikor
két jelet mintavételezünk felváltva, a mintavételi időpontok nem egyeznek meg. Ez problémát okozhat, mivel a spirometriai mérési algoritmus null átmenetekkel dolgozik, és a null átmenet idejének meghatározásakor nem egyforma referenciaidővel kell számolni a két mintavételezett jelnél, illetve az áramlási sebesség mérésének a felbontását is rontjuk ezzel. A DSpic33 GS szériánál látszik, hogy a tervezők újragondolták az eddigi ADC kezelést. Az analóg bemeneti lábak párokba vannak rendezve. Az eszköz kettő SAR-al (Successive Approximation Registers) rendelkezik, ami lehetővé teszi kettő analóg jel egyidejű átalakítását. Ennek megfelelően a S/H (Sample Hold) áramkörök számát is megduplázták. A 5.3. ábrán látható a kettő beépített ADC közül az egyik. A teljes ábra az adatlapban található meg. [22] Ezenkívül a párokba rendezett lábakhoz tartozó regiszterek is úgy vannak kiosztva, hogy egy pár konverziójának elindításához egy bit tartozik. Ennek köszönhetően lehetségessé válik a lábak egyidejű mintavételezése, illetve a konverzió
41
Szabó Tamás utáni digitális értékek is egy időben állnak rendelkezésünkre. Mivel kettő ADC van beépítve a mikrovezérlőbe, emiatt a szukcesszív-approximációs struktúra hátrányainak a Az adatlapból az alábbiakat tudhatjuk meg a dsPIC33FJ64GS608-ba épített ADCről: •
10 bit felbontás
•
2 SAR
•
24 külső analóg bemenet
•
2 belső analóg bemenet
•
Minden analóg bemenethez saját eredmény regiszter
•
±1 bit pontosság 3,3 V-on
•
4 MSPS konverziós sebesség
•
Alacsony energiaigényű CMOS technológia
5.3. ábra. A dsPIC33FJ64GS608 beépített ADC-jének blokkdiagramja.
Az ADC feszültség felbontása (LSB feszültség)3222 uV, kiszámolható a tápfeszültségből (3,3 V) illetve a bitszámából (10 bit). A kivezérlési tartománya a tápfeszültség.
Itt
megjegyzem,
hogy
az
MCU
képes
ennél
szűkebb
feszültségtartományban mérni, amennyiben a VrefH illetve VrefL feszültségeket nem a GND és a VDD tápfeszültségekkel kapcsoljuk össze. Javítani lehet a mérés pontosságát,
42
ADC alapú ultrahangos spirometriai mérési rendszer tervezése ha ezeket a feszültségeket referencia feszültségforrásokkal (referencia feszültség IC-vel) állítjuk elő, hiszen ezek pontossága nagyobb a tápfeszültség IC-k pontosságánál. Az ADC mintavételi frekvenciája 2 MSPS csatornánként, és nem tartalmaz beépített aluláteresztő szűrőt az MCU, így a sávszélessége a 0 Hz-től 1 MHz-es tartomány. A konverziós idő 0,5 μs. Az adatlap hiányos abból a szempontból, hogy nem nyilatkozik az ADC offset hibájáról, erősítési hibájáról, illetve az integrális nemlinearitásról (INL). Ez azért okozhat gondot,mert a nullátmenet közelében lévő
INL-ok a rendszerben állandó
hibaforrásként jelentkeznek. Emiatt a későbbiekben mindenképpen szükséges az ADC ilyen jellegű hibáinak a feltárása.
43
Szabó Tamás
6. A szoftver felépítése Az összeszerelés utáni következő lépés az analóg panelhez való csatlakoztatás volt a következő lépés. Az analóg panel kapcsolási rajzát sajnos a Thormed kft.-vel kötött titoktartási szerződésem miatt nem tehetem közzé. A panel több funkciót is ellát, amiknek a lényege:A két vevő transducerről érkező jeleket felerősíti, illetve analóg szűrést is megvalósít. •
Előállít egy 3,3 V-nál nagyobb feszültséget a transducer meghajtásához.
•
Lehetővé teszi egy PWM jellel történő adó transducer kapcsolását.
•
Lehetővé teszi az egész panel lekapcsolását az energiatakarékosság miatt.
A használatához tehát három dologra volt szükség: •
Egy 40 KHz-es 50%-os kitöltésű, kapcsolható PWM jelre
•
Tápfeszültségre
•
A kettő analóg jel fogadására
6.1-6.3 képek. A REAL ICE, az ICD3 és a Pickit 3 programozók.
Az MCU programozása ICD csatlakozón keresztül oldható meg. A Microchip ICD-je 5 vezetékből áll, amiből 2 vezeték a tápfeszültség, és a föld, egy a reset láb, illetve a PGD és PGC lábak. Az egyik a kétirányú adat (PGD) a másik pedig egy órajel. A panel úgy lett megtervezve, hogy a gyártó által terezett alacsony költségű Pickit 3 debuggerrel programozni lehessen, csak csatlakoztatni kell a panelhez. A
44
ADC alapú ultrahangos spirometriai mérési rendszer tervezése beállításoknál fontos, hogy ne adjunk tápfeszültséget a Pickit-en keresztül a panelra, mert ez károsodást okozhat, ugyanis a panelen 3,3 V van előállítva, a Pickit pedig 5 Vot is képes a tápfeszültség lábra kapcsolni. A Pickit 3 USB HID eszközként kommunikál a PC-vel, ez a sebességét 64 Kbps-re korlátozza, ami a debuggolást lassítja. Nagyobb sebességet érhetünk el, ha MPLAB ICD2-at vagy Real ICE debuggert használhatunk, amit a debug csatlakozóra a csomagban lévő kábellel szintén csatlakoztatni lehet. A debuggolást segítik a hardveres és szoftveres brakepointok, bármelyik pillanatban le lehet kérdezni a memória tartalmát, lehet a program countert léptetni, vagy beállítani. Az MPLAB-ban nyomon lehet követni nem csak assembly, hanem C nyelvi szinten is az MCU állapotát, ami a kezdeti program írásnál nagy segítséget nyújthat. A későbbiekben lehet írni egy Bootloadert amivel az FTDI USB vezérlőn keresztül is fel lehet programozni a program memória tartalmát, ez a program a dolgozat során nem készült el. Az MCU programjának fejlesztéséhez felhasznált program az MPLAB IDE, ami a Microchip integrált fejlesztői környezeteii. A fordító GCC alapú C fordító, a felhasznált programok, könyvtárak, alkatrész specifikus libraryk, include fileok az MPLAB c30 fordító csomag részét képezik. A szakdolgozatomhoz az akadémiai licenszet használtam, ami ingyenesen elérhető. iii Sajnos a Microchip periféria library-ja nem működött rendesen ezen a típusú mikrovezérlőn, mivel az interrupt kezelés eltér a többi dsPIC33 típustól, és a library írását a gyártó átgondolatlanul tervezte meg. Példaként az ADC inicializáló függvények az alapján döntik el, hogy egyáltalán leforduljanak-e az adott típusra, hogy az interrupt vektornak az a címkéje definiálva van-e az adott MCU header file-jában. Mivel a megváltozott interruptkezelés miatt az interrupt vektor neve más lett, ezért nem fordulnak le az inicializáló függvények. Nagyobb hiba volt viszont az, hogy erről semmilyen adatlapban, erratában, leírásban nem utaltak, és az előre lefordított periféria library-k miatt ivnem is derül ki a hiba. [ii]
http://www.microchip.com/mplab
[iii] [iv]
http://www.microchip.com/c30
A fordítás után nem állapítható meg a lefordított fájl tartalma.
45
Szabó Tamás A fentiek miatt a kódom a standard C libraryn kívül csak a p33FJ64GS608.h file-t használja, ami a processzor specifikus definíciókat tartalmazza. Szintén a fentiek miatt csak általam írt függvényeket használok, illetve a perifériák felinicializálásakor strukturált szinten írom a regisztereket. Az FTDI USB vezérlőn szükséges megváltoztatni a működési módot. Ezt a weblapjukon lévő FTProg nevű programmal lehet megtenniv. A beállítások a következők: Az FTDI PORTA-ját FT245 módba kell állítani, a többi beállítást az eredeti helyzetben kell hagyni. A beállítások az FTDI_template.xls elektronikus mellékletben vannak csatolva. Az eszközhöz egy virtuális soros porton keresztül lehet csatlakozni, ehhez Windows rendszeren keressük meg a “device manager/ Ports (COM & LPT) / USB Serial Port” alatt a chipet. Kettő bejegyzésnek kell lennie, a dsPIC az "USB serial converter A"-n található meg. A csatlakozást bármilyen soros portot kezelő programmal el lehet végezni. Mivel a fizikai kialakítás párhuzamos, és nem soros elven működik, ezért a sebesség, paritás, és stop bitek száma lényegtelen, nem játszik szerepet a beállításoknál. A program bináris értékként küldi el a PC-nek az adatokat. Erre az miatt volt szükség, mivel nagyon nagy adattömeget kellett továbbítani. A dsPIC 4 MSPS mintavételezését 10 biten 40 Mbps sebességgel lehet elküldeni a PC-nek, amennyiben nem törődünk azzal, hogy ezt rendkívül körülményes feldolgozni. A számítógépek 8 bites, vagy 8 egész számú többszöröse bit szélességű információkkal tud dolgozni, ezek alól a PC és a PIC sem kivétel. Emiatt a 10 bitnyi információt csak úgy lehet átküldeni, ha 4 mérést (40 bit) 5 bájt adatként küldünk fel, és akkor PC, és a MCU oldalán is külön algoritmusok kellenek az adatok ki-be csomagolásához Emiatt úgy döntöttem, hogy első lépésben csak 8 bitnyi adatot továbbítok a PC-re, mert így egy mérés 1 bájt adatként fog megérkezni.
[v]
FTDI Utilities: http://www.ftdichip.com/Support/Utilities.htm#FT_Prog
46
ADC alapú ultrahangos spirometriai mérési rendszer tervezése Az ADC időalapját egy beépített PLLvi generálja. A konverzió kezdetét egy PWM jel szolgáltatja. Több forrásból is származhat az ADC indítási trigger jele: •
Szoftveres trigger jel: egy regiszter írásával lehet elindítani a konverziót
•
PWM generátor elsődleges trigger jel: egy PWM jel fel vagy lefutó élére lehet a konverziót indítani
•
PWM generátor másodlagos trigger jel
•
PWM generátor túláram trigger: ez akkor hasznos, ha egy hiba esetén szeretnénk megmérni automatikusan egy analog jelet
•
Timer1 vagy timer2 egyezés: a timer értéke ha megegyezik egy értékkel, akkor indítjuk a konverziót. Azért döntöttem a PWM jel mint forrás mellett, mert a jel előállítása után nem
szükséges ezt egy lábra sem kivezetni, így ez a jel csak az ADC időzítését látja el, illetve ezenkívül csak timerekkel lehet periodikus mintavételezést időzíteni, viszont ebben az esetben mivel a timer újratöltését egy interrupt tudja megoldani, ezért nem tudunk órajelre pontos periódusokat garantálni. A PWM jel használatával előállítható a kívánt frekvencia (1 MHz), és garantálni lehet, hogy a mintavételezés nem csúszik el. Egyedül az eredmények feldolgozásáról kell gondoskodni. Az ADC amikor végzett a konverzióval, egy interrupt fut le, amiben eltárolom egy cirkuláris bufferben a mért értéket. Nagyon fontos, hogy az interrupt ideje minél rövidebb legyen. A dsPIC33 interruptba lépése, és az onnan visszatérés önmagában 8 órajel ideig tart. Amennyiben még további 32 órajelnyi időt elfoglal az interrupt végrehajtása, akkor a processzornak nem is lesz ideje visszatérni az interruptból, és a következő interrupt már be is következett. Emiatt fordítás után tanulmányoztam a gépi kódját az ADC interruptjának, és meglepve vettem észre, hogy a leírt 5 sornyi egyszerű C forráskódot a fordító több mint 40 utasításra fordította le az assembler, amiben még ciklust is szervezett.Ilyen hosszú gépi kód lehetetlenné tette a C kódom használatát, és az újraírást követelt. A végleges kódot, a 4. számú függelék tartalmazza. A fentiek miatt optimalizációk fontosságára szeretném felhívni a figyelmet a következő fejezetben.
[vi]
Ebben az esetben a PLL frekvenciaszorzóként működik.
47
Szabó Tamás
7. Optimalizációk a mikrovezérlőkre írt kódokban A GCC több optimalizációs szintet is kínál a mikrovezérlők számára. 7.1
0-s optimalizációs szint
A 0-s optimalizációs szint a fordító alapbeállítása, ami nem hajt végre semmilyen optimalizációt a kódon. A készült kódban egyes mikrovezérlők számára még olyan is előfordulhat, hogy a c kódban lévő összes ";" karaktert a fordító NOP ( „no operation”, üres utasítás ami alatt a processzor nem hajt végre semmilyen műveletet) utasításra fordította. Ezt PIC32-re való fejlesztés közben figyeltem meg. Az az előnye ennek az optimalizációs szintnek, hogy a fordítás után a C kód minden sorának az eredménye egy összefüggő assembly kódot eredményez, és ezáltal amikor a mikrovezérlőn debuggolunk, a debugger mindig tisztában lesz azzal, hogy hol tartunk a C kódban, és lehet léptetni az utasításokat, ellenőrizve a saját munkánkat. 7.2
Egyes optimalizációs szint
1-s optimalizációnál a fordítás rövidebb és gyorsabb kódot eredményez mint 0-s optimalizációnál,
de
még
nem
kapcsol
be
olyan
nagyobb
számításigényű
algoritmusokat, mint az utasítás-sorrend optimalizáció, vagy a függvénybeágyazás. Csak olyan optimalizációs algoritmusokat használ ami nem áldoz fel sebességet a méretért, és fordítva. 7.3
Kettes optimalizációs szint
2-es optimalizáció annyiban különbözik az 1-estől, hogy a fordító megváltoztathatja az utasítások sorrendjét a hatékonyabb végrehajtásért. ennél az optimalizációs szintnél a debuggolás már nem megoldható, mert az MCU a futtatás közben nem a C kódban leírt sorrendben hajtja végre az utasításokat. Alapvetően csak különleges esetekben van értelme ezt a szintet használni a későbbiekben leírtak miatt.
48
ADC alapú ultrahangos spirometriai mérési rendszer tervezése 7.4
Hármas optimalizációs szint
3-as optimalizációnál a fordító mindent megtesz annak érdekében, hogy a kód gyorsan fusson. Függvényeket ágyaz be a kódba, ez azt jelenti, hogy függvény hívás helyett a függvény törzse szerepelhet a hívás helyén. nagyobb kódot eredményez, mint a 2-s optimalizáció elképzelhető olyan eset, hogy a 3-as optimalizáció lassabb kódot eredményez, mint a 2-s vagy az s-es optimalizáció, tipikusan ilyen eset, ha egy perifériára való várakozás esetén a fordító a várakozást és az ez alatt is végrehajtható utasítások sorrendjét felcseréli. 7.5
„s”-es optimalizációs szint
„s”-es optimalizációnál a fordító méretre optimalizál. a 2-s optimalizációnál sok esetben (más mikrovezérlőknél) gyorsabb a kód, mivel a kisebb méret és a gyorsítótár kezelés miatt kevesebbet kell olvasnia a mikrovezérlőnek a lassabb Flash memóriáról. 7.6
Unroll loops
A 7.1-7.4 szintektől függetlenül bekapcsolható az "unroll loops" kapcsoló, ami a fix hosszúságú ciklusokat képes összefüggő, ugrás nélküli kóddá alakítani, a ciklus belsejének ismétlésével. Vigyázni kell ezzel a kapcsolóval, mert kicsi gyorsulást és nagy kódot eredményezhet. A fordító optimalizációján kívül fontos, hogy a forráskód írásakor is már figyelemmel legyünk az írt kód futási sebességére. Sok esetben érdemesebb a processzor architektúrájának megfelelő változóméretet használni, mert annak az elérése gyorsabb lehet mint egy „char” típusú változónak. egy barrel shifter-rel rendelkező processzornál egy shift művelet lényegesen gyorsabban végrehajtható, mint egy osztási művelet, ezáltal szintén nagyobb sebességet érhetünk el. Érdemes lehet a bufferméreteket ehhez igazodva meghatározni. Sebességkritikus alkalmazásoknál minden esetben kerülendő a lebegőpontos számítások használata, mert ezek lényegesen több műveletet igényelnek mint az egész számokon végrehajtott műveletek.
49
Szabó Tamás
8. A mérési eljárás kidolgozása Sajnos az analóg jelek nem érhetőek el a panelről kényelmesen, mert ez a tervezéskor nem volt szempont, de a komparátor bemeneti lábain ezek megtalálhatóak. A Thormed kft. által szabadalmaztatott eljárás szerint a levegőáramlás sebessége meghatározható a két időhosszból. A két időhossz (T1 és T2) fordítottan arányos azzal a sebességgel, amivel a hang terjed az áramló levegőben. Mivel a hang terjedése levegőben állandó adott hőmérsékleten, ezért az áramló levegő sebessége vektoriálisan hozzáadódik a hang sebességéhez, így a kettő vevő transducerre más-más időpillanatokban érkezik meg a hang. A 8.1. ábrán egy oszcilloszkópos mérés látható, amin a narancssárga jel az adás, a zöld jel pedig a vétel szűrve, és erősítve, ahogy az analóg panelen a komparátorhoz jut. Ez a jel lesz az, amit a mikrovezérlővel is mérni fogok.
8.1. ábra. Az adás illetve a vétel.
A jelenlegi rendszer kimenete T1 és T2 amit egy MCU mér meg, aminek a referencia órajele 80 MHz. Természetesen ez az időtartamból nem lehet azonnal megállapítani az áramlási sebességet, hanem bonyolult matematikai algoritmusok
50
ADC alapú ultrahangos spirometriai mérési rendszer tervezése kimeneteként jelenik meg. (a pontos algoritmusok ismertetésére a titoktartási szerződésem értelmében nem térhetek ki.) Így az általam tervezett rendszernek is kettő időtartamot kell szolgáltatnia kimenetként. Megoldandó volt tehát egy referencia jel keresése a vételi oldalon érkező adatokból. Az előzetes mérésekből látható, hogy a vett jel egy erősödő szinuszos jel, aminek a frekvenciája megegyezik az adó oldali frekvenciávalvii az amplitúdója pedig az első 4 hullám alatt folyamatosan nő. Mivel az adáskor összesen 4 hullámot bocsátunk ki, ezért a vételi oldalon feltételezhető, hogy a negyedik periódus utáni összes maximum visszhangként jut el a vevőbe, vagy a vevő - mechanikailag és elektronikusancsillapított rezgő mozgást végez. Az alábbi képen látható, hogy a maximum amplitúdót eléri a 4. rezgésre, és a következő 3 szinusz hullám alatt nem változik számottevően az amplitúdó. Ebből adódik, hogy a 4. hullám egy jellegzetes pontját érdemes első közelítésben referenciapontnak venni. Első közelítésben, mert később megvizsgálok majd más matematikai eljárásokat, amikkel elképzelhető, hogy pontosabb eredmény kapható. Öt jellegzetes pontja lehetséges ennek a hullámnak. Az első kettő a maximuma illetve a minimuma.
8.2. kép. A mérés közelítése. [vii]
A vélemények erről az állításról megoszlanak, a kollégáim között vannak olyanok, akik
szerint doppler effektus lép fel az adás során, míg mások szerint elképzelhető, hogy a vevők nem az adás frekvenciáján, hanem a sajátfrekvenciájukon rezegnek fel. A témáról nem érhető el megbízható szakirodalom.
51
Szabó Tamás A maximum meghatározásának a módja, ha az egymás után következő mintákból kiválasztjuk azt, amelyik előtt a jel még növekedett, utána pedig már csökkent ezt matematikailag úgy lehet leírni, hogy azt a jelet választjuk ki, amelyik pontban a derivált előjelet vált. Másik jellegzetes pontja a jelenlegi rendszerben is használt: a null átmenet megkeresése. A null átmenetet úgy lehet meghatározni, hogy az analóg áramkört a ADC-re kapcsoljuk, de a transducert nem gerjesztjük, és így veszünk egy mintát. Ez a minta az analóg áramkör tökéletlenségeit, például ofszet feszültség, ellenállások tűréshatárából adódó állandó hiba- tartalmazni fogja, így ezt lehet használni null szintnek. Valójában a null szint meghatározásakor érdemes több mintát átlagolni, hiszen ez nem okoz gondot, és így amennyiben a zajszint meghaladja az ADC felbontását, akkor átlagolás után pontosabban meg lehet határozni a null szintet. A mért értékekéből kivonjuk a null szintet, így a null átmenet meghatározás egyértelmű lesz. A harmadik lehetséges pontpáros a szinusz hullám 45 fokos, vagy 60 fokos állapota lenne. Azonban belátható, hogy ezek meghatározása egy zajjal terhelt jel esetében nem egyszerű. Így tehát meghatározható a T1 illetve T2 időtartamok, csak ezzel az elvvel nem értünk el mást, mint az eddigi 80 MHz-es felbontást 1-2 MHz-re lecsökkentettük. Interpolációnak kell követnie a mérést, hogy ennél pontosabban meg tudjuk határozni az időtartamokat. Hasonlítsuk össze a két mérési eljárást! •
Az első esetben 80 MHz-es mintavétellel vizsgálunk egy 1 bites adatot. Ez 80 Mbit/ sec adat.
•
A második esetben 2 MHz mintavétellel vizsgálunk egy 10 bites adatot. Ez 20 Mbit/ sec adat. Első ránézésre tehát az eddigi eljárással több információ nyerhető ki a mérésből.
ennél az esetnél viszont nem alkalmazhatjuk az interpolációt, hiszen egy 1 bites érték esetében nincs is értelme interpolációról beszélni.
52
ADC alapú ultrahangos spirometriai mérési rendszer tervezése Az alábbi, 8.3. ábrán látható egy kinagyított részlet a mérési eredményekről, amin a 4. és 5. hullám maximumát láthatjuk. Az ábrából megállapítható, hogy a maximumhely megállapítása nem triviális a mérés közben fellépő zaj miatt.
0 .6 2 0 .6 1 0 .6
A m p lit ú d ó
0 .5 9 0 .5 8 0 .5 7 0 .5 6 0 .5 5 0 .5 4
1560
1580
1600
1620
1640 Id
1660
1680
1700
1720
8.3. ábra. A 4. és 5. hullám maximumai.
Látható, hogy a zaj miatt a derivált meghatározása sem lesz egyértelmű. Abból a szempontból is érdemesebb a null átmenetet választani, hogy itt van a függvénynek a legnagyobb változása, más szóval a deriváltja a függvénynek itt lesz abszolút értékben a legnagyobb, a maximum közelében pedig a legkisebb. Tegyük fel, hogy a mérést ugyanakkora zaj terheli mind a maximuma, mind a 0 közelében. Ekkor a derivált értékében nagyobb arányú eltérést fog okozni ott a zaj, ahol a derivált kisebb. És a maximumnál a derivált nulla, így ennek a meghatározása gyakorlatilag lehetetlen a zaj miatt, mint ahogy az az ábrán is látszódik. A döntésem az lett, hogy a negyedik hullám null átmenetét veszem referencia pontnak, a másik referencia pont pedig az adás vége lesz,hiszen így a legkevesebb az ofszet idő a mérésben. A mérésből adódó ofszet időt lehet becsülni 4 teljes méretű 40 KHz-es szinusz hullámmal, ami 100 μS.
53
Szabó Tamás
9. Az interpoláció "Az interpoláció matematikai közelítő módszer, amely egy függvény nem ismert értékeire az ismert értékek alapján ad közelítést." Az interpolációt ebben az esetben nullpont meghatározásra használjuk, kettő ismert pont között kell meghatározni minél pontosabban, hogy a valóságban hol történhetett meg a null átmenet. Lássuk először, hogy milyen interpolációs eljárások jöhetnek szóba: 9.1
Lineáris interpoláció:
9.1. ábra. A lineáris interpoláció. [23]
Lineáris interpolációnál a két pont közötti értékeket egyenessel közelítjük, a többi pont értékét erről az egyenesről vesszük előnye a kicsi számítási igény, hátránya, hogy sok esetben nagy eltérés lehet a számolt, és a valóságos értékek között. A 9.1. ábrán láthatunk egy példát a lineáris interpolációra, ahol a piros vonal az eredeti jel, a pontok a mért adatok, és a kék az illesztett függvény. 9.2
Polinomiális interpoláció:
Ebben az esetben a két pont közötti értékeket, a pontok körüli értékekre illesztett polinommal leírható függvény pontjaiként írjuk le. Látható, hogy ebben az esetben a számítási igény jóval nagyobb a lineáris interpolációnál, hiszen első lépésben a polinomot meg kell határozni (ami több szorzási művelettel jár)viii és ezután lehet csak, behelyettesítve a függvénybe az interpolált értékeket megkapni. Tipikus esetei a [viii]
A szorzási, osztási műveletek végrehajtása egyszerűbb mikrovezérlőkön sokszor csak több
órajel alatt végrehajtható.
54
ADC alapú ultrahangos spirometriai mérési rendszer tervezése Lagrange és a Spline interpoláció. Mivel itt valós időben kell az adatoknak rendelkezésre állnia, ezért a Lagrange interpoláció nem jöhet szóba. 9.3
Szinuszoid – interpoláció:
(9.2.)
Ebben az esetben a függvényt a fenti képletnek (9.2.) megfelelően a trigonometrikus polinomjával írjuk le, Fourier sorfejtéssel határozzuk meg az együtthatókat, ezek után a kapott együtthatókkal leírt képletbe behelyettesítve kapjuk meg az interpolált értékeket. A számítások szempontjából kedvező lehet, hogy ismert a függvény alap harmonikusa, ellenben a Fourier sorfejtés alkalmazhatóságát kérdőjelezi meg az a tény, hogy a vizsgált függvény nem periodikus. A rendelkezésre álló interpolációs eljárások közül választani nem könnyű, mivel ellentétes szempontoknak kell megfelelnie. Az egyik szempont, hogy minél pontosabban szeretnénk megtudni a függvény nullpontjának a helyét, a másik szempontból pedig a kódnak futtathatónak kell lennie egy mikrokontrolleren, aminek a számítási kapacitása 40 MIPS, 16 biten. Lineáris interpoláció mellett szól az az érv, hogy a számításigénye alacsony, és a gyakorlatban csak két pontot kell figyelembe venni a számításoknál, a null átmenet előttit, és az ez utánit. Ezeket a számításokat a mikrokontroller el tudja végezni az alatt az idő alatt, amíg a csőben reflektálódó visszhangok lecsillapodására várunk. Az előnyök miatt döntöttem a lineáris interpoláció mellett, amit a PC-re érkezett mérési adatokon végre is hajtottam. Az adatok tanulmányozása során azonban azzal kellett szembesülnöm, hogy az analóg panelről érkező adatok amplitúdója túlságosan kicsi. A null átmenet előtti, és utáni minták különbsége nem volt elegendően nagy, ahhoz, hogy az általam tervezett rendszer pontossága összemérhető legyen az eredeti rendszerrel. Ahhoz hogy levegőáramlást is lehessen mérni a rendszerrel, szükséges az analóg panel újratervezése,
55
Szabó Tamás vagy az erősítésének a megnövelése. Az erősítés megnövelésével egy torzított szinusz jelet kapnánk, viszont a jel meredeksége megfelelő lenne ahhoz, hogy a null átmenetet az eredeti rendszer pontosságát megközelítve kapjuk meg. A 9.3. ábrán látható, hogy hogyan kellene kinéznie annak a jelnek, amit érdemben fel tudna dolgozni az általam tervezett rendszer. Sajnos amíg az erősítés növelése, illetve a kellő jelformálás nem valósul meg, addig nem érdemes további méréseket végrehajtani. 2
1 .5
1
0 .5
0
-0 .5
-1
-1 .5
-2
0
500
1000
1500
2000
2500
9.3. ábra. A túlvezérelt rendszer.
Ami tehát elvárás az újratervezett analóg panellel szemben: •
1,65 V középértékű jel (3,3 V a méréshatár).
•
A jel ne hagyja el a méréshatárt.
•
Az erősítés legyen a mostani 20-25-szöröse, így a kellően meredek jelből pontosabban lehet megállapítani a null átmenetet.
•
A fentiekkel párhuzamosan érdemes egy nagyobb felbontású ADC használata, ami által a null átmenetre illesztett egyenes pontossága nagyobb lesz.
56
ADC alapú ultrahangos spirometriai mérési rendszer tervezése
10. Továbbfejlesztési lehetőségek •
A cég által használt "C" vagy "S" protokol használatának megírása a mikrovezérlőre.
•
Az analóg illetve a digitális áramköri egységek egy PCB-n megvalósítása.
•
Kisebb lábszámú dsPIC33 használata. A GS széria jelenlegi összes tagja tartalmazza a kívánt perifériákat, így egy kisebb IC használatával olcsóbbá válhat a gyártás.
•
Nincsen szükség FT2232H típusú FTDI chipre, egy FT232H megfelel, amennyiben az összes adatot át szeretnénk
küldeni számítógépre, mivel a FT2232H-tól csak a
kommunikációs csatornák számában különbözik. •
Amennyiben a specifikáció csak a kiszámolt értékek PC felé történő továbbítását írja elő, egy egyszerű FT232R is megfelel a feladatnak, amivel az alkatrészszámot is lehet csökkenteni, mivel beépített órajel generátort, illetve EEPROM memóriát is tartalmaz.
•
Ki lehet javítani a jelenlegi panelen a hibákat.
•
Át lehet tervezni a rendszert, hogy a tápellátását ne az USB csatlakozóról kapja, így egy kevésbé zajos tápegységgel is lehetne mérni, amivel a mérés pontosságát lehet javítani.
•
A bonyolultabb spirométerek számára meg lehet valósítani egy egyszerűbb felépítésű mérőpanelt. Ebben a konfigurációban a dsPIC és az analóg jelformáló rész egy PCB-n lenne megvalósítva, és SPI, I2C vagy UART kommunikációval csatlakozna a spirométer többi részegységéhez.
•
Érdemes lenne megvizsgálni egy nagy sebességű DSC vagy FPGA illetve egy külső, szintén nagy sebességű ADC segítségével, hogy mi az elméleti határ, amit ezzel a típusú (ADC-vel megvalósított) méréssel el lehet érni.
•
A mérési pontosság növelése miatt egyébként is szükségszerű külső ADC használata, viszont a dsPIC-nek nincs akkora számítási kapacitása, illetve kommunikációs sebessége, hogy ennyi adatot fel tudjon dolgozni.
57
Szabó Tamás •
Meg kellene mérni a dsPIC beépített ADC-jének a működését, az Ofszet hiba, erősítési hiba, Integrális nemlinearitás, differenciális nemlinearitás szempontjából, mert az adatlap nem nyilatkozik ezekről az adatokról.
•
Összehasonlítani a lineáris, a polinomiális illetve a szinuszoid interpoláció számításigényét.
•
Meg kell növelni az analóg panel, vagy az egybetervezett analóg-digitális panelen az erősítő fokozat erősítését.
•
Másik megoldás lehet, ha a mikrovezérlő méréstartományát szűkítjük be, hogy a szinuszjelet nagyobb felbontással kapjuk meg. Ez a megfontolás kombinálható az előző ponttal.
•
A mikrokontroller DMA-jának a használatával nagyobb mintavételezési sebességet és/vagy kisebb terhelést lehet elérni.
•
Megvizsgálni, hogy a null átmenetekre illesztett egyenesen kívül milyen módszerrel lehetséges a terjedési idők megállapítása.
58
ADC alapú ultrahangos spirometriai mérési rendszer tervezése
Összefoglalás A dolgozat elkészítése során ismertettem a spirometriát mint tudományágat, illetve megvizsgáltam a mérnöki vonatkozásait. Elemeztem a Thormed kft. mérési elvét, egyeztetve a titoktartási szerződésemmel. Megvizsgáltam a rendszer gyenge pontjait, és javaslatot tettem a javításukra. Elemeztem a bennem felvetődőt ötletet, ami később a dolgozatom témáját adta. Az elemzésem után nyomtatott áramkört terveztem, illetve szoftvert írtam a mérési adatok feldolgozására. Ezzel párhuzamosan megkezdtem oszcilloszkóppal készült mérések elemzését. Mivel az oszcilloszkópos mérésekkel nem lehetséges hosszú idejű méréseket végezni, ezért tovább folytattam az általam tervezett rendszer fejlesztését. A mérési adatok birtokában szükségesnek véltem az adatok interpolációját, ennek megfelelően kiválasztottam az interpolációs eljárások közül a járható utat. Végül a továbblépésre is lehetőségek soroltam fel. A készült nyomtatott áramkör készítésekor törekedtem arra hogy más alkalmazásokhoz is felhasználható legyen. A kapcsolási rajz készítésekor az átláthatóságra törekedtem, támaszkodva a kollégáim tapasztalataira, elvárásaira. A mikrovezérlőre íródott forráskódot sok megjegyzéssel láttam el, hogy az MCU ismerete nélkül is olvasható legyen a kód. A megjegyzéseket természetesen a programozás nyelvének megfelelően angolul végeztem. A dolgozat írása során rengeteg rövidítést használtam, a rövidítések jelentése megtalálható a következő fejezetben. Úgy gondolom, hogy a kifejezések sűrű megjelenése miatt, illetve amiatt hogy a magyar szakszavak nem minden esetben fedik teljesen a leírt dolgot, mindenképpen szükséges volt az angol rövidítések, vagy angol szakszavak használata. Mindenképpen kiderült, hogy a tervezett cél eléréséhez, miszerint a jelenlegi rendszernél nagyobb felbontással tudjunk mérni, nagyobb sebességű ADC-re és mikrovezérlőre van szükség, ellenben bebizonyosodott, hogy az út járható. Végezetül álljon egy idézet az egyik kollégámtól, aki a dolgozatom ismertetésekor így reagált: „ Tudod, nem könnyű oszcilloszkópot építeni.”
59
Szabó Tamás
Szószedet AC (Alternating current) Váltakozó áram ADC (Analog-to-Digital Converter) Analóg digitális átalakító CAM (Computer-aided manufacturing ) Számítógép-segített gyártás CMOS
(Complementary
metal–oxide–semiconductor)
Komplementer
fém-oxid
félvezető technológia DAC (digital analog converter) Digitális analóg átalakító DC (Direct Current) Egyenáram DMA (Direct memory access) Közvetlen memóriahozzáférés DSC (Digital Signal Controller) Digitális jelfeldolgozó processzor- mikrovezérlő hibrid DSP (Digital Signal Processor vagy Digital Signal Processing) Digitális jelfeldolgozó processzor vagy digitális jelfeldolgozás dsPIC (Digital Signal Processing PIC) Digitális jelfeldolgozó PIC, egy termékcsaládja a PIC mikrovezérlőknek EEPROM (Electrically Erasable Programmable Read-Only Memory) Elektromosan törölhető, programozható, csak olvasható memória ERS (European Respiratory Society) Európai Respirációs közösség ESR (Equivalent Series Resistance) Ekvivalens soros ellenállás FPGA (Field-Programmable Gate Array) A helyszínen programozható, logikai kapukat tartalmazó tömb, egy félvezető áramkör FTDI (Future Technology Devices International) Egy USB vezérlőket gyártó vállalat vagy a vállalat által gyártott IC. GPIO (General Purpose Input/Output) Általános ki/bemeneti láb GUI (Graphical User Interface) Grafikus felhasználói felület IC (Integrated Circuit) Integrált áramkör INL Integrális nemlinearitás I2C (Inter-Integrated Circuit) Soros adatátviteli busz LDO (Low-Dropout Regulator) LSB (Least Significant Bit) Legkisebb helyiértékű bit
60
ADC alapú ultrahangos spirometriai mérési rendszer tervezése Mbps (Megabit per Second ) Adatátviteli sebesség, megabit másodpercenként MBps (Mega Byte Per Second) Adatátviteli sebesség, megabájt másodpercenként MCU (Microcontroller Unit) mikrokontroller, MCU MIPS (Million Instructions Per Second) Millió utasítás másodpercenként. a processzorok sebességét jellemző adat MSB (Most Significant Bit) Legnagyobb helyiértékű bit MSPS (Mega Samples Per Second) Millió mintavétel másodpercenként. NOP (No operation) CPU utasítás ami nem végez műveletet NYÁK Nyomtatott áramkör vagy Nyomtatott huzalozású lemez PC (Personal Computer) Személyi számítógép PCB (Printed Circuit Board) Nyomtatott huzalozású lemez NYÁK PGA (Programmable Gain Amlifier) Digitálisan programozható erősítésű erősítő PIC (Peripheral Interface Controller) A Microchip álltal kifejlesztett és gyártott harvard architechtúrájú család PLL (Phase-Locked Loop) Fáziszárt hurok PPM (Part Per Million) Milliomod rész PWM (Pulse-Width Modulation) Impulzus-szélesség moduláció S/H (Sample and Hold) Mintavételező és a mintavételt tartó áramköri egység SAR (Successive Approximation Register) Szukcesszív aproximációs ADC eredmény regisztere SFR (Special Function Register) Speciális funkció regiszter, a egy beépített perifériáját konfiguráló regiszter SMD (Surface Mount Device) Felületszerelt alkatrész SPI (Serial Peripheral Interface bus) Soros adatátviteli busz UART (Universal Asynchronous Receiver/Transmitter) Univerzális sorosport USB (Universal Serial Bus) Egy nagy sebességű csillag topológiájú soros adatátviteli protokoll, ami a mai számítógépek alapfelszereltsége.
61
Szabó Tamás
Függelékek, mellékletek
Függelékek: 1.
Függelék: Kapcsolási rajz A/3 formátumban
2.
Függelék: A nyomtatott áramköri rajz
3.
Függelék: A szoftver blokkdiagramja
4.
Függelék: A dsPIC programjának C nyelvű forráskódja
Elektronikus mellékletek: •
A szakdolgozat és az összes függelék PDF formátumban (“Kinyomtatott” mappa)
•
Altium projekt fileok (“PCB” mappa)
•
C forráskód és projekt fájlok a dsPIC mikrovezérlőhöz (“dsPIC_SW” mappa)
•
Az oszcilloszkópos mérések CSV filejai (“Oszcilloszkopos_meresek” mappa)
•
A rendszertervek Microsoft Visio filejai (“VISIO” mappa)
62
ADC alapú ultrahangos spirometriai mérési rendszer tervezése
Köszönetnyilvánítás
Köszönettel tartozom dr. Kovácsházy Tamásnak, a konzulensemnek a dolgozat elkészítésében nyújtott segítségéért, Csiszlér Gergelynek, a vállalati konzulensemnek, illetve Balogh Gábornak, a rendszer tervezése és összeszerelése közbeni segítségéért, Ferenczy Györgynek, a rendszer anyagi finanszírozásáért, illetve a vállalat erőforrásainak használatáért. Köszönöm a Méréstechnika és Információs Rendszerek Tanszéknek a transducerrel kapcsolatos mérések elvégzéséhez nyújtott segítséget. Köszönöm mindenkinek, aki elolvasta a dolgozatomat, és rászánt időt, vagy megfogalmazott kritikát.
63
Irodalomjegyzék [1]
ELTE Élettani és Neurobiológiai tanszék hivatalos jegyzet www.physiology.elte.hu/gyakorlat/jegyzet/spirometria.pdf
[2]
Kiss László: Áramlásmérés (Irinyi János Szakközépiskola és Kollégium hivatalos jegyzet) www.web.t-online.hu/gentile/ipel/Aramlas.pdf
[3]
Kullmann László, Dr.: Térfogatáram mérési módszerek, 3.: Ultrahangos térfogatáram-mérőő (UH) Hidrodinamikai Rendszerek Tanszék Áramlástechnikai gépek mérésleírás www.vizgep.bme.hu/mota/vgag02/vgag02.html
[4]
V.Brusasco, R.Crapoand G.Viegi : ATS/ERS task force: Standardization of lung function testing ISSN: 0909-1936 European Respiratory Jornual
[5]
Kevin McCarthy, R-CPT, RPFT: Pulmonary Function Testing: http://emedicine.medscape.com/article/303239-overview
[6]
Dr. Pápay Zsolt: Adat konverterek: az analóg "átjáró" www.hit.bme.hu/~papay/edu/Acrobat/conv3A.pdf
[7]
CMOS/TTL SMD PROGRAMMABLE CRYSTAL OSCILLATOR Abracon Corporation www.abracon.com/Oscillators/ASEPseries.pdf
[8]
Oscillator Theory of Operation and Design Notes: http://www.foxonline.com/techdata.htm
[9]
PIC32 Family reference manual page 182 www.microchip.com/en_US/family/pic32/index.html
[10]
Mérési eljárások - A jitter és mérése http://alpha.tmit.bme.hu/meresek/6-9.htm
[11]
PIC32 Family reference manual page 182 http://www.microchip.com/en_US/family/pic32/index.html
[12]
FT2232H datasheet, FTDI Document No.: FT_000061 www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT2232H.pdf
[13]
dsPIC Family Reference Manual section 44
[14]
Charbon, E.; Miliozzi, P.; Carloni, L.P.; Ferrari, A.; SangiovanniVincentelli, A.; : Modelling Digital Substrate Noise Injection in MixedSignal IC’s; ISSN: 0278-0070 INSPEC Accession Number: 6196921
64
Irodalomjegyzék [15]
Microchip: 16-bit PIC24 MCUs and dsPIC® DSCs: http://www.microchip.com/en_US/family/16bit/index.html
[16]
Microchip: 16-bit PIC24 MCUs and dsPIC® DSCs: http://www.microchip.com/en_US/family/16bit/
[17]
SMPS and Digital Power Conversion Solutions from Microchip dsPIC33F GS széria leírás: http://www.microchip.com/SMPS
[18]
Taiwan Semiconductor Company, Ltd: TS1117 800mA Low Dropout Positive Voltage Regulator datasheet Typical Application circuit
[19]
Eurocircuits Kft. ISO 9001 minősítéssel rendelkező nyomtatott áramkör gyártó. http://www.eurocircuits.com
[20]
John Ardizzoni: A Practical Guide to High-Speed Printed-Circuit-Board Layout http://www.analog.com/library/analogdialogue/archives/39-09/layout.html
[21]
ATMEL: ATmega48/88/168 datasheet Rev. 2545B-01/04 23/4-es szekció
[22]
Microchip: DsPIC33FJ64GS608 datasheet: DS70591C dokumentum 22-4es ábra.
[23]
Planetmath: linear interpolation http://planetmath.org/encyclopedia/LinearInterpolation.html
65
1
2
3
4
5
6
7
8
Csatlakozók J2
A DEBUG nevű csatlakozó, amire a dsPIC programozóját/debuggerét kell csatlakoztatni.
A
P1 P2 P3 P4 P5 P6
V33
J3 P11 P12 P13 P14 P15 P16 P17 P18
1 2 3 4 5 6 7 8 Header 8
J6 P43 P42 P38 P48 P47 P46 P45 P44
1 2 3 4 5 6 7 8
J8 P61 P62 P63
1 2 3 4 5 6 7 8
Header 8
GND
1 2 3 4 5 6 7 8
V33 P64 P65 P66
Header 8
A
J9 Vbus DD+ USB_id
1 2 3 4 5
Header 8
GND
VBUS DSH D+ ID SH GND
0 0
USB
GND
J1 P24 P23 P22 P21 P28 P27 P26 P25
PGD PGC GND
Header 8
Header 8
Mikrovezérlő
GND A dsPIC összes lába kivezetése került. Az eggyes lábak neve a mellettük lévő szitázásról megállapítható.
1 2 3 4 5 6 7 8 Header 8
USB FIFO *
C2 100nF
GND
V33
100nF
C1
GND V33
P21 P22 P23 P24
100nF C3
GND
P25 P26 P27 P28 P31 P32 P33 P34
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
MCLR RG9 VSS VDD RE8 RE9 RB5 RB4
RF0 VDD VDDCORE RD7 RD6 RD5 RD4 RD13
RB3 RB2 RB1 RB0 RB6 RB7 RA9 RA10
RD12 RD3 RD2 RD1 RC14 RC13 RD0 RD11
AVDD AVSS RB8 RB9 RB10 RB11 VSS VDD
RD10 RD9 RD8 RA15 RA14 VSS OSC2 OSC1
RB12 RB13 RB14 RB15 RD14 RD15 RF4 RF5
VDD RG2 RG3 RF6 RF7 RF8 RF2 RF3
80 79 78 77 76 75 74 73
B4 B3 B2 B1 B0 RD WR SIWU
72 71 70 69 68 67 66 65
P66
64 63 62 61 60 59 58 57
P58 P57 P56 P55 P54 P53 P52 P51
100nF
V18
V33
P65 P64 P63 P62 P61
C4 4,7u
C6 100nF
GND GND
56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41
P48 P47 P46 P45 P44
B0 B1 B2 B3 B4 B5 B6 B7
16 17 18 19 21 22 23 24
RXF TXE RD WR SIWU
26 27 28 29 30 32 33 34 38 39 40 41 43 44 45 46
VCC
OSC2 OSC1
48 52 53 54 55 57 58 59
C5 GND 100n P43 P42 P41 P38 P37 P36 P35
60 36
GND
ADBUS0 ADBUS1 ADBUS2 ADBUS3 ADBUS4 ADBUS5 ADBUS6 ADBUS7
C8
GND
L2
FT2232HL VREGIN VREGOUT
BLM31PG500SN1L C15 100nF
C12 4,7u
1 V33 50 V18
GND
GND
49 C16 4,7u
DM DP
ACBUS0 ACBUS1 ACBUS2 ACBUS3 ACBUS4 ACBUS5 ACBUS6 ACBUS7
RESET# REF
7
FTD-
8
FTD+
14
R3 1K
6
R2
Tápegység
GND
V33 U1 V33
10K BDBUS0 BDBUS1 BDBUS2 BDBUS3 BDBUS4 BDBUS5 BDBUS6 BDBUS7
100nF
Az FTDI sorosporton kívüli üzemmódai külső EEPROM beforrasztása után érhetőek el. EECS EECLK EEDATA
BCBUS0 BCBUS1 BCBUS2 BCBUS3 BCBUS4 BCBUS5 BCBUS6 BCBUS7
GND
2
TS1117CW-3.3 3
Vbus
OUT IN GND
GND
47u
GND
GND
63 62 61 C14 U2
OSCI
2
Y2
12Mhz
PWREN# SUSPEND#
OSCO TEST
3
FTD+ 27pF FTDC13
1 2 3
D D GND VBUS D D
6 5 4
D+ Vbus D-
STF203-22.TCT 27pF
13
GND GND
A kapcsolási rajzon az STF203-22.TCT bekötése nem megfelelő. A helyére átkötést kell pakolni az 1-6 illetve a 3-4 lábak közé!
GND
27pF
D
1
C7 GND Title
Szabó Tamás - ADC alapú ultrahangos spirometriai rendszer tervezése
27pF GND
Size
--- 66 --2
3
4
Number
5
6
Revision
1-es függelék. 66. oldal
A3 Date: File:
1
C
C19
Y1
20Mhz OSC1
2 4
47u
OSC2 D
C18
C17
GND
51 47 35 25 15 11 5 1 10
dsPIC33FJ64GS608
B
BLM31PG500SN1L
C11 100nF
C9
GND 64 37 12 9 4
RE4 RE3 RE2 RE1 RE0 RG0 RG1 RF1
56 42 31 20
RE5 RE6 RE7 RC1 RC2 RG6 RG7 RG8
VCORE VCORE VCORE VPLL VPHY
MCLR 9 P6 10 11 12 RXF 13 TXE 14 P11 15 P12 16 P13 P14 P15 P16 PGC PGD P17 P18
C
1 2 3 4 5 6 7 8
VCCIO VCCIO VCCIO VCCIO
R1 Res V33
B5 B6 B7 P1 P2 P3 P4 P5
GND GND GND GND GND GND GND GND AGND
V33
V33
L1 C10 4,7u
V33
2
B
J7 P51 P52 P53 P54 P55 P56 P57 P58
1 2 3 4 5 6 7 8
1
Header 5
J5 P31 P32 P33 P34 P35 P36 P37 P41
1 2 3 4 5 6 7 8
1
J4
MCLR V33
1 2 3 4 5
2011.05.13. Sheet of C:\WORK\Szakdolgozat\PCB\sch.SchDoc Drawn By: 7
8
Crystal oscillator
Analog PCB
112Mhz
Auxiary PLL
ADC module
20Mhz
20Mhz
AN1
AN0
20Mhz
Primary Oscillator
ADC IRQ
ADCBUF0
40Mhz
ADCBUF1
Primary PLL
ADCBUF
Main Infinite loop
ADC Interrupt service rutine Datanum
dsPIC Core
FT2232H High speed serial USB Fifo
USB
PC D2XX USB driver
3. függelék: A szoftver blokkdiagramja --- 68 ---
ADC alapú ultrahangos spirometriai mérési rendszer tervezése – 4. függelék // //4. MELLÉKLET: //A C FORRÁSKÓD A dsPIC MIKROVEZÉRLÕHÖZ // //////////////////////////////////////////////////////////// //GLOBAL.H #ifndef GLOBAL_H #define GLOBAL_H #include
#define adcbuf_size 128 extern volatile int adc_buf_elementnum; extern int adc_buf_wr; extern int adc_buf_rd; extern int adc_buf0[adcbuf_size]; extern int adc_buf1[adcbuf_size]; int adb_buf_pop0(); int adb_buf_pop1(); void init_timer_2(); void init_PWM(); void init_ADC(); void init_pll(); #define ENABLE_PWM() PTCONbits.PTEN = 1 // Enable the PWM #define ENABLE_ADC() ADCONbits.ADON = 1 // Enable the ADC void init_ftdi(); int write_ftdi(unsignedchar data); void init_ports(); #endif //GLOBAL.H //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //FTDI.C #include "global.h" //FT2232 USB Fifo interface //more info http://www.ftdichip.com/Products/ICs/FT2232H.htm #define SWIU PORTFbits.RF1 //PIC OUTPUT //ACTIVE HIGH 2 LOW STROBE //FTDI SEND THE DATA IMMEDIATLY #define RD PORTGbits.RG0 //PIC OUTPUT //ACTIVE HIGH 2 LOW STROBE //ENABLES THE FTDI DATA OUTPUT #define WR PORTGbits.RG1 // PORTG //PIC OUTPUT //ACTIVE HIGH 2 LOW STROBE //WRITES A DATA TO THE FTDI FIFO #define RXF PORTEbits.RE8//BIT_8 // PORTE //PIC INPUT //ACTIVE LOW //DATA AVALIABLE TO READ FROM FTDI #define TXE PORTEbits.RE9//BIT_9 // PORTE //PIC INPUT //ACTIVE LOW //FTDI FIFO IS READY FOR DATAS #define FTDI_SEND() TRISE&=0xFF00 // setting port to write data from dsPIC to FTDI #define FTDI_RECV() TRISE|=0x00FF // setting port to read data from FTDI to dsPIC
69
Szabó Tamás int write_ftdi(unsigned char data){ if (TXE) return 1; WR=1; PORTE=((PORTE&0xff00)|data); Nop(); Nop(); WR=0; Nop(); WR=1; return 0; } static unsigned char ftdi_read_error; unsigned char read_ftdi(){ if (RXF) return ftdi_read_error =1; if (!RD){RD=1; Nop();Nop();} RD=0; static unsigned char ret; ret=(PORTE&0x00ff); RD=1; return ret; } void init_ftdi(){ _TRISF1=0; //setting PORTF 1 to output _TRISG1=0; //setting PORTG 1 to output _TRISG0=0; //setting PORTG 0 to output _TRISE8=1; //setting PORTE 8 to output _TRISE9=1; //setting PORTE 9 to output _TRISE5=0; //setting PORTE 5 to output _TRISD5=0; //setting PORTD 5 to output SWIU=1; RD=1; WR=1, FTDI_SEND(); //Setting FTDI port to input } //FTDI.C ////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////// //INTERRUPS.C #include "global.h" void init_timer_2(){ T2CONbits.TON=0; //disable timer T2CONbits.TCKPS=1; //8x prescaler selected T2CONbits.TCS=0; //Timer source internal clock T2CONbits.T32=0; //16bit operation IEC0bits.T2IE=1; // timer interrupt enable TMR2=0X0000; //reset timer counter T2CONbits.TON=1; //enable timer module } void __attribute__((interrupt, auto_psv)) _T2Interrupt(){ IFS0bits.T2IF=0; //clear interrupt flag PORTDbits.RD5=!PORTDbits.RD5; //invert PORTD5 (LED) } void general_exception(){ Nop();// Insert brakepoint here when debugging! for(;;);// check the call stack for more information } void __attribute__((interrupt, auto_psv))_OscillatorFail(){general_exception();} void __attribute__((interrupt, auto_psv))_AddressError(){general_exception();} void __attribute__((interrupt, auto_psv))_StackError(){general_exception();} void __attribute__((interrupt, auto_psv))_MathError(){general_exception();} void __attribute__((interrupt, auto_psv))_DMACError(){general_exception();}
70
ADC alapú ultrahangos spirometriai mérési rendszer tervezése – 4. függelék void __attribute__((interrupt, auto_psv))_ADCInterrupt(){ general_exception(); // this shouldnt occure } void __attribute__((interrupt, auto_psv))_ADCP0Interrupt(){ IFS6bits.ADCP0IF=0; //clear interrupt flag adc_buf_elementnum++; adc_buf0[adc_buf_wr]=ADCBUF0; adc_buf1[adc_buf_wr]=ADCBUF1; adc_buf_wr=(++adc_buf_wr)%adcbuf_size; } //INTERRUPS.C ////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////// //USER_ADC.C #include "global.h" int adc_buf_wr; int adc_buf_rd; volatile int adc_buf_elementnum; int adc_buf0[adcbuf_size]; int adc_buf1[adcbuf_size]; #define PWM_PERIOD 0x1000 void init_ADC(void) { ADCONbits.ADON = 0; // Disable the ADC ADCONbits.FORM = 0; // Integer data format ADCONbits.EIE = 0; // Early Interrupt disabled ADCONbits.ORDER = 0; // Convert even channel first ADCONbits.SEQSAMP = 0; // Select simultaneous sampling ADCONbits.ADCS = 5; // ADC clock = FADC/6 = 120MHz / 6 = 20MHz ADCONbits.SLOWCLK=1; ADPCFGbits.PCFG0 = 0; // select CH0 as analog pin ADPCFGbits.PCFG1 = 0; // select CH1 as analog pin IFS6bits.ADCP0IF = 0; // Clear ADC Pair 0 interrupt flag IPC27bits.ADCP0IP = 5; // Set ADC Pair 0 interrupt priority IEC6bits.ADCP0IE = 1; // Enable the ADC Pair 0 interrupt ADSTATbits.P0RDY = 0; // Clear Pair 0 data ready bit ADCPC0bits.IRQEN0 = 1; // Enable ADC Interrupt pair 0 ADCPC0bits.TRGSRC0 = 4; // ADC Pair 0 triggered by PWM1 Trigger TRGCON1bits.DTM=1; // Dual trigger mode TRIG1bits.TRGCMP=0; // Primary trig compare value STRIG1bits.STRGCMP=PWM_PERIOD/2; // Secondary trig compare value TRGCON1bits.TRGDIV = 0; // Trigger generated every PWM cycle TRGCON1bits.TRGSTRT = 0;//enable Trigger generated after 0 PWM cycles TRIG1 = 1; // Trigger compare value } void init_PWM(void) { PTCON2bits.PCLKDIV=0b000;//PWM input clk devider =0 PHASE1 = PWM_PERIOD; // Timer1 period=max PDC1 = PWM_PERIOD/2; // Duty Cycle is 50% IOCON1bits.PENH = 0; // PWM1H is controlled by PORTE IOCON1bits.PENL = 0; // PWM1H is controlled by PORTE IOCON1bits.POLH = 0; // Drive signals are active-high IOCON1bits.PMOD = 1; // PWM pair works in Independent Mode PWMCON1bits.ITB = 1; // Select Independent Timebase mode PWMCON1bits.MDCS= 0; // PDC1 provides duty cycle value PMD6bits.PWM4MD = 1; // Disable PWM4 }
71
Szabó Tamás int adb_buf_pop0(){ adc_buf_elementnum--; return adc_buf0[adc_buf_rd]; } int adb_buf_pop1(){ int ret=adc_buf0[adc_buf_rd]; adc_buf_rd=(adc_buf_rd+1)%adcbuf_size; return ret; } //USER_ADC.C ////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////// //MAIN.C #include #include "global.h" // Ensure, that the "configuration bits set in code" checkbox is set in // configure/configuration bits ///////////////////// //CONFIGURATION BITS _FOSCSEL(FNOSC_FRC) _FOSC(FCKSM_CSECMD & OSCIOFNC_ON) _FWDT(FWDTEN_OFF) _FPOR(FPWRT_PWR128) _FICD(ICS_PGD1 & JTAGEN_OFF) //CONFIGURATION BITS ///////////////////// void __attribute__((noreturn)) mainloop(); int main ( void ){ init_ports(); init_pll(); //initialize the init_ftdi(); init_timer_2(); //initialize init_PWM(); //initialize the init_ADC(); //initialize the ENABLE_PWM(); ENABLE_ADC(); mainloop(); }
pll module Timer 2 PWM module ADC module
void __attribute__((noreturn)) mainloop() { for(;;);{ //the main infinite loop if (adc_buf_elementnum>10){ int i; write_ftdi(0xFF); for (i=0;i<4;i++){ write_ftdi((unsigned char)(adb_buf_pop0()/4)); write_ftdi((unsigned char)(adb_buf_pop1()/4)); } write_ftdi(0xFF); // } } }
72
ADC alapú ultrahangos spirometriai mérési rendszer tervezése – 4. függelék void init_ports() { TRISA=0XFFFF; TRISB=0XFFFF; TRISC=0XFFFF; TRISD=0XFFFF; TRISE=0XFFFF; TRISF=0XFFFF; TRISG=0XFFFF; }
//setting //setting //setting //setting //setting //setting //setting
all all all all all all all
ports ports ports ports ports ports ports
to to to to to to to
input input input input input input input
void init_pll() { // Configure PLL prescaler, PLL postscaler, PLL divisor PLLFBD=41; // M = PLLFBD + 2 CLKDIVbits.PLLPOST=0; // N1 = 2 CLKDIVbits.PLLPRE=0; // N2 = 2 __builtin_write_OSCCONH(0x01); // New Oscillator FRC w/ PLL __builtin_write_OSCCONL(0x01); // Enable Switch while(OSCCONbits.COSC != 0b001);// Wait for new Oscillator to become FRC while(OSCCONbits.LOCK != 1); // Wait for Pll to Lock // Now, the dsPIC core frequency is 40Mhz // Configuring Auxilary PLL for the ADC module ACLKCONbits.FRCSEL = 1; // FRC provides input for Auxiliary PLL (x16) ACLKCONbits.SELACLK = 1; // Auxiliary Ocillator provides clock source for PWM & ADC ACLKCONbits.APSTSCLR = 7; // Divide Auxiliary clock by 1 ACLKCONbits.ENAPLL = 1; // Enable Auxiliary PLL while(ACLKCONbits.APLLCK != 1); // Wait for Auxiliary PLL to Lock }
//MAIN.C ////////////////////////////////////////////////////////////
73