Sistem de Fotografiere Time Lapse Comandat cu Microcontroller

CUPRINS

1. INTRODUCERE

2. CONSIDERENTE TEORETICE

a. Motoare de curent continuu. Tipuri. Principiul de functionare.

b. Motoare servo

Microcontroller-e. Arhitectura.

3. REALIZAREA PRACTICA

a. Componente (descriere controller, motoare, din fisa tehnica)

b. Schema bloc

c. Pseudocod explicat

4. REZULTATE (TBD)

5. CONCLUZII

6. BIBLIOGRAFIE

7. ANEXE

Introducere

Time lapse este o metodă de compresie a timpului apărută pentru prima oară in cinematografie. Este un procedeu tehnic asemănător modului fast-forward, dar care oferă o proprietate artistică unor imagini și impune o altă perspectivă asupra timpului ca noțiune. In esență, time lapse înseamnă “curgerea timpului” într-un ritm accelerat.

Fotografierea time-lapse presupune filmarea unor secvențe de durată foarte mare și comprimarea timpului la montaj. Astfel, se vor capta cadre cu intervale precise de timp la o frecvență mai mică decât cea utilizată în vizualizarea secvențelor de cadru.

Termenul de time lapse este deseori asociat cu timpul de menținere pe poziția deschisă a obiectivului unei camere în timpul expunerii fiecărui cadru video. Prin urmare, cel mai dificil aspect al acestei tehnici constă în alegerea unei perioade de timp pentru succesiunea de cadre. Perioada respectivă este un timp de așteptare cu valori de la 0.25 secunde la peste 15 minute, în funcție de subiectul de interest și rezultatele pe care dorim să le obținem.

O cameră normală are expunere în timp asemănătoare cu cea din figură. Pe axa verticală este prezentată deschiderea și respectiv închiderea obiectivului. Atunci când pe axa verticală este atinsă valoarea 1, obiectivul camerei digitale este complet deschis.

FPS – Frames per second

Figura 1. Time-Lapse Introduction and theory, E.M (Ted) Kinsman [1]

În privința folosirii unei tehnici time lapse, timpul de expunere aplicat este mult mai mare, ceea ce oferă posibilitatea de a rula rezultatul la o viteză mai mare. Termenul de fotografiere time lapse este asociat cu timpul de menținere pe poziția deschisă a obiectivului pe durata expunerii fiecărui cadru video. În principal, pentru determinarea timpului dintre expuneri în time lapse este necesară cunoașterea duratei evenimentului pe care dorim să îl filmăm și durata dorită de secvență.

Figura 2. Time-Lapse Introduction and theory, E.M (Ted) Kinsman [1]

Proiectul de licență are la bază implementarea unui controller programabil bazat pe sistemul Arduino, cu ajutorul căruia se va comanda un sistem de fotografiere.

Arduino este o platformă de procesare open source cu un software și hardware flexibil și usor de folosit. Platforma este de mici dimensiuni și cu ajutorul ei se vor putea prelua date din mediul înconjurător și se vor efectua acțiuni asupra mediului printr-un servomotor. Arduino este bazat pe procesoarele ATmega de la firma Atmel și poate fi programat folosind un limbaj de programare C++ simplificat.

Procesorul folosit va rula un cod scris într-un limbaj de programare similar limbajului C++. Astfel, folosirea unui sistem Arduino constituie o bază solidă pentru acest tip de proiectare.

La baza proiectului de licență se va afla un circuit simplu cu ajutorul căruia se va controla declanșarea camerei, simulând apăsarea unui buton. Placa Arduino va fi folosită pentru a controla circuitul și camera digitala.

Controllerul implementat va fi folosit pentru fotografierea secvențelor de tip time lapse. Cu toate că la momentul actual se găsesc o serie de dispozitive specifice acestei tehnici de fotografiere, este mult mai utilă implementarea unui sistem propriu adaptat cerințelor hardware și software dorite. De asemenea, un obiectiv pe care doresc sa îl ating în cadrul acestei teme constă atât în învățarea programării folosind Arduino pentru controlul camerei, cât și obținerea de cunoștințe și posibilitatea de a fi capabilă de a crea un design propriu.

Considerente teoretice

a. Motoare de curent continuu

Principiul câmpului magnetic

Un motor electric, adeseori denumit și electromotor, este un dispozitiv electromecanic care transformă energia electrică în energie mecanică utilizând proprietăți electromagnetice de conversie a energiei. Există mai multe tipuri de motoare electrice care operează prin metode distincte de calcul al performanțelor, însă toate au la bază principiul câmpului magnetic.

Motoarele electrice funcționează pe baza forțelor electromagnetice care acționează asupra conductoarelor aflate într-un câmp magnetic și parcurse de curent electric. Câmpul magnetic este o mărime fizică vectorială ce caracterizează spațiul din vecinătatea unui magnet sau a unei sarcine electrice aflate în mișcare.

Figura. W. Yeadon, A. Yeadon (McGraw-Hill, 2001). Handbook of Small Electronic Motors [2]

Prin convenție, liniile câmpului magnetic apar din polul magnetic nordic și intră în polul magnetic sudic. Doi magneți permanenți se vor atrage sau se vor respinge într-un efort de a minimiza lungimea acestor linii de câmp magnetice, prin urmare polii de același fel se resping și polii opuși se atrag.

Fizicianul Hans Oersted a arătat în 1820 cum acul unui compas poate fi deviat cu un curent electric și a demonstrat pentru prima oară legătura dintre magnetism și electricitate. Câmpul magnetic din jurul unui fir conducător de curent poate fi caracterizat prin plasarea mai multor ace de compas pe un plan perpendicular cu axa firului. Această plasare arată cum liniile de câmp magnetic din jurul firului pot fi descrise ca cercuri centrare pe firul respectiv și cu planuri perpendiculare pe fir. [2]

Direcția câmpului magnetic în jurul unui fir conductor poate fi determinată utilizând „regula mâinii drepte” (Figura 3). Degetul mare al mâinii drepte este orientat în direcția curentului (cu fluxul curentului de la + la – ), iar celelalte degete se vor „răsuci” în jurul firului pentru a indica direcția câmpului magnetic. Dacă fluxul curentului este de la – la + se va folosi regula mâinii stângi. [2]

Motoare de curent continuu

Motoarele electrice sunt clasificate internațional în două categorii: motoare de curent continuu (motoare DC – Direct Current) și motoare de curent alternativ (motoare AC – Alternating Current). Motoarele de curent alternativ sunt clasificate la rândul lor în motoare de curent alternativ sincrone și motoare de curent alternativ asincrone, și funcționează pe baza unui curent care își schimbă sensul. Motoarele de curent continuu sunt motoare ce funcționează pe baza unui curent continuu. În funcție de modul de conectare al înfășurării de excitație, motoarele de curent continuu pot avea excitație de tip derivație, tip serie, tip mixt sau excitație separată.

Motoarele sunt construite din două părți componente, anume stator și rotor. Statorul este partea fixă a motorului și include carcasa, bornele de alimentare, armătura și infășurarea statorică. Partea mobilă a motorului poartă numele de rotor și este plasat de obicei în interior, fiind format dintr-un ax și o armătură rotorică cu rol de susținere a înfășurătorii. Între rotor și stator există o porțiune denumită întrefier ce permite mișcarea rotorului față de stator.

Construcție și caracteristici de funcționare

Motoarele de curent continuu sunt alcătuite dintr-un set de bobine numit înfășurarea armăturii, aflat înăuntrul unui alt set de bobine sau de magneți permanenți, numit stator. Prin aplicarea unei tensiuni către bobine se produce un cuplu ce are ca rezultat o mișcare.

Statorul conține înfășurarea de excitație care va produce un câmp magnetic constant, datorat unor electromagneți alimentați cu un curent continuu sau de către magneți permanenți. [3]

Statorul are ca elemente constructive principale:

1 – carcasa

2 – polii de excitație

3 – poli de comutație (auxiliari)

4 – talpa de prindere

5 – rotorul, care joacă rol de indus

6 – peria.

Figura 6. Elemente constructive principale [3]

Colectorul are o forma cilindrică, fiind construit din plăcute de cupru izolate între ele și cu izolare față de suport. Pe colector se găsesc o serie de „perii” realizate dintr-un material conductor pe bază de grafit care asigură frecări mai reduse. Periile sunt legate galvanic între ele: periile de număr impar se leagă la o bornă a mașinii, iar cele de număr par se leagă la cealalta bornă a mașinii. Prin intermediul unor piese speciale, periile realizează un contact electric cu lamelele colectorului, iar numărul de rânduri de perii este egal cu numărul de poli de excitație al mașinii.

În cadrul regimului de motor se alimentează înfășurarea inductoare al cărui curent de excitație (Ie) creează fluxul magnetic principal (Φe = LeIe). Tot în același regim se alimentează înfășurarea indusă, al cărui curent (Ia) dă naștere fluxului de reacție al indusului (Φa = LaIa). Peste cele două fluxuri se suprapun fluxul magnetic Φk al înfășurării de compensație (cu rolul de a-l neutraliza pe Φa) și fluxul Φc al înfășurării auxiliare (care îmbunătățește comutația). [3]

Figura. Schema motorului de curent continuu

Sursă: [4] accesată la data 04.02.2014

Câmpul din întrefier (cu fluxul de pol Φ) acționează asupra conductoarelor cu un cuplu electromagnetic de valoare medie M =KM ΦIa , care pune rotorul în mișcare cu turația:

n = – · M

KE si KM – coeficienti de proportionalitate

U – tensiunea la perii

Ra – rezistența înfășurării rotorice

Sistemul colector – perii alimentează înfășurarea rotorică și are rolul de invertor, distruibuind curenții prin conductoarele rotorice astfel încât toate forțele electromagnetice ce acționează asupra conductoarelor să dea un cuplu de același sens.

Limitarea curentului de pornire la valori acceptabile se face prin introducerea unui reostat de pornire în serie cu rotorul sau prin alimentarea la tensiune redusă a rotorului. Pe măsură ce motorul demarează, curentul rotoric scade și reostatul se va scurcircuita treptat. [5]

Turația motorului de curent continuu se poate modifica prin înserierea cu rotorul a unui reostat de reglaj (figura stânga) și scăderea fluxului inductor (micșorarea curentului de excitație cu ajutorul reostatului de câmp) obținând turații mai mari decât cea nominală (figura dreapta) sau prin scăderea tensiunii de alimentare rotorice, obținând turații mai mici decât cea nominală (figura dreapta). [6]

Turația motorului este direct proporțională cu tensiunea aplicată înfășurării și invers proporțională cu câmpul magnetic de excitație. Cuplul dezvoltat de motor este direct proporțional cu curentul electric ce parcurge rotorul. Prin urmare, prin diminuarea cuplului dezvoltat se poate face reglarea turației.

Prin urmare, motoarele de curent continuu pot fi descrise ca generatoare de curent continuu cu 'funcționare în sens invers': atunci când curentul electric trece prin rotorul unui motor, este generat un câmp magnetic care produce o forță electromagnetică. Ca rezultat al producerii acestei forțe are loc rotația rotorului și inducerea unui voltaj în bobinajul său, de sens opus voltajului aplicat exterior. Viteza motorului va rămâne constantă atâta timp cât asupra motorului nu acționează nicio sarcină sau nu are loc niciun lucru mecanic decât cel efectuat prin învârtirea rotorului. Dacă asupra rotorului se aplica o sarcină, voltajul va fi redus iar curentul mai mare va trece prin rotor și astfel se va efectua mai mult lucru mecanic (deoarece motorul este capabil să primească mai mult curent). Dacă asupra unui motor aflat în repaus se aplică un voltaj normal, prin motor va trece un curent mare ce ar putea avaria periile colectoare și motorul. Pentru prevenirea accidentelor se folosesc rezistențe înseriate împreună cu rotorul pentru limitarea curenților, iar pe măsură ce motorul prinde viteză, aceste rezistențe sunt reduse treptat (automat sau manual). [5]

Tipuri de motoare de curent continuu

Motoarele de curent continuu pot fi clasificate în funcție de modul de alimentare a infășurării de excitație în patru categorii [5]:

motoare de curent continuu cu excitație separată

motoare de curent continuu cu excitație derivație

motbinajul său, de sens opus voltajului aplicat exterior. Viteza motorului va rămâne constantă atâta timp cât asupra motorului nu acționează nicio sarcină sau nu are loc niciun lucru mecanic decât cel efectuat prin învârtirea rotorului. Dacă asupra rotorului se aplica o sarcină, voltajul va fi redus iar curentul mai mare va trece prin rotor și astfel se va efectua mai mult lucru mecanic (deoarece motorul este capabil să primească mai mult curent). Dacă asupra unui motor aflat în repaus se aplică un voltaj normal, prin motor va trece un curent mare ce ar putea avaria periile colectoare și motorul. Pentru prevenirea accidentelor se folosesc rezistențe înseriate împreună cu rotorul pentru limitarea curenților, iar pe măsură ce motorul prinde viteză, aceste rezistențe sunt reduse treptat (automat sau manual). [5]

Tipuri de motoare de curent continuu

Motoarele de curent continuu pot fi clasificate în funcție de modul de alimentare a infășurării de excitație în patru categorii [5]:

motoare de curent continuu cu excitație separată

motoare de curent continuu cu excitație derivație

motoare de curent continuu cu excitație serie

motoare de curent continuu cu excitație mixta

Motorul de curent continuu cu excitație separată prezintă două surse de tensiune continuă pentru alimentarea înfășurării de excitație și a celei rotorice. Curentul prin înfășurarea rotorică este egal cu curentul de alimentare (Ia = I), iar pornirea motorului se face prin reglarea tensiunii de alimentare (U) pâna la valoarea nominală. Turația este reglată cu ajutorul reostatului Rc.

Figura 9. Schema electrică a motorului de curent continuu cu excitație separată (stânga) și cu excitație derivație (dreapta) [5]

Motorul de curent continuu cu excitație derivație prezintă înfășurarea de excitație conectată în derivație cu înfășurarea rotorică. Reostatul Rp (înseriat cu înfășurarea rotorică) este utilizat pentru limitarea curentului la pornire, în timp ce reostatul Rc (înseriat cu înfășurarea de excitație) are rolul de a regla turația motorului. Relația curenților de circuit este I = Ia + Iex.

Motorul de curent continuu cu excitație serie prezintă înfășurarea de excitație înseriată cu înfășurarea rotorică. Reostatul Rp limitează curentul la pornire iar reostatul Rc, conectat în derivație cu înfășurarea de excitație, reglează turația motorului. Relația curenților de circuit este I = Ia = Iex.

Figura 10. Schema electrica a motorului de curent continuu cu excitație serie (stânga) și cu excitație mixtă (dreapta) [5]

Motorul cu excitație mixtă are două înfășurări de excitație, o înfășurare fiind în serie iar cealaltă înfășurare în derivație cu înfășurarea rotorică. Reostatul Rp limitează curentul la pornire, în timp ce reostatul Rc, conectat în serie cu înfășurarea de excitație derivație, reglează turația motorului. Relația curentilor de circuit este I = Ia + Iexd. Acest tip de motor poate avea o excitație adițională (fluxurile de excitație au același sens și se însumează) sau excitație diferențială (fluxurile de excitație sunt de sens contrar și se scad).

Tensiunea electromotoare indusă într-o cale de curent a rotorului se calculează cu următoarea relație:

Ue = · N · · Ф = KE · n · Ф

unde p – numărul de perechi de poli; a – numărul de perechi de căi de curent; N – numărul de conductoare active ale rotorului; n – turația rotorului (exprimată în rotații/min); φ – fluxul magnetic (exprimat în Wb); KE – coeficient de proporționalitate. [5]

b. Motoare servo

Dezvoltarea instalațiilor automate complexe cu funcții precum producerea componentelor discrete de putere la frecvențe mari, a circuitelor integrate pe scală largă, a microprocesoarelor, a interfețelor și traductoarelor, a condus la realizarea unor componente cu posibilitate mare de adaptare denumite mașini electrice speciale. În cadrul mașinilor electrice speciale enumerăm servomotoarele de curent continuu cu excitație electromagnetică, respectiv cu excitație cu magneți permanenți, servomotoare asincrone, motoare cu histerezis, motoare pas cu pas, servomotoare sincrone fără perii, tahogeneratoare de curent continuu și de curent alternativ.

În categoria mașinilor speciale de curent continuu intră servomotoarele și tahogeneratoarele de curent continuu. Servomotoarele de curent continuu convertesc semnalul electric într-o mișcare de rotație a unui arbore, iar mecanismul cuplat la arbore execută operația comandată. [7]

Servomotoarele electrice sunt clasificate în funcție de principiul de funcționare în: servomotoare de curent continuu, servomotoare asincrone și servomotoare sincrone.

Servotoarele sincrone au incluse în categoria lor servomotoarele de curent continuu fără perii cât și servomotoarele pas cu pas. Servomotoarele de curent continuu au posibilitatea de reglate a vitezei în limite largi și caracteristici de reglaj liniare, cu moment de inerție redus. Dezavantajele lor sunt legate de colector și fenomenul de uzură. Servomotoarele asincrone elimină dezavantajele servomotoarelor de curent continuu în privința sistemului colector-perii. Acest tip de servomotoare este cel mai răspândit deoarece este mult mai simplu și ieftin, însă prezintă o serie de dezavantaje privind randamentul, factorul de putere și procedeele de comandă complicate. [7][8]

Servomotoarele sincrone prezintă ca principală caracteristică o frecvență a tensiunii de alimentare aflată într-un raport constant cu viteza de rotație, indiferent de gradul de încărcare al mașinii. Ca urmare, utilizarea servomotoarelor sincrone este indicată în sistemele automate de poziționare la care viteza de rotație se dorește a fi menținută constantă sau direct proporțională cu frecvența de comandă. Acest tip de servomotoare mai prezintă și avantajul unei întrețineri ușoare și a posibilității de funcționare în medii explozive. De asemenea, o proprietate importantă este absența contactelor alunecătoare (perii – inele), ceea ce reduce frecarea și nivelul de zgomot și îmbunătățește fiabilitatea.

Servomotoare de curent continuu

Elemente constructive ale servomotoarelor de curent continuu

În funcție de tipul rotorului, servomotoarele de curent continuu se deosebesc cu:

rotor cilindric

rotor disc

rotor pahar

Sistemul de excitație are un rol decisiv în construcția unui servomotor. În funcție de tipul de excitație, servomotoarele pot fi clasificate în servomotoare cu excitație electromagnetică, servomotoare cu magneți permanenți și servomotoare cu excitație hibridă. [8]

Servomotorul cu rotor cilindric este cel mai apropiat de construcția mașinilor de curent continuu. Principalele caracteristici sunt date de cuplul, respectiv turația maximă și nominală în funcție de regimul de funcționare specific. Circuitul magnetic este realizat din tole și prezintă înfășurări de compensație și poli auxiliari.

Îmbunătățirea caracteristicilor magneților permanenți a condus treptat la înlocuirea excitațiilor electromagnetice cu excitații cu magneți permanenți. Astfel, au fost utilizați magneți din Alnico, magneți din ferită și magneți pe bază de metale rare .

Servomotoarele cu rotor cilindric au excitație prin magneți permanenți, cei mai utilizați fiind magneții din Alnico caracterizați prin inducție remanentă mare și câmp coercitiv redus.

Rotorul cilindric prezintă un raport între diametru și lungime cu valori mai mici de 0.3, iar înfășurătorile sale suportă curenți de până la 10 ori mai mari față de curentul nominal. Constantele de timp electrice pentru acest tip de servomotoare sunt în general mici, sub 10 milisecunde, însă mai mari față de celelalte servomotoarele de curent continuu. [7][8]

Figura 11. Structura unui servomotor cu magneți permanenți ALNICO [8]

Polii sunt realizați din material magnetic, iar datorită câmpului coercitiv redus magnetizarea se face în interiorul mașinii cu ajutorul unor bobine speciale plasate în jurul magneților permanenți. Carcasa este realizată din material feromagnetic și serveste la inchiderea liniilor câmpului de excitație.

În cazul servomotoarelor de curent continuu care utilizează magneți din ferită, datorită inducției remanente mici, numărul de poli din mașină este mult mai mare, ajungând la o valoare dublă față de varianta utilizării magneților din Alnico.

Figura 12. Structura unui servomotor excitat cu ferite [8]

Utilizarea magneților permanenți cu metale rare (Samarium, Cobalt, Neodym etc.) conduce la un volum scăzut al magneților, un număr mic de poli și la dimensiuni reduse ale mașinii față de cazurile anterioare. Aceste servomotoare de putere mică sunt folosite numai în aplicații aerospațiale datorită prețului lor foarte ridicat.

Servomotorul cu rotor disc are magneții permanenți plasați axial. Rotorul este alcătuit din conductoare lamerale imprimate pe suport de sticlă – textolit, iar colectorul este plan. Înfășurarea rotorului este de tip serie sau serie-paralel. Rotorul disc nu conține materiale feromagnetice, de aceea el este mult mai ușor decât un rotor cilindric și înlătură dezavantajele aduse de neliniarități și pierderile prin histereză.

Constanta de timp electrică este mai mică de 0.1 milisecunde, iar constanta electromecanică este de același ordin de mărime ca și la servomotoarele cu rotor cilindric. [7]

Figura. Structura unui servomotor cu rotor disc: a. Secțiune b. Conductoare rotorice [8]

Rotorul disc are posibilitatea de a lucra cu densități mari de curent, prezintă un randament ridicat și o comutație mai bună față de rotorul cilindric. De asemenea, printre avantajele rotorului disc se enumeră lipsa înțepenirilor magnetice, lipsa pierderilor prin histerezis și lipsa saturației.

Exista însă și o serie de dezavantaje legate de construcția particulară a rotorului disc, și anume [7]:

un număr limitat de conductoare pe suprafața discului

tensiuni de lucru relativ reduse

stabilitate scăzută la vibrații

cost ridicat de producție datorită folosirii unor materiale prețioase pentru perii

Datorita geometriei și greutătii lor reduse, aceste tipuri de servomotoare sunt considerate ideale pentru aplicații de joasă putere, în industria chimică și industria ușoară.

Servomotorul cu rotor pahar prezintă o înfășurare rotorică dispusă pe un pahar de fibră de sticlă. Datorită lipsei materialelor magnetice din rotor, prezintă aceleași avantaje ca servomotorul cu rotor disc și oferă, în plus, o constantă electromecanică redusă. Lipsa materialelor magnetice a condus și la eliminarea pierderilor prin histerezis, a înțepenirilor magnetice și a fenomenelor de saturație.

Servomotoarele cu rotor pahar sunt folosite în sisteme foarte rapide, având o accelerare de la 0 până la 2500 rotații/minut în 2 milisecunde. [8]

Figura 14. Structura unui servomotor cu rotor pahar [7]

Modelul matematic al servomotorului de curent continuu

Fie un servomotor de curent continuu cu excitație electromagnetică separată ca în figura următoare. Analiza funcționării se face pe baza ipotezelor simplificatoare.

ue = Re · ie + (Le · ie),

ua = Ra · ia + (La · ia) + e,

e = k·Φ·Ω,

m = kΦ·ia,

m – mv – mr = J , mv + mr = mR,

Φ = f(ie)

Figura 15. Servomotorul de curent continuu cu excitatie electromagnetica separata si setul de ecuatii care descrie comportarea sa [8]

La scrierea relațiilor s-a avut în vedere regimul tranzitoriu electromagnetic datorat variației curenților și fluxurilor și regimul tranzitoriu mecanic în care se află rotorul mașinii datorită variației vitezei unghiulare .

În setul de ecuații: Re, Ra sunt rezistența înfășurării de excitație, respectiv rezistența totală a circuitului indusului; Le, La sunt inductivitatile totale ale înfășurării de excitație, respectiv a indusului; ue și ua sunt valorile tensiunilor la bornele înfășurării de excitație, respectiv indusului; ie și ia sunt valorile curentului excitație, respectiv indus; e este tensiunea electromotoare indusă de câmpul excitație.

Primele două ecuații sunt rezultatele aplicării legii inducției electromagnetice în circuitul de excitație, iar Le și La au fost introduse sub semnul derivatei deoarece sunt mărimi variabile cu sarcina. Deoarece La se modifică în limite de intervale restrânse, se poate admite că:

(La · ia) = La · (ia)

A treia, respectiv a patra ecuație reprezintă expresiile tensiunii electromotoare induse prin rotație, respectiv a cuplului electromagnetic. În aceste relații, constanta adimensională k depinde de construcția servomotorului:

k =

în care p – numărul de perechi de poli; N – numărul de conductoare; a – numărul de perechi de căi de înfășurare.

Relația cinci reprezintă ecuația fundamentală a mișcării, unde J este momentul de inerție al servomotorului și al mecanismului de lucru antrenat, iar mR reprezintă cuplul rezistent momentan total care poate fi descompus în componenta de frecare vâscoasa mv care poate fi considerată egală cu Fm·Ω, unde Fm reprezintă coeficientul total de frecări vâscoase, și cuplul indepentent de viteza mr. [8]

Prin urmare, ecuația fundamentală a mișcării poate fi rescrisă sub forma:

J = m – Fm·Ω -ms

Ecuația reprezintă o dependență liniară în domeniul vitezelor unghiulare mici. La viteze mari, însă, termenul liniar Fm·Ω se transformă într-un termen neliniar deoarece cuplurile de frecări sunt proporționale cu viteza la o putere mare.

Servomotorul de curent continuu poate fi comandat în trei moduri:

prin circuitul indusului,

prin circuitul de excitație,

pe ambele căi, în cazul excitației serie.

Comanda cea mai performantă a servomotorului de curent continuu este prin circuitul indusului. [7]

Servomotorul de curent continuu comandat prin circuitul indusului

Asupra circuitului indusului se aplică o tensiune de comandă variabilă, cu rol de mărime de intrare. Fluxul de excitație este constant, iar în cazul unui regim staționar de funcționare ecuațiile ce caracterizează sistemul devin:

E0 = – k1·Ω

UA = – E0 + RA · IA

M = k1 · IA, unde k1 = kE · FE = kE · F0

Prin eliminarea mărimilor E0 și IA, setul anterior de relații devine:

UA = k1 · Ω + RA·

sau M = · UA – · Ω = kM · UA – Fe · Ω

în care kM = este coeficientul de amplificare tensiune-cuplu, iar Fe = este coeficientul de frecări vâscoase al servomotorului.

Aceasta ultima relație permite deducerea caracteristicii mecanice a servomotorului:

Figura 16. Caracteristica mecanică a servomotorului M = f (Ω) cu tensiunea UA constantă [7]

Se poate observa în figura anterioară că aceste caracteristici sunt drepte paralele cu panta Fe = .

Pentru un semnal maxim admis de comandă UAm, cuplul de pornire maxim dezvoltat de către servomotor este Mpm = kM · UAm = · UAm , cu o viteză maximă de mers în gol (M=0):

Ω0m = · UAm = =

Viteza maxima de mers în gol și cuplul de pornire permit deducerea caracteristicilor mecanice, cu panta dreptelor Fe = . Liniaritatea caracteristicilor mecanice este importantă pentru funcționarea sistemului de reglare automată a servomotorului.

O caracteristică importantă a servomotoarelor este existența unei valori minime a semnalului de comandă (Usm) care trebuie depășită pentru ca servomotorul să fie acționat. Valoarea minimă a tensiunii de comandă este importantă deoarece permite producerea unui cuplu electromagnetic capabil să învingă cuplul static provocat de nesimetrii electrice sau mecanice ale mașinii, sau de înțepenirea bilelor de rulment. [8]

Figura 17. Caracteristica de reglare a servomotorului M = f (UA) cu Ω constant [7]

Zona cuprinsă între valoarea zero a tensiunii de comandă și valoarea limită Usm poartă denumirea de „zonă moartă”, fiind intervalul caracterizat prin lipsa de răspuns a servomotorului. Pentru servomotoarele de calitate superioară se admite ca Usm să aibă o valoare limită de 3% din tensiunea maximă de comandă.

Puterea utilă Pu a servomotorului se poate scrie ca Pu = M · Ω = (kM ·UA – Fe · Ω ) · Ω. Puterea utilă este nulă la pornire (Ω = 0) și la mersul în gol (M = 0) și atinge o valoare maximă pentru viteza unghiulară Ωm dedusă prin derivarea relației anterioare:

= kM · UA – 2 · Fe · Ωm = 0 la valoarea Ωm = , adică pentru jumătate din viteza de mers în gol. [7][8]

Funcția de transfer a servomotoarelor de curent continuu

Servomotorul de curent continuu este caracterizat prin funcția sa de transfer. Se consideră cazul cel mai utilizat în sistemele automate, anume un servomotor cu excitație separată sau excitat cu magneți permanenți și comandat prin indus. Mărimea de intrare este tensiunea UA aplicată înfășurării rotorice, iar mărimea de ieșire este viteza de rotație Ω (sau unghiul de poziție

Considerând ca mărime de ieșire unghiul de poziție prin aplicarea transformatei Laplace asupra sistemului de ecuații generale al servomotorului de curent continuu se obține:

e 0(s) = – k1 · s · (s)

uA(s) = k1 · s · (s) + RA·(1 + s ·TA)·iA(s)

m(s) = k1 · iA(s)

m(s) = Fm · (1 + s · Tm) · s · (s)

unde:

TA = constanta de timp a circuitului rotoric

Tm = constanta mecanica de timp a motorului plus a sarcinii

Prin eliminarea curentului iA(s) din ecuații, se poate scrie:

m(s) = · · uA(s) – · = · uA(s) – · s · (s)

respectiv,

· uA(s) = · s · (s) + Fm · (1 + s · Tm) · s · (s)

Ultima relație poate fi adusă la forma:

· uA(s) = · [ 1 + · (1 + s · Tm) · (1 + s · Tm) ] · s · (s)

Se definește astfel funcția de transfer a servomotorului, F(s) = . Această formă a funcției de transfer se poate simplifica în cazul în care constanta TA este mult mai mică decât constanta Tm, funcția de transfer căpătând forma dată de relația:

F(s) = =

unde Tem = este constanta electromecanică efectivă de timp, mult mai mica decât constanta mecanică Tm deoarece Fe > Fm. [7]

În concluzie, servomotorul de curent continuu cu excitație separată se comportă ca un ansamblu format din următoarele elementul inerțial aperiodic și elementul integrator .

Servomotorul de curent continuu comandat pe excitație

Comanda pe excitație a servomotoarelor de curent continuu se folosește doar în cazul servomotoarelor de mare putere sau în cazul alimentării servomotorului cu un curent constant. Pornind de la ecuațiile de funcționare ale servomotorului, se demonstrează incompatibilitatea caracteristicilor mecanice ale acestui tip de comandă cu sistemele de reglare automată.

Prin particularizarea setului de relații funcționale ale servomotorului de curent continuu pentru regim staționar, și considerând tensiunea rotorică constantă, se obține:

Ua = e + Ra ia

Ue = Re ie

e = k’ · Ω ie

Ultima relație este definită considerând liniarizarea caracteristicii de magnetizare, Ф = f(ie).

Pe baza expresiei cuplului electromagnetic m = k’ ie ia , caracteristica mecanică comandată pe excitație devine:

m = – Ω

Se observă faptul că termenul , ce poartă numele de cuplu de pornire, este independent de Ω și variază liniar cu tensiunea de comandă, în timp ce panta caracteristică Ω depinde de pătratul tensiunii de comandă. [8][9]

În figură este reprezentată o situație incompabitilă a unui sistem automat: aceluiași punct de funcționare îi corespund două valori diferite pentru tensiunea de comandă, respectiv pentru tensiunea Ua și pentru Ua.

Figura 20. Caracteristici mecanice ale servomotorului de curent continuu comandat pe excitatie [8]

Comanda servomotorului de curent continuu pe excitație este folosită în cazul alimentării rotorului de la o sursă de curent constant. În general, o sursă de tensiune constantă presupune o impedanță proprie mică și tensiune de ieșire constantă, iar o sursa de curent constant presupune o impedanță proprie mare și tensiune de ieșire variabilă. Sursa de curent constant este realizată cu circuite de tip Boucherot ca în figura următoare:

Figura 21. Schema Boucherot pentru alimentarea servomotoarelor de curent continuu cu curent constant [8]

În cazul alimentării cu un curent constant, se obține următoarea relație pentru partea liniară a caracteristicii de magnetizare:

m = k” ie = k = kM ue

În acest caz, caracteristica de reglaj este conform figurii:

Figura 22. Caracteristicile servomotoarelor de curent continuu comandate pe excitație: caracteristica de reglaj (stânga) și caracteristicile mecanice (dreapta) [8]

Caracteristica de reglaj (figură stânga) evidențiază abaterea spre dreapta în zona superioară datorită saturației, în timp ce caracteristicile mecanice (figură dreapta) evidențiază rigiditatea sistemului. Rigiditatea sistemului constituie un dezavantaj minor față de metoda comenzii servomotoarelor de curent continuu prin indus, deoarece caracteristicile mecanice pot fi îmbunătățite prin introducerea unei reacții negative de turație. Dezavantajul major al acestui tip de comandă de servomotor constă în faptul că circuitul de excitație prezintă o constantă de timp mult mai mare față de constanta de timp a indusului și prin urmare, din punct de vedere mecanic, oferă performanțe dinamice mult mai slabe. [8][9]

c. Microcontroller. Arhitectură. Întreruperi

La modul general, un controller este o structură electronică destinată controlului unui proces sau a unei interacțiuni caracteristice cu mediul exterior, fără intervenția operatorului uman. Primele controllere au fost echipamente de mari dimensiuni, însă apariția microprocesoarelor a condus la procesul de miniaturizare și integrare a tuturor componentelor pe același cip. S-a dezvoltat astfel microcontrollerul, dedicat implementării operațiilor de control. [10][12]

Un microcontroller cuprinde în același circuit integrat multiple componente ale unui sistem cu microprocesor. Prin urmare, un microcontroller este un microcircuit care încorporează o unitate centrală de prelucrare (CPU) și o memorie, împreună cu resurse pentru interacțiunea cu mediul exterior. Printre resursele tipice se definesc următoarele:

unitatea centrală;

generatorul de tact;

memoria volatilă RAM (Random Access Memory);

memoria nevolatilă ROM (Read Only Memory), PROM (Programmable Read Only Memory), EPROM (Erasable Programmable Read Only Memory) sau EEPROM (Electrically Erasable Programmable Read Only Memory);

dispozitive de intrare/ieșire seriale și paralele;

controller de întreruperi, numărătoare/timere;

periferice.

Contra-cost se pot adăuga caracteristici specifice sarcinii de control care trebuie îndeplinite, precum sisteme de conversie analog numerică, sisteme de conversie numeric analogic și/sau ieșiri cu modulare în durată (PWM), comparatoare analogice, facilități suplimentare pentru sistemul de numărare, facilități de prelucrare a informației la nivel de bit și de acces direct și usor la intrări/ieșiri sau mecanisme de prelucrare a informației la nivel de bit. [11]

Microcontrollerele sunt în general clasificate după lungimea cuvântului de date. În funcție de puterea de calcul dorită, se pot alege variante de microcontrollere cu dimensiunea cuvântului de date de 4/8/16/32 sau chiar 64 de biți. Există și variante constructive dedicate unei anumite aplicații, având un cod preprogramat și resurse hardware specializate, fiind utilizate în domeniul comunicațiilor, pentru controlul tastaturilor, controlul aparaturii video/audio sau prelucrări numerice de semnal.

Microcontrollere sunt realizate în tehnologie CMOS (semiconductor complementar metal-oxid) oferind structuri cu o mare densitate de integrare, cu consum redus și cu posibilitatea de alimentare de la baterie. Datorită unei logici interne statice este posibilă micșorarea frecvenței de ceas sau chiar oprirea ceasului pentru optimizarea consumului. Tehnologia CMOS este caracterizată prin imunitatea sa mult mai mare la perturbații și posibilitatea utilizării pe un domeniu extins al temperaturii de funcționare. [11]

Figura. Schema bloc generală a unui microcontroller

Sursa [12], accesată la 04.05.2014

Un microcontroller este un sistem de calcul complet ce include o unitate centrală de prelucrare, memorie proprie, generator de tact și dispozitive de intrare și ieșire. Performanțele elementelor sale constructive (precum performanțele unității centrale și capacitatea memoriei) depind de aplicația în care este folosit. Un element esențial în funcționarea microcontrollerului este programul care se stochează în memoria proprie.

Intrările sunt semnale digitale sau analogice, provenite de la comutatoare sau traductoare (de temperatură, de presiune sau specializate). Intrările digitale presupun semnale discrete la care informația înregistrată este informația eșantionată la momentul citirii liniei. Intrările analogice presupun exprimarea informației sub forma unei funcții continue de timp, ceea ce face ca citirea informației să fie susținută cu ajutorul unor circuite de prelucrare a informației precum comparatoare analogice sau convertoare analog-numerice, a căror ieșiri să fie citite de către microcontroller. Ieșirile microcontrollerului sunt analogice (ieșirile ale convertoarele numeric-analogice) sau digitale (caz în care informația este memorată până la o nouă scriere). [12]

Caracteristici arhitecturale ale unității centrale

Unitatea centrală de calcul (UCP sau CPU – Centrall Processing Unit) prezintă următoarele tipuri principale de arhitecturi:

Arhitecturi de tip “von Neumann”

Arhitectura de tip “von Neumann” este alcătuită din patru componente principale: unitatea aritmetică și logică (UAL), unitatea de control (UC), memoria centrală și dispozitivele de intrare/ieșire. Componentele sunt interconectate prin magistrale (bus) pe care circulă datele de calcul și instrucțiunile (datele de program), fiind conduse de semnalul de tact.

Fiecare celulă din memoria unui calculator înmagazinează o cantitate prestabilită de informație ce poate fi interpretată ca instrucțiune sau ca dată propriu-zisă. Datele sunt acele informații ce trebuie prelucrate conform instrucțiunilor primite.

Unitatea aritmetică și logică (UAL) este denumită de cele mai multe ori ca fiind „inima” calculatorului, fiind capabilă să efectueze mai multe tipuri de operații precum operații aritmetice (adunare, scădere, înmulțire), operații de comparație, manevrarea datelor (mutare, trunchiere, rotație) și operații ce pot influența circulația instrucțiunilor. [13]

Unitatea de control (UC) este un modul de comandă cu următoarele caracteristici:

interpretarea datelor si instrucțiunilor din memorie sau de la dispozitivele de intrare-ieșire;

decodarea instrucțiunilor;

transmiterea datelor de intrare corecte către unitatea aritmetico-logică (UAL);

comandarea unității aritmetico-logice (UAL) cu operația ce trebuie efectuată asupra datelor de intrare;

scrierea in memorie a rezultatelor operațiilor sau transmiterea informațiilor către dispozitivele de ieșire.

Figură. Arhitectură de tip “von Neumann”. Radu Rădescu, Arhitectura Sistemelor de Calcul, Capitolul 2. Tipuri de arhitecturi, pg. 31 [13]

Unitatea de control prezintă un numărător de instrucțiuni, capabil să conțină la orice moment adresa instrucțiunii curente din secvența de program. Acest contor se află în permanentă schimbare datorită faptului că “numără” instrucțiunile. Unitatea de control și unitatea aritmetică și logică se plasează în același circuit integrat ce poartă denumirea de unitate centrală de procesare (UCP) sau microprocesor. Sistemele de intrare-ieșire sunt dispozitive de comunicație a calculatorului cu exteriorul. Pe lângă dispozitivele tipice de intrare (tastatură, mouse) și ieșire (monitor, imprimantă), există și dispozitive de intrare-ieșire combinate (utilizate atât pentru intrare cât și pentru ieșire) precum modemul și placa de rețea.

Arhitectura de tip “von Neumann” este o arhitectură standard ce prezintă dezavantajul încetinirii operațiilor datorită existenței unei singure magistrale interne (bus) ce realizează preluarea și efectuarea secvențială a datelor și informațiilor. [13][14]

Arhitecturi de tip “Harvard”

Arhitectura de tip “Harvard” prezintă două zone distincte pentru memoria de date și memoria de instrucțiuni, fiecare zonă definită cu magistrale separate. Aceste magistrale lucrează în mod independent ceea ce prezintă un mare avantaj deoarece, astfel, instrucțiunile și datele pot fi aduse în același timp optimizând viteza sistemului comparativ cu arhitecturile ce prezintă o singură magistrală.

Procesorul prezent în arhitecturile de tip “Harvard” finalizează execuția unei instrucțiuni într-un singur ciclu de clock utilizând tehnica pipeline. Pipeline reprezintă o tehnică ce vizează creșterea vitezei totale de execuție a procesoarelor prin subdivizarea fiecărei instrucțiuni în etape sau segmente, fiecare etapă sau segment fiind executat de o unitate funcționala separată a procesorului. Segmentele pipeline sunt conectate între ele iar execuția de instrucțiuni se realizează simultan însă decalat, fără componente hardware suplimentare. [15]

Segmentele de execuție uzuale ale unei instrucțiuni pe un procesor sunt:

FI (Fetch Instruction) – procesorul citește din memorie instrucțiunea următoare ce trebuie executată

DI (Decode Instruction) – instrucțiunea este recunoscută și procesorul începe executarea ei

CO (Calculate Operand Address) – se calculează adresa de memorie de unde se aduce primul operand

FO (Fetch Operand) – se citește operandul aflat la adresa calculată anterior

EI (Execute Instruction) – execuția propriu-zisă a instrucțiunii și calculul rezultatului ei

WO (Write Operand) – scrierea rezultatului în memorie.

Segmentele de instrucțiune se află în execuție în etape diferite, fiind tratată câte o instrucțiune în fiecare etapă a pipeline-ului. Instrucțiunea următoare poate începe să fie executată imediat ce instrucțiunea anterioară a trecut de prima etapă, fără a fi necesară terminarea completă a etapelor pentru o singură instrucțiune. Astfel sistemele care folosesc tehnica pipeline prezintă o creștere în performanță fără a crește complexitatea. [15]

În cazul arhitecturii “Harvard”, în primul segment pipeline instrucțiunea care urmează a fi executată este extrasă din memorie iar în al doilea segment pipeline se preia din memorie utilizând adresa decodata, execuția fiind finalizată în cadrul celui de-al treilea segment pipeline.

Figură. Exemplu de tehnică pipeline [16]

Cu toate că permite o execuție rapidă a instrucțiunilor, tehnica pipeline prezintă o serie de dezavantaje numite “hazarde” care pot fi clasificate în trei categorii [15]:

Hazarde structurale – Apar când memoria sau unitatea funcțională este suprasolicitată de către mai multe instrucțiuni în același timp (conflicte de resurse comune). Pentru a evita un astfel de hazard se folosesc unități funcționale de tip pipeline care pot suporta mai multe instrucțiuni simultane sau memorii de tip cache separate pentru instrucțiuni și pentru date.

Hazarde de date – Dacă este nevoie de rezultatul produs de către o instrucțiune, însă acest rezultat nu a fost încă generat are loc un hazard de date ceea ce conduce la blocarea instrucțiunii curente până la scrierea rezultatului instrucțiunii anterioare.

Hazarde de control – Sunt produse de către instrucțiunile de salt. La execuția unui salt, pipeline-ul este golit și încărcat cu instrucțiunea următoare de la adresa de memorie la care se face saltul, însă există situații la care stagiul pipeline de decodificare nu știe dacă saltul a fost executat sau nu, de cele mai multe ori instrucțiunea adusă fiind abandonată și saltul neefectuat.

Arhitecturi CISC (Complex Instruction Set Computer)

Microprocesoarele care utilizează arhitectura de tip CISC au instrucțiuni încorporate în ele (instrucțiuni complexe), ceea ce salvează timpul necesar procesării deoarece instrucțiunile sunt preluate direct din microprocesor și nu din programul stocat pe memoria externă.

O instrucțiune simplă este executată direct de procesor, în timp ce execuția unei instrucțiuni complexe necesită un număr mare de unități specializate pentru fiecare tip de instrucțiune. Fiecare instrucțiune complexă este descompusă într-o secvență de microinstrucțiuni, prin urmare execuția unei instrucțiuni complexe presupune de fapt execuția secvenței de microinstrucțiuni din care este alcătuită. Microinstrucțiunile sunt înregistrate în timpul procesului de fabricație într-o memorie de tip ROM pe pastila de siliciu a procesorului sub formă de microcod.

Modelele CISC prezintă un set foarte mare de instrucțiuni cod mașină, cu lungimi variabile și moduri de adresare sofisticate. Procesorul execută operații logice suplimentare datorită lungimilor diferite ale instrucțiunilor (în octeți) și a timpului de execuție diferit (perioade de clock diferite per instrucțiune). Viteza de execuție este corelata cu timpul de execuție al celei mai complexe instrucțiuni.

Arhitectura CISC are rolul principal de a grăbi execuția programelor, însă datorită instrucțiunilor încorporate în microprocesor acest tip de arhitectură prezintă performanțe scăzute deoarece compilatoarele nu au capacitatea de a utiliza corespunzător registrele iar microinstrucțiunile se execută mai rapid decât instrucțiunile. [13][17]

Arhitecturi RISC (Reduced Instruction Set Computer)

Arhitectura RISC execută instrucțiunile mai rapid deoarece nu parcurge nivelul de conversie a microcodului, generând mai multe instrucțiuni față de compilatorul CISC.

RISC CISC

Figură. Arhitectura RISC și CISC – Etapele principale, sursă http://sisteme-incorporate.ro/arhitectura-risc-vs-cisc/ accesată la 05.05.2014

RISC utilizează instrucțiuni simple care pot fi executate în cadrul unui singur ciclu de clock. Implementarea unei instrucțiuni a unui limbaj de nivel înalt se realizează folosind mai multe linii de cod, prin urmare este necesară o zonă mai mare de RAM pentru a stoca instrucțiunile, comparativ cu CISC care necesită o arie relativ mică de memorie RAM.

Avantajele utilizării arhitecturii RISC sunt următoarele [17]:

Datorită setului redus de date prezent în acest tip de arhitectura, fluxul de instrucțiuni de asamblare este organizat în mod eficient;

Timpul de proiectare și erorile de construcție sunt mai reduse decât la CISC;

Utilizează tehnici de procesare pipeline;

Utilizează o memorie tampon sau “cache” pentru accelerarea operațiilor;

Utilizează un format fix al instrucțiunilor, codificate pe un singur cuvânt de 32 biți sau 64 biți;

Are un număr de registre generale substanțial mai mare decât arhitectura CISC;

În concluzie, conceptul arhitecturii RISC nu se reduce la setul redus de instrucțiuni ci implică o arhitectură simplificată cu o viteză de calcul sporită. Procesoarele bazate pe acest tip de arhitectură prezintă o suprafață de siliciu redusă datorită unui număr mult mai mic de tranzistoare folosite în structură și prin urmare costul acestora este mult mai redus. [15]

Memoria microcontroller-ului

Instrucțiunile care controleaza microcontrollerul trebuie stocate în memorii nevolatile, unde informațiile se păstrează și după oprirea și repornirea alimentării. Rezultatele intermediare pot fi înscrise într-o memorie volatilă fiind importantă citirea și scrierea lor rapidă în timpul funcționării.

Microcontrollerele includ următoarele tipuri de memorie [12]:

Memoria RAM (Random Access Memory) – memorie volatilă care poate fi citită/scrisă de către unitatea centrală de prelucrare. Memoria de tip RAM ocupă mult spațiu pe chip și implică costuri mari de implementare, de aceea este puțin folosită în cadrul microcontroller-elor. Memoria RAM statică (SRAM – Static RAM) este folosită pentru stocarea nevolatilă a datelor, are o viteză de acces mare și un număr nelimitat de ștergeri/reînscrieri.

Memoria ROM (Read Only Memory) – memorie simplă, ieftină, utilizată pentru stocarea programelor în timpul fabricației. Informațiile din cadrul memoriei de tip ROM pot fi citite de către unitatea centrală însă nu pot fi modificate.

Memoria PROM (Programmable Read Only Memory) – similară memoriei ROM însă prezintă avantajul posibilității programării de către utilizator. Această memorie se clasifică în funcție de posibilitățile de ștergere în:

Memorie EPROM (Erasable PROM), care prezintă un mic geam de cuarț ce permite ștergerea memoriei chip-ului prin expunerea la raze ultraviolete. Expunerea presupune ștergerea întregii informații, nu doar a unor fragmente de informație. Memoria EPROM poate fi ștearsă și rescrisă de un număr limitat de ori, iar programarea sa necesită o procedură specială. Unele microcontrollere au circuite speciale de programare cu ajutorul cărora se poate programa memoria EPROM. În cadrul programării, memoria EPROM nu este conectată la magistrala de date și adrese.

OTP (One Time Programmable PROM) este de fapt o memorie EPROM cu chip-ul capsulat într-o capsulă fără fereastră, mult mai ieftină. Memoria OTP nu se poate șterge sau reprograma iar aplicațiile sunt lipsite de flexibilitate.

Memoria EEPROM (Electrically Erasable PROM) poate fi stearsă electric în timpul funcționării. Este o memorie ieftină și lentă, cu un număr limitat de ștergeri și scrieri (usual 10000). Reînscrierea într-o memorie EEPROM presupune parcurgerea unui anumit număr de pași iar ștergerea poate fi selectivă.

Memoria FLASH poate fi ștearsă și (re)programată electric precum memoria EEPROM și prezintă capacitatea unui EPROM, însă nu necesită fereastră pentru ștergere. Memoria FLASH nu permite ștergerea selectivă de locații. [12]

Microcontrollerele cu memorie ROM sunt folosite în cadrul aplicațiilor ce necesită un volum mare de producție, memoriile OTP fiind folosite pentru volum mic iar EPROM pentru prototipuri. Tipul de memorie utilizată în cadrul microcontroller-elor, capacitatea memoriei si ușurința cu care se poate alimenta sunt caracteristici specifice fiecărui circuit. [12][13]

Dispozitive de intrare/ieșire ale microcontroller-ului

Microcontrollerele interacționează cu mediul în procesul de control prin intermediul dispozitivelor de intrare/ieșire (I/O – Input/Output). Dispozitivele I/O au rolul de a implementa funcții speciale care degrevează unitatea centrală de activitățile specifice în cadrul funcției respective.

Printre funcțiile cele mai importante ale dispozitivelor I/O se enumeră realizarea de operații de comunicație (transfer serial/paralel de date), operații de conversie analog numerică, efectuarea de funcții de comandă și funcții de timp (generare de impulsuri). Resursele necesare acoperă funcțiile de control propriu-zis și funcțiile sistemelor de întreruperi și a timer-elor, care sunt aplicații în timp real. [12]

Dispozitivele I/O se regăsesc în configurația tuturor microcontroller-elor însă există dispozitive care se regăsesc doar în cadrul microcontroller-elor construite specific pentru optimizarea unor aplicații particulare.

Unitatea centrală interpretează dispozitivele I/O ca porturi și prezintă două metode de mapare (alocare) a adreselor pentru apelarea porturilor. Maparea se realizează fie în spațiul de memorie, fie în spațiul propriu. Pentru fiecare tip de mapare există o serie de avantaje și dezavantaje [12]:

Maparea în spații separate:

Avantaje: Se evită comiterea de erori software deoarece se folosesc instrucțiuni diferite pentru accesul la memorie și la dispozitivele I/O. Dispozitivele I/O nu ocupă spațiu de memorie iar decodificatorul de adrese este simplu datorită spațiului mic de adresare al dispozitivelor I/O;

Dezavantaje: Instrucțiunile I/O sunt puțin flexibile și nu permit folosirea modurilor de adresare folosite în lucrul cu memoria.

Maparea în spațiul comun:

Avantaje: Programarea operațiilor I/O este foarte flexibilă deoarece instrucțiunile de lucru cu memoria și modurile de adresare sunt utilizabile în tratarea dispozitivelor I/O. Prin urmare, se poate opera cu porturile la fel ca și cu o locație de memorie. Operațiile aritmetice și logice folosesc operanzi direct de la port iar datele pot fi mutate în porturi prin instrucțiuni. Conținutul porturilor poate fi citit, modificat și scris din nou în port cu ajutorul instrucțiunilor.

Dezavantaje: Maparea în același spațiu prezintă erori software și spațiul de adresare pentru memorie este mult mai mic.

Porturile paralele I/O

Rolul porturilor paralele I/O este de a facilita transferul simultan a datelor între microcontroller și mediu. Numărul de biți transferați depinde de organizarea porturilor în cadrul microcontroller-elor: organizare pe 8 biți sau pe un număr mai mare de biți. Sensul transferului, intrarea I (input) la ieșirea O (output), este programabil și se stabilește în cadrul unui registru de sens. Pentru optimizarea transferului de informații cu mediul sunt implementate mecanisme de apelare specifice la nivel de bit pentru registrele porturilor paralele I/O. Mecanismele de apelare presupun o structură hardware corespunzătoare și instrucțiuni de manipulare a informației la nivel de bit (execuții pe bit, transfer de bit, mascare de bit, operații logice la nivel de bit). Datorita acestor posibilități de manipulare la nivel de bit, la descrierea sistemelor paralele I/O se specifică întotdeauna numărul total de linii I/O. [12]

Interfața portului paralel I/O prezintă un circuit denumit circuit de interfață, responsabil pentru corectitudinea transferului către și de la dispozitiv. Printre metodele de sincronizare folosite de către circuitul de interfață se află:

Transferul direct – Interfața are rolul de a transfera semnalele de la unitatea centrală spre dispozitivul I/O (în cazul operației de ieșire) sau de la dispozitivul I/O la untiatea centrală (în cazul operației de intrare).

Transferul cu protocol (Handshake Method) – În situația în care interfața și dispozitivul I/O lucrează la viteze de lucru diferite se folosește un transfer denumit handshake. [12][13]

Fiecare linie a dispozitivelor I/O poate fi folosită independent ca intrare sau ca ieșire. Pentru a interacționa cu mediul, unui microcontroller îi sunt necesare multe conexiuni la nivel de pin ceea ce înseamnă un circuit cu un număr mare de pini. Din considerente economice, se urmărește reducerea numărului de pini ai circuitului integrat, astfel se atribuite funcții multiple pinilor porturilor paralele.

La pinii porturilor paralele au acces conexiunile modulelor de comunicații seriale, conexiunile modulelor timer, canalele de intrare ale convertoarelor analogice sau digitale și liniile pentru generarea întreruperilor externe.

Module de comunicații seriale

Comunicația serială oferă compatibilitate cu o gamă largă de dispozitive și necesită un număr minim de fire și conexiuni. Într-o astfel de comunicație este necesară cunoașterea începutului și sfârșitului informației transferate, altfel spus emițătorul și receptorul trebuie să fie sincronizați.

Sincronizarea emițătorului și a receptorului se poate realiza prin două metode în cadrul microcontroller-elor: modulul serial asincron și modulul serial sincron. Fiecare metodă presupune că durata unui bit este aceeași la emițător și la receptor, fiind folosit același semnal de ceas pentru serializarea informației. Numărul de biți transmiși într-o secundă reprezintă baud rate (rata de transfer), măsurată în biți pe secundă (bits per second – bps). Durata unui bit este dată de raportul 1/(baud rate). [12]

Modul serial asincron

Modulul serial asincron este referit ca UART – Universal Asynchronous Receiver Transmiter. În cadrul unui transfer serial asincron începutul fiecărei secvențe de opt biți (byte) este marcat de o tranziție a liniei, menținută pe durata unui bit (denumit bit de start), iar sfârșitul este marcat de un bit de stop. Bitul de stop menține linia pe durata unui bit într-o stare predefinită. Informația este transferată între bitul de start și bitul de stop, iar secvența completă de informație este formată dintr-un bit de start, opt biți de date (uneori chiar nouă) și un bit de stop – prin urmare un total de zece (sau unsprezece) unități de cod. [12][13]

Interfața seriala asincronă poate fi implementată cu ajutorul unui program care generează secvența de transfer și măsoară durata fiecărui bit, însă această metodă este costisitoare din punct de vedere a resurselor hardware necesare și a timpului consumat. O soluție mai bună de implementare și des folosită în microcontrollere este realizarea interfeței cu un modul hardware specializat. Unitatea centrală va înscrie informația de transferat într-un registru al interfeței iar hardware-ul realizează serializarea și generarea secvenței. În cazul în care registrul de recepție este plin sau registrul de transmisie este gol, interfața poate suspenda temporar execuția programului cu ajutorul întreruperilor. [12]

Schema bloc simplificată a interfeței seriale asincrone este reprezentată în figură.

Figură. Schema bloc simplificată a interfeței seriale asincrone a dispozitivelor I/O prezente la microcontrollere

TxD – Transfer Date, RxD – Recepție Date, CLK – Ceas (Clock)

Sursa: http://vega.unitbv.ro/~ogrutan/Microcontrollere/curs.pdf, Data accesare: 30.05.2014

Ceasul pentru generarea ratei de transfer (CLK) poate fi intern sau extern. Dacă se folosește un ceas intern, acesta este format din ceasul unității centrale cu o prescalare. Interfața UART are registre de stare și control cu ajutorul cărora se pot programa modul de lucru, parametri de comunicație și selecția de ceas.

Modulul serial sincron

Transferul serial poate fi realizat în două moduri: transfer serial sincron sau transfer serial autosincronizat. Transferul autosincronizat presupune utilizarea unui sistem special care permite extragerea semnalului de ceas din datele recepționate, însă acest tip de transfer nu este folosit în cadrul microcontroller-elor.

Transferul serial sincron în cadrul microcontroller-elor este folosit pentru comunicația cu dispozitivele periferice. Acest transfer necesită un emițător, un receptor și un semnal de clock transferat pe o linie dedicată. Între emițător și receptor sincronizarea se realizează o singură data la inițierea transferului de date, spre deosebire de modul asincron la care sincronizarea se făcea prin bitul de start al fiecărui octet. Ratele de transfer ale modului serial sincron sunt mult mai mari decât modul asincron, fiind estimate la 1Mbps. [12]

Specific transferului serial sincron este relația master-slave între dispozitive. Transferul de date poate fi inițiat doar de către master, care scrie un octet în registrul de transmisie de date al interfetei sincrone. Datele înscrise sunt apoi transferate în registrul de deplasare, sunt serializate și transmise pe linia MOSI (Master Output Slave Input), care este o linie de emisie în cadrul transferului serial sincron. Clock-ul pentru sincronizarea procesului este transmis pe linia SCK (Serial Clock). Datele ajung la dispozitivul slave tot pe linia MOSI, fiind deplasate cu ajutorul ceasului recepționat pe linia SCK. Atunci când registrul de deplasare este “umplut”, datele sunt transferate în registrul de recepție de date. [12]

Pinii asociați unei conexiuni seriale sincrone sunt:

MISO – Master In Slave Out – pinul este configurat ca intrare într-un dispozitiv master și ieșire dintr-un dispozitiv slave. Datele se transmit într-un singur sens, de la slave către master.

MOSI – Master Out Slave In – pinul este configurat ca ieșire dintr-un dispozitiv master și intrare într-un dispozitiv slave. Datele se transmit într-un singur sens, de la master la slave.

SCK – Serial Clock – pinul este configurat ca ieșire la un dispozitiv master și intrare la un dispozitiv slave. Prin aceasta conexiune se transmite semnalul de sincronizare a datelor.

nSS – non Slave Select – la acest pin se aplică semnalul de selecție a unui dispozitiv slave. Pentru un dispozitiv slave, semnalul este activ pe toată durata unui transfer de date în care este implicat (activ – low), iar pentru un dispozitiv master nSS se conecteaza permanent la 1 logic. [12]

Modurile de interconectare între un master și slave depinde de numărul de dispozitive slave existente în transferul serial sincron. În cazul în care în sistem există un singur dispozitiv slave, conexiunea se realizează în modul următor, reprezentat în figură:

Figură. Master- slave, conexiune serial sincronă, Sursa: http://vega.unitbv.ro/~ogrutan/Microcontrollere/curs.pdf, Data accesării: 31.05.2014

În cazul în care există mai multe dispozitive interconectate dintre care doar unul este master, se realizează conexiuni de tipul “multi-slave”. Există două moduri de conexiune master – multi-slave; în primul mod master-ul folosește ieșiri de porturi pentru a selecta dispozitivul slave, iar în cel de-al doilea mod toate dispozitivele slave sunt legate în inel și selectate. Aceste două moduri diferite de conexiune multi-slave sunt prezentate în figurile următoare [12]:

Figură. Conexiune serială sincronă – Master cu porturi pentru selecția dispozitivului slave

Sursa: http://vega.unitbv.ro/~ogrutan/Microcontrollere/curs.pdf, Data accesării: 01.06.2014

Figură. Conexiune serială sincronă – Master cu dispozitive slave legate în inel

Sursa: http://vega.unitbv.ro/~ogrutan/Microcontrollere/curs.pdf, Data accesării: 01.06.2014

Module Timer

Funcțiile de timp ale microcontroller-ului sunt puse la dispoziția utilizatorului prin module numite timer. Un sistem timer are un set de funcții implementate pe baza unui numărător și a unor blocuri funcționale specifice. Modulul timer este folosit pentru a măsura timpul necesar proceselor și pentru a genera semnale la perioade și frecvențe dorite.

Funcțiile unui timer pot realiza întreruperi independente cu control propriu și vector de întrerupere specific. Într-un astfel de sistem există o serie de mecanisme puse la dispoziția utilizatorului printre care amintim: mecanismul de comparare – care permite controlul semnalelor de ieșire, mecanismul de captură – care permite monitorizarea semnalelor de intrare și numărătoarele interne – care oferă referințe de timp interne. De asemenea, modulele timer pot fi folosite și pentru generarea formelor de undă sau pentru conversii de tip digitale sau analogice simple. [12]

Principalele funcții oferite de un modul timer sunt următoarele:

Captură la intrare (IC – Input Capture)

În unele aplicații care implică utilizarea modulelor timer este necesară cunoașterea momentului de timp în care are loc un eveniment. Într-un sistem, timpul fizic este reprezentat prin conținutul unui numărător iar apariția unui eveniment printr-o tranziție de semnal. Momentul de apariție al evenimentului poate fi înregistrat cu ajutorul numărătorului prin memorarea stării numărătorului la acel timp. Principalele aplicații specifice funcției de captură la intrare sunt:

Înregistrarea momentului de apariție a unui eveniment;

Măsurarea perioadei unui semnal necunoscut, prin determinarea timpului scurs între două tranziții consecutive de același fel (două fronturi pozitive consecutive sau două fronturi negative consecutive);

Numărarea unor evenimente, prin utilizarea unui contor de evenimente. La apariția unui eveniment se generează o întrerupere; se incrementează un contor de evenimente care înregistrează numărul de apariții. Sfârșitul contorizării se stabilește cu ajutorul funcției de comparare la ieșire. [12]

Comparare la ieșire (OC – Output Compare)

La fiecare impuls de ceas, valoarea numărătorului principal este comparată cu cea a unui registru iar dacă se constată a fi egale, pot avea loc următoarele evenimente: declanșarea unei acțiuni la pinii de ieșire, setarea unui flag într-un registru sau generarea unei întreruperi pentru unitatea centrală.

Schema bloc a funcției de comparare la ieșire este următoarea:

Figură. Funcția de comparare la ieșire (OC – Output Compare) – Schema bloc principală

Sursa: http://vega.unitbv.ro/~ogrutan/Microcontrollere/curs.pdf, Data accesării: 01.06.2014

Utilizatorul controlează acțiunea dorită la pinul ieșirii de comparare într-un registru de control. Comparatorul măsoară diferențele între valoarea numărătorului liber și valoarea din registrul de comparare la fiecare clock, iar dacă constată o egalitate între valori, activează acțiunea specifică la pinul de comparare. De asemenea, comparatorul generează o întrerupere care a fost validată anterior prin bitul OCxI, întreruperea fiind vectorizată și având o locație specifică în tabela vectorilor de întrerupere. [12]

Întreruperile în timp real (RTI – Real Time Interrupt)

Funcția de întrerupere în timp real RTI este folosită pentru a genera întreruperile, folosite în situații de comutare în sisteme multitasking sau pentru declanșarea execuției unor secvențe. Perioada RTI este programabilă iar rezoluția funcției nu este la fel de performantă comparativ cu funcția de comparare.

COP (Computer Operating Properly) Watchdog

COP Watchdog este un ceas de gardă folosit pentru detecția erorilor de program. Funcția ceasului de gardă este o funcție opțională a cărei registru trebuie resetat periodic de către utilizator; în cazul în care registrul nu a fost resetat, unitatea centrală va reseta întreg sistemul pentru a preveni o situație problematică necontrolabilă.

La microcontrollere, funcția ceasului de gardă este un timer dedicat cu structura modului reprezentată ca în figura următoare:

Figură. Schema bloc a modului watchdog.

Sursa: http://vega.unitbv.ro/~ogrutan/Microcontrollere/curs.pdf, Data accesării: 01.06.2014

Timerul este compus dintr-un numărător al cărui ceas este programabil printr-un registru denumit registru de prescalare. La activarea circuitului, numărătorul numără incontinuu iar atunci când atinge cea mai mare valoare (exemplu, FFFFh în cazul unui numărător de 16 biți) se generează către unitatea centrală un semnal de RESET. [12]

Acumulatorul de impulsuri (Pulse Accumulator)

În registrul acumulator de impulsuri pot fi numărate pulsuri interne sau evenimente exprimate prin pulsuri. Funcțiile principale ale acumulatorului (numărătorului) de impulsuri sunt:

Numărarea de evenimente – numărătorul este incrementat la fiecare front activ care a fost detectat la un pin;

Numărarea gardată, folosită în aplicații de măsurare a duratei unui singur impuls prin înscrierea cu 0 a numărătorului la începutul pulsului și citirea valorii sale la sfârșitul pulsului.

Pe lângă modulele timer anterioare, există aplicații care utilizează module timer PWM (Pulse Width Modulation) care generează semnale modulate. Semnalele PWM sunt utilizate în comanda motoarelor de curent continuu sau a surselor de alimentare. Aceste semnale sunt generate periodic și permit utilizatorului modificarea factorului de umplere în mod controlat.

Figură. Semnal PWM. Sursa: http://vega.unitbv.ro/~ogrutan/Microcontrollere/curs.pdf, Data accesării: 01.06.2014

Structura unui modul PWM este reprezentată în figura următoare:

Figură. Schema bloc a modulului PWM.

Sursa: http://vega.unitbv.ro/~ogrutan/Microcontrollere/curs.pdf, Data accesării: 01.06.2014

În schema bloc a modului PWM, blocul registrului de prescalare are rolul de a genera semnalul de ceas (clock) pentru numărător. Conținutul numărătorului este comparat cu conținutul registrului PWM, și atâta timp cât rezultatul comparației este mai mic sau egal se va genera “1 logic” la ieșirea PWM. În caz contrar, se generează “0 logic”. [12]

Sistemul de întreruperi

Întreruperile sunt schimburi în fluxul de control a căror cauze se află, de obicei, în legătură cu operațiile I/O. Un concept esențial al întreruperilor este transparența, proprietate care permite sistemului de calcul să se întoarcă în starea pe care a avut-o înainte de apariția unei întreruperi și servirea rutinii specifice.

Un sistem de întrerupere permite detecția în cadrul sistemului de calcul a unor evenimente de natură externă sau internă precum recepția unui caracter pe un canal, golirea unui registru, generarea unui impuls de către contorul de timp, tentativa de execuție a unui cod de instrucțiune protejat, eroare în timpul unei execuții și multe altele.

Sistemul de întrerupere are rolul de a declanșa acțiunile necesare pentru tratarea evenimentelor apărute. El permite sistemului de calcul să reacționeze în timp util la aceste evenimente, să se sincronizeze cu ele și să le trateze rapid. Un sistem de întrerupere este mult mai avantajos și preferat în cadrul programelor comparativ cu folosirea testării periodice prin program a indicatorilor de stare și a semnalelor de intrare (alternativă care s-a dovedit a fi ineficientă în situația în care numărul de elemente pentru testare este foarte mare). [18]

De cele mai multe ori, un sistem de calcul are mai multe dispozitive I/O care lucrează în paralel și există posibilitatea de apariție simultană a două cereri de întrerupere în sistem sau apariția unei cereri în timpul execuției altei cereri. Pentru a evita astfel de situații, sistemul de calcul permite departajarea între toate întreruperile, astfel fiecare va avea câte un nivel de prioritate. De asemenea, rutinele de tratare ale întreruperilor sunt executate tot cu prioritate. În timpul execuției unei proceduri de tratare a întreruperii cu prioritatea n, orice tentativă a unui dispozitiv de a cauza o întrerupere cu o prioritate mai mică decât n va fi ignorată până la terminarea rutinii cu prioritate mai mare.

O modalitate recentă de soluționare a cererilor de întrerupere plasate simultan este de a asigna niveluri de prioritate pentru dispozitive și de a utiliza un sistem de arbitrare pentru gestionarea cererilor. [13]

Așa cum s-a menționat anterior, întreruperile sunt cauzate de evenimente externe sau interne ale sistemului de calcul. Sursele interne de întrerupere în cadrul sistemelor microcontroller sunt: tentativa de divizare cu zero, execuția unei instrucțiuni de întrerupere software și tentativa de execuție a unei instrucțiuni protejate. Întreruperile externe se clasifică în două tipuri:

Nemascabile, generate prin activarea semnalului NMI (Non-Maskable Interrupt)

Mascabile, generate prin activarea semnalului INT (Interrupt)

Întreruperile mascabile pot fi validate prin resetarea indicatorului IF (Interrupt Flag) din registrul de stare al programului (IF = 0). Validarea se realizează la revenirea din rutina de întrerupere atunci când registrul de stare se reface sau prin instrucțiunea STI (Set Interrupt). Resetarea se realizează la lansarea unei rutine de întrerupere sau prin utilizarea instrucțiunii CLI (Clear Interrupt). [18]

Întreruperile nemascabile nu sunt afectate de starea indicatorului IF. Ele sunt de obicei utilizate pentru a indica situații critice în funcționarea sistemului (precum erori de paritate sau fluctuații ale tensiunii de alimentare).

Deservirea unei întreruperi de tip hardware se realizează conform următorilor pași [18]:

Se activează un semnal de întrerupere, indicând un eveniment.

Controlorul de întreruperi verifică dacă întreruperea este nemascată și dacă nu este în curs de desfășurare o alta rutină cu prioritate superioară.

Se activează linia de întrerupere către procesor:

Dacă întreruperea este mascată, se ignoră.

Dacă întreruperea este nemascată, dar este în curs de desfășurare o rutină prioritară, se așteaptă terminarea acesteia.

Se memorează cererea de întrerupere într-un registru al controlorului.

Se testează intrarea de întrerupere la incheierea execuției instrucțiunii aflate în curs.

Dacă întreruperea este validata (IF setat), se salvează pe stivă adresa instrucțiunii imediat următoare și conținutul registrului de stare.Contrar, întreruperea este ignorată.

Se lansează procedura de identificare a sursei de întrerupere prin INTA (Interrupt Acknowledge).

Controlorul plasează vectorul întreruperii curente pe magistrala de date. Procesorul folosește vectorul de întrerupere ca index în tabele de întreruperi pentru determinarea adresei rutinei de tratare a întreruperii, apoi execută un salt la adresa extrasă din tabelă.

Se executa rutina de întrerupere.

Înainte de sfârșitul rutinei, se anunță controlorul de întreruperi asupra încheierii întreruperii curente prin comanda EOI (End Of Interrupt). Astfel, se permite deservirea unei noi întreruperi.

Instrucțiunea IRET (Interrupt Return) încheie rutina de întrerupere; registrul de stare se va reface cu informația salvată pe stivă și se va executa un salt la secvența întreruptă; adresa de revenire se află tot pe stivă.

Se continuă execuția secvenței întrerupte.

Adresele rutinelor de întrerupere se află în tabela de întreruperi care este plasată la începutul spațiului de adresare. Tabela conține un număr de n intrări corespunzătoare celor n nivele de întrerupere recunoscute de procesor. Fiecare intrare conține un anumit număr de octeți, adresa de offset și adresa de segment a rutinei de întrerupere.

Întreruperilor pot fi simulate prin program cu ajutorul instrucțiunii INT n (unde n specifică nivelul de întrerupere). Funcția INT n este utilă în cadrul apelării rutinelor și funcțiilor din sistemul de operare și un avantaj datorită posibilității de relocalizare și redirecționare a rutinelor prin mecanismul tabelei de întreruperi. Prin urmare, este suficient ca utilizatorul unei funcții de sistem să cunoască numai intrarea în tabela de întreruperi alocată funcției respective. [18]

3. REALIZAREA PRACTICĂ

a. COMPONENTE

ARDUINO UNO

Arduino este un instrument open-source compus dintr-un mediu de dezvoltare și o placă de dezvoltare cu microcontroller, fiind o platformă capabilă să culeagă informații din mediu și să acționeze pe baza acestora. Preluarea informațiilor din mediu se poate realiza cu ajutorul unei game variate de senzori sau a conectării cu alte sisteme prin: plăci de rețea Ethernet capabile să comunice informații prin internet, plăci de rețea WIFI, dispozitive GSM pentru Arduino sau conectori Bluetooth pentru aplicațiile care necesită conectarea la telefonul mobil sau laptop. Informațiile preluate de către senzori și comutatoare este procesată în cadrul microcontrollerului și este transmisă către motoare de curent continuu, servomotoare, motoare pas cu pas, actuatoare și nu numai. Afișarea informațiilor preluate se poate realiza cu ecrane LCD simple (LCD text cu 16 caractere, respectiv cu 20 de caractere) sau ecrane LCD grafice.

Arduino are un cost de achiziție redus față de celelalte sisteme de dezvoltare bazate pe microcontroller aflate pe piața curentă, poate fi folosit pe orice sistem de operare (Windows/Linux/MacOS), este open source și oferă un mediu de programare ușor de învățat.

Placa de dezvoltare Arduino Uno are la bază microcontrollerul ATmega328 care se poate programa cu ajutorul portului USB al calculatorului. Arduino Uno are 14 intrări/ieșiri digitale (dintre care 6 pot fi folosite ca ieșiri PWM), 6 intrări analogice, un oscilator la 16MHz, o conexiune USB, o mufă de alimentare, un header ICSP (In Circuit Serial Programming) și un buton de reset.

Figură. Placa de dezvoltare Arduino Uno, sursă: http://www.roroid.ro/prima-lectie/ accesată la data 10.06.2014

În următorul tabel se regăsesc specificațiile plăcii de dezvoltare:

Tabel. Specificații ArduinoUno, sursă [19] accesată la data 10.06.2014

ATmega328 este un microcontroller de tip single-chip dezvoltat de către firma ATMEL în cadrul seriei megaAVR. Este un microcontroller de performanță înaltă bazat pe arhitectura RISC și combină o memorie de 32 KB de tip FLASH ISP (In System Programming), o memorie EEPROM de 1KB, o memorie SRAM cu capacitatea de 2 KB, 23 de linii de uz general I/O și 32 de regiștri de uz general. Microcontrollerul oferă de asemenea trei tipuri flexibile de timere/numărătoare, întreruperi externe și interne, un serial programabil, canale de conversie analog/digitală și timer watchdog programabil. Dispozitivul operează la tensiuni cuprinse între 1.8 si 5.5V, fiind capabil să execute instrucțiuni complexe într-un singur ciclu de ceas, atingând până la 1MIPS (Million Instructions Per Second) per MHz. În anexă se regăsește diagrama bloc a microcontrollerului, precum și schemele complete pentru configurația pinilor. [20]

Microcontrollerele sunt folosite într-un domeniu mare de aplicații, fiind utilizate pentru construcția de roboți autonomi, senzori inteligenți, sisteme de procesare de semnal audio, sisteme de procesare de imagini, în electronică de consum (televizoare, telefonie mobilă), în industria de automobile, în aparatura electrocasnică (mașini de spălat, cuptoare cu microunde, frigidere), în climatizare, aparate de măsura și multe altele. Aplicațiile în care se utilizează microcontrollerele fac parte din categoria sistemelor de tip “embedded”, adică categoria sistemelor încapsulate care oferă un sistem de calcul transparent utilizatorului. [11]

ATmega328 este folosit într-o gamă largă de proiecte și sisteme autonome care utilizează un microcontroller simplu, ieftin și cu consum redus. Din aceste motive, este foarte popular în cadrul aplicațiilor ce implică platforme de dezvoltare Arduino, în special la modele Arduino Uno și Arduino Nano.

Pinii microcontrollerului ATmega328 sunt:

VCC tensiunea de alimentare

GND masa

Port B (PB7:0) este un port I/O bidirecțional pe 8 biți cu rezistențe pull-up interne (selectate pentru fiecare bit). Pinii portului B au o stare de impedanță înaltă (tri-stated) la activarea unei condiții de reset, indiferent de clock.

Port C (PC5:0) este un port I/O bidirecțional pe 7 biți cu rezistențe pull-up interne (selectate pentru fiecare bit). La fel ca pinii portului B, pinii portului C au o stare de impedanță înaltă (tri-stated) la activarea unei condiții de reset fără să se țină cont de funcționarea clock-ului.

PC6/RESET poate fi programat ca pin I/O sau ca pin de intrare RESET.

Port D (PD7:0) este un port I/O bi-directional pe 8 biți cu rezistențe pull-up interne (selectate pentru fiecare bit). Prezintă aceeași condiție pentru starea tri-stated ca și porturile B și C.

AVcc este pinul pentru tensiunea de alimentare a convertoarelor A/D, a PC3:0 și ADC7:6. Este conectat extern la VCC atunci când nu este utilizat ADC (Analog Digital Converter). Dacă ADC este utilizat, este conectat la VCC printr-un filtru trece-jos.

AREF pinul analog referință pentru convertorul A/D.

ADC7:6 servesc ca intrări analogice pentru convertoarele A/D. [20]

Alimentarea platformei Arduino Uno se realizează fie prin conexiunea USB, fie printr-o tensiune de alimentare externă (non-USB), care poate fi o baterie sau un adaptor AC/DC. Placa operează la alimentări externe de 6 până la 20 de volți. La o alimentare sub 7V, pinul 5V poate alimenta la mai puțin de cinci volți și placa poate deveni instabilă, iar la o alimentare ce depășește 12V există posibilitatea de supraîncălzire. Ca atare, gama de tensiune recomandată este 7-12 volți. Pinii de putere sunt următorii:

VIN: tensiunea de intrare către placa Arduino atunci când se foloseste o sursă de alimentare externă (spre deosebire de 5 volți de la conexiunea USB sau alte surse de tensiune).

5V: pin care transmite tensiunea de 5V de la regulatorul de pe placă.

3V3: alimentare de 3.3 volți generată de către regulatorul de pe placă, cu un curent maxim de 50mA.

GND: pinii de masă.

IOREF: tensiunea de referință cu care operează microcontroller-ul. O protecție (engleză: shield) configurată corespunzător citește tensiunea de pe pinul IOREF și selectează puterea corespunzătoare de lucru la ieșire. [21]

Pini intrare/ieșire. Corespondență Arduino Uno – ATmega328

Fiecare dintre cei 14 pini digitali ai platformei Arduino Uno poate fi folosit ca intrare sau ieșire (input sau output) folosind funcțiile pinMode( ), digitalWrite( ) și digitalRead( ). Pinii operează la 5V și au limita curentului la maxim 40mA, cu rezistențe interne pull-up de 20-50 kOhms care înn mod implicit sunt dezactivate. Există anumiți pini digitali cu funcții suplimentare:

Serial: 0 (RX) și 1 (TX) – folosiți pentru recepție (RX) și transmisie (TX) de date seriale UART TTL (Transistor Transistor Logic). Acești pini sunt conectați la pinii corespondenți de pe ATmega și oferă facilități pentru comunicația cu un computer, cu un alt Arduino sau cu alte microcontrollere.

Întreruperi externe: 2 și 3 – pot fi configurați să genereze o întrerupere, o pantă crescătoare sau descrescătoare sau o schimbare într-o valoare.

PWM: 3,5,6,9,10 și 11 – oferă semnal PWM pe 8 biți cu ajutorul funcției analogWrite( ).

SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) – suportă comunicația de tip SPI (Serial Peripheral Interface).

LED: 13 – există un LED construit intern conectat la pinul digital 13. Atunci când pinul are valoarea HIGH, LED-ul se aprinde, iar la valoarea LOW, LED-ul se stinge. [21]

Procesorul aflat în “inima” plăcii de dezvoltare Arduino prezintă două tipuri diferite de întreruperi: întreruperi externe și întreruperi de tip “pin change” (schimbare la nivel de pin). Așa cum s-a menționat anterior, există doar doi pini pentru întreruperi externe pe ATMEGA 328 (Arduino Uno), INT0 și INT1, mapați către pinii 2 și 3 de pe Arduino. Aceste întreruperi sunt ușor interpretate de către hardware. În schimb, întreruperile de tip “pin change” pot fi activate pe mai mulți pini, iar pentru plăcile de dezvoltare bazate pe ATMEGA 168/328, pot fi activate pe oricare sau chiar toți pinii de semnal ai Arduino. Întreruperile pot fi în general activate/dezactivate cu funcțiile de program interrupts( )/noInterrupts( ). În mod implicit, întreruperile din Arduino sunt activate. Funcțiile attachInterrupt( ) și detachInterrupt( ) pot fi folosite numai pentru pinii de întreruperi externe. [23]

Adițional față de intrările de tip digital, Arduino Uno are 6 intrări analogice marcate A0 până la A5, fiecare oferind 10 biți de rezoluție (corespunzătoare a 1024 valori diferite). În mod implicit, măsoară până la 5 volți și este posibil să depășească această valoare utilizând pinul AREF și funcția analogReference( ). Există pini de intrare analogică cu funcții suplimentare:

TWI: A4 și A5 sunt pini care suportă comunicația de tip TWI (Two Wire Interface) folosind biblioteca Wire.

Alți pini de pe placă sunt:

AREF: tensiune de referință pentru intrările analogice, folosită în cadrul funcției analogReference( ).

Reset: aduce linia de semnal la nivelul LOW pentru resetarea microcontroller-ului. Acest pin este utilizat, în general, pentru butoane reset.

În figură este prezentată corespondența dintre pinii microcontroller-ului ATmega328 și pinii Arduino Uno:

Figură. Maparea pinilor ATmega328 și a pinilor Arduino Uno, sursă [22] accesată la data 13.06.2014

MOTOR PAS CU PAS

Motorul pas cu pas este o mașină electrică specială de tip sincron. Este deseori denumit motor sincron cu pulsuri deoarece transformă pulsurile electrice de tensiune în deplasări unghiulare discrete. La primirea unui puls, rotorul motorului își schimbă poziția cu un unghi bine precizat. Unghiul minim de deplasare a rotorului este pasul motorului, de unde și denumirea acestor motoare ca ‘motoare stepper’.

Motoarele pas cu pas au rolul unor elemente decodificatoare, deoarece transformă informația primită ca puls electric în pași, stabilind astfel o corespondență univocă directă. Există mai multe variante constructive ale motoarelor pas cu pas, cele mai des utilizate în practică fiind motoarele cu unul sau mai multe statoare și motoarele cu rotor cu poli aparenți fără înfășurare de excitație (denumite motoare reactive) sau cu magneți permanenți. [7]

Figură. Motor pas cu pas Nema17. Sursă [24] accesată la 13.06.2014

Printre parametri cei mai importanți ai motoarelor pas cu pas se află:

pasul motorului, exprimat în grade;

cuplul critic, care reprezintă cuplul rezistent maxim la care rotorul nu se pune în mișcare;

cuplul limită, care reprezintă cuplul rezistent maxim la care motorul răspunde fără a se desincroniza față de pulsul de comandă (fără a pierde pași);

frecvențele maxime la comanda de oprire și pornire a motorului.

În figuri este reprezentat un motor reactiv cu doi poli aparenți, cu șase înfășurări de comandă. Bobinele polilor diametral opuși sunt conectați în serie și se formează trei circuite pentru cei șase poli, alimentate de la o sursă de curent continuu printr-un comutator electronic. La trecerea unui puls de curent prin bobinele polilor pereche 1-1’ are loc deplasarea rotorului spre axa polilor până la momentul în care axa sa coincide cu axa polilor (figură, a). Dacă alimentăm bobinele polilor 2-2’, rotorul se va deplasa spre această pereche până când cele axele vor coincide (figură, b). În aceeași idee, prin alimentarea succesivă a bobinelor polilor diametral opuși se va realiza o rotație completă (în cazul acesta, motorul pas cu pas realizează rotația completă după 6 pași). [7]

Figură. Motor reactiv cu doi poli aparenți, sursă [7] accesată la 13.06.2014

În figura de mai jos este un exemplu al acestui tip de motor realizat cu patru proeminențe polare care fac o rotație completă în 12 pași, adică dublu față de motorul anterior.

Figură. Motor reactiv cu patru poli aparenți, sursă [7] accesată la 13.06.2014

NEMA 17 motor pas cu pas

În cadrul realizării practice a sistemului de fotografiere time-lapse programat cu microcontroller s-a utilizat un motor pas cu pas NEMA 17 stepper. Motorul este mai mare în dimensiuni și mai greu față de celelalte realizări din generația sa, având suportul lateral (faceplate) de 1.7 x 1.7 inch (echivalent a 43.2 x 43.2 mm), de unde vine și denumirea variantei sale ‘17’.

+ breadboard la componente

Bibliografie(*):

uC: http://www.etc.ugal.ro/cchiculita/students/pam/Carte_PIC_romana_%20NebojsaMatic.pdf

http://derivat.ro/cursuri/electronica/an3/an3_derivat.ro_microcontrolere_Introducere%20in%20microcontrolere%20%20%20S%20L%20Dr%20Ing%20%20Rodica%20Constantinescu%20.pdf – domenii uC

http://ro.wikipedia.org/wiki/Pipeline tehnica pipeline

Motorul pas cu pas http://www.emie.ugal.ro/doc/me/Capitolul%208.pdf la pg 41

BIBLIOGRAFIE: + de trecut paginile

[1] Time-Lapse Introduction and theory, E.M (Ted) Kinsman, sursă: http://www.sciencephotography.com/faq_chap1.pdf

[2] W. Yeadon, A. Yeadon (McGraw-Hill, 2001). Handbook of Small Electronic Motors

[3] Curs „Mașina de curent continuu”, Universitatea Dunărea de Jos, Facultatea de Inginerie Electrică, Catedra de Electrotehnică, Mașini și Instalații Electrice, Galați – sursă: http://www.emie.ugal.ro/doc/me/Capitolul%206.pdf accesată la data de 03.02.2014

[4] Motorul de curent continuu, sursă: http://sibotic.wordpress.com/2013/12/20/pwm-speed-control-of-a-d-c-motor/ accesată la data 04.02.2014

[5] Mașini electrice, Marian PEARSICĂ, Mădălina PETRESCU, Editura Academiei Forțelor Aeriene „Henri Coandă”, Brașov 2007, pg. 93-97

[6] Curs “Motorul Electric de Curent Continuu”, sursă: http://biblioteca.regielive.ro/cursuri/electrotehnica/motorul-electric-de-curent-continuu-87479.html accesată la data de 03.02.2014

[7] Curs „Mașini electrice speciale”, Universitatea Dunărea de Jos, Facultatea de Inginerie Electrică, Catedra de Electrotehnică, Mașini și Instalații Electrice, Galați – sursă: http://www.emie.ugal.ro/doc/me/Capitolul%208.pdf accesată la data de 04.02.2014

[8] Curs “Servomotoare Electrice”, Universitatea “Politehnica” Timișoara, Facultatea de Electrotehnică și Electroenergetică – sursă: http://www.et.upt.ro/admin/tmpfile/fileP1369306803file519df6b3c3319.pdf

[9] Comanda servomotoarelor de curent continuu, sursă: http://www.rasfoiesc.com/inginerie/tehnica-mecanica/Comanda-servomotoarelor-de-cur99.php

[10] Microcontroller, sursă: http://ro.wikipedia.org/wiki/Microcontroler

[11] Curs Microcontrollere, Ș.L.Dr.Ing. Rodica Constantinescu, Universitatea „Politehnica” București, Facultatea de Electronică, Telecomunicații și Tehnologia Informației, 2012

[12] Curs Microcontrollere, Profesor Petre Ogrutan, Universitatea “Transilvania” Brașov, Facultatea de Inginerie Electrică și Calculatoare, sursă: http://vega.unitbv.ro/~ogrutan/Microcontrollere/curs.pdf

[13] Arhitectura Sistemelor de Calcul, Radu Rădescu, Colecția Electronică Aplicată, Editura Politehnica Press, 2012

[14] Arhitectura Von Neumann, sursă: http://en.wikipedia.org/wiki/Von_Neumann_architecture

[15] Advanced Microarchitectures, Lucian Vintan, Adrian Florea, Tehnical Publishing House, București, 2000 (PDF-file, 2.746K), Universitatea “Lucian Blaga” din Sibiu – sursă: http://webspace.ulbsibiu.ro/adrian.florea/html/docs/CARTEA_PDF.pdf

[16] Arhitectura Von Neumann vs Harvard, sursă: http://sisteme-incorporate.ro/arhitectura-von-neumann-vs-harvard/

[17] Curs Arhitectura CISC, Universitatea “Politehnica” București, Facultatea de Transporturi – Telecomenzi și Electronică în Transporturi, http://tet.pub.ro/files/studenti/materiale/an_III/upcurs/MP_CAP_16.pdf

[18] Curs “Sisteme de Intrare-Ieșire”, Dr.Ing. Constantin Pătrașcu, Universitatea din Craiova, Facultatea de Automatică, Calculatoare și Electronică, sursă: http://www.cs.ucv.ro/staff/cpatrascu/SIE/Lucrarea%203.pdf

[19] Arduino Uno, sursă http://www.robofun.ro/docs/Arduino%20pentru%20Toti%20pagini%201-30.pdf accesată la data 10.06.2014

[20] Descrierea pinilor ATmega328, sursă http://www.atmel.com/Images/doc8161.pdf accesată la data 10.06.2014

[21] Specificații Arduino Uno, sursă http://arduino.cc/en/Main/arduinoBoardUno accesată la data de 11.06.2014

[22] Mapare Arduino Uno și ATmega328, sursă http://arduino.cc/en/Hacking/PinMapping168 accesată la data de 13.06.2014

[23] Întreruperi Arduino, sursă: http://playground.arduino.cc/Code/Interrupts

[24] Schema constructivă motor pas cu pas, sursă http://www.designworldonline.com/low-loss-stepping-motors-invite-new-applications/ accesată la 13.06.2014

http://reprap.org/wiki/NEMA_17_Stepper_motor

? http://docs-asia.electrocomponents.com/webdocs/0e8b/0900766b80e8ba21.pdf

ANEXE

http://www.atmel.com/Images/doc8161.pdf pentru anexa configuratie pini atmega

http://sine.ni.com/ds/app/doc/p/id/ds-311/lang/ro anexa stepper

BIBLIOGRAFIE

[1] Kinsman E.M., Time-Lapse Introduction and theory, Rochester, NY, iunie 2006 – Cap.1, pg 1-5.

[2] Yeadon W., Yeadon A., Handbook of Small Electronic Motors, Mc-Graw-Hill, 2001, pg. –

[3] Calueanu D., Teodorescu R., Badea N., Berbeciu M., Munteanu, „Mașini electrice” – Note de Curs, Litografia Universității „Dunărea de Jos”, Facultatea de Inginerie Electrică, Catedra de Electrotehnică, Mașini și Instalații Electrice, Galați, 1994 – Cap. 6 „Mașina de curent continuu”, pg. 167-169, 184-197, Cap. 8 „Mașini electrice speciale”, pg. 232-244

[4] Pearsică M., Petrescu M., „Mașini electrice”, Editura Academiei Forțelor Aeriene „Henri Coandă”, Brașov 2007, pg. 93-97

[5] Curs “Motorul Electric de Curent Continuu”, sursă:

http://biblioteca.regielive.ro/cursuri/electrotehnica/motorul-electric-de-curent-continuu-87479.html accesată la data de 03.02.2014

[6] Curs “Servomotoare Electrice”, Universitatea “Politehnica” Timișoara, Facultatea de Electrotehnică și Electroenergetică – sursă:

http://www.et.upt.ro/admin/tmpfile/fileP1369306803file519df6b3c3319.pdf accesată la data de 04.02.2014

[7] Comanda servomotoarelor de curent continuu, sursă:

http://www.rasfoiesc.com/inginerie/tehnica-mecanica/Comanda-servomotoarelor-de-cur99.php accesată la data de 04.02.2014

[8] Heath Steve, Embedded Systems Design – Series for Design Engineers, 2nd Edition, Newnes 2003

[9] Ș.L.Dr.Ing. Constantinescu Rodica, „Curs Microcontrollere” –Universitatea „Politehnica” București, Facultatea de Electronică, Telecomunicații și Tehnologia Informației, 2012

[10] Borza P., Gerigan C., Ogrutan P., Toacse Gh., „Microcontrollere”, Aplicații, Editura Tehnică, București 2000

[11] Rădescu R., „Arhitectura Sistemelor de Calcul”, Colecția Electronică Aplicată, Editura Politehnica Press, 2012

[12] Oros H., Suport de curs pentru disciplina „Arhitectura Sistemelor de Calcul”, Universitatea din Oradea, Facultatea de Științe, 2009

[13] Vintan L., Florea A., „Advanced Microarchitectures”, Tehnical Publishing House, ISBN 973-31-1551-7, București, 2000

[14] Curs „Arhitectura CISC”, Universitatea “Politehnica” București, Facultatea de Transporturi, sursă http://tet.pub.ro/files/studenti/materiale/an_III/upcurs/MP_CAP_16.pdf

– f multe referinte, poate le pot lua din cartea lui RR

[15] Conf. Dr. Ing. Pătrașcu C-tin., “Arhitectura Calculatoarelor de Proces”, Universitatea din Craiova, 1998 – Facultatea de Automatică, Calculatoare și Electronică

[16] Arduino Uno, sursă http://www.robofun.ro/docs/Arduino%20pentru%20Toti%20pagini%201-30.pdf accesată la data 10.06.2014

[17] Descrierea pinilor ATmega328, sursă http://www.atmel.com/Images/doc8161.pdf accesată la data 10.06.2014

[18] Specificații Arduino Uno, sursă http://arduino.cc/en/Main/arduinoBoardUno accesată la data de 11.06.2014

[19] Întreruperi Arduino, sursă: http://playground.arduino.cc/Code/Interrupts accesată la data de 11.06.2014

[20] Motor pas cu pas NEMA 17, sursă http://sine.ni.com/ds/app/doc/p/id/ds-311/lang/ro accesată la 15.06.2014

[21] Driver motor Pololu DRV8825, sursă http://www.pololu.com/product/2133 accesată la 15.06.2014

[22] Servomotor, sursă http://www.jameco.com/jameco/workshop/howitworks/how-servo-motors-work.html accesată la 17.06.2014

[23] Display LCD, sursă http://arduino.cc/en/Tutorial/LiquidCrystal accesată la 19.06.2014

ANEXE

http://www.atmel.com/Images/doc8161.pdf pentru anexa configuratie pini atmega

http://sine.ni.com/ds/app/doc/p/id/ds-311/lang/ro anexa stepper

http://www.pololu.com/file/download/drv8825.pdf?file_id=0J590 anexă driver stepper

http://arduino.cc/en/uploads/Tutorial/LCD_schem.png conexiuni LCD si arduino

http://display-elektronik.de/DEM20232SYH-LY.PDF

Similar Posts