Functionarea Inimii Si Ciclul Cardiac
Cuprins
Introducere
Cuprins
Cap. I Aspecte medicale
I.1 Funcționarea inimii și ciclul cardiac
I.2 Vector cardiac. Electrocardiografie
I.3 Măsurarea vectorului cardiac în plan frontal. Derivații bipolare și unipolare din planul frontal
I.4 Măsurarea vectorului cardiac în plan transversal. Derivații unipolare
precordiale
I.5 Unda electrocardiografică. Caracteristicile parametrilor ECG
Cap. II Electrocardiograful
Cap. III Convertorul numeric analog
III.1. Convertorul numeric analog cu rezistențe ponderate
III.2. Convertorul numeric analog cu rețea R-2R
Cap. IV Microcontrolerul PIC16F84A
IV.1. Generalități
IV.2. Pinii microcontrolerului
IV.3. Oscilatorul
IV.4. Resetul
IV.6. Circuitul integrat LM358N
Cap. V Tester ECG
V.1. Schema electric a testerului ECG
V.2. Alimentatorul
V.3. Programul ECG Tester
V.4. Digitizarea semnalului sinusoidal
V.5. Digitizarea semnalului ECG
V.6. Programul microcontrolerului
Cap. VI Realizare practică. Teste de funcționare
Cap.VII Proceduri de testare
Concluzii
Bibliografie
Introducere
Chiar dacă afectează de obicei persoanele mai în vârstă cu o imunitate scăzută, bolile cardiovasculare reprezintă principala cauză de deces pe plan mondial. Prevenirea acestora se realizează printr-un stil de viață sănătos care să elimine factorii de risc care duc la apariția acestor boli. Monitorizarea activității electrice a inimii și înregistrarea grafică a acesteia face posibilă depistarea unor probleme de ritm cardiac, insuficiență cardiacă sau alte simptome care ar putea indica probleme cu inima. Acest test simplu este realizat cu un electrocardiograf electronic care folosește electrozi plasați în diferite zone ale corpului, în câmpul electric al inimii. Densitatea mare de fire de conecsiune între electrozi și electrocardiograf, îmbătrânirea rapidă a performanțelor electrice a materialelor electroizolante, diferite șocuri mecanice, îmbătrânirea componentelor electronice pot duce la o funcționare necorespunzătoare a electrocardiografului. Astfel, dacă forma impulsurilor electrice generate de inimă sunt distorsionate de funcționarea incorectă a electrocardiografului, medicul poate interpreta greșit electrocardiograma și stabili eronat o afecțiune poate chiar inexistentă. Verificarea funcționării corecte se realizează cu ajutorul testerului ECG care generează o serie de semnale electrice de amplitudine și frecvență controlată care permit depistarea unor defecțiuni în mecanismul mecanic de transport al hârtiei de inscripționare sau a cablurilor și amplificatoarelor prezente într-un astfel de aparat. Prețul acestui tester este foarte mare, iar unele ateliere de service de aparatură medicală nu îl dețin din acest motiv, chiar dacă el este indispensabil.
Propun realizarea unui aparat competitiv din punct de vedere al raportului preț-performanță, realizat cu un microcontroler de generație mai nouă de la firma Microchip care permite testarea electrocardiografelor din punct de vedere electric și, indirect, funcționarea normală și fără fluctuații de viteză a mecanismului mecanic de transport al hârtiei. Fundamentele teoretice, modalitatea de realizare practică a testerului ECG si fazele de testare reprezintă conținutul de fond al acestei lucrări.
Capitolul I : Aspecte medicale
I.1. Funcționarea inimii și ciclul cardiac
Pentru desfășurarea procesului vital organismul are nevoie de oxigen. Sângele bogat în oxigen este transportat printr-o rețea de artere și vene către organism, iar sângele sărac în oxigen este adus la plămâni unde se reîmprospătează cu oxigen și ciclul continuă. În centrul acestui proces se găsește inima, un organ cavitar alcătuit în întregime din mușchi. Ea bate de peste 70 de ori pe minut, pompând aproximativ 3 litri de sânge în acest timp, sânge care circulă la ambii plămâni și în întreg organismul. Este poziționată pe tendonul central al diafragmului, fiind flancată de o parte și de alta de cei doi plămâni. Funcțional, inima ar putea fi privită ca un sistem de două grupe înseriate în circuitul sanguin: secțiunea dreaptă, care cuprinde atriul drept și ventriculul drept responsabilă cu colectarea sângelui sărac în oxigen și pomparea lui la plămâni, realizându-se circulația pulmonară sau mică, și secțiunea stângă, mai puternică, compusă din atriul stâng și ventriculul stâng. Aceste camere colectează sângele de la plămâni bogat în oxigen și îl pompează în organism realizând circulația sistemică sau marea circulație (fig. 1.1). [1]
Fig. 1.1. Schemă simplificată a sistemului circulator [1]
Circulația sângelui prin inimă are un singur sens datorită celor 4 valve și a musculaturii inelare din pereții venelor. Două din valvele inimii separă atriul drept și pe cel stâng de ventriculul drept, respectiv stâng. Celelalte două valve separă ventriculul drept de artera pulmonară și ventriculul stâng de aortă. În timpul unei bătăi normale ale inimii, au loc două procese simultane. În primul, sângele intră în atriul drept prin vena cavă, apoi în ventriculul drept, fiind pompată în artera pulmonară spre plămâni, iar în al doilea, sângele bogat în oxigen intră prin venele pulmonare în atriul stâng, respectiv ventriculul stâng și prin aortă e pompat în arterele din întregul corp. Funcția de pompă a inimii este garantată de aparatul valvular și de contracțiile într-o anumită succesiune a atriilor și a ventriculelor. Ansamblul de secvențe de contracții (sau sistole), respectiv relaxări (sau diastole) ale mușchiului cardiac (miocardul) poartă numele de ciclu cardiac sau revoluție cardiacă. [1]
Sistemul de conducere al inimii se găsește în pereții musculari ai acesteia. Mușchiul cardiac este format din fibre musculare striate care se contractă spontan și ritmic. Generatorul primar de ritm este nodul sinoatrial, amplasat în atriul drept și format din celule care depolarizează spontan. Frecvența de oscilație este dictată de sistemul vegetativ în funcție de necesitățile de oxigen ale organismului. Nodul atrioventricular este comandat de cel sinoatrial transmițând impulsurile prin fasciculul atrioventricular la celulele musculare ventriculare care produc contracțiile inimii. Creierul controlează ritmul bătăilor inimii, puterea de contracție prin fibrele nervoase simpatice și parasimpatice. Depolarizarea și repolarizarea celulelor musculare ale inimii pot fi evidențiate prin măsurarea potențialelor de acțiune extracelulare la suprafața corpului. [4]
I.2. Vector cardiac. Electrocardiografie
Potențialele electrice sunt produse în inimă și reprezintă suma potențialelor generate de celulele musculare cardiace în timpul depolarizării și a repolarizării. Din punct de vedere electric, inima este un dipol electric orientat, care generează un câmp electric într-un volum omogen și conductor. Depolarizarea și repolarizarea se propagă sub forma unor unde prin mușchiul cardiac. Corpul uman fiind un bun conducător de electricitate, câmpurile electrice se propagă până la suprafața pielii. Potențialul electric al dipolului asociat inimii poate fi măsurat cu electrozi plasați în diferite zone ale corpului. Suma momentană a acestor curenți electrici determină un vector cardiac cu o anumită direcție, sens și magnitudine. Direcția și magnitudinea se modifică în timpul unui ciclu cardiac.[3] Se pot imagina vectori corespunzători tensiunii electromotoare dezvoltate de fiecare fibră miocardică sau părți ale inimii, numiți vectori parțiali. Pentru descriererea situației electrice momentane putem avea vectori instantanei. Vectorul cardiac este vectorul rezultant obținut prin adunarea tuturor vectorilor instantanei. Originea acestui vector este în centrul electric al inimii, în ventriculul stâng. În această situație, în timpul unui ciclu cardiac, vârfurile vectorilor instantanei se deplasează pe o curbă închisă în formă de evantai, care începe și se termină în centrul electric al inimii și poartă numele de vectorcardiogramă. Proiecția desfășurată a acestei curbe în timp pe o axă reprezintă electrocardiograma.[1] În figura 1.2 se prezintă liniile de câmp ale câmpului electric creat de dipolul cardiac.
Fig. 1.2. Câmp electric creat de dipolul cardiac [1]
Electrocardiografia sau ECG analizează variațiile în timp ale proiecțiilor vectorului cardiac în cele 3 plane ortogonale: frontal, transversal și sagital, conform figurii de mai jos. Măsurarea si înscrierea grafică a activității electrice a inimii pe anumite axe, alese convențional in cele trei plane frontal, transversal și sangital poartă numele de electrocardiografie.[1]
Fig. 1.3. Plane electrocardiografice: xy-plan frontal, xz-plan transversal, yz-plan sagital.[1]
Electrozii pentru culegerea potențialelor generate de activitatea inimii sunt plasați în diferite puncte pe suprafața corpului. Prin electrod înțelegem un conductor utilizat pentru a stabili contactul electric cu partea nemetalică a circuitului.[3] Un anumit raport între punctele de plasare a electrozilor definește o derivație. Fiecărei derivații îi corespunde un ax pe care se face proiecția vectorilor cardiaci. Ele pot fi pozitive dacă proiecțiile sunt orientate în sensul axului sau negative, cele orientate în sens invers. După plasarea electrozilor avem două tipuri de înregistrare ECG:
Bipolară, când ambii electrozi sunt plasați în câmpul electric al inimii.
Unipolară, când un electrod este plasat în câmpul electric al inimii, iar celălalt într-un plan de potențial 0. [3]
Derivațiile membrelor culeg activitatea electrică a inimii in plan frontal, iar derivațiile precordiale culeg activitatea îm plan transversal.[3]
Măsurările monopolare in plan sagital nu se efectuează uzual deoarece implică introducerea electrodului explorator prin cateterism in esofag ,metodă invazivă, neplăcută pentru pacient.[1]
I.3. Măsurarea vectorului cardiac în plan frontal. Derivațiile bipolare și unipolare din planul frontal
Proiecțiile vectorului într-un plan pot fi reconstituite dacă se cunosc proiecțiile pe două axe. În planul frontal se utilizează măsurările pe trei direcții care formează un triunghi echilateral numit Triunghiul lui Einthoven, după numele fiziologului olandez Willem Einhoven, câștigător al premiului Nobel pentru inventarea electrocardiografului.
Pornind de la a doua teoremă a lui Kirchhoff după care suma diferențelor de potențial măsurate în același sens într-un circuit închis este egală cu 0, Einhoven imaginează primul sistem de derivații în plan frontal sub forma unui triunghi echilateral cu centrul triunghiului în centrul cardiac, iar electrozii plasați în vârfurile triunghiului, pe umărul drept, umărul stâng și în zona pubiană, la o distanță egală față de inimă.[1] Dând celor 3 derivații o polaritate conform teoremelor lui Kirchhoff și proiectând un vector care ar indica axa normală a depolarizării, se constată proiecții pozitive pe derivațiile I și III și proiecție negativă pe II. La o orientare normală a axeri de polarizare, se înscriu pe cele 3 derivații atât de flexiuni pozitive, cât și negative. Pentru a corecta acest neajuns, Einhoven a schimbat polaritatea derivației II mutând electrodul pozitiv la piciorul stâng, iar cel negativ la umărul drept. În aceste condiții, proiecția în II devine pozitivă, iar suma deflexiunilor din I + II = II. [1]Această ecuație poartă numele de „legea lui Einhoven”. În planul frontal, se efectuează în mod uzual măsurători bipolare, la care ambele intrări ale amplificatorului de intrare diferențial sunt conectate la electrozi „calzi” și măsurători unipolare, caz în care un electrod este „cald”, iar celălalt într-un plan de potențial 0 sau de masă.[1] În măsurătorile electrofiziologice, este considerat potențial or de potențial măsurate în același sens într-un circuit închis este egală cu 0, Einhoven imaginează primul sistem de derivații în plan frontal sub forma unui triunghi echilateral cu centrul triunghiului în centrul cardiac, iar electrozii plasați în vârfurile triunghiului, pe umărul drept, umărul stâng și în zona pubiană, la o distanță egală față de inimă.[1] Dând celor 3 derivații o polaritate conform teoremelor lui Kirchhoff și proiectând un vector care ar indica axa normală a depolarizării, se constată proiecții pozitive pe derivațiile I și III și proiecție negativă pe II. La o orientare normală a axeri de polarizare, se înscriu pe cele 3 derivații atât de flexiuni pozitive, cât și negative. Pentru a corecta acest neajuns, Einhoven a schimbat polaritatea derivației II mutând electrodul pozitiv la piciorul stâng, iar cel negativ la umărul drept. În aceste condiții, proiecția în II devine pozitivă, iar suma deflexiunilor din I + II = II. [1]Această ecuație poartă numele de „legea lui Einhoven”. În planul frontal, se efectuează în mod uzual măsurători bipolare, la care ambele intrări ale amplificatorului de intrare diferențial sunt conectate la electrozi „calzi” și măsurători unipolare, caz în care un electrod este „cald”, iar celălalt într-un plan de potențial 0 sau de masă.[1] În măsurătorile electrofiziologice, este considerat potențial de masă potențialul piciorului drept RL, prin plasarea unui electrod de suprafață, pe partea interioară a piciorului, deasupra gleznei și conectarea acestuia la borna de masă a amplificatorului. Derivațiile bipolare I, II, III sunt derivații standard în care amplificatorul preia semnale de la electrozi „calzi”. DI sau culegerea I înregistrează semnalul cules între mâna dreaptă RA cu electrodul conectat la borna „-” a amplificatorului și mâna stângă LA, electrod conectat la borna „+” a amplificatorului [1](fig.1.4).
Fig. 1.4. DI
DII sau culegerea II înregistrează semnalul cules între mâna dreaptă RA cu electrodul conectat la borna „-” a amplificatorului, și piciorul stâng LL cu electrodul conectat la borna „+” a amplificatorului (fig. 1.5).
DIII sau culegerea III înregistreză semnalul cules între mâna stângă LA cu electrodul conectat la borna „-” a amplificatorului și piciorul stâng LL cu electrodul conectat la borna „+” a amplificatorului (fig. 1.6).
Derivațiile aVR, aVL și aVF sunt derivații mărite care explorează planul frontal al inimii cu un electrod „cald” (pozitiv), plasat pe R,L sau F, iar ceilalți doi se mediază, reprezentând electrodul de referință negativ (fig. 1.7). Derivația unipolară aVR este perpendiculară pe DIII și culege diferența de potențial între RA (electrodul pozitiv) și LA, LL mediați (electrodul negativ; fig. 1.8). Relația între culegerile bipolare și cele unipolare mărite derivă din triunghiul lui Einhoven.
[1]
Fig. 1.5. DII Fig. 1.6. DIII
Măsurările monopolare in planul frontal , notat cu VR, VL, VF, reprezintă variațiile in timp ale potențialelor mâinii drepte, stangi si piciorul stâng fata de potențialul de referinta realizat prin medierea membrelor cu ajutorul rezistorilor R. Diferențele de potențial sunt foarte mici si cu o semnificație redusa.În electrocardiografie aceste masurători au fost înlocuite cu aVR, aVL si aVF .[1]
Fig. 1.7. Culegere unipolară (VR) în planul frontal [1]
Fig. 1.8. Derivația aVR Fig. 1.9. Derivația aVL
Derivația unipolară aVL este perpendiculară pe DII și culege diferența de potențial între LA (electrodul pozitiv) și RA, LL mediați (electrodul negativ; fig. 1.9). Relația între culegerea unipolară și bipolare este[1]:
Derivația unipolară aVF este perpendiculară pe DI și culege informația de potențial între LL și RA, LA mediați (electrodul negativ; fig. 1.10). Relația între culegerea unipolară și bipolare este[1]:
În toate cazurile in care se face o mediere a potențialelor unor membre rezistoarele de mediere vor fi egale. Cablul de pacient modern cu 10 fire de conectare are inseriat un rezistor de 5kΩ la fiecare banană de conectare.
Fig. 1.10 Derivația aVF
I.4. Măsurarea vectorului cardiac în plan transversal. Derivațiile unipolare precordiale
În planul transversal sunt standardizate derivațiile unipolare V1, V2, V3, V4, V5, V6. Potențialul de referință față de care se efectuează măsurarea potențialelor V1,… V6 este potențialul mediat al mâinii drepte RA, mâinii stângi LA și piciorului stâng LL. Electrodul explorator este plasat după cum urmează (fig. 1.11):
V1 în spațiul 4 intercostal, pe marginea dreaptă a sternului
V2 în spațiul 4 intercostal, pe marginea stângă a sternului
V3 între V2 și V4
V4 în spațiul 5 intercostal, pe linia medioclaviculară
V5 în spațiul 5 intercostal, pe linia axilară anterioară
V6 în spațiul 5 intercostal, pe linia medioaxilară [4]
Pentru V1 se folosește roșu, V2 – galben, V3 – verde, V4 – maro, V5 – negru, V6 – violet.
Fig. 1.11 Amplasarea electrozilor pentru culegerile unipolare precordiale
I.5. Unda electrocardiografică. Caracteristicile parametrilor ECG
Traseul electrocardiografic al fiecărui ciclu cardiac conține unde notate cu P, Q, R, S, T și U care sunt de flexiuni pozitive sau negative, funcție de derivația selectată. Segmentele sunt porțiunile cuprinse între unde, iar intervalele conțin atât segmente, cât și unde. Traseul electrocardiografic este înregistrat în condiții standard, când pentru 1 mV tensiune de intrare avem o deviație de 10 mm în amplitudine, iar viteza de rulare a hârtiei este de 25 mm/s. Forma unui traseu EKG poate fi observată în fig. 1.12.
Fig. 1.12 Traseul ECG standard [7]
Unda P rezultă din suprapunerea celor două componente de depolarizare atrială (AD-AS) și are o formă rotunjită cu o durată cuprinsă între 0,06 – 0,11 s. Este pozitivă în majoritatea derivațiilor, negativă în aVR și pozitivă sau difazică în V1, V2. Cu o amplitudine cuprinsă între 0,1 și 0,25 mV, unda P definește ritmul sinusal. [3]
Complexul QRS este cea mai semnificativă componentă a traseului EKG și corespunde procesului de activare ventriculară, proces care se desfășoară energic și rapid cu potențiale mult mai ample decât cele atriale. Este compusă din trei unde: 2 negative, Q și S, și o undă pozitivă, R. Unda Q este prima undă negativă cu o durată sub 0,04 s și o amplitudine sub ¼ din R în DIII, aVF, V5-V6. Această undă este absentă în V1, V2, V3 și V4. Unda R este pozitivă și este prezentă în majoritatea derivațiilor. Are o amplitudine de până la 1,3 mV. Unda S este cea de a doua undă negativă situată după unda R. [3]
Complexul QRS, per ansamblu, are o durată cuprinsă între 0,08 – 0,10 s, cu o amplitudine minimă în jur de 0,5 mV în derivațiile bipolare ale membrelor I, II, III și o amplitudine în jur de 1-1,5 mV în derivațiile unipolare precordiale.
Unda T reprezintă repolarizarea ventriculară, un proces care se desfășoară lent, fiind lipsit de energia imprimată de stimul, proprie depolarizării. Din punct de vedere al aspectului, are o formă rotunjită, asimetrică, cu panta descendentă mai abruptă. Este pozitivă în majoritatea derivațiilor și negativă în aVR. Are o amplitudine cuprinsă între 0,2 și 0,6 mV, cu o durată de 0,15 – 0,30 s. [3]
Unda U corespunde cu repolarizarea mușchilor papilari sau post-depolarizarea în fibrele Purkinje. Din punct de vedere al aspectului, are o formă mică, rotunjită. Are același sens cu unda T din aceeași derivație și o amplitudine de ¼ T. [3]
Segmentul PQ semnifică timpul de propagare al stimulului în nodulul atrioventricular și în sistemul His-Purkinje. Se situează pe linia izoelectrică cu eventuale supradenivelări în infarctul atrial. Are o durată de 0,04 – 0,1 s. [3]
Segmentul ST reprezintă un amestec final de potențiale finale de depolarizare și inițiale de repolarizare, care prin însumare se anulează reciproc. Din acest motiv, segmentul ST este izoelectric.Punctul de început al acestui segment poate fi situat în partea pozitivă la un nivel de potențial de 0,1-0,2 mV. [3]
Intervalul PR (PQ) reprezintă conducerea atrio-ventriculară cu o durată de 0,12 – 0,20 s. Intervalul ST este stadiul depolarizat ventricular și repolarizarea ventriculară. Intervalul QT corespunde sistolei electrice ventriculare și cuprinde depolarizarea și repolarizarea ventriculară. Are o durată cuprinsă între 0,35 – 0,45 s, în funcție de frecvența cardiacă. Intervalul RR între două complexe QRS succesive reprezintă durata unei revoluții cardiace. Durata unei revoluții cardiace variază invers proporțional cu frecvența cardiacă. Frecvența cardiacă (FC) normală de repaus este de la 60-100 cicluri/minut.
Interpretarea electrocardiogramei este realizată de medicul cardiolog. În multe cazuri clinice, prin analiza vizuală a electrocardiogramei, nu poate fi stabilit cu exactitate diagnosticul datorită numărului mare de parametrii care trebuie analizați și corelați între ei pe toate cele 12 derivații. Din acest motiv și nu numai, ultimele tipuri de electrocardiografe permit o analiză avansată a electrocardiogramei și emit la final un diagnostic. Dintre metodele moderne folosite la prelucrarea EKG ar fi:
Tehnicile de filtrare adaptivă, bazate pe algoritmul LMS (Least Mean Square) sau bazate pe filtre recurente, care duc la îmbunătățirea raportului semnal-zgomot al biosemnalelor [4]
Aplicarea zgomotului cunoscut și necorelat cu semnalul util peste sursa de referință duce, de asemenea, la îmbunătățirea raportului semnal-zgomot [4]
Aplicarea unor metode moderne de filtrare a semnalului EKG, cum ar fi filtrarea multi-bandă și tehnici „wavelet”. [4]
Metodele dinamicii nelineare și teoria haosului permit descrierea și analiza semnalelor biomedicale . [4]
Capitolul II. Electrocardiograful
Aparatul utilizat pentru măsurarea și redarea grafică a vectorului cardiac se numește electrocardiograf. Inventat în anul 1901 de către Willem Einhoven, electrocardiograful a suferit o serie de modificări de-a lungul timpului. Inițial, prelevarea biosemnalelor se făcea în recipiente cu apă în care se introduceau cele două membre superioare și membrul inferior stâng. Ulterior, s-a trecut la utilizarea a trei electrozi de argint, urmat de cablul de pacient cu 5 electrozi și, ca un standard ulterior, cablul de pacient cu 10 electrozi. Numărul canalelora crescut de la un canal la trei, 6 și 12 canale, scurtându-se timpul de examinare și cantitatea de hârtie folosită. În acest moment, un electrocardiograf permite memorarea traseului electrocardiografic și printarea acestuia de câte ori este necesar.
Electrocardiograful poate să înregistreze grafic variațiile diferențelor de potențial dintre două puncte date ale unui câmp electric. Potențialul celor două puncte este reperat prin intermediul a doi electrozi. Dacă la cei doi electrozi există același potențial, pe traseul înregistrat apare o linie orizontală numită linie izoelectrică. [1]
În electrografia clinică, nu se înregistrează niciodată direct potențialul dipolului cardiac, ci doar variațiile de potențial în diferite puncte ale câmpului electric generat de inimă, din care se deduce apoi indirect caracterele proprii ale dipolului cardiac. Mărimea potențialului înregistrat de electrocardiograf depinde de următoarele:
Aproprierea sau depărtarea electrozilor de inimă
Unghiul pe care îl face vectorul cardiac cu axul derivației respective (dreapta ce unește cele două puncte în care sunt plasați electrozii)
Neomogenitatea mediului conductor al corpului omenesc, plasarea excentrică a dipolului cardiac în mediul conductor al corpului [1]
Pentru exemplificare, prezentăm schema bloc a unui electrocardiograf cu un canal sau a unui canal de electrograf (fig. 2.1).
Fig. 2.1.Schema bloc a unui canal EKG: 1- selector de derivație; 2 – amplificator flotant; 3 – amplificator pentru comanda inscriptorului; 4 – înregistrator grafic; 5 – bloc etalonare[1]
Cablul de pacient este conectat pe de o parte la pacient cu electrozii RA, LA, RL, LL, V1-V6, iar pe de altă parte, la selectorul de derivații, etajul de intrare din fig. 2.1. Selectorul de derivații alege combinațiile de culegeri standard DI, DII, DIII, aVR, aVL, aVF, V1-V6, din cele două plane frontal și transversal pentru preamplificatorul flotant 2. Pentru etalonarea amplificării întregului lanț amplificator-înregistrator, prin blocul de selecție pe orice derivație se introduce la intrarea amplificatorului un semnal test de 1 mV, care, conform standardelor, dă o deviație de amplitudine la inscriptor de 10 mm. Amplificarea poate fi reglată continuu sau în trepte. Impedanța de intrare diferențială depășește 2 MΩ, în paralel cu 1-1,5 nF. Impedanța de intrare în mod comun este de mai mare de 100 MΩ. În anumite cazuri de urgență și în supravegherea de lungă durată se folosește afișarea scopică a electrocardiogramei. Acest tip de afișare se folosește și pe ambulanțe sau la patul de spital. Pe lângă funcția de electrocardioscop, un astfel de monitor poate monitoriza și alte funcții vitale. În acest caz, cablul de pacient este cu 3 electrozi de unică folosință, plasați într-un triunghi echilateral pe pielea toracelui pacientului. În mod clasic, selectarea derivațiilor se face prin comutator mecanic. Selector de derivații EKG se află în general dispus între repertorul EKG și amplificatorul izolator, unde semnalul EKG neamplificat are valori maxime de câțiva mV. Pentru a fi selectată derivația necesară printr-un selector mecanic, este necesar ca semnalul să fie adus de pe placa de circuit imprimat din aparat până la locul unde se află comutatorul. Acest tip de abordare duce la creșterea zgomotului suprapus peste semnalul util generat de surse interne și externe, în special brumul de rețea de 50 Hz, distorsionând semnalul util.[1] Fiabilitatea scăzută a comutatoarelor mecanice, cât și apariția unui zgomot suplimentar au dus la înlocuirea acestora cu comutatoare electronice comandate fie de microcontroler, fie logic, de pe un buton aflat pe panoul aparatului. La selectarea manuală prin comutator mecanic a derivațiilor, tipul de comutare este de aproximativ 50 ms, ceea ce face ca amplificatorul diferențial din componenta amplificatorului izolator să se dezechilibreze, creând la ieșirea sa semnale tranzitorii mari care poate bloca amplificatorul de curent alternativ. Comutatoarele electronice CMOS, având timp de comutare de ordinul a zeci de nanosecunde, elimină acest dezavantaj. Electrocardiografele moderne realizează selecția derivațiilor, introducerea de filtre pentru creșterea raportului semnal-zgomot, selecția vitezei de rulare a hârtiei pe baza unui program realizat inițial prin apăsarea unui singur buton de start sau print.[1] Acestea sunt dotate cu ecrane LCD care permit vizualizarea simultană a tuturor derivațiilor standard și permit, de asemenea, identificarea electrozilor generatori de zgomot (electrozii care nu reușesc să facă o rezistență de contact sub 10 KΩ). Pentru scurtarea timpului de investigație, electrozii precordiali sunt realizați cu vacuum, iar electrozii membrelor sunt realizați sub formă de clești, ca în fig. 2.2.
Fig. 2.2. Electrozi moderni ECG
În cazul în care explorarea se face in mișcare de exemplu monitorizarea activitații cardiace in cazul alergării pe banda se folosesc electrozi de unică folosința lipiți direct pe piele la care interfața electrod piele se face prin intermediul unui electrolit:
Capitolul III . Convertorul numeric analog
Convertorul numeric analog transformă un semnal de intrare numeric într-un semnal analog, tensiune sau curent, a cărui valoare va fi dependentă de codul numeric de la intrarea convertorului. Pentru o secvență de variabile binare [bk] = [b1, b2,… bk… bN], cu k=1,2,… N prin care se exprimă semnalul numeric de intrare, ponderea cea mai mare în valoarea tensiunii de ieșire o are b1, numit MSB sau bit cu semnificație maximă, iar ponderea cea mai mică corespunde bitului LSB sau de semnificație minimă bN [ 2 ].
Variația mărimii LSB de la 0 la 1 corespunde celei mai mici variații a semnalului analogic de ieșire ce poate fi obținută. Această mărime este dată de relația:
Un parametru ce caracterizează convertorul numeric analog este capătul de scară sau Full-Scale Range, care reprezintă nivelul maxim de variație a semnalului de ieșire, cu valori tipice de 2.5, 5 și 10 V. [ ]
Rezoluția unui convertor numeric analog depinde de numărul de biți al acestuia. Timpul de conversie este un parametru foarte important care depinde de componentele utilizate la realizarea convertorului și, implicit, dictează prețul acestuia. El se compune din timpul de comutare al circuitelor din structura convertorului numeric analog, timpul de ridicare și de stabilizare cu valori cuprinse între 0,1 µs și 10 µs. [2]
Frecvența maximă aplicată unei intrări a convertorului numeric analog care produce la ieșire trepte cu amplitudinea de 1 LSB poartă numele de rată de conversie. Deci, prin rată de conversie înțelegem numărul de conversii pe secundă care poate fi executat de convertorul numeric analog. Precizia unui convertor numeric analog este indicată prin valoarea erorii compusă din erori de decalaj, câștig și neliniaritate. Eroarea relativă se definește ca raport între eroarea absolută și capătul de scală și se exprimă în procente sau fracțiuni LSB. [2]
Domeniul de variație al semnalului de ieșire reprezintă domeniul maxim al semnalului analogic de la ieșirea convertorului numeric analog. Eroarea de offset este materializată prin deplasarea caracteristicii de transfer față de origine. Eroarea de neliniaritate reprezintă abaterea de la caracteristica ideală liniară a convertorului numeric analog. Pentru o aplicație practică, alegerea unui convertor numeric analog se face ținând cont de caracteristicile acestuia (rezoluția, precizia, dependența de tensiunea de alimentare și de temperatură, intervalul tensiunilor de la ieșirea acestuia, consumul de putere) raportate la necesitățile aplicației și nu în ultimul rând la nivelul tehnologic la care avem acces.
III.1. Convertorul numeric analog cu rețea de rezistențe ponderate binar
Schema unui astfel de convertor cu rețea de rezistențe ponderate binar și cu referință de tensiune Ur este următoarea:
Fig.3.1Schema convertorului numeric analog cu rețea de rezistențe ponderate binar [2]
Comutatoarele electronice CE1 … CEn sunt comandate de biții secvenței de intrare. Curenții Ik (k=1,2,…N) rezultă din relația:
[2]
Curentul de ieșire reprezintă suma acestor curenți.
[2]
Tensiunea de la ieșirea amplificatorului operațional este dată de relația:
[2]
Structura rețelei de rezistențe ponderate binar a convertorului numeric analog este un simplă însă prezintă dezavantajul utilizării unei rezistențe de precizie într-o gamă largă de valori, lucru greu de realizat. Rezistențele de valori mici au valori apropriate de rezistența RON a comutatoarelor electronice, iar cele de la capătul superior, rezistențe comparabile cu rezistențele ROFF a comutatoarelor electronice. [2]
Datorită acestui fapt, convertorul numeric analog cu rețea de rezistențe ponderate binar nu este folosit în practică, el având importanță doar ca studiu teoretic.
III.2. Convertorul numeric analog cu rețea R-2R
Convertorul numeric analog cu rețea R-2R este realizat cu o rețea de rezistențe cu doar două valori, R și 2R, criteriu ușor de satisfăcut în cazul unei realizări practice. Schema electrică de principiu este următoarea:
Fig. 3.2 Convertorul numeric analog cu rețea R-2R [2]
Din schemă se observă că rezistența de ieșire Re a rețelei este egală cu R, fapt care constituie un avantaj deoarece pentru reducerea la minimum a efectului curenților de polarizare la intrarea inversoare se poate conecta o rezistență de valoare Rn = R’|| Re la intrarea neinversoare. [2]
Curentul prin rețeaua R-2R este constant indiferent de poziția comutatoarelor electronice, puterea disipată pe rezistențe și temperatura rețelei vor fi constante ceea ce duce la o precizie mai mare. Curentul de referință este de forma:
[2]
Acesta se divide cu 2 în fiecare nod al rețelei, iar curent de ieșire rezultă prin însumare, valoarea acestuia fiind determinată de biții Bk ai mărimii numerice de intrare:
[2]
Tensiunea la ieșirea convertorului va fi:
[2]
Capitolul IV . Microcontrolerul PIC 16F84A
IV.1 Generalități
Microcontrolerul PIC 16F84A fabricat de firma Microchip face parte dintr-o familie de controlere de 8 biți cu arhitectură RISC, fiind urmașul procesorului PIC 16F84. Are un set redus de 35 instrucțiuni care sunt executate într-un ciclu-mașină, cu excepția instrucțiunilor BRANH și JUMP, executate în 2 cicluri-mașină. Dispune de o arhitectură Haward cu bus de date separat de bus-ul de adrese născută dintr-o nevoie mărită de viteză de lucru.Din punct de vedere al memoriei, controlerul dispune de o memorie FLASH pentru program de 1024 de cuvinte, un RAM de lucru de 68 biți și un eeprom de 64 biți. Memoria FLASH poate fi ștearsă și rescrisă electric, motiv pentru care controlerul se pretează pentru diferite aplicații și dezvoltări. RAM-ul este o memorie folosită în timpul rulării unui program și conține date care nu sunt cruciale și pot fi pierdute la întreruperea energiei de alimentare. Eepromul este o memorie non-volatilă, în el aflându-se date importante, care trebuie salvate la întreruperea alimentării. Conexiunea între microcontroler și exterior este realizată prin intermediul a două porturi, portul A și portul B. Unitatea de procesare centrală, prescurtat CPU, execută programul din FLASH și coordonează toate celelalte blocuri din interiorul controlerului. Funcționează într-o gamă largă de tensiuni, de la 2 la 5,5 V. Fiind realizat în tehnologie CEMOS, consumul electric al controlerului este foarte mic, ceea ce duce la folosirea lui în echipamente portabile, alimentate de la baterii. [5]
Memoria este organizată în două blocuri de memorie, o parte memorie-program, iar cealaltă – memorie de date, care include și conținutul eepromului. Această memorie nu este mapată direct în memoria de date. Cei 64 de biți de memorie eeprom se află în intervalul 0h – 3F. Pentru memoria de program, controlerul dispune de un numărător pe 13 biți, capabil să adreseze 8k x 14 spațiu de memorie. În cazul în care este necesară memorarea permanentă a unor parametri de funcționare, este folosit conținutul de 64 de biți a memoriei eeprom. Vectorul RESET îl găsim la adresa 0000h, iar vectorul întrerupt la adresa 0004h. [5]
Microcontrolerul permite o serie de funcțiuni speciale, care îl deosebesc de alte microcontrolere, cum ar fi:
Setarea tipului de oscilator
Reset, Power-On Reset, Power-Up Timer, oscilator Start-Up Timer
Întreruperi
Watchdog Timer VDT
Funcția SLEEP
Protejarea codului
ID Location
In-Circuit Serial Programming ICSP [ 5 ]
Schema internă a acestui controler conform foii de catalog este următoarea:
Fig.5.1 Schema bloc internă a microcontrolerului PIC 16F84A [5]
IV.2 Pinii microcontrolerului
Microcontrolerul este construit in diferite tipuri de capsule care diferă ca formă si număr de pini.Doua capsule se regăsesc in foaia de catalog a producătorului:
Fig5.2 Poziția pinilor microcontrolerului PIC16F84A [5]
Pinul 1 – RA2 – al doilea pin la portul A.
Pinul 2 – RA3 – al treilea pin la portul A.
Pinul 3 – RA4 – al patrulea pin la portul A/TOCK1: funcțune ca timer.
Pinul 4 – MCRL – resetează intrarea și tensiunea de programare a controlerului.
Pinul 5 – VSS – alimentare, masa controlerului.
Pinul 6 – RBO – pinul 0 al portului B cu funcția adițională de întrerupere.
Pinul 7 – RB1 – pinul 1 al portului B.
Pinul 8 – RB2 – pinul 2 al portului B.
Pinul 9 – RB3 – pinul 3 al portului B.
Pinul 10 – RB4 – pinul 4 al portului B.
Pinul 11 – RB5 – pinul 5 al portului B.
Pinul 12 – RB6 – pinul 6 al portului B/linie de „clock” pentru programare.
Pinul 13 – RB7 – pinul 7 al portului B/linie de „data” pentru programare.
Pinul 14 – Vdd – plusul sursei de alimentare.
Pinul 15 – OSC2 – se realizează conexiunea cu oscilatorul.
Pinul 16 – OSC1 – se realizează conexiunea cu oscilatorul.
Pinul 17 – RA0 – pinul 0 la portul A.
Pinul 18 – RA1 – pinul 1 la portul A.
IV.3 Generatorul de ceas
Generatorul de ceas intern (clock) pentru controler poate folosi 4 tipuri de oscilator. În funcție de configurația biților FOSC1 și FOSC2 se pot selecta cele 4 moduri:
LP – cristal de putere redusă
XT – cristal/rezonator ceramic
HS – cristal de frecvență mare sau rezonator
RC – rețea rezistor capacitor
Cele mai utilizate sunt cu rețea RC pentru aplicații nepretențioase sau cu cristal de cuarț pentru aplicații la care se cere o precizie ridicată în timp a funcționării microcontrolerului. În primul caz, al rețelei RC, precizia este influențată de o serie de factori externi cum ar fi rezistorul R, condensatorul C sau temperatura de lucru. De asemenea, frecvența de lucru depinde și de valoarea tensiunii de alimentare a microcontrolerului. [11]
Fig.5.31 Oscilator R-C
Conform foii de catalog, rezistența R trebuie să fie cuprinsă în intervalul 5 – 100 kΩ, iar condensatorul C trebuie să aibe o valoare mai mare de 20 pF. Conectarea rețelei RC se face la pinul 16, iar la pinul 15 se obține un semnal de clock divizat cu 4. Conectarea unui cristal de cuarț se face la pinii OSC1 – pinul 16 și OSC2 – pinul 15. [11]
Fig.5.32 Oscilator XT sau HS
Cristalul de cuarț poate avea frecvența între 455 kHz și 4 MHz pentru modul XT, iar în cazul în care dorim utilizarea unui cristal în intervalul 8 – 10 MHz, cei doi biți vor fi setați pe modul HS. Cele două condensatoare au valori funcție de frecvența de lucru a cristalului. O capacitate mai mare crește stabilitatea oscilatorului, dar are ca dezavantaj un timp de start-up mai mare. Valorile utilizate sunt cuprinse în intervalul 15 – 33 pF, funcție de caracteristicile din foaia de lucru a rezonatorului folosit. [11]
IV.4 Resetul microcontrolerului
Pentru a putea fi executate anumite operațiuni și a funcționa corect, microcontrolerul trebuie resetat, adică toți registrii vor fi puși într-o stare de start. Microcontrolerul permite următoarele tipuri de reset:
Power-On Reset (POR) – se realizează prin generarea unui impuls de reset în chip, când tensiunea pe Vdd depășește 1,2 – 1,7 V
– în timpul funcționării
– în timpul perioadei Sleep
– reset în timpul funcționării
– Wake-up în timpul perioadei Sleep [11]
Pentru a preveni activarea cu zero logic a pinului MCRL, acesta trebuie conectat printr-un rezistor de „pull-up” la Vdd, cu o valoare cuprinsă între 5 – 10 kΩ conform foii de catalog.
Unitatea de procesare centrală face legătura între toate părțile microcontrolerului și decodează instrucțiunile din program.
Constructiv, microcontrolerul are două porturi: portul A și portul, care fac legătura între microcontroler și lumea exterioară. Portul A are 5 pini, iar portul B – 8 pini. Toți cei 13 pini de I/O pot fi setați individual, fie de intrare, fie de ieșire, funcție de necesitățile aplicației.
IV.5 Circuitul integrat LM358N
LM358N este un amplificator operațional dual, realizat din două amplificatoare independete cu următoarele caracteristici:
Consum foarte mic
Tensiuni admisibile pe intrări, în modul de lucru comun, cu valori cuprinse între GND și VEE
Alimentare de la o singură sursă (3 la 32 V) sau de la o sursă diferențială
Pini de ieșire compatibili cu alte amplificatoare operaționale duble
Compensare internă în frecvență
Bandă largă de frecvență pentru amplificare unitară de 1,1 MHz
Curent și tensiune de offset reduse
Tensiuni de intrare în mod diferențial egale cu tensiunea de alimentare
O gamă largă de tensiuni de ieșire de la 0 la Vcc
Compensare în temperatură [6]
Pinii circuitului integrat sunt poziționați ca în figura următoare:
[6]
Circuitul LM 358N este foarte versatil si poate fi folosit de la amplificarea semnalelor sau la orice alta funcție realizată cu un amplificator operational.
Cap. V Testerul ECG
Testerul ECG este un aparat care poate genera traseul ECG ritm sinusal și alte forme de undă utile la verificarea și testarea performanțelor electrocardiografelor, monitoarelor de funcții vitale, monitoarelor cardiace sau a monitoarelor din defribilatoare. Acest aparat este un aparat care nu trebuie să lipsească din trusa unui inginer care repară sau verifică doar funcționarea acestor aparate cardiace. Electrocardiografele de ultimă generație în cazul sesizării unei rezistențe de contact mărite la interfața electrod-piele refuză să pornească și generează un cod de eroare pentru verificarea cablului de pacient sau a contactelor de electrod. Înlocuirea pacientului cu testerul ECG este prima măsură în diagnosticarea defecțiunii.
Testerul din lucrarea de față nu este un pacient virtual, el generând aceeași formă de undă pe toate derivațiile. Prin folosirea formei de undă dreptunghiulare se pot verifica amplificatoarele din electrocardiograf dacă nu prezintă fenomenul de supra-amplificare, când se amplifică în mod artificial undele mari și se creează mici unde inexistente în realitate sau fenomenul de supra-amortizare, când undele sunt micșorate sau se șterg undele mici.
A.normal B.supra-amplificare C.supra-amortizare [ ]
Orice distorsiune a semnalului înregistrat poate produce o diagnosticare greșită, medicul fiind convins de buna funcționare a aparatului. Forma de undă de tip rampă și cea sinusoidală permite depistarea defecțiunilor de neliniaritate a amplificatoarelor în intervalul de frecvență cardiacă 60-120 ciclii pe minut.
Din acest motiv îmi propun să realizez un tester ECG care să poată genera pe două frecvențe sau seturi de frecvențe următoarele forme de undă:
Semnal ECG ritm sinusal la 60, respectiv 100 cicli pe minut, amplitudine 1 mV
Semnal dreptunghiular cu factor de umplere de 50% la frecvența de 1 Hz și 1,66 Hz, amplitudine 1 mV
Semnal tip rampă pe două seturi de frecvențe primul set 1 , 1,66 ,3 Hz iar al doilea 5 , 10 , 25 Hz amplitudine 1 mV
Semnal sinusoidal pe cele două seturi de frecvențe , amplitudine 1 mV
Alimentarea testerului se face din rețeaua de 220 V curent alternativ. În acest fel se evită generarea unor forme de undă cu amplitudine necorespunzătoare datorată tensinii reduse a bateriilor de alimentare. O variantă mixtă ar fi de preferat din motive diverse cum ar fi lipsa unei prize suplimentare. Considerăm că testarea electrocardiografului se va face într-un laborator deci sursa de 220V este suficientă.
V.1 Schema electrică a testerului ECG
Pentru realizarea testerului de electrocardiograf, propun următoarea schemă electrică formată din :
Alimentator serie
Fig. Schema etajului de alimentare
Circuitul ECG
Fig. Schema circuitului ECG
Schema este centrată pe microcontrolerul PIC16F84A la care portul B este configurat ca și ieșire spre rețeaua R – 2R, iar portul A configurat ca și intrare. Aici se face selecția formelor de undă: ECG, sinusoidă, rampă, dreptunghi.
Prin aducerea pinului 3 (RA4) la potențial 0, microcontrolerul va genera unda de tip ECG. Dacă pinul 2 (RA3) este adus la potențial 0, forma de undă generată va fi dreptunghi. Pentru semnalul de tip rampă, pinul 1 (RA2) se va aduce la potențial 0 moment in care functie de starea pinului 17 se generează trei frecvențe . Pentru generarea sinusoidei, pinul 18 (RA1) va fi, de asemena, adus la potențial 0, generarea fiind făcută deasemenea pe trei frecvențe . Prin aducerea la 0 a pinului 17 (RA0), se va schimba frecvența semnalului generat, iar în cazul ECG, frecvența ciclului cardiac. Circuitul oscilant folosit în acest caz de microcontroler este un circuit extern realizat cu un cristal de cuarț de 4 MHz. În acest caz, nu se pretează utilizarea unei rețele RC datorită perfomanțelor sale reduse. Pe toate aceste intrări ale portului A, sunt poziționate față de +5 V rezistențe de „pull-up” care asigură un nivel logic 1 stabil pe intrările nefolosite. Cu ieșirile portului B, RB0… RB7 și rețeaua R – 2R este construit un convertor numeric analog pe 8 biți. Rezistențele folosite pentru R sunt de 75 kΩ, iar pentru 2R de 150 kΩ. La ieșirea rețelei rezistive, a fost pus un filtru trece-jos format din R17 de 15 kΩ și C8 de 100 pF cu rol de a suprima impulsurile de înaltă frecvență din semnalul util. Frecvența de tăiere a filtrului trece jos se calculează cu formula:
Convertorul folosește la ieșire un amplificator operațional LM358N pe post de buffer de tensiune. Acest buffer de tensiune izolează convertorul R – 2R de sarcina de la ieșire. Tensiunea de pe intrarea neinversoare a amplificatorului operațional se va regăsi la ieșirea acestuia. Impedanța de la intrare tinde la infinit, iar impedanța de ieșire este mică, teoretic tinde la 0. Valoarea maximă a semnalului de ieșire va fi de 2,5 V. Tensiunea standard preluată într-o derivație ECG este în jurul a 1 mV. Din acest motiv, cuplajul cu sarcina se face printr-un divizor rezistiv care asigură un nivel optim la intrarea electrocardiografului sau a a unui monitor cardiac.
V.2. Alimentatorul
Simulatorul ECG se alimentează cu 5 Vcc de la un alimentator-serie realizat cu circuitul integrat specializat L7805 CV. Circuitul L7805CV este un circuit stabilizator de generația a două cu perfomanțe ridicate. Pentru a evita interferențele dintre câmpul electromagnetic al transformatorului s-a optat pentru transformator extern și stabilizator intern serie. Transformatorul are două înfășurări: una primară pentru tensiunea de 220V și una secundară de cca. 9 V pentru alimentarea circuitului stabilizator. Tensiunea alternativă din secundarul transformatorului este redresată cu o punte redresoare de 1,5 A miniatură și filtrată cu un condensator electrolitic de 1000 µF/16V. Schema internă a stabilizatorului arată ca în figura de mai jos.
Pentru un curent maxim de 1,5 A circuitul L7805CV este disponibil în carcasă TO-220. Schema internă de principiu a acestui stabilizator este:
Din această schemă constatăm că stabilizatorul are protecție prin limitarea curentului de ieșire și protecție termică fapt ce face componenta apoape indestructibilă. Pe ieșirea de 5V cc stabilizată sunt montați doi condensatori unul electrolitic pentru rejecția frecvențelor joase și unul ceramic ca rol de rejecția a frecvențelor înalte.
V.3. Programul ECG TESTER
Programul microcontrolerului PIC16F84A se bazează pe digitizarea a două semnale analogice în 128 de pași și introducerea acestor valori în două matrici de 128 de elemente. El poartă numele de ECG TESTER și are următoarea structură:
#include <16F84A.h>
#use delay(clock=4000000,RESTART_WDT)
#fuses WDT,HS, PUT, NOPROTECT
Primele două rânduri de cod conțin directive de compilare și fișierele de inițializare. Al treilea rând indică fuzibilele de programare: watchdog, HS = cristal extern, PUT = Power-Up Timer. Dacă resetul nu este un semnal stabil, acest semnal va fi generat prin ținerea pinului MCRL la nivel de potențial 0. NOPROTECT = conținutul memoriei FLASH nu este protejat la citire.
int Fnct_sel, i, j, k, l, m;
byte SysDelay, Delay_short, Delay_long;
Cele două rânduri de cod de mai sus declară variabilele globale.
byte const Sinetable [128] =
{
64, 67, 70, 73, 76, 79, 82, 85,
88, 91, 93, 96, 99, 101, 104, 106,
108, 111, 113, 115, 116, 118, 120, 121,
122, 123, 124, 125, 126, 126, 127, 127,
127, 127, 127, 126, 126, 125, 124, 123,
122, 121, 120, 118, 116, 115, 113, 111,
108, 106, 104, 101, 99, 96, 93, 91,
88, 85, 82, 79, 76, 73, 70, 67,
63, 60, 57, 54, 51, 48, 45, 42,
39, 36, 34, 31, 28, 26, 23, 21,
19, 16, 14, 12, 11, 9, 7, 6,
5, 4, 3, 2, 1, 1, 0, 0,
0, 0, 0, 1, 1, 2, 3, 4,
5, 6, 7, 9, 11, 12, 14, 16,
19, 21, 23, 26, 28, 31, 34, 36,
39, 42, 45, 48, 51, 54, 57, 60
};
byte const EcgTable [128] =
{
33, 33, 33, 33, 33, 34, 36, 38,
40, 42, 44, 45, 46, 47, 46, 44,
42, 40, 37, 35, 34, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33,
32, 22, 33, 61, 82, 102, 128, 72,
2, 12, 20, 28, 33, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33,
33, 33, 35, 37, 39, 41, 42, 44,
45, 46, 48, 49, 50, 51, 51, 52,
53, 53, 52, 51, 50, 49, 47, 45,
42, 40, 38, 35, 33, 33, 33, 33,
33, 33, 33, 34, 36, 37, 38, 39,
38, 37, 35, 33, 33, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33
};
Au fost definite tabelele de valori sub formă de matrice cu 128 elemente a celor două semnale: semnalul sinusoidal și semnalul ECG. Urmează programul principal:
void main()
{
setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_18MS);
disable_interrupts(global);
OUTPUT_B( 0x7F );
Fnct_sel = INPUT_A();
Delay_short = 4687; // 1.66(6) Hz aka 100 bpm
Delay_long = 7812; // 1.0 HZ aka 60 bpm;
SysDelay = 0;
Setup timer = asocierea tmr.0 cu funcția WDT.
Toate întreruperile sunt invalidate.
Se inițializează portul B ca port de ieșire, iar portul A ca port de intrare.
„Delay_short” și „Delay_long” sunt folosite pentru a stabili frecvența semnalelor generate.
int x=0;
while(1)
{
Programul va intra într-o buclă infinită care va fi executată până la întreruperea alimentării.
++x;
if(input(PIN_A1)&&input(PIN_A2)&&input(PIN_A3)&&input(PIN_A4)) x=0;
if(!input(PIN_A0))
{ SysDelay = 0;}
else
{ SysDelay = 1;};
//––––––––––––
Cu aceste rânduri de cod se definește frecvența de lucru. Cele două frecvențe de lucru simulează două frecvențe cardiace, una în jur de 60-70 cicli pe minut, iar cea de-a doua – 100-120 cicli pe minut.
if(!input(PIN_A1))
{
if( (x<10 && !SysDelay) || (SysDelay && x<6) ) {
for ( i=0; i<128; i++ )
{
OUTPUT_B(Sinetable[i]);
if (!SysDelay) {delay_us(1562);} else {delay_us(2604);};
};}
else if( (x<10+20 && !SysDelay) || (SysDelay && x<6+2) ) {
for ( i=0; i<128; i++ )
{
OUTPUT_B(Sinetable[i]);
if (!SysDelay) {delay_us(781);} else {delay_us(7812);};
};}
else if( (x<10+20+50 && !SysDelay) || (SysDelay && x<6+2+3) ) {
for ( i=0; i<128; i++ )
{
OUTPUT_B(Sinetable[i]);
if (!SysDelay) {delay_us(312);} else {delay_us(4687);};
}; }
else x=0;
};
//––––––––––––
Dacă pinul A1al microcontrolerului definit ca pin de intrare este ținut la un potențial egal cu 0, atunci montajul va genera un semnal sinusoidal pe două seturi de frecvențe funcție de starea intrării A0. Pentru primul set de frecvențe de 1 , 1,66 , 3 Hz se vor genera 2 , 3 , 5 sinusoide întregi care corespund unui timp de 2 sec sau 50 mm de traseu pe hartie . Respectand același timp sau lungime de traseu pentru al doilea set de frecvențe de 5 , 10 , 25 Hz se vor genera 9 , 20 , 50 de sinusoide intregi.
if(!input(PIN_A2))
{
if(!input(PIN_A2))
{
if( (x<10 && !SysDelay) || (SysDelay && x<6) ) {
for ( k=0; k<128; k++ )
{
OUTPUT_B(k);
if (!SysDelay) {delay_us(1562);} else {delay_us(2604);};
};}
else if( (x<10+20 && !SysDelay) || (SysDelay && x<6+2) ) {
for ( k=0; k<128; k++ )
{
OUTPUT_B(k);
if (!SysDelay) {delay_us(781);} else {delay_us(7812);};
};}
else if( (x<10+20+50 && !SysDelay) || (SysDelay && x<6+2+3) ) {
for ( k=0; k<128; k++ )
{
OUTPUT_B(k);
if (!SysDelay) {delay_us(312);} else {delay_us(4687);};
};
}
else x=0;
};
//––––––––––––-
Dacă pinul A2 este ținut la un potențial egal cu 0, atunci se va genera cu ajutorul variabilei locale K un semnal de tip rampă asimetric, având panta descendentă mai abruptă decât panta ascendentă. La fel ca și pentru semnalul sinusoidal vor fi două seturi de frecvențe cu aceleași caracteristici și număr de treceri .
if(!input(PIN_A3))
{
for ( l=0; l<64; l++ )
{
OUTPUT_B(0x7F);
if (!SysDelay) {delay_us(7812);} else {delay_us(4687);};
};
for ( l=64; l<128; l++ )
{
OUTPUT_B(0x00);
if (!SysDelay) {delay_us(7812);} else {delay_us(4687);};
};
};
//––––––––––––
Dacă pinul A3 este ținut la 0, atunci microcontrolerul va genera pe portul B jumătate din timp (64 pași) 0 x 7 F sau 2,5 V, iar cealaltă jumătate de 64 de pași pe 0. În acest fel se generează un semnal dreptunghiular cu factor de umplere de 50%.
if(!input(PIN_A4))
{
for ( m=0; m<128; m++ )
{
OUTPUT_B(EcgTable[m]);
if (!SysDelay) {delay_us(7812);} else {delay_us(4687);};
};
};
};
}
Generarea semnalului ECG, după tabelul de tip matrice, se realizează prin aducerea pinului A4 la un nivel de potențial egal cu 0.
V.4. Digitizarea semnalului sinusoidal
Pentru digitizarea semnalului sinusoidal, in scopul generării matricei de reconstrucție din partea de inceput a programului din microcontroler am folosit programul Sinewave [8]. Acest program este oferit gratuit pe site-ul producatorului [8]. si are următoarea structură:
Program sinewave;
Uses Crt,Dos,SysUtils;
Var c:Char;
bn:Byte;
sn:String;
ub,ul,uh:Extended;
Procedure GetBits;
Begin
Write('Number of bits … ');
Readln(bn);
If bn>8 Then
Begin
Writeln('No value >8 possible!');
Writeln('Setting value to 8!');
End;
sn:='sine'+IntToStr(bn)+'.txt';
End;
Procedure GetFileName;
Begin
Write('Filename … ');
Readln(sn);
End;
Procedure GetOperatingVoltage;
Begin
Write('Operating voltage … ');
Readln(ub);
End;
Procedure GetLowAmplitude;
Begin
Write('Lower amplitude voltage limit … ');
Readln(ul);
End;
Procedure GetHighAmplitude;
Begin
Write('Upper amplitude voltage limit … ');
Readln(uh);
End;
Procedure GoCalc;
Var f:Text;
fok,fnl:Boolean;
n,ns:LongInt;
sl:String;
r,u,um:Extended;
be:Byte;
Begin
fOk:=True;
If FileExists(sn) Then
Begin
Write('File ',sn,' exists, overwrite (Y/N) … ');
c:=UpCase(Readkey);
fok:=C='Y';
End;
If fok Then
Begin
Writeln('Writing result file ',sn,' … ');
Assign(f,sn);
ReWrite(f);
Writeln(f,';');
Writeln(f,'; Sinewave table for ',bn,' bit D/A');
Writeln(f,'; VCC=',ub:5:3,'V, uLow=',ul:5:3,'V, uHigh=',uh:5:3,'V');
Writeln(f,'; (generated by sinewave.pas)');
Writeln(f,';');
Writeln(f,'Sinetable:');
ns:=2<<(bn-1)-1;
sl:='';
um:=(uh-ul)/2.0+ul;
Writeln('um=',um:5:3);
For n:=0 To ns Do
Begin
If (n Mod 8)=0 Then
Begin
If sl<>'' Then Writeln(f,sl);
sl:='.DB ';
fnl:=True;
End;
If Not fnl Then sl:=sl+',';
u:=um+(uh-um)*SIN(2.0*PI*n/(ns+1));
be:=Round(u/ub*ns);
Writeln(u:5:3);
sl:=sl+IntToStr(be);
fnl:=False;
End;
Writeln(f,sl);
Close(f);
Writeln('Result file done.');
End;
End;
Procedure test;
Var k,ns:LongInt;
Begin
ns:=2<<(bn-1)-1;
Writeln(bn,': ns=',ns);
For k:=0 To ns Do Write(SIN(2.0*PI*k/(ns+1)):6:3,', ');
End;
Begin
bn:=6;
sn:='sine6.txt';
ub:=5.0;
ul:=0.0;
uh:=5.0;
Repeat
Writeln;
Writeln('Sinewave calculation for R/2R-networks');
Writeln('–––––––––––––');
Writeln('<B>its (',bn,'), <S>ave (',sn,'),');
Writeln('<O>perating voltage (',ub:5:3,'),');
Writeln('<L>ow/<H>igh amplitude (',ul:5:3,'/',uh:5:3,'),');
Write('<G>o, <ESC> … ');
c:=Upcase(ReadKey);
If c<>Char(27) Then Writeln(c) Else Writeln('ESC');
Case c Of
'B':GetBits;
'S':GetFilename;
'L':GetLowAmplitude;
'H':GetHighAmplitude;
'G':GoCalc;
'T':test;
End;
Until c=Char(27);
End.
V.5. Digitizarea semnalului ECG
În cazul semnalului ECG s-a pornit de la forma de undă standard din imaginea de mai jos:
Fig. 5.5 Semnal standard ECG [7]
Imaginea a fost prelucrată în CorelDraw și digitizată manual. O perioadă a semnalului ECG a fost împărțită în 128 intervale, iar eșantioanele au avut valorile din următorul tabel:
Valorile din acest tabel au fost introduse în programul ECG TESTER sub forma unei matrici cu 128 de caractere pentru a genera semnalul ECG.
V.6. Programul microcontrolerului
Programul scris în C a fost compilat cu ajutorul CCS PCM C compiler, rezultând următorul program în asamblor :
CCS PCM C Compiler, Version 5.025d, 1 11-mai.-14 18:50
.
ROM used: 830 words (81%)
Largest free fragment is 194
RAM used: 16 (24%) at main() level
18 (26%) worst case
Stack used: 1 locations
Stack size: 8
*
0000: MOVLW 01
0001: MOVWF 0A
0002: GOTO 139
0003: NOP
……………….. #include <16F84A.h>
……………….. #device PIC16F84A
0004: BCF 0A.0
0005: BCF 0A.1
0006: BCF 0A.2
0007: ADDWF 02,F
0008: RETLW 40
0009: RETLW 43
000A: RETLW 46
000B: RETLW 49
000C: RETLW 4C
000D: RETLW 4F
000E: RETLW 52
000F: RETLW 55
0010: RETLW 58
0011: RETLW 5B
0012: RETLW 5D
0013: RETLW 60
0014: RETLW 63
0015: RETLW 65
0016: RETLW 68
0017: RETLW 6A
0018: RETLW 6C
0019: RETLW 6F
001A: RETLW 71
001B: RETLW 73
001C: RETLW 74
001D: RETLW 76
001E: RETLW 78
001F: RETLW 79
0020: RETLW 7A
0021: RETLW 7B
0022: RETLW 7C
0023: RETLW 7D
0024: RETLW 7E
0025: RETLW 7E
0026: RETLW 7F
0027: RETLW 7F
0028: RETLW 7F
0029: RETLW 7F
002A: RETLW 7F
002B: RETLW 7E
002C: RETLW 7E
002D: RETLW 7D
002E: RETLW 7C
002F: RETLW 7B
0030: RETLW 7A
0031: RETLW 79
0032: RETLW 78
0033: RETLW 76
0034: RETLW 74
0035: RETLW 73
0036: RETLW 71
0037: RETLW 6F
0038: RETLW 6C
0039: RETLW 6A
003A: RETLW 68
003B: RETLW 65
003C: RETLW 63
003D: RETLW 60
003E: RETLW 5D
003F: RETLW 5B
0040: RETLW 58
0041: RETLW 55
0042: RETLW 52
0043: RETLW 4F
0044: RETLW 4C
0045: RETLW 49
0046: RETLW 46
0047: RETLW 43
0048: RETLW 3F
0049: RETLW 3C
004A: RETLW 39
004B: RETLW 36
004C: RETLW 33
004D: RETLW 30
004E: RETLW 2D
004F: RETLW 2A
0050: RETLW 27
0051: RETLW 24
0052: RETLW 22
0053: RETLW 1F
0054: RETLW 1C
0055: RETLW 1A
0056: RETLW 17
0057: RETLW 15
0058: RETLW 13
0059: RETLW 10
005A: RETLW 0E
005B: RETLW 0C
005C: RETLW 0B
005D: RETLW 09
005E: RETLW 07
005F: RETLW 06
0060: RETLW 05
0061: RETLW 04
0062: RETLW 03
0063: RETLW 02
0064: RETLW 01
0065: RETLW 01
0066: RETLW 00
0067: RETLW 00
0068: RETLW 00
0069: RETLW 00
006A: RETLW 00
006B: RETLW 01
006C: RETLW 01
006D: RETLW 02
006E: RETLW 03
006F: RETLW 04
0070: RETLW 05
0071: RETLW 06
0072: RETLW 07
0073: RETLW 09
0074: RETLW 0B
0075: RETLW 0C
0076: RETLW 0E
0077: RETLW 10
0078: RETLW 13
0079: RETLW 15
007A: RETLW 17
007B: RETLW 1A
007C: RETLW 1C
007D: RETLW 1F
007E: RETLW 22
007F: RETLW 24
0080: RETLW 27
0081: RETLW 2A
0082: RETLW 2D
0083: RETLW 30
0084: RETLW 33
0085: RETLW 36
0086: RETLW 39
0087: RETLW 3C
0088: BCF 0A.0
0089: BCF 0A.1
008A: BCF 0A.2
008B: ADDLW 8F
008C: BTFSC 03.0
008D: INCF 0A,F
008E: MOVWF 02
008F: RETLW 21
0090: RETLW 21
0091: RETLW 21
0092: RETLW 21
0093: RETLW 21
0094: RETLW 22
0095: RETLW 24
0096: RETLW 26
0097: RETLW 28
0098: RETLW 2A
0099: RETLW 2C
009A: RETLW 2D
009B: RETLW 2E
009C: RETLW 2F
009D: RETLW 2E
009E: RETLW 2C
009F: RETLW 2A
00A0: RETLW 28
00A1: RETLW 25
00A2: RETLW 23
00A3: RETLW 22
00A4: RETLW 21
00A5: RETLW 21
00A6: RETLW 21
00A7: RETLW 21
00A8: RETLW 21
00A9: RETLW 21
00AA: RETLW 21
00AB: RETLW 21
00AC: RETLW 21
00AD: RETLW 21
00AE: RETLW 21
00AF: RETLW 20
00B0: RETLW 16
00B1: RETLW 21
00B2: RETLW 3D
00B3: RETLW 52
00B4: RETLW 66
00B5: RETLW 80
00B6: RETLW 48
00B7: RETLW 00
00B8: RETLW 0C
00B9: RETLW 14
00BA: RETLW 1C
00BB: RETLW 21
00BC: RETLW 21
00BD: RETLW 21
00BE: RETLW 21
00BF: RETLW 21
00C0: RETLW 21
00C1: RETLW 21
00C2: RETLW 21
00C3: RETLW 21
00C4: RETLW 21
00C5: RETLW 21
00C6: RETLW 21
00C7: RETLW 21
00C8: RETLW 21
00C9: RETLW 21
00CA: RETLW 21
00CB: RETLW 21
00CC: RETLW 21
00CD: RETLW 21
00CE: RETLW 21
00CF: RETLW 21
00D0: RETLW 21
00D1: RETLW 23
00D2: RETLW 25
00D3: RETLW 27
00D4: RETLW 29
00D5: RETLW 2A
00D6: RETLW 2C
00D7: RETLW 2D
00D8: RETLW 2E
00D9: RETLW 30
00DA: RETLW 31
00DB: RETLW 32
00DC: RETLW 33
00DD: RETLW 33
00DE: RETLW 34
00DF: RETLW 35
00E0: RETLW 35
00E1: RETLW 34
00E2: RETLW 33
00E3: RETLW 32
00E4: RETLW 31
00E5: RETLW 2F
00E6: RETLW 2D
00E7: RETLW 2A
00E8: RETLW 28
00E9: RETLW 26
00EA: RETLW 23
00EB: RETLW 21
00EC: RETLW 21
00ED: RETLW 21
00EE: RETLW 21
00EF: RETLW 21
00F0: RETLW 21
00F1: RETLW 21
00F2: RETLW 22
00F3: RETLW 24
00F4: RETLW 25
00F5: RETLW 26
00F6: RETLW 27
00F7: RETLW 26
00F8: RETLW 25
00F9: RETLW 23
00FA: RETLW 21
00FB: RETLW 21
00FC: RETLW 21
00FD: RETLW 21
00FE: RETLW 21
00FF: RETLW 21
0100: RETLW 21
0101: RETLW 21
0102: RETLW 21
0103: RETLW 21
0104: RETLW 21
0105: RETLW 21
0106: RETLW 21
0107: RETLW 21
0108: RETLW 21
0109: RETLW 21
010A: RETLW 21
010B: RETLW 21
010C: RETLW 21
010D: RETLW 21
010E: RETLW 21
………………..
……………….. #list
………………..
……………….. #use delay(clock=4000000,RESTART_WDT)
010F: MOVLW 1C
0110: MOVWF 04
0111: MOVF 00,W
0112: BTFSC 03.2
0113: GOTO 125
0114: MOVLW 01
0115: MOVWF 0D
0116: MOVLW BF
0117: MOVWF 0C
0118: CLRWDT
0119: DECFSZ 0C,F
011A: GOTO 118
011B: DECFSZ 0D,F
011C: GOTO 116
011D: MOVLW 4A
011E: MOVWF 0C
011F: DECFSZ 0C,F
0120: GOTO 11F
0121: NOP
0122: CLRWDT
0123: DECFSZ 00,F
0124: GOTO 114
0125: RETURN
0126: MOVLW 12
0127: SUBWF 1D,F
0128: BTFSS 03.0
0129: GOTO 138
012A: MOVLW 1D
012B: MOVWF 04
012C: MOVLW FC
012D: ANDWF 00,F
012E: BCF 03.0
012F: RRF 00,F
0130: RRF 00,F
0131: MOVF 00,W
0132: BTFSC 03.2
0133: GOTO 138
0134: GOTO 136
0135: CLRWDT
0136: DECFSZ 00,F
0137: GOTO 135
0138: RETURN
……………….. #fuses WDT,HS, PUT, NOPROTECT
………………..
……………….. int Fnct_sel, i, j, k, l, m;
……………….. byte SysDelay;
……………….. long Delay_short, Delay_long;
………………..
………………..
………………..
……………….. byte const Sinetable [128] =
……………….. {
………………..
……………….. 64, 67, 70, 73, 76, 79, 82, 85,
……………….. 88, 91, 93, 96, 99, 101, 104, 106,
……………….. 108, 111, 113, 115, 116, 118, 120, 121,
……………….. 122, 123, 124, 125, 126, 126, 127, 127,
……………….. 127, 127, 127, 126, 126, 125, 124, 123,
……………….. 122, 121, 120, 118, 116, 115, 113, 111,
……………….. 108, 106, 104, 101, 99, 96, 93, 91,
……………….. 88, 85, 82, 79, 76, 73, 70, 67,
……………….. 63, 60, 57, 54, 51, 48, 45, 42,
……………….. 39, 36, 34, 31, 28, 26, 23, 21,
……………….. 19, 16, 14, 12, 11, 9, 7, 6,
……………….. 5, 4, 3, 2, 1, 1, 0, 0,
……………….. 0, 0, 0, 1, 1, 2, 3, 4,
……………….. 5, 6, 7, 9, 11, 12, 14, 16,
……………….. 19, 21, 23, 26, 28, 31, 34, 36,
……………….. 39, 42, 45, 48, 51, 54, 57, 60
………………..
……………….. };
………………..
………………..
……………….. byte const EcgTable [128] =
……………….. {
………………..
……………….. 33, 33, 33, 33, 33, 34, 36, 38,
……………….. 40, 42, 44, 45, 46, 47, 46, 44,
……………….. 42, 40, 37, 35, 34, 33, 33, 33,
……………….. 33, 33, 33, 33, 33, 33, 33, 33,
……………….. 32, 22, 33, 61, 82, 102, 128, 72,
……………….. 0, 12, 20, 28, 33, 33, 33, 33,
……………….. 33, 33, 33, 33, 33, 33, 33, 33,
……………….. 33, 33, 33, 33, 33, 33, 33, 33,
……………….. 33, 33, 35, 37, 39, 41, 42, 44,
……………….. 45, 46, 48, 49, 50, 51, 51, 52,
……………….. 53, 53, 52, 51, 50, 49, 47, 45,
……………….. 42, 40, 38, 35, 33, 33, 33, 33,
……………….. 33, 33, 33, 34, 36, 37, 38, 39,
……………….. 38, 37, 35, 33, 33, 33, 33, 33,
……………….. 33, 33, 33, 33, 33, 33, 33, 33,
……………….. 33, 33, 33, 33, 33, 33, 33, 33
……………….. };
………………..
………………..
………………..
……………….. void main()
0139: MOVF 03,W
013A: ANDLW 1F
013B: MOVWF 03
……………….. {
………………..
……………….. setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_18MS);
013C: BSF 03.5
013D: MOVF 01,W
013E: ANDLW C0
013F: MOVWF 01
0140: ANDLW F0
0141: MOVWF 01
0142: CLRWDT
……………….. disable_interrupts(global);
0143: BCF 03.5
0144: BCF 0B.7
0145: BTFSC 0B.7
0146: GOTO 144
……………….. OUTPUT_B( 0x7F );
0147: BSF 03.5
0148: CLRF 06
0149: MOVLW 7F
014A: BCF 03.5
014B: MOVWF 06
……………….. Fnct_sel = INPUT_A();
014C: MOVLW FF
014D: BSF 03.5
014E: MOVWF 05
014F: BCF 03.5
0150: MOVF 05,W
0151: MOVWF 10
……………….. Delay_short = 4687; // 1.66(6) Hz aka 100 bpm
0152: MOVLW 12
0153: MOVWF 18
0154: MOVLW 4F
0155: MOVWF 17
……………….. Delay_long = 7812; // 1.0 HZ aka 60 bpm;
0156: MOVLW 1E
0157: MOVWF 1A
0158: MOVLW 84
0159: MOVWF 19
……………….. SysDelay = 0;
015A: CLRF 16
………………..
……………….. int x=0;
015B: CLRF 1B
……………….. while(1)
……………….. {
……………….. ++x;
015C: INCF 1B,F
……………….. if(input(PIN_A1)&&input(PIN_A2)&&input(PIN_A3)&&input(PIN_A4)) x=0;
015D: BSF 03.5
015E: BSF 05.1
015F: BCF 03.5
0160: BTFSS 05.1
0161: GOTO 171
0162: BSF 03.5
0163: BSF 05.2
0164: BCF 03.5
0165: BTFSS 05.2
0166: GOTO 171
0167: BSF 03.5
0168: BSF 05.3
0169: BCF 03.5
016A: BTFSS 05.3
016B: GOTO 171
016C: BSF 03.5
016D: BSF 05.4
016E: BCF 03.5
016F: BTFSC 05.4
0170: CLRF 1B
……………….. if(!input(PIN_A0))
0171: BSF 03.5
0172: BSF 05.0
0173: BCF 03.5
0174: BTFSC 05.0
0175: GOTO 178
……………….. { SysDelay = 0;}
0176: CLRF 16
0177: GOTO 17A
……………….. else
……………….. { SysDelay = 1;};
0178: MOVLW 01
0179: MOVWF 16
………………..
……………….. //––––––––––––
……………….. if(!input(PIN_A1))
017A: BSF 03.5
017B: BSF 05.1
017C: BCF 03.5
017D: BTFSC 05.1
017E: GOTO 220
……………….. {
……………….. if( (x<10 && !SysDelay) || (SysDelay && x<6) ) {
017F: MOVF 1B,W
0180: SUBLW 09
0181: BTFSS 03.0
0182: GOTO 186
0183: MOVF 16,F
0184: BTFSC 03.2
0185: GOTO 18D
0186: MOVF 16,F
0187: BTFSC 03.2
0188: GOTO 1B7
0189: MOVF 1B,W
018A: SUBLW 05
018B: BTFSS 03.0
018C: GOTO 1B7
……………….. for ( i=0; i<128; i++ )
018D: CLRF 11
018E: MOVF 11,W
018F: SUBLW 7F
0190: BTFSS 03.0
0191: GOTO 1B6
……………….. {
……………….. OUTPUT_B(Sinetable[i]);
0192: MOVF 11,W
0193: CALL 004
0194: MOVWF 1C
0195: BSF 03.5
0196: CLRF 06
0197: BCF 03.5
0198: MOVF 1C,W
0199: MOVWF 06
……………….. if (!SysDelay) {delay_us(1562);} else {delay_us(2604);};
019A: MOVF 16,F
019B: BTFSS 03.2
019C: GOTO 1A9
019D: CLRWDT
019E: MOVLW 01
019F: MOVWF 1C
01A0: CALL 10F
01A1: MOVLW 03
01A2: MOVWF 1C
01A3: MOVLW B8
01A4: MOVWF 1D
01A5: CALL 126
01A6: DECFSZ 1C,F
01A7: GOTO 1A3
01A8: GOTO 1B4
01A9: CLRWDT
01AA: MOVLW 02
01AB: MOVWF 1C
01AC: CALL 10F
01AD: MOVLW 03
01AE: MOVWF 1C
01AF: MOVLW C6
01B0: MOVWF 1D
01B1: CALL 126
01B2: DECFSZ 1C,F
01B3: GOTO 1AF
01B4: INCF 11,F
01B5: GOTO 18E
……………….. };}
01B6: GOTO 220
……………….. else if( (x<10+20 && !SysDelay) || (SysDelay && x<6+2) ) {
01B7: MOVF 1B,W
01B8: SUBLW 1D
01B9: BTFSS 03.0
01BA: GOTO 1BE
01BB: MOVF 16,F
01BC: BTFSC 03.2
01BD: GOTO 1C5
01BE: MOVF 16,F
01BF: BTFSC 03.2
01C0: GOTO 1EC
01C1: MOVF 1B,W
01C2: SUBLW 07
01C3: BTFSS 03.0
01C4: GOTO 1EC
……………….. for ( i=0; i<128; i++ )
01C5: CLRF 11
01C6: MOVF 11,W
01C7: SUBLW 7F
01C8: BTFSS 03.0
01C9: GOTO 1EB
……………….. {
……………….. OUTPUT_B(Sinetable[i]);
01CA: MOVF 11,W
01CB: CALL 004
01CC: MOVWF 1C
01CD: BSF 03.5
01CE: CLRF 06
01CF: BCF 03.5
01D0: MOVF 1C,W
01D1: MOVWF 06
……………….. if (!SysDelay) {delay_us(781);} else {delay_us(7812);};
01D2: MOVF 16,F
01D3: BTFSS 03.2
01D4: GOTO 1DE
01D5: CLRWDT
01D6: MOVLW 04
01D7: MOVWF 1C
01D8: MOVLW C0
01D9: MOVWF 1D
01DA: CALL 126
01DB: DECFSZ 1C,F
01DC: GOTO 1D8
01DD: GOTO 1E9
01DE: CLRWDT
01DF: MOVLW 07
01E0: MOVWF 1C
01E1: CALL 10F
01E2: MOVLW 05
01E3: MOVWF 1C
01E4: MOVLW 9F
01E5: MOVWF 1D
01E6: CALL 126
01E7: DECFSZ 1C,F
01E8: GOTO 1E4
01E9: INCF 11,F
01EA: GOTO 1C6
……………….. };}
01EB: GOTO 220
……………….. else if( (x<10+20+50 && !SysDelay) || (SysDelay && x<6+2+3) ) {
01EC: MOVF 1B,W
01ED: SUBLW 4F
01EE: BTFSS 03.0
01EF: GOTO 1F3
01F0: MOVF 16,F
01F1: BTFSC 03.2
01F2: GOTO 1FA
01F3: MOVF 16,F
01F4: BTFSC 03.2
01F5: GOTO 21F
01F6: MOVF 1B,W
01F7: SUBLW 0A
01F8: BTFSS 03.0
01F9: GOTO 21F
……………….. for ( i=0; i<128; i++ )
01FA: CLRF 11
01FB: MOVF 11,W
01FC: SUBLW 7F
01FD: BTFSS 03.0
01FE: GOTO 21E
……………….. {
……………….. OUTPUT_B(Sinetable[i]);
01FF: MOVF 11,W
0200: CALL 004
0201: MOVWF 1C
0202: BSF 03.5
0203: CLRF 06
0204: BCF 03.5
0205: MOVF 1C,W
0206: MOVWF 06
……………….. if (!SysDelay) {delay_us(312);} else {delay_us(4687);};
0207: MOVF 16,F
0208: BTFSS 03.2
0209: GOTO 211
020A: CLRWDT
020B: MOVLW 67
020C: MOVWF 0C
020D: DECFSZ 0C,F
020E: GOTO 20D
020F: NOP
0210: GOTO 21C
0211: CLRWDT
0212: MOVLW 04
0213: MOVWF 1C
0214: CALL 10F
0215: MOVLW 07
0216: MOVWF 1C
0217: MOVLW 5F
0218: MOVWF 1D
0219: CALL 126
021A: DECFSZ 1C,F
021B: GOTO 217
021C: INCF 11,F
021D: GOTO 1FB
……………….. }; }
021E: GOTO 220
……………….. else x=0;
021F: CLRF 1B
……………….. };
……………….. //––––––––––––
……………….. if(!input(PIN_A2))
0220: BSF 03.5
0221: BSF 05.2
0222: BCF 03.5
0223: BTFSC 05.2
0224: GOTO 2BD
……………….. {
……………….. if( (x<10 && !SysDelay) || (SysDelay && x<6) ) {
0225: MOVF 1B,W
0226: SUBLW 09
0227: BTFSS 03.0
0228: GOTO 22C
0229: MOVF 16,F
022A: BTFSC 03.2
022B: GOTO 233
022C: MOVF 16,F
022D: BTFSC 03.2
022E: GOTO 25A
022F: MOVF 1B,W
0230: SUBLW 05
0231: BTFSS 03.0
0232: GOTO 25A
……………….. for ( k=0; k<128; k++ )
0233: CLRF 13
0234: MOVF 13,W
0235: SUBLW 7F
0236: BTFSS 03.0
0237: GOTO 259
……………….. {
……………….. OUTPUT_B(k);
0238: BSF 03.5
0239: CLRF 06
023A: BCF 03.5
023B: MOVF 13,W
023C: MOVWF 06
……………….. if (!SysDelay) {delay_us(1562);} else {delay_us(2604);};
023D: MOVF 16,F
023E: BTFSS 03.2
023F: GOTO 24C
0240: CLRWDT
0241: MOVLW 01
0242: MOVWF 1C
0243: CALL 10F
0244: MOVLW 03
0245: MOVWF 1C
0246: MOVLW B8
0247: MOVWF 1D
0248: CALL 126
0249: DECFSZ 1C,F
024A: GOTO 246
024B: GOTO 257
024C: CLRWDT
024D: MOVLW 02
024E: MOVWF 1C
024F: CALL 10F
0250: MOVLW 03
0251: MOVWF 1C
0252: MOVLW C6
0253: MOVWF 1D
0254: CALL 126
0255: DECFSZ 1C,F
0256: GOTO 252
0257: INCF 13,F
0258: GOTO 234
……………….. };}
0259: GOTO 2BD
……………….. else if( (x<10+20 && !SysDelay) || (SysDelay && x<6+2) ) {
025A: MOVF 1B,W
025B: SUBLW 1D
025C: BTFSS 03.0
025D: GOTO 261
025E: MOVF 16,F
025F: BTFSC 03.2
0260: GOTO 268
0261: MOVF 16,F
0262: BTFSC 03.2
0263: GOTO 28C
0264: MOVF 1B,W
0265: SUBLW 07
0266: BTFSS 03.0
0267: GOTO 28C
……………….. for ( k=0; k<128; k++ )
0268: CLRF 13
0269: MOVF 13,W
026A: SUBLW 7F
026B: BTFSS 03.0
026C: GOTO 28B
……………….. {
……………….. OUTPUT_B(k);
026D: BSF 03.5
026E: CLRF 06
026F: BCF 03.5
0270: MOVF 13,W
0271: MOVWF 06
……………….. if (!SysDelay) {delay_us(781);} else {delay_us(7812);};
0272: MOVF 16,F
0273: BTFSS 03.2
0274: GOTO 27E
0275: CLRWDT
0276: MOVLW 04
0277: MOVWF 1C
0278: MOVLW C0
0279: MOVWF 1D
027A: CALL 126
027B: DECFSZ 1C,F
027C: GOTO 278
027D: GOTO 289
027E: CLRWDT
027F: MOVLW 07
0280: MOVWF 1C
0281: CALL 10F
0282: MOVLW 05
0283: MOVWF 1C
0284: MOVLW 9F
0285: MOVWF 1D
0286: CALL 126
0287: DECFSZ 1C,F
0288: GOTO 284
0289: INCF 13,F
028A: GOTO 269
……………….. };}
028B: GOTO 2BD
……………….. else if( (x<10+20+50 && !SysDelay) || (SysDelay && x<6+2+3) ) {
028C: MOVF 1B,W
028D: SUBLW 4F
028E: BTFSS 03.0
028F: GOTO 293
0290: MOVF 16,F
0291: BTFSC 03.2
0292: GOTO 29A
0293: MOVF 16,F
0294: BTFSC 03.2
0295: GOTO 2BC
0296: MOVF 1B,W
0297: SUBLW 0A
0298: BTFSS 03.0
0299: GOTO 2BC
……………….. for ( k=0; k<128; k++ )
029A: CLRF 13
029B: MOVF 13,W
029C: SUBLW 7F
029D: BTFSS 03.0
029E: GOTO 2BB
……………….. {
……………….. OUTPUT_B(k);
029F: BSF 03.5
02A0: CLRF 06
02A1: BCF 03.5
02A2: MOVF 13,W
02A3: MOVWF 06
……………….. if (!SysDelay) {delay_us(312);} else {delay_us(4687);};
02A4: MOVF 16,F
02A5: BTFSS 03.2
02A6: GOTO 2AE
02A7: CLRWDT
02A8: MOVLW 67
02A9: MOVWF 0C
02AA: DECFSZ 0C,F
02AB: GOTO 2AA
02AC: NOP
02AD: GOTO 2B9
02AE: CLRWDT
02AF: MOVLW 04
02B0: MOVWF 1C
02B1: CALL 10F
02B2: MOVLW 07
02B3: MOVWF 1C
02B4: MOVLW 5F
02B5: MOVWF 1D
02B6: CALL 126
02B7: DECFSZ 1C,F
02B8: GOTO 2B4
02B9: INCF 13,F
02BA: GOTO 29B
……………….. };
……………….. }
02BB: GOTO 2BD
……………….. else x=0;
02BC: CLRF 1B
……………….. };
……………….. //––––––––––––-
……………….. if(!input(PIN_A3))
02BD: BSF 03.5
02BE: BSF 05.3
02BF: BCF 03.5
02C0: BTFSC 05.3
02C1: GOTO 30E
……………….. {
………………..
……………….. for ( l=0; l<64; l++ )
02C2: CLRF 14
02C3: MOVF 14,W
02C4: SUBLW 3F
02C5: BTFSS 03.0
02C6: GOTO 2E8
……………….. {
……………….. OUTPUT_B(0x7F);
02C7: BSF 03.5
02C8: CLRF 06
02C9: MOVLW 7F
02CA: BCF 03.5
02CB: MOVWF 06
……………….. if (!SysDelay) {delay_us(7812);} else {delay_us(4687);};
02CC: MOVF 16,F
02CD: BTFSS 03.2
02CE: GOTO 2DB
02CF: CLRWDT
02D0: MOVLW 07
02D1: MOVWF 1C
02D2: CALL 10F
02D3: MOVLW 05
02D4: MOVWF 1C
02D5: MOVLW 9F
02D6: MOVWF 1D
02D7: CALL 126
02D8: DECFSZ 1C,F
02D9: GOTO 2D5
02DA: GOTO 2E6
02DB: CLRWDT
02DC: MOVLW 04
02DD: MOVWF 1C
02DE: CALL 10F
02DF: MOVLW 07
02E0: MOVWF 1C
02E1: MOVLW 5F
02E2: MOVWF 1D
02E3: CALL 126
02E4: DECFSZ 1C,F
02E5: GOTO 2E1
02E6: INCF 14,F
02E7: GOTO 2C3
……………….. };
……………….. for ( l=64; l<128; l++ )
02E8: MOVLW 40
02E9: MOVWF 14
02EA: MOVF 14,W
02EB: SUBLW 7F
02EC: BTFSS 03.0
02ED: GOTO 30E
……………….. {
……………….. OUTPUT_B(0x00);
02EE: BSF 03.5
02EF: CLRF 06
02F0: BCF 03.5
02F1: CLRF 06
……………….. if (!SysDelay) {delay_us(7812);} else {delay_us(4687);};
02F2: MOVF 16,F
02F3: BTFSS 03.2
02F4: GOTO 301
02F5: CLRWDT
02F6: MOVLW 07
02F7: MOVWF 1C
02F8: CALL 10F
02F9: MOVLW 05
02FA: MOVWF 1C
02FB: MOVLW 9F
02FC: MOVWF 1D
02FD: CALL 126
02FE: DECFSZ 1C,F
02FF: GOTO 2FB
0300: GOTO 30C
0301: CLRWDT
0302: MOVLW 04
0303: MOVWF 1C
0304: CALL 10F
0305: MOVLW 07
0306: MOVWF 1C
0307: MOVLW 5F
0308: MOVWF 1D
0309: CALL 126
030A: DECFSZ 1C,F
030B: GOTO 307
030C: INCF 14,F
030D: GOTO 2EA
……………….. };
……………….. };
……………….. //––––––––––––
……………….. if(!input(PIN_A4))
030E: BSF 03.5
030F: BSF 05.4
0310: BCF 03.5
0311: BTFSC 05.4
0312: GOTO 33C
……………….. {
……………….. for ( m=0; m<128; m++ )
0313: CLRF 15
0314: MOVF 15,W
0315: SUBLW 7F
0316: BTFSS 03.0
0317: GOTO 33C
……………….. {
……………….. OUTPUT_B(EcgTable[m]);
0318: MOVF 15,W
0319: CALL 088
031A: MOVWF 1C
031B: BSF 03.5
031C: CLRF 06
031D: BCF 03.5
031E: MOVF 1C,W
031F: MOVWF 06
……………….. if (!SysDelay) {delay_us(7812);} else {delay_us(4687);};
0320: MOVF 16,F
0321: BTFSS 03.2
0322: GOTO 32F
0323: CLRWDT
0324: MOVLW 07
0325: MOVWF 1C
0326: CALL 10F
0327: MOVLW 05
0328: MOVWF 1C
0329: MOVLW 9F
032A: MOVWF 1D
032B: CALL 126
032C: DECFSZ 1C,F
032D: GOTO 329
032E: GOTO 33A
032F: CLRWDT
0330: MOVLW 04
0331: MOVWF 1C
0332: CALL 10F
0333: MOVLW 07
0334: MOVWF 1C
0335: MOVLW 5F
0336: MOVWF 1D
0337: CALL 126
0338: DECFSZ 1C,F
0339: GOTO 335
033A: INCF 15,F
033B: GOTO 314
……………….. };
……………….. };
033C: GOTO 15C
………………..
……………….. };
………………..
……………….. }
033D: SLEEP
Configuration Fuses:
Word 1: 3FF6 HS WDT PUT NOPROTECT
Programul in limbaj de asamblare se transformă în limbaj de cod mașină aeste salvat în format IntelHex. Fișierul ECGTESTER.hex a fost introdus în microcontrolerul PIC16F84A cu ajutorul unui programator Wellon VP-280:
Fig. 5.61 Programatorul VP-280 utilizat la programarea microcontrolerului
Acest programator vine însoțit de versiunea de soft 4.40 cu posibilități de upgrade pe site-ul din China.
Fig.5.62 Versiune soft folosită la programarea microcontrolerului
După lansarea programului se va selecta din bara de lucru tipul de microcontroler pentru programat și se vor seta fuzibilele și tipul de oscilator.
Fig.5.63 Setarea tipului de microcontroler urmată de setarea tipului de ascilator si a fuzibililor
Programarea efectivă durează câteva secunde. Datorita memoriei Flash microcontrolerul va putea fi repogramat in caz de necesitate. Opțiunea No Protect permite citirea programului din memoria Flash.
Cap. VI Realizare practică. Teste de funcționare
Având în vedere faptul că avem de a face cu un prototip, realizarea practică s-a făcut pe un cablaj de test prin unirea unor puncte consecutive. Microcontrolerul și circuitul integrat LM358N au fost montate pe socluri pentru a ușura dezvoltarea acestei aplicații. Produsul semifinit poate fi observat în următoarele două poze din figură :
Fig .6.1 Realizare practica , partea cu componentele si partea cu lipituri
Montajul a fost alimentat la o tensiune de 5 V și verificată funcționarea cu ajutorul unui osciloscop digital.
Fig. 6.2 Semnal ECG la doua frecvențe cardiace 60 si 101 bpm
În cele două oscilograme avem semnalul de ECG pe două ritmuri cardiace: unul de 60 de ciclii/minut, altul la aproximativ 100 de cicli/minut. Următorul semnal testat a fost semnalul de tip rampă pe set de trei frecvențe funcție de starea pinului de intrare A0 :
Fig.6.3 Semnal tip rampă pe primul set de frecvențe de 1 , 1,66 și 3 Hz
Fig.6.4.Semnal tip rampă pe al doilea set de frecvențe de 5 , 10 și 25 Hz
În cele două oscilograme avem un semnal rampă cu o frecvență de 1, respectiv 1,66 Hz. Următorul semnal testat a fost semnalul dreptunghiular :
Fig.6.5 Semnal dreptunghiular la cele două frecvențe Primul semnal dreptunghiular este la o frecvență de 1 Hz, iar cel de-al doilea la 1,66 Hz. Ultimul semnal testat a fost semnalul sinusoidal pe cele două seturi de frecvențe :
Fig.6.6 Semnal sinusoidal pe primul set de frecvențe de 1 ,1,66 și 3 Hz
Fig.6.7 Semnal sinusoidal pe al doilea set de frecvențe de 5 ,10 și 25 Hz
În fig6.6 sunt oscilogramele pentru primul set de frecvențe 1, 1,66 și 3 Hz respectiv 2 , 3 și 5 sinusoide întregi. Pentru al doilea set de frecvențe de 5 ,10 ,25 Hz au fost generate 9 , 20 , 50 de sinusoide întregi. Din oscilograme observăm ca valoarea maximă vărf la vărf a tensiunii de ieșire este cuprinsă în intervalul 2,52-2,58 V in funcție de tipul undei generate.
Pentru a avea semnalul cu amplitudinea standard de 1 mV, la ieșirea amplificatorului operațional , a fost montat un divizor rezistiv format din trei rezistori cu urmatoarea schemă electrică din figură :
Fig.6.8 Divizor rezistiv de ieșire
Calculul rezistorilor care compun divizorul se face cu relația:
Pentru Vout=2mV , R2=20Ω (R2+R3 din schemă) valoarea rezutată din calcul pentru R1 este de 24980Ω. Practic aceasta valoare a fost realizată prin punerea in paralel a doi rezistori de valori diferite, unul de 100kΩ ,iar celalalt de 33kΩ.
Pentru a incerca testerul pe un monitor cardiac standard , care permite selecția derivațiilor bipolare I,II,III , intrarea RA se conectează la GND , LA la ieșirea de 1mV iar LL la ieșirea de 2mV.Astfel pe două derivații bipolare avem semnal de 1mV iar pe una de 2mV. Rezultatul testului se poate vedea in cele două fotografii din figurile următoare :
Fig.6.9 Semnal ECG la frecvența cardiacă de 60 de cicli pe minut
Fig.6.10 Semnal ECG la frecvența cardiacă de 101 cicli pe minut
Monitoarele cardiace care se găsesc in componența monitoarelor de funcții vitale respectiv defibrilatoare sunt identice din punct de vedere funcțional cu monitorul cardiac standard. Din acest motiv nu sau efectuat teste pe aceste monitoare.Testul fnal se va face pe un electrocardiograf digital model BLT E30 fabricat de Guangdong Biolight Meditech Co.LTD care face achiziție pe 12 derivații simultan pe monitorul LCD si trasează grafic 3 forme de unda pentru 3 derivații.
Acest electrocardiograf are cablul de pacient compus din 10 fire dupa cum urmează:RA de culoare roșu corespunde mâinii drepte, LA de culoare galbenă corespunde mâinii stângi, LL de culoare verde corespunde piciorului stâng, RL de culoare neagră corespunde piciorului drept, V1,V2,V3.V4,V5,V6 pentru exporările unipolare precordiale având urmatoarele culori roșu, galben, verde, maro, negru, violet.
Fig 6.11 Electrocardiograf BLT E30
Conectarea cablului la testerul ECG a fost făcută după schema din figura următoare:
Fig.6.12 Schema de conectare a cablului de pacient cu 10 fire
Din schema de mai sus observăm ca electrozii exploratori V1,..V6 au fost conectați împreună la iesirea de 2mV pentru a prelua același semnal pe cele 6 derivații. Preluarea semnalului se face față de electrozii mediați ai membrelor care vor fi la un nivel de potențial egal cu 1mV, deci nivelul semnalului pe aceste derivații va fi de 1mV. La fel avem aplitudine de 1mV pe derivațiile bipolare I , II iar pe derivația III prin culegerea bipolară intre piciorul stâng si mâna dreaptă amplitudinea va fi de 2mV.În cazul derivațiilor monopolare aVR si aVL potențialul mediat al celorlalte doua membre va fi de 0,5mV deci culegerea in acest caz va fi la un nivel de 1,5mV pe ambele derivații.Un caz mai special și nedorit este derivația monopolară aVF care va culege același nivel de potențial pe ambii electrozi iar rezultatul va fi nul deci pe acest canal avem linie izoelectrică.Totuși testarea acestui canal de amplificare poate fi realizată prin inversarea LA cu RA caz in care pe culegerea respectivă vom avea un semnal cu amplitudinea de 1,5mV.Această schemă de conectare a determinat apariția in partea superioara a testerului a 10 borne de conectare.Firul pentru RL nu este folosit la măsurători , prin acest conductor se realizează impămâtarea. El nu poate să nu fie conectat in circuit pentru că electrocardiograful sesizează si apare codul de eroare “LEAD OFF”.Rezistorul cu o valoare de 180Ω sau orice altă valoare în intervalul 0-1kΩ simulează prezența pacientului.
Testul final cu semnal ECG la o frecvență cardiacă de 60 de cicli pe minut este reprezentat in figura urmatoare:
Fig. 6.13 Electrocardiogramă realizată cu simulatorul setat pe 60 de cicli pe minut
Testerul a fost setat pe frecventa cardiacă de 101 cicli pe minut, iar rezultatul este in figura următoare:
Fig.6.14 Derivațiile I,II,III,aVR,aVL si aVF la 101 cicli pe minut sau 1,66 Hz
Pentru a verifica culegerea aVF am inversat RL cu RA . Se observă amplitudinea de 0,5V pe culegerile aVR și aVL
Fig. 6.15 Electrocardiogramă pentru testarea derivației aVL realizată cu simulatorul setat pe 101 cicli pe minut
În mod similar se poate proceda cu toate formele de undă pentru testarea derivatiei aVF.În cazul semnalului dreptunghiular se poate vedea cu exactitate nivelele specificate mai sus . Deasemenea cu ajutorul formei de unda dreptunghiulare pot fi puse in evidenta fenomenele de supra-amplificare sau supra-atenuare care produc distorsionarea semnalului. Electrocardiograful de test din acest caz este un electrocardiograf de calitate medie la care poate fi observată o diferență între semnalul văzut pe osciloscop și semnalul trasat pe hartie. Viteza de antrenare a hârtiei termice de inscripționare este corectă nu prezintă fluctuații.Testul realizat cu semnal dreptunghiular , de tip rampă si sinusoidal este prezentat in figurile următoare :
Fig.6.12Electrocardiograma de test realizată cu semnal dreptunghiular pe frecvențele de 1 și 1,66Hz
Fig.6.13 Electrocardiograma de test realizată cu semnal tip rampă cu primul set de frecvențe de 1 , 1,66 , 3 Hz
Fig.6.13 Electrocardiograma de test realizată cu semnal tip rampă cu al doilea set de frecvențe de 5 , 10 , 25 Hz
Fig.6.14 Fig.6.13 Electrocardiograma de test realizată cu semnal sinusoidal cu primul set de frcvențe de 1 , 1,66 , 3 Hz
Fig.6.13 Electrocardiograma de test realizată cu semnal sinusoidal și al doilea set de frcvențe de 5 , 10 , 25 Hz
CapVII. Proceduri de testare
VII.1Erori de măsurare
Rezultatul unei măsurari, oricat de precise ar fi aparatele de măsură și metodele de măsurare, nu coincide niciodată cu valoarea adevarata a marimii de măsurat.
Valoarea adevarata (reala) a unei marimi este valoarea exactă a mărimii respective, care nu poate fi aflată experimental decat cu aproximație. Rezultatul unei măsurari individuale reprezintă valoarea masurată. Abaterea valorii măsurate față de valoarea adevarată a măsurandului constituie eroarea de măsurare. [27]
Clasificarea erorilor de măsurare
A. După modul de calcul erorile pot fi : absolute, relative și raportate.
a) Eroarea absolută este diferența dintre valoarea măsurată și valoarea adevarată a mărimii măsurate :
DX = X – Xe [27]
Eroarea absolută are aceleași dimensiuni fizice ca și marimea măsurată și se exprimă în aceleași unitați de măsură.
Eroarea absolută cu semn schimbat se numește corecție.
b) Eroarea relativă este raportul dintre eroarea absolută și valoarea mărimii măsurate:
[27]
[%] [27]
[p.p.m.] [27]
Eroarea relativă poate fi exprimată ca un numar adimensional, în procente sau în părți pe milion (de ex., 2.10-4, sau 0,02% sau 200ppM). [27]
c) Eroarea raportată este raportul dintre eroarea absolută maximă și o valoare convențională Xc a mărimii de măsurat:
[%] [27]
VII.2 Verificări realizate cu ajutorul testerului
Cu ajutorul testerului poate fi determinată eroarea relativă de masurare a tensiunii , eroarea relativă de măsurare in intervalul timp , eroarea relativă a vitezei de derulare a hartiei și răspunsul în frecvență al amplificatoarelor de intrare.
Pentru a putea determina eroarea relativă de masurare a tensiunii toate amplificatoarele de intrare ale electrocardiografului vor fi testate pentru toate sensibilitățile disponibile in cazul nostru pe 2,5 mm/mV, 5mm/mV, 10mm/mV și 20mm/mV. Pentru test este suficient a folosi traseul ECG standard pe o singură frecvență de preferat la limita superioară de 1,66 Hz.
Fig 7.1 Testarea amplificatorilor cu semnal ECG la 100 cicli pe minut pe toate sensibilitățile disponibile
Calculul acestei erori de măsură se face cu următoarea formulă derivată din formula de calcul a erorii relative . Dacă se dorește exprimarea procentuală rezultatul se va înmulți cu 100.
unde Um = tensiunea vârf la vârf măsurată
S =sensibilitatea în mm/mV
Ui=tensiunea de intrare vârf la vârf de la intrare
Pentru a determina eroarea absolută de masurare în intervalul timp testerul trebuie să genereze semnal cu amplitudine de 1mV pe frecvențe diferite de 1 , 1,66 , 3 , 5 , 10 și 25 Hz . Măsurătorile vor fi efectuate pe viteze de derulare a hărtiei care să permită citirea cu exactitate a două sau trei perioade . La frecvența cea mai mică testerul livrează doar două perioade dar pentru frecvențe mai mari livrează de la trei in sus .
Fig 7.2 Testul pentru deterninarea erorilor de măsură în intervalul timp
Datele rezultate din măsurători se introduc într-un tabel de forma urmatoare
Calculul erorii relative de măsurare in intervalul timp se poate face cu formula
unde Lm = lungimea masurată a traseului
V = viteza de deplasare a hartiei in mm/s
Pentru determinarea erorii relative a vitezei de derulare a hartiei se folosește un semnal cu amplitudinea de 1 mV varf la varf și o frecvență de 1,66 Hz care va fi înregistrat pe toate vitezele de derulare a hartiei.
Fig 7.3 Testul pentru determinarea erorii relative a vitezei de derulare a hartiei
Calculul efectiv se va realiza cu formula
unde Lm = lungimea masurată a traseului pentru n>5 perioade
Tin=perioada semnalului de intrare
V = viteza de derulare a hartiei
Răsunsul in frecvență al amplificatoarelor de intrare este un parametru foarte important si poate fi făcut cu ajutorul testerului prin generarea unui semnal sinusoidal cu amplitudine constantă de 1 mv varf la varf de frecvențe diferite și vizualizarea amplitudinii acestora după înregistrarea pe hartie . O amplitudine mai mică pentru un anumit tip de frecvență va însemna o lipsă de liniaritate a amplificării etajelor de intrare.
Fig 7.4 Răspunsul în frecvență al amplificatoarelor de intrare
Concluzii
Această lucrare de disertație a fost aleasă ca urmare aunei experiențe de peste 10 ani in depanarea aparaturii medicale.La început in primii ani de activitate in domeniul aparaturii medicale in unele cazuri depanarea se făcea fără verificarea finală a performanțelor electrice a aparatelor ,motivul fiind desigur lipsa acestor aparate de testare.Achiziționarea la momentul respectiv a unor aparate de test a fost foarte dificilă datorită prețului prohibitiv al acestora. Calitatea muncii de depanare depinde atăt de persoana care efectuează lucrarea, de cunostințele si nivelul tehnic al acesteia cât și de dotarea cu aparatură de măsură și control fără de care unele operații nu pot fi efectuate.
Testerul ECG realizat în această lucrare are un raport preț performanță imbatabil. Traseul ECG respectă in cele mai mici amănunte traseul standard, ritm sinusal. Calitatea traseului ECG îl recomandă in testarea echipamentelor cardiace. Impedanța mică de ieșire anulează orice posibilitate de apariție a zgomotului de fond sau a altor interferențe electromagnetice. Prezența semnalelor complementare ( rampă, dreptunghi si sinusoidă) permite testarea in bune condiții a fidelității electrice a aparatelor cardiace. În procesul de reparare a electrocardiografelor si a monitoarelor cardiace , testarea inițială pentru evidențierea defecțiunilor ajută la depanarea efectivă. Odată depanat aparatul cardiac trebuie supus unei verificări finale a performanțelor acestuia lucru care este de maximă importanța. Prin depanarea etajelor de amplificare sau a regulatorului de turație a motorului care asigură deplasarea hârtiei de inscripționare se pot produce dereglări care nu pot fi puse in evidență decât in urma unui test final cu aparatură calibrată. Testerul ECG poate fi folosit cu succes în operațiuni de metrologizarea aparatelor cardiace , prin verificarea amplitudinilor semnalului ECG sau a vitezei de deplasare a hârtiei.
Din punct de vedere a posibilităților de dezvoltare ulterioară testerul ar putea fi modificat pentru verificarea electroencefalografelor prin dezvoltarea softului si a interfeței de conectare cu aparatul. O dezvoltare ulterioară, mai dificilă desigur,ar fi realizarea unui pacient virtual cu simularea afecțiunilor cardiace care poate fi folosit atât in testare cât si in procesul educațional prin generarea traseului ECG care conține elemente specifice afecțiunilor cardiace.
Consider că realizarea testerului a fost o reușită iar dezvoltarea ulterioară a acestuia posibilă.
Bibliografie
Electronica medicală – Nicolae Drăghiciu, Editura Universității din Oradea, 2003,
pp 61-74
Sisteme de achiziții de date – Gacsádi Alexandru, Tiponuț Virgil, Editura Universității din Oradea, 2005, pp 68-80
http://www.fiziologie.umft.ro/ro/CV4/PDF – Curs 4: Electrocardiografia – Carmen Bunu, 04.05.2014
http://www.cadredidactice.ub.ro/crinelraveica/files/2011/11/inginerie-biomedicala-4.pdf – 04.05.2014
http://ww1.microchip.com – PIC16F84A Data Sheet – 05.05.2014
http://www.alldatasheet.com – ST Microelectronic LM358N Data Sheet – 05.05.2014
http://lifeinthefastlane.com/ecg-library/basics/q-wave/ – 03.05.2014
http://www.daycounter.com/calculator/sine-Generator-calculator.phtml – 05.05.2014
http://www.ccsinfo.com – CCS PCM C Compiler – 11.05.2014
http://www.wellon.com.cn/dow.asp. – 05.05.2014
http://www.scritube.com/stiinta/informatica/Microcontrolerul-PICF113614113.php – 05.05.2014
http://www.scribd.com/doc/4323552/The-Pic-Microcontroler-Book – 06.05.2014
http://www.cadsoftusa.com/download-eagle/?language=en – 01.05.2014
http://www.ro.wikipedia.org/wiki/Electrocardiograma – 01.05.2014
http://www.fiziologie.ro/curs04/2EKGcurs1.pdf – 04.05.2014
http://www.sfatulmedicului.ro/investigatii/electrocardiograma_1301/ – 04.05.2014
http://www.fiziologie.ro/curs05/2-05-CV7.pdf – 04.05.2014
http://www.fizioms.ro/edu/lp/data/Electrocardiograma.pdf – 04.05.2014
http://stackoverflow.com/questions/3688649/create-sine-lookup-table-in-c -05.05.2014
http://www.physionet.org/physiotools/ecgsyn/C/src/ -05.05.2014
http://www.physionet.org/physiobank/database/#ecg -05.05.2014
http://arduino.cc/en/Tutorial/BitMask -07.05.2014
http://stackoverflow.com/questions/5177159/masking-out-unwanted-bits-in-c -05.05.2014
http://www.google.ro/imgres?imgurl=http://www.avr-asm-tutorial.net/avr_gra/r2r.gif&imgrefurl=http://www.avr-asm-tutorial.net/avr_en/AVR_DAC.html&h=450&w=290&sz=3&tbnid=YOez9Djr0EQ6vM:&tbnh=127&tbnw=82&prev=/search%3Fq%3DR/%2B%2B2R%2Bdac%26tbm%3Disch%26tbo%3Du&zoom=1&q=R/++2R+dac&usg=__0JGqvHlWlK6TISiT6QEdCjtNu5U=&hl=ro&sa=X&ei=N7HAT4XOHMqS-wast9iMCg&ved=0CBkQ9QEwAw -05.05.2014
http://www.google.ro/imgres?imgurl=http://ikalogic.cluster006.ovh.net/wp-content/uploads/8bitdac_2.jpg&imgrefurl=htt -05.05.2014
http://www.ikalogic.com/8-bit-digital-to-analog-converter-dac/&h=300&w=616&sz=34&tbnid=HPa7GDIfV93DLM:&tbnh=66&tbnw=136&prev=/search%3Fq%3DR/%2B%2B2R%2Bdac%26tbm%3Disch%26tbo%3Du&zoom=1&q=R/++2R+dac&usg=__g0Vaevm0qXeaW5uApa7NuPo_H9g=&hl=ro&sa=X&ei=N7HAT4XOHMqS-wast9iMCg&ved=0CBcQ9QEwAg -07.05.2014
http://www.meo.etc.upt.ro/materii/cursuri/MEE/Curs.pdf -12.05.2014
Bibliografie
Electronica medicală – Nicolae Drăghiciu, Editura Universității din Oradea, 2003,
pp 61-74
Sisteme de achiziții de date – Gacsádi Alexandru, Tiponuț Virgil, Editura Universității din Oradea, 2005, pp 68-80
http://www.fiziologie.umft.ro/ro/CV4/PDF – Curs 4: Electrocardiografia – Carmen Bunu, 04.05.2014
http://www.cadredidactice.ub.ro/crinelraveica/files/2011/11/inginerie-biomedicala-4.pdf – 04.05.2014
http://ww1.microchip.com – PIC16F84A Data Sheet – 05.05.2014
http://www.alldatasheet.com – ST Microelectronic LM358N Data Sheet – 05.05.2014
http://lifeinthefastlane.com/ecg-library/basics/q-wave/ – 03.05.2014
http://www.daycounter.com/calculator/sine-Generator-calculator.phtml – 05.05.2014
http://www.ccsinfo.com – CCS PCM C Compiler – 11.05.2014
http://www.wellon.com.cn/dow.asp. – 05.05.2014
http://www.scritube.com/stiinta/informatica/Microcontrolerul-PICF113614113.php – 05.05.2014
http://www.scribd.com/doc/4323552/The-Pic-Microcontroler-Book – 06.05.2014
http://www.cadsoftusa.com/download-eagle/?language=en – 01.05.2014
http://www.ro.wikipedia.org/wiki/Electrocardiograma – 01.05.2014
http://www.fiziologie.ro/curs04/2EKGcurs1.pdf – 04.05.2014
http://www.sfatulmedicului.ro/investigatii/electrocardiograma_1301/ – 04.05.2014
http://www.fiziologie.ro/curs05/2-05-CV7.pdf – 04.05.2014
http://www.fizioms.ro/edu/lp/data/Electrocardiograma.pdf – 04.05.2014
http://stackoverflow.com/questions/3688649/create-sine-lookup-table-in-c -05.05.2014
http://www.physionet.org/physiotools/ecgsyn/C/src/ -05.05.2014
http://www.physionet.org/physiobank/database/#ecg -05.05.2014
http://arduino.cc/en/Tutorial/BitMask -07.05.2014
http://stackoverflow.com/questions/5177159/masking-out-unwanted-bits-in-c -05.05.2014
http://www.google.ro/imgres?imgurl=http://www.avr-asm-tutorial.net/avr_gra/r2r.gif&imgrefurl=http://www.avr-asm-tutorial.net/avr_en/AVR_DAC.html&h=450&w=290&sz=3&tbnid=YOez9Djr0EQ6vM:&tbnh=127&tbnw=82&prev=/search%3Fq%3DR/%2B%2B2R%2Bdac%26tbm%3Disch%26tbo%3Du&zoom=1&q=R/++2R+dac&usg=__0JGqvHlWlK6TISiT6QEdCjtNu5U=&hl=ro&sa=X&ei=N7HAT4XOHMqS-wast9iMCg&ved=0CBkQ9QEwAw -05.05.2014
http://www.google.ro/imgres?imgurl=http://ikalogic.cluster006.ovh.net/wp-content/uploads/8bitdac_2.jpg&imgrefurl=htt -05.05.2014
http://www.ikalogic.com/8-bit-digital-to-analog-converter-dac/&h=300&w=616&sz=34&tbnid=HPa7GDIfV93DLM:&tbnh=66&tbnw=136&prev=/search%3Fq%3DR/%2B%2B2R%2Bdac%26tbm%3Disch%26tbo%3Du&zoom=1&q=R/++2R+dac&usg=__g0Vaevm0qXeaW5uApa7NuPo_H9g=&hl=ro&sa=X&ei=N7HAT4XOHMqS-wast9iMCg&ved=0CBcQ9QEwAg -07.05.2014
http://www.meo.etc.upt.ro/materii/cursuri/MEE/Curs.pdf -12.05.2014
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Functionarea Inimii Si Ciclul Cardiac (ID: 127965)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
