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

Similar Posts