Robot Controlat Prin Tastatura

Introducere (2-3 pg)

Despre motor DC, istoric, evolutie, aplicatii, exemple (cand au aparut, de ce au aparut, la ce se folosesc). De asemenea despre sistemele de alimentare si control pentru motoarele DC, cum au aparut.

La final, ultimele doua fraze for fi:

“Prin prezenta lucrare mi-am propus urmatoarele obiective:

Realiarea unui studiu asupra controlului motoarelor DC cu ajutorul tastaturii

Implementarea unei metode de control

Un motor de curent continuu cu perii, in engleza brushed DC motor, este un motor electric comutat intern conceput pentru a fi rulat de o sursa de alimentare de curent continuu. Motoarele cu perii au fost prima aplicatie de putere electrica importata comercial pentru a conduce sarcini mecanice, precum si a sistemelor de distributie de curent continuu pentru mai bine de 100 de ani in operarea motoarelor in cladirile comerciale si industriale. Motoarele de curent continuu pot varia in viteza prin schimbarea tensiunii de operare sau puterea campului magnetic. In functie de conexiunile din domeniul sursei de alimentare, caracteristiciile de viteza si cuplul unui motor cu perii poate fi modificat pentru a oferi o viteza constanta sau o viteza invers proportionala cu sarcina mecanica.

Motoarele electrice cu perii continua sa fie utilizate pentru propulsii electrice, macarale, masini de masini de hartie si otelarii rulare. Avand in vedere faptul ca periile se pot uza este necesara inlocuirea lor. Motoarele de curent continuu fara perii, in engleza brushless DC motor, folosesc dispozitive electrice de putere care au deplasat motoarele cu perii in multe aplicatii.

La nivelul cel mai de baza, motoarele electrice exista pentru a converti energia electrica in energie mecanica. Acest lucru se face prin intermediul a doua campuri magnetice care interactioneaza o stationare precum si o parte mobila care se poate deplasa. Motoarele de curent continuu au potentialul de capacitati foarte mari de torsiune (desi aceasta este, in general, o functie de dimensiunea fizica a motorului), sunt usor de miniaturizat, si poate fi „strangulat” prin ajustarea tensiunii de alimentare. Motoarele de curent continuu sunt , de asemenea, nu numai simple, dar cele mai vechi motoare electrice.

Principiile de baza ale inductiei electromagnetice au fost descoperite la inceputul aniilor 1800 de catre Oersted, Gauss si Faraday. Prin 1820, Hans Christian Oersted si Andre Maria Ampere au descoperit ca un curent electric produce un camp magnetic. In urmatorii 15 ani a vazut o rafala de experimente si inovatii cross-Atlantice, conducand in final la un simplu motor de curent continuu rotativ. Un numar de oameni au fost implicati in munca, astfel incat credit adecvat pentru primul motor DC este intr-adevar o functie in care demonstrezi cum vrei sa definesti cuvantul „motor”

Michael Faraday (U.K)

Experimentator fantezist Michael Faraday a decis sa confirme sau sa afirme un numar de speculatii din jurul rezultatelor oferite de Oersted si Ampere. Faraday a pornit la munca cu elaborarea unui experiment care sa demonstreze sau nu ca un fir purtator de curent produce un camp magnetic in jurul lui, iar in Octombrie 1821 a reusit sa demonstreze acest lucru.

Faraday a luat o farfurie de mercur si a plasat un magnet fix in mijlocul farfuriei, deasupra, a atasat un fir cu o miscare libera, (capatul firului fiind suficiet de lung pentru a se scufunda in mercur). Cand a legat o baterie ca sa formeze un circuit, firul purtator de curent se misca in jurul magnetului. Faraday a inversat apoi procedura, de data asta cu un fir purtator de curent fix si un magnet liber, ca rezultat si de aceasta data partea mobila se invartea in jurul partii fixe. Aceasta a fost prima demonstratie de conversie a energiei electrice in miscare, si, ca rezultat, Faraday este deseori creditat cu inventarea motorului electric. Totusi motorul electric a lui Faraday este doar o demonstratie intr-un laborator si nu se poate valida ca o munca utila.

Joseph Henry (U.S)

A fost nevoie de 10 ani, dar pana in vara lui 1831 Joseph Henry a imbunatatit motorul experimental realizat de Faraday. Henry a construit un dispozitiv simplu in care partea mobila a acestuia era un magnet drept balansabil pe o axa orizontala. Polaritatea sa a fost inversata in mod automat de miscarea sa cu perechi de fire amplasate la capatul conexiunilor facute alternativ cu doua celule electrochimice. Doi magneti permanent verticali atrag si resping alternativ capetele electromagnetului, facand miscarea lui inainte si inapoi la 75 de cicluri pe minut.

Henry a considerat micuta lui masinarie drept „jucarie filozofica” dar cu toate acestea a crezut ca este importanta ca fiind prima demonstratie de miscare continua produsa de atractia si repulsia magnetica. Masinaria lui fiind mult mai utila mecanic decat motorul lui Faraday, si fiind prima folosire a electromagnetilor intr-un motor, era inca un mare experiment de laborator.

William Sturgeon (U.K)

La doar un an dupa demonstratia de motor facuta de Henry, William Sturgeon a inventat comutatorul, si cu el primul motor electric rotativ. In multe privinte fiind considerat un analog rotativ la motorului oscilant facut de Henry. Motorul lui Sturgeon, fiind inca un motor simplu, a fost primul care a furnizat miscarea de rotatie continua si continea, in esenta, toate elementele unui motor de curent continuu modern.

Controlul si alimentarea motoarelor de curent continuu cu perii (brushed DC motor ) se realizeaza cu ajutorul unor drivere de motor si cu o baterie pentru alimentare.

Bateria este un mediu electrochimic de stocare a energiei. Energia chimica (stocata ) se transforma la descarcare in energie electrica cu ajutorul unei reactii electrochimice. Prima baterie inventata , asa numita pila voltaica, in anul 1800 de catre fizicianul Italian Alessandro Volta si , in special, de la aparitia celulei Daniell in 1836, bateriile au devenit o sursa de electricitate comuna multor aplicatii atat din aria casnica cat si din aria industrial. Sunt doua tipuri de baterii: baterii primare (de unica folosinta ) si baterii secundare (reincarcabile).

Controlul este realizat cu ajutorul unui driver de motor, o placuta electrica care are la baza un integrat (in cazul de fata LM 298) ,folosit pentru controlul a doua motoare de curent continuu cu perii. Contine doi pini de input, doi pini de output si un pin de enable pentru cele doua motoare pe care le poate controla. Pinul de output 1 si 2 sau 3 si 4 merg catre motor, iar pinul de input 1 si 2 sau 3 si 4 merg catre Arduino alaturi de un pin de enable A/B ( A este pentru motorul 1 care are input 1 si 2 si output 1 si 2, iar B este pentru motorul 2 care are input 3 si 4 si output 3 si 4).Cei doi pini de intrare sunt pini digitali normali care controleaza polaritatea motorului (daca i intoarcem motorul merge cu spatele). Pinul de enable porneste sau opreste motorul si trebuie sa fie un pin digital PWM pentru ca placuta de Arduino sa schimbe viteza motorului.

Placuta de Arduino este practic partea de gandire a robotului(creierul).Cu ajutorul microcontroller-ului amplasat pe placuta pot sa programez un cod care ofera robotului functia de a se misca in toate directiile.

Motoarele DC, alimentare si comanda (25 pg din carti)

Constructia si functionarea motoarelor DC

CAND AU APARUT, ELEMENTELE CONSTRUCTIVE(ROTOR, STATOR, CARCASA, INFASURARI )…TIPURI DE MOTOARE DC,

Motorul de curent continuu inventat in anul 1873 de inginerul belgian Zénobe Gramme prin conectarea unui generator de curent continuu la un generator asemanator. Prin asta el a putut observa ca masina se roteste, realizand conversia energiei electrice absorbite de la generator.Astfel Gramme a constatat, ca generatorul „initial” era o masina electrica reversibila, care putea lucra ca un convertizor de energie bidirectional.

Elemente constructive:

Orice tip de motor este alcatuit din doua parti componente:stator si rotor. Partea fixa a motorului se numeste stator , in general este partea exterioara a motorului ce include carcasa, bornele de alimentare, armatura feromagnetica statorica si infasurarea statorica. Partea mobila a motorului se numeste rotor si este plasat de obicei in interiorul motorului. Este format dintr-un ax si o armatura rotorica ce sustine infasurarea rotorica. Intre rotor si stator este o portiune de aer numita intrefier ce permite miscarea rotorului fata de stator. Performantele motorului se pot indica prin grosimea intrefierului.

Motorul DC are pe stator polii magnetici si bobinele polare concentrate care creeaza campul magnetic de excitatie. Pe axul motorului este situat un colector ce schimba sensul curentului prin infasurarea rotorica astfel incat campul magnetic de excitatie sa exercite in permanenta o forta fata de rotor.

Motoarele de curent continuu se pot clasifica in functie de modul prin care se conectaza infasurarea de executie ::

Motor cu excitatie independenta – infasurarea statorica si infasurarea rotorica sunt conectate la doua surse separate de tensiune

Motor cu excitatie paralela – infasurarea statorica si infasurarea rotorica sunt legate in paralel la aceasi sursa de tensiune

Motor cu excitatie serie – infasurarea statorica si infasurarea rotorica sunt legate in serie

Motor cu excitatie mixta – infasurarea statorica este divizata in doua infasurari, una conectata in paralel si una conectata in serie.

Infasurarea rotorica parcursa de curent va avea una sau mai multe perechi de poli magnetici echivalenti. Rotorul se va deplasa in campul magnetic de excitatie pana cand polii rotorici se vor alinia in dreptul polilor statorici opusi.Colectorul schimba sensul curentilor rotorici, in acelasi moment, astfel incat polaritatea rotorului se inverseaza si rotorul va continua deplasarea pana la urmatoarea aliniere a polilor magnetici.

Magnetii permanenti sunt folositi pentru actionari electrice de puteri mici si medii, sau pentru actionari ce nu necesita camp magnetic de excitatie variabil, in locul infasurarilor statorice.

Turatia motorului este proportionala cu tensiunea aplicata infasurarii rotorice si invers proportionala cu campul magnetic de excitatie. Turatia se poate regla prin varierea tensiunii aplicata motorului pana la valoarea nominala a tensiunii, iar turatii mai mari se obtin prin slabirea campului de excitatie. Prin ambele metode se vizeaza o tensiune variabila ce poate fi obtinuta folosind un generator de curent continuu, prin inserierea unor rezistoare de circuit sau cu ajutorul electronicii de putere (redresoare comandate, choppere).

Dezvoltarea cuplului de motor este direct proportionala cu curentul electric prin rotor si cu campul magnetic de excitatie. Reglarea turatiei prin slabirea de camp se face cu diminuare a cuplului dezvoltat de motor. La motoarele serie acelasi curent strabate infasurarea de excitatie si infasurarea rotorica. Din aceasta consideratie se pot deduce doua caracteristici ale motoarelor serie: pentru incarcari reduse ale motorului, cuplul acestuia depinde de patratul curentului electric absorbit, iar motorul nu trebuie lasat sa functioneze in gol pentru ca in acest caz valoarea intensitatii curentului electric absorbit este foarte redusa si campul de excitatie este redus, ceea ce duce la ambalarea masinii pana la autodistrugere.

Schimbarea sensului de rotatie poate fi facuta prin schimbarea polaritatii tensiunii de alimentare, fie prin schimbarea sensului campului magnetic de excitatie. In cazul motoarelor serie, prin schimbarea polaritatii tensiunii de alimentare se realizeaza schimbarea sensului ambelor parimi si sensul de rotatie ramane neschimbat. Deci, motorul serie poate fi folosit si la o tensiune alternativa, unde polaritatea tensiunii se inverseaza o data in decursul unei perioade. Un astfel de motor se numeste motor universal si se foloseste in aplicatii casnice de puteri mici si viteze mari de rotatie (ex : aspirator, mixer).

Comanda motoarelor DC

Comanda unui motor de curent continuu se face cu ajutorul unui mocrocontroller si a unei punti H. Se intelege prin controlul unui motor DC atat reglajul turatiei cat si sensul de rotatie.

Structura in punte H cu dispozitive semiconductoare controlabile nu este utilizata in electronica de putere doar pentru a obtine convertoare c.c-c.c in 4 cadre functionabile. Aceasta tipologie se mai poate folosi si pentru obtinerea invertoarelor, a redresoarelor PWM si a filtreloractive monofazate.

Figura 5 Topologia convertorului c.c-c,c in punte H

Dupa cum vedem in figura 5, puntea H este formata din doua brate de punte A si B, unde fiecare brat este alcatuit din doua tranzistoare de putere (BJT, MOSFET, IGBT etc.) care sunt legate in serie si sunt prevazute cu diode de descarcare antiparalel.

CU T1,T2 este notat tranzistorul din bratul A, iar cu T3, T4 cele din bratul B. Diodele in antiparalel cu tranzistoarele au fost notate cu D1, D2 pentru bratul A, iar pentru bratul B cu D3, D4. Folosim o singura sursa pentru alimentarea structurii, sursa care furnizeaza tensiunea continua Ud ,ea fiind bine filtrata. Langa puntea H este prevazut obligatoriu capacitatea Cd care are pe langa rolul de filtru al tensiunii si functia importanta de a prelua energia inductiei de sarcina dupa fiecare comanda de blocare a tranzistoarelor. Pentru ca tranzistoarele comuta in timp foarte scurt trebuie utilizate condensatoarele rapide cu rezistenta echivalenta serie mica ( Low ESR – Echivalent Series Resistance). Bratele notate cu A si B sunt si borne de iesire ale structurii intre care se leaga sarcina activa a convertorului de tip R-L-E. Cu ue este notata tensiunea la iesire a convertorului, iar curentul este notat cu ie.

Comanda tranzistoarelor din fiecare brat este facuta cu o pereche de semnale modulate in latime (PWM) complementare. In functie de corelarea comenzilor celor doua brate A si B, pot fi puse in evidenta doua tehnici de comanda ale puntii H:

-Comanda PWM cu o comutatie bipolara a tensiunii la iesirea puntii

-Comanda PWM cu o comutatie unipolara a tensiunii la iesirea puntii

Tehnicile enumerate mai sus pot fi utilizate, atat pentru chopper-ul in punte H, cat si pentru invertorul sau redresorul PWM monofazat. Fiecare convertor in parte poate lucra diferit, in functie de tehnica utilizata, iar calitatea conversiei se schimba de la o tehnica la alta.

Comanda motoarelor DC este data de puntea H, adica integratul L298 care sta la baza driverului de control pentru motoarele DC.L298 este un circuit monolitic integrat in 15 pachete de plumb Multiwatt si PowerSO20. Este de inalta tensiune, conduce un curent mare, este dublu proiectat full-bridge sa accepte un nivel standard de logica TTL si unitati de sarcini inductive, cum ar fi relee, solenoizi, motoare DC si motoare pas cu pas.Contine doua intrari care permit activarea sau dezactivarea dispozitivului, el fiind independent de intrarea semnalelor. Emitatorii tranzistorilor mici de fiecare punte sunt conectati impreuna si corespunzator terminalelor externe care pot fi folosite pentru conectarea unei detectare de rezistor extern. O alimentare aditionala este prevazuta astfel incat logica sa functioneze la o tensiune mica.

Figura 7 Diagrama Block L298

Figura 8 Schema Electrica L298

Driver-ul de motoare L298 se conecteaza la platforma Arduino folosind 4 pini digitali (3, 5, 6 si 9) prin infigere directa in pini placii Arduino. Poate controla motoare care necesita cel mult 2 Amperi (2000mA).

Figura 9

Controlul vitezei folosind PWM

Intr-un circuit analogic, viteza motorului este controlata de nivelul tensiunii. Intr-un circuit digital, avem doar doua solutii:

Folosirea unui circuit de rezistenta variabila pentru a controla tensiunea aplicata motorului (solutie complicata, care iroseste energie sub forma de caldura )

Aplicarea intermitenta a tensiunii sub forma PWM.

Figura 10

Cand aplicam tensiunea, motorul este actionat de forte electromagnetice

Cand oprim tensiunea, inertia cauzeaza motorul sa continue rotatia pentru scurt timp

Cand frecventa pulsurilor este suficient de mare, acest proces de pornire + mers din inertie permite motorului o rotatie uniforma, controlabila prin logica digitala.

Efectele folosirii PWM :

PWM are doua efecte importante asupra motoarelor de curent continuu:

Rezistenta inertiala la pornire este inversa mai usor, deoarece pulsurile scurte de tensiune maxima au un cuplu de forta mai mare decat tensiunea echivalenta intermediara.

Se genereaza o cantitate mai mare de caldura in interiorul motorului.

Daca un motor controlat PWM este folosit pentru o perioada mai mare de timp, sunt necesare sisteme de disipare a caldurii, pentru a evita distrugerea motorului. Din acest motiv PWM este recomandat in sisteme de cuplu mare si utilizare interminenta, precum actionarea suprafetelor de control la avioane, sau actionarea bratelor robotice.

Circuitele PWM pot crea interferenta radio. Aceasta poate fi minimizata prin scurtarea cailor dintre motor si controlul PWM (folosirea unir cabluri scurte ).

Zgomotul electronic creat prin actionarea intermitenta a motorului poate sa interfereze cu celelalte componente din circuit, si de aceea este recomandat sa fie filtrat. Plasarea de condensatoare ceramice la terminalele motorului, si intre terminalele motorului si stator poate fi o solutie pentru a filtra aceste interferente.

Senzori folositi in controlul miscarii DC

Encoderul digital

Microcontrollere

Ce este de fapt un microcontroller ?

La modul general un controller este o structura electronica destinata controlului unui proces sau unei interactiuni caracteristice cu mediul exterior, fara sa fie necesara interventia operatorului uman. Primele controlere aparute au fost realizate pentru tehnologii pur analogice, folosind componente electronice discrete si/sau componente electromecanice. Componentele care fac apel la tehnica mecanica moderna au fost realizate initial pe baza logicii cablate si a unei electronici analogice uneori complexe datorita dimensiunilor mari, consum energetic pe masura si o fiabilitate care lasa de dorit.

Aparitia si utilizarea microprocesoarelor de uz general a dus la o reducere consistenta a costurilor, dimensiunilor, consumului si o imbunatatire a fiabilitatii. La ora actuala exista o serie de astfel de controlere de calitate, realizate in jurul unor microprocesoare de uz general cum ar fi Zilog, Intel, Motorola, etc.

Pe masura ce tehnologia evolua, procesul de miniaturizare a continuat, a fost posibil ca majoritatea componentelor necesare realizarii unei astfel de structuri sa fie incorporate (integrate) la nivelul unui singur microcircuit (cip). Asadar un microcontroler poate fi descris ca fiind si o solutie a unei probleme de control cu ajutorul a unui singur circuit.

Asa cum denumirea si acronimul unui mcroprocesor de uz general este desemnata prin MPU (MicroProcessor Unit), un microcontroler este desemnat ca MCU, desi semnificatia initiala a acestui acronim este MicroComputer Unit.

„ O definitie, cu un sens foarte larg de cuprindere, ar fi aceea ca un microcontroler este un microcircuit care incorporeaza o unitate centrala (CPU) si o memorie impreuna cu resurse care-i permit interactiunea cu mediul exterior.” [1]

Descriere hardware (constructia interna a microcontrollerului)

Un microcircuit ar trebui sa contina urmatoarele componente la nivel de resurse integrate :

O unitate centrala (CPU), cu un oscilator intern pentru ceasul de sistem

O memorie locala tip ROM/EPROM/FLASH si una de tip RAM

Un sistem de intreruperi

I/O – intrari/iesiri numerice de tip port paralel

Un port serial de tip asincron si/sau sincron, programabil

Un sistem de timere-temporizatoare/numaratoare programabile

Un sistem de conversie analog numerica (una sau mai multe intrari analogice)

Un sistem de conversie numeric analogic si/sau iesiri PWM (cu modulare in durata)

Un comparator analogic

O memorie de date nevolatila de tip EEPROM

Facilitati suplimentare pentru sistemul de temporizare/numarare (captare si comparare)

Un ceas de garda (timer de tip watchdog)

Facilitati pentru optimizarea consumului propriu

Un microcontroler tipic mai are la nivelul unitatii centrale si facilitati de prelucrare a informatiei la nivel de bit, de acces direct si usor la intrari/iesiri si un mecanism de prelucrare a intreruperilor rapid si eficient.

Prin utilizarea unui microcontroler se constituie o solutie prin care se poate reduce dramatic numarul comonentelor electrice precum si costul proiectarii si al dezvoltarii unui proces.Utilizarea unui microcontroler, oricat ar fi de evoluat, nu elimina componente ale iterfetei cu mediul exterior: subsisteme de prelucrare analogica (amplificare, redresare, filtrare, protectie-limitare), pentru elemente de comutatie de putere (tranzistoare de putere, relee electromecanice sau statice).

Unitatea centrala de procesare (CPU) – poate fi asimilata cu creierul microcontrolerului. Este responsabila cu aducerea instructiunii corecte pentru executie, decodarea acestei instructiuni si apoi executia acestei instructiuni. CPU lucreaza in conjunctie cu ALU pentru a completa executia instructiunii (in operatii aritmetice si logice)

CPU controleaza :

Busul adreselor de memorie program

Busul adreselor de memorie de date

Accesul la stiva

ALU sau aritmetic logic unit – este evident o unitate aritmetica si logica de uz general. Ea efectueaza functii aritmetice si logice intre date si registrul de lucru si oricare alt registru.

Poate efectua urmatoarele operatii :

Insumare

Scadere

Deplasare (SHIFT)

Operatii Logice

Daca nu se mentioneaza altfel, operatiile aritmetice se fac in complement fata de doi. In instructiuni cu doi operanzi, uzual unui din operanzi este registrul de lucru (W), celalalt operand este un registru de uz general sau o constanta. In instructiunile cu un singur operand, operandul este registrul de lucru (W) sau un registru de uz general.

Figura 11 Schema de functionare ALU

Schema de functionare ALU:

intra doi operanzi de cate 8 biti

iese un operand tot de 8 biti, iar bitul de carry 1 se afla intr-un registru de stare

comutatorul este un bit din cadrul instructiunilor

comutatorul trece cei 8 biti din cadrul W in memoria RAM

daca comutatorul d=1 scrie in RAM, daca d=0 scrie in Registrul de lucru W

Stiva – este o memorie de tip LIFO (Last in First out), care permite operatia a unor combinatii de pana la 8 apeluri de subrutine sau intreruperi.

Contine adresa de reintoarcere din ramura de program activa in executia programului

Spatiul stivei nu se poate citi sau scrie

Spatiul stivei nu face parte din spatiul de memorie program sau memorie de date

Perifericele- sunt dispozitive care adaugate, fac diferenta fata de un microprocesor :

Porturi I/O de uz general

Timere

Captura, comparare si modulatia impulsurilor in durata

Interfete seriale standard

Interfete paralele

Referinte de tensiune

Comparatoare

Convertoare analog digitale

Afisaj LCD

Functiile speciale ale unui microcontroler ajuta la cresterea flexibilitatii in proiectare, a realizarii unui sistem de incredere, cu un cost mult redus.

Arhitectura influenteaza performantele globale: viteza operationala si structura memoriei disponibile. Se utilizeaza doua tipuri de arhitecturi : „von Neumann” si „Harvard”

Arhitectura de tip „von Neumann”

Este arhitectura cel mai des folosita pentru realizarea microcontrolerelor. Microcontrolerele bazate pe aceasta arhitecutra au o unitate centrala (CPU) caracterizata de existenta unui singur spatiu de memorie utilizat pentru memorarea atat a codului instructiunilor cat si a datelor ce fac obiectul prelucrarii. Exista o singura magistrala interna (bus) care este folosita pentru preluarea a instructiunilor (fetch opcod) si a datelor.Efectuarea celor doua operatii separate, in mod secvential, are ca efect, cel putin principal, incetinirea operatiilor. Este arhitectura standard si pentru microprocesoarele de uz general.

Arhitectura de tip „Harvard”

Aceasta arhitectura prezinta spatii de memorie separate pentru program si date. In consecinta ar trebui sa existe si magistrale separate (de adrese si date) pentru codul instructiunilor si respectiv pentru date. Principial exista astfel posibilitatea executiei cvasiparalele (suprapunerii) a celor doua operatii mentionate anterior. Codul unei instructiuni poate fi preluat din memoria de timp ce se executa operatiile cu datele aferente instructiunii anterioare. Este posibila , cel putin teoretic, o executie mai rapida, pe seama unei complexitati sporite a microcircuitului, mai ales atunci cand exista si un pipeline. Este arhitectura standard pentru procesoarele numerice de semnal (DSP). Datorita costului mare al implementarii unei astfel de arhitecturi, in cazul microcontrolerelor se intalneste mai ales o arhitectura Harvard modificata, cu spatii de memorie separate pentru prodram si date, dar cu magistrale comune pentru adrese si date.

CISC

Aproape toate microcontrolerele au la baza realizarii CPU conceptul CISC (Complex Instruction Set Computer). Aceasta inseamna un set uzual de peste 80 instructiuni, multe din ele foarte puternice si specializate. De obicei multe din aceste instructiuni sunt foarte diferite intre ele, unele opereaza numai cu anumite spatii de adrese sau registre, altele permit numai anumite moduri de adresare. Pentru programul in limbaj de asamblare exista unele avantaje prin utilizarea unei singure instructiuni complexe in locul mai multor instructiuni simple.

RISC

Inseamna (Reduced Instruction Set Computer) si este un concept de realizare a CPU care a inceput sa fie utilizat cu succes de ceva timp si la realizarea microcontrolerelor. Prin implementarea unui set redus de instructiuni care se pot executa foarte rapid si eficient, se obtine o reducere a complexitatii microcircuitului, suprafata disponibilizata putand fi utilizata in alte scopuri, Printre caracteristicile asociate de obicei unui CPU RISC se pot mentiona :

Arhitectura Harvard modificata sau von Neumann

Viteza sporita de executie prin implementarea unui pipeline pentru instructiuni

Set de instructiuni original (simetric) orice instructiune opereaza cu orice spatiu de adrese (de memorie) sau orice registru, instructiunile nu prezinta combinatii speciale, exceptii, restrictii sau efecte colaterale.

ADC (Analog Digital Converter) –conversia analog numerica reprezinta operatia de obtinere a unei secvente numerice de valoare proportionala cu o marime analogica. In functie de tipul constructiv, viteza si precizie, un circuit ADC se clasifica in:

ADC cu comparare :

De tip paralel

Cu tensiune de comparat crescatoare

Cu urmarire

Cu exprimari succesive

ADC tensiune timp :

Cu integrare a unei tensiuni de referinta

Cu dubla integrare

ADC tensiune frecventa

Indiferent de tipul convertorului, marimea analogica de la intrare in convertor este discretizata intr-un numar de trepte elementare. Acest numar de trepte este dat de numarul de biti pe care se obtine rezultatul conversiei. Esantionarea semnalului analogic se face la intervale de timp bine definite. Cu cat frecventa de esantionare este mai mare, cu atat se vor pierde mai putine informatii din semnalul analogic ce se vrea convertit. Timpul minim intre doua esantioane trebuie totusi sa permita circuitului digital sa realizeze cnversia analog numerica. Acest timp depinde de numarul de biti pe care se obtine rezultatul conversiei si de timpul constructiv al convertorului.

Figura 14 Schema bloc a modulului ADC [2]

Modulul ADC are 15 registri asociati, care vor fi descrisi in continuare. Dintre acestia, 2 registri sunt pentru salvarea rezultatului conversiei si 2 pentru configurarea modulului ADC. Salvarea rezultatului conversiei poate fi facuta in doua feluri : right sau left justified. Daca alegem modul right justified, cei mai putin semnificativi 8 biti vor fi scrisi in ADRSEL, iar cei mai semnificativi 2 biti vor fi salvati in ADRSEL, iar ce mai semnificativi 8 biti in ADRESH.

Intreruperile

O intrerupere este definita ca fiind un mecanism hardware oferit de catre platforma pe care se ruleaza aplicatia, prin care se intrerupe un sir curent de executie si se ruleaza o alta bucata de cod in functie de stimulii externi. De exemplu, o aplicatie ar putea fi intrerupta prin apasarea unui buton pentru a executa alta bucata de cod ce trateaza acest eveniment. Pentru a ne folosi de acest mecanism, trebuie sa configuram mai intai sursa respectiva de intrerupere, in functie de platforma pe care o folosim, iar apoi sa scriem codul ce se va executa la activarea intreruperii.

Timere

Este un circuit de temporizare si/sau numarare independent de CPU. Valoarea registrilor poate fi scrisa sau citita. La depasirea valorii maxime se seteaza un bit de depasire si poate genera intreruperi, apoi timerul lucreaza la depasirea valorii maxime, iar cand se depaseste apare bitul de carry care semnalizeaza depasirea. Sursa semnalului de clock poate fi interna sau externa, iar sursa de clock externa pentru microcontroler poate fi un oscilator alimentat la un pin al microcontrolerului. Frontul pe care se face incrementarea contorului poate fi ales. Marimea registrului timer este in functie de tipul microcontrolerului si de tipul timerului ales si pot exista mai multe timere intr-un microcontroler (cel putin 2).

Programarea microcontrolerelor (mediu de programare, metode de programarea, Arduino,)

Programarea unui microcontroler consta in creearea unui cod cu diferite functii amplasat in memoriamicrocontrolerului. Pentru ca fiecare microcontroler are la baza o memorie, am sa prezint pe scurt cateva aspecte legate de implementarea memoriei microcontrolerelor.

In afara de memoria locala de tip RAM, de dimensiuni relativ reduse (de la x10 octeti la x1k), implementata ca atare sau existenta sub forma unui set de registre si destinata memorarii datelor (variabilelor), mai exista o serie de aspecte specifice, marea majoritate a acestora fiind legata de implementarea fizica a memoriei de program(si eventual a unei parti de memorie de date) cu ajutorul memorii nevolatile. In principiu memoria de program era implementata intr-o varianta de tip ROM: EPROM pentru dezvoltare si productie pe scara mica/medie sau mask-ROM pentru productie de masa. Principalele concepte noi aparute de-a lungul timpului in legatura cu implementarea memoriei de program sau date sunt enumerate in continuare.

OTP (One Time Programmable) – este practic o memorie PROM identica intern cu varianta EPROM, dar fara fereastra de cuart pentru stergere. Aceasta varianta poate fi utilizata ca o alternativa pentru o productie limitata, pana in momentul testarii si validarii fianle a codului, moment in care pot fi comandate variantele (mask) ROM propriu-zise, cele mai economice pentru o productie de masa.

Flash EPROM – este o solutie mai buna decat EROM-ul propriu-zis atunci cand este necesar un volum mare de memorie program (nevolatia). Este mai rapida si cu un numar garantat suficient de mare (x10000) de cicluri de programare (stergere/scriere), este caracterizata si prin modalitati mai flexibile de programare, este utilizata numai ca memorie de program.

EEPROM – multe microcontrolere au si o memorie de acest tip, de dimensiune limitata (de la x10 octeti la x K octeti), destinata memorarii unui numar limitat de parametrii (memorie de date) care eventual trebuie modificati din timp in timp, este o memorie relativ lenta (la scriere), dar cu un numar de cicluri de stergere/scriere mai mare ca FLASH-ul (x100000).

NOVRAM (RAM nevolatil) – este realizat prin alimentarea locala (baterie,acumulator) a unui masiv RAM CMOS atunci cand este necesar un volum mare de memorie de program si date nevolatila. Este mult mai rapida decat toate celelalte tipuri si fara limitari ca numar de cicluri.

Programarea „ In Syste” (ISP) – la folosirea unor memorii nevolatile de tip FLASH se face posibila si „programarea” unui astfel de microcontroler fara a-l scoate din sistemul in care este incorporat.Programarea se face prin intermediul unei interfete seriale dedicate de tip ISP sau a unei interfete standard JTAG. Exista microcontrolere la care aceasta programare se poate face prin intermediul portului serial asincron sau al interfetei CAN (Controller Area Network). Astfel este posibila modificarea cu usurinta a codului program sau a unor constante de lucru . Un lucru important din punctul meu de vedere este ca la anumite familii interfata prin intermediul careia se face programarea poate fi utilizata si la testarea si depanarea aplicatiei (soft), permitand realizarea simpla, cu un pret de cost minim, a unor mijloace de testare si depanare (emulatoare). Un exemplu concret ar fi ca in acest caz interfata JTAG este specificata ca fiind JTAG/ICE (In Circuit Emulation) pentru a arata ca poate fi folosita si pentru enularea in circuite.

Bootloader – Recent multe din microcontrolerele la care memoria de program este de tip FLASH au si facilitatea de a putea si scrie in aceasta memorie de program fara a utiliza un circuit de programare extern. Asadar in microcontrolere poate exista permanent un cod de mici dimensiuni (denumit si bootloader) care pur si simplu va incerca prin intermediul portului serial (este doar un exemplu) codul utilizator sau constantele pe care acesta vrea eventual sa le actualizeze.Bootloader-ul este si cel care lanseaza in executie programul utilizator dupa incarcarea acestuia.

Protejarea codului – La citire poate aparea piratarea soft (da exista si in acest caz) este oferita ca optiune (ea mai trebuie si folosita !) la variantele FLASH, EPROM sau OTP.Codul poate fi protejat atat la citire cat si la scriere (practic circuitul trebuie sters inainte de a se mai putea scrie ceva in el). Este elimitana astfel posibilitatea de a se realiza, in acest caz, de patch-uri ale codului original. La variantele mask-ROM propriu-zis protectia este de cele mai multe ori implicita.

Memoria externa de program sau date – Majoritatea familiilor de microcontrolere permit si utilizarea de memorie externa de program (tipic ROM) sau date (tipic RAM). Aceasta presupune existenta si utilizarea unor magistrale externe de adrese si date. Conexiunile externe necesare pentru acestea sunt disponibile ca functii alternative ale pinilor. Din nefericire, in aceasta situatie numarul de conexiuni exterioare disponibile pentru interfata cu exteriorul se reduce dramatic, reducand mult din versatilitatea microcontrolerului. La variantele constructive cu numar mic de pini (conexiuni externe) nu este posibila utilizarea de memorie externa, decat intr-o varianta cu interfata seriala (memoria RAM,FLASH sau EEPROM cu interfata I2C, SPI, etc.) si numai ca memorie de date.

Limbaje de programare

Limbajul masina si de cel de asamblare – este o singura forma de reprezentare a informatiei pe care un microcontroler o „intelege”. Din nefericire aceasta forma de reprezentare a informatiei este total nepractica pentru un programator, care va utiliza cel putin un limbaj de asamblare, in care o instructiune (o mnemonica cu operanzii aferenti) are drept corespondent o instructiune in limbaj masina (exceptie fac microinstructiunile disponibile la unele asambloare).

Un program in limbaj de asamblare este rapid si compact. Asta nu inseamna ca un astfel de program, prost scris, nu poate fi lent si de mari dimensiuni, programatorul avant controlul total pentru executia programului si gestiunea resurselor. Limbajul de asamblare este primul care trebuie invatat atunci cand dorim sa proiectam o aplicatie hard/soft cu un anume microcontroler, el permitand intelegerea arhitecturii acestuia si utilizarea ei eficienta.

De multe ori este neproductiva utilizarea doar a unui limbaj de asamblare pentru dezvoltarea unei aplicatii complexe deoarece exista si familii de microcontrolere cu CPU de tip CISC care au un numar foarte mare de instructiuni (x100) combinate cu moduri de adresare numeroase si complicate. Totusi sa nu uitam ca la ora actuala multi din producatorii mari de microcontrolere ofera medii de dezvoltare software gratuite care includ programe asabloare gratuite. De asemenea, comunitatea utilizatorilor diverselor familii de microcontrolere a dezvoltat si ea, in timp, multe astfel de asambloare, care sunt disponibile ca freeware.

Interpretere. Un interpreter este o implementare a unui limbaj de nivel inalt, mai apropiat de limbajul natural. El este de fapt un program rezident care, in acest caz, ruleaza pe o platforma de calcul de tip microcontroler. Caracteristicile pentru executia unui astfel de program este citirea si executarea secventiala a instructiunilor (instructiune cu instructiune). De fapt fiecare instructiune de nivel inalt este interpretata intr-o secventa de instructiuni masina care se executa imediat.

Cele mai intalnite interpretere sunt cele pentru limbajele BASIC si FORTH. Limbajul BASIC este remarcabil prin simplitatea si accesibilitatea codului, dar si prin viteza mai mica de executie, acesta fiind de altfel pretul platit pentru utilizarea orcarui interpreter. Un exemplu foarte raspandit de interpreter este PBASIC al firmei Parallax utilizat pentru programarea modulelor Basic Stamp. El este foarte usor de invatat si poate fi utilizat eficient de productiv chiar de indivizi care au o experienta minima in domeniul programarii.

Limbajul FORTH este popular datorita vitezei de executie si posibilitatii construirii aplicatiilor din parti reutilizabile. Este un limbaj mult diferit de limbajele clasice, codul este destul de greu de scris si mai ales de citit. Totusi odata stapanit foarte bine in timp, poate fi foarte productiv in aplicatii cum ar fi cele de control, in robotica, etc.Un avantaj foarte mare in utilizarea unui interpreter este dezvoltarea interactiva si incrementala a aplicatiei: se scrie o portiune de cond care poate fi testata imediat, instructiune cu instructiune, daca rezultatele sunt satisfacatoare se poate continua cu adaugarea de astfel de porti pana la finalizarea aplicatiei. Exista si variante de interpretere ale limbajului C care constituie o implementare aproximativa a standardului ANSI C.

Compilatoare – Un compiloator combina usurinta in programare oferita de un interpretor (de fapt de limbajul de nivel inalt) cu o viteza mai mare de executie a codului. Pentru aceasta programul, in limbaj de nivel inalt, este translatat (tradus) direct in limbaj masina sau in limbaj de asamblare (urmand a fi apoi asamblat). Codul masina rezultat are dimensiuni relativ mari (dar mai mici decat cel interpretat) si este executat direct, ca un tot, de microcontroler. De regula codul generat poate fi optimizat fie ca dimensiune, fie ca timp de executie. Pot fi enumerate compilatoare pentru limbajele : C, BASIC, Pascal, PL/M(Intel), Forth. Cele mai utilizate sunt cele pentru limbajul C, un limbaj universal folosit atat pentru super computere cum ar fi Cray-ul, cat si de microcontrolere de 4 biti. Este un limbaj puternic si flexibil, care desi de nivel inalt, poate permite si accesul direct la resursele sistemului de calcul. Un program bine scris genereaza un cod rapid si compact. Totusi, de multe ori, portiuni critice din punct de vedere al vitezei de executie, trebuie inca scris in limbaj de asamblare. Sunt numeroase implementari pentru majoritatea familiilor de microcontrolere. Cu anumite limitari legate de arhitectura si mai ales resursele microcontrolerului, asigura probabilitatea unei aplicatii scrise pentru un anumit tip (familie) de microcontroler la un alt tip (familie). Pentru anumite familii noi si foarte puternice de microcontrolere, datorita complexitatii setului de instructiuni si al numeroaselor moduri de adrese, este descurajata in mod explicit utilizarea limbajului de asamblare in momentul in care se programeaza aplicatii performante. Unitatea centrala a acestor noi microcontrolere a fost proiectata si optimizata pentru utilizarea unor limbaje de nivel inalt. Functie si de familia de microcontrolere in cauza, pretul unor astfel de compilatoare (de C) poate fi destul de ridicat, incepand cu x100USD si ajung la x1000USD. Exista insa si variante freeware de compilatoare de C, cum ar fi gcc care este o portare a compilatorului omonim din Linux in lumea microcontrolerelor. Exista implementari diferite ale acestui compilator care genereaza cod pentru familii diferite de microcontrolere (de exemplu AVR, MSP430, 68HC11, etc.).

In cazul limbajului masina si cel de asamblare si cel de compilatoare codul este obtinut cu ajutorul unui mediu integrat de dezvoltare a programelor (IDE-Integrated Development Enviroment) care contine in mod tipic urmatoarele componente software: un editor specializat („link-editor/locator”), programe de gestiune a unor biblioteci de cod („libraries”), programe de conversie a formelor de reprezentare a codului (de exemplu din binar in format Intel HEX sau Motorola S) si nu in ultimul rand un simulator si/sau depanator („debugger”). Codul astfel obtinut trebuie incarcat in memoria de program a masinii tinta unde va rula, fiind de fapt programat intr-o memorie de tip (EP)ROM/Flash sau incarcat direct (up-loaded) intr-o memorie de tip RAM.

Concluzii

Configurarea unui sistem pentru controlul motorului DC

Configuratia hardware

Sistemul cu microcontroller Arduino

Alegerea Driverului

Surse de alimentare

Programarea Driverului

Aplicatii si experimente

Concluzii si contributii

Bibliografia
[1]Laurean Bogdan-Microcontrolere

[2]PIC16F631/677/685/687/689/690 Data Sheet (DS41262E), Microchip

Similar Posts