Ce este un microcontroller ?

Ce este un microcontroller - HobbytronicaBine te-am găsit !

Sigur trebuie să fi observat că de foarte multe ori aparatele electronice au undeva pe modulul de bază o “omidă” neagră cu multe picioare despre care cei mai pricepuţi spun că se numeşte microcontroller. Rolul acestora într-un circuit electronic este identic cu rolul jucat de creier într-un organism biologic: controlează cea mai mare parte a funcţiilor pe care acel sistem le poate realiza. Există foarte multe tipuri de microcontroller-e, fiecare oferind un set diferit de funcţii şi de nivele de perfomanţă. Cu toate acestea, absolut toate tipurile de microcontroller-e au o serie de caracteristici comune care odată înţelese fac mult mai uşoară înţelegerea şi utilizarea oricărui microcontroller.

  • Ce este un microcontroller ?
  • Structura simplificată a unui microcontroller
  • Principalele tipuri de funcţii realizabile de către un microcontroller
  • Programarea microcontroller-elor;
  • Etapele dezvoltării unui proiect cu microcontroller-e;
Ce este un microcontroller ?

Componentele electronice obişnuite funcţionează conform parametrilor stabiliţi în momentul fabricaţiei acestora. În contrast cu acestea, un microcontroller este o componentă electronică al cărei mod de funcţionare poate fi modificat prin programarea acesteia cu un soft special creat în acest scop. Pentru a-l deosebi de alte tipuri de soft-uri, programul instalat şi rulat într-un microcontroller are o denumite particulară: firmware.

În altă ordine de idei, un microcontroller poate fi considerat a fi un microcalculator care pe lângă procesor şi memorie este completat cu circuite şi funcţii speciale care îi permit să interacţioneze uşor cu mediul exterior.

Microcontroler-ele sunt mici “creiere” electronice care, dacă au primit “educaţia necesară” (prin firmware), pot înlocui cu succes foarte multe tipuri de circuite electrice şi electronice. În acest mod, microcontroller-ele ne permit să obţinem aparate mai mici, mai ieftine şi mai performante.

Totuşi, oricât de deştept ar fi un creier, acesta nu va putea vorbi fără corzi vocale, nu se va putea deplasa fără muşchi şi oase, nu va putea auzi fără urechi etc. pentru că un creier nu poate lucra decât cu semnale electrice. În mod similar, nici un microcontroller nu va putea emite lumină sau sunet fără un bec sau un difuzor, nu va putea să mişte ceva fără un motor, nu va putea auzi fără un microfon etc. Asta înseamnă că pentru toate lucrurile pe care nu le poate realiza singur, microcontroller-ul are nevoie de o serie de componente auxiliare. Ansamblul format dintre un microcontroller, firmware-ul instalat în el şi toate componentele auxiliare (fie ele electrice, electronice, mecanice, hidraulice, pneumatice, optice, acustice etc.) se mai numeşte sistem înglobat (în limba română), embedded system (în limba engleză) sau sistem embedded (în romgleză 🙂 ).

Structura simplificată a unui microcontroller

Structura internă a unui microcontroller este de obicei prezentată cu un lux de amănunte tehnice care, deşi sunt foarte utile pentru experţi, nu ajută prea mult un novice. Pe lângă asta, în marea majoritate a cazurilor nu este nevoie să ştii în detaliu ce se petrece într-un microcontroller pentru a-ţi putea face treaba cu el. Ţinând cont de aceste lucruri, structura unui microcontroller se poate reprezenta foarte simplificat, aşa ca în figura 1.

Figura 1. Structura simplificata a unui microcontroller - HobbytronicaFigura 1. Structura simplificată a unui microcontroller

Dacă totuşi doreşti să afli mai multe detalii despre structura internă a unui microcontroller, dă un click aici.

Revenind la conţinutul figurii 1, menţionez că în chenarul gri am figurat toate elementele din interiorul capsulei unui microcontroller, iar în chenarele colorate cu albastru deschis am figurat principalele categorii de pini prin care microcontroller-ul comunică cu exteriorul. Acestea fiind zise, hai să vorbim puţin despre fiecare dintre aceste elemente.

1. Procesor

Este componenta care execută instrucţiunile cuprinse în firmware. În altă ordine de idei, procesorul:

  • preia date de la pinii configuraţi ca pini de intrare, apoi;
  • prelucrează aceste date conform instrucţiunilor scrise în firmware şi în cele din urmă;
  • oferă semnale de ieşire corespunzătoare, cu ajutorul pinilor configuraţi ca pini de ieşire.

Spre deosebire de PC-uri şi laptopuri care sunt destinate lucrului cu mai multe programe în acelaşi timp, microcontroller-ele sunt destinate unor aplicaţii individuale, adică rulează mereu un singur program (firmware-ul). Asta înseamnă că procesoarele din microcontroller-e nu au de muncit la fel de mult ca cele de pe PC-uri şi din acest motiv producătorii de microcontroller-e le-au dotat cu procesoare a căror frecvenţă de lucru rar depăşeşte 100-200MHz (faţă de 2-3 Ghz cât are un PC/laptop obişnuit). Reducerea de performanţă la strictul necesar a permis microcontroller-elor să aibă un preţ mic, ceea ce argumentează gradul de răspândire pe care îl putem observa astăzi.

2. Memorie RAM

Atunci când realizăm niste calcule ceva mai complexe, nu putem face totul “în cap” ci avem nevoie să notăm temporar anumite rezultate pe o bucată de hârtie. În mod similar şi procesoarele au nevoie să-şi noteze temporar nişte rezultate, numai că ele nu o fac pe o bucată de hârtie ci în ceea ce se numeşte memorie RAM. Iniţialele RAM provin de la Random Access Memory, care în traducere liberă înseamnă memorie cu acces aleator, adică o memorie din care datele pot fi accesare (citite sau scrise) individual (asta spre deosebire de alte tipuri de memorie în care procesorul este nevoit să citească sau să scrie şi alte locaţii de memorie, în afară de cele care îl interesează în acel moment).

Recapitulând, memoria RAM este o “ciornă” pe care procesorul o foloseşte pentru a-şi face calculele. Memoria RAM este o memorie volatilă, adică datele memorate în ea se şterg atunci când alimentarea microcontroller-ului este întreruptă. Asta înseamnă că această memorie nu poate fi folosită pentru salvarea permanentă a datelor. Cel puţin teoretic, în cazul memoriei RAM nu există un număr maxim de rescrieri şi deci practic, dacă este folosită corespunzător, memoria RAM nu are moarte.

Reducerea de performanţă strict la necesităţi face ca resursele de RAM ale unui microcontroller să fie cu mult inferioare celor din componenţa unui PC/laptop. De regulă, microcontroller-ele nu dispun de memorii RAM mai mari de câteva zeci de kilobiţi (kb).

3. Memorie Program (FLASH)

Memoria Program este memoria în care este scris firmware-ul. În ultimii ani, memoria program folosită este de tip FLASH (adică exact ca cea din stick-urile flash USB). Conţinutul memoriei program este modificat doar în momentul instalării firmware-ului. Am putea spune că memoria program este “manualul de instrucţiuni al microcontroller-ului”: acesta este scris doar în momentul instalării firmwareului, iar ulterior microcontroller-ul nu face decât să urmărească întocmai instrucţiune din acest manual, fără a-i modifica în nici un fel conţinutul. Memoria program este una nevolatilă, continutul ei (firmware-ul) fiind disponibil şi după resetarea/repornirea microcontroller-ului.

Spre deosebire de memoria RAM, memoria program de tip FLASH este garantată doar pentru un număr de maxim 10000 de scrieri.

Firmware-urile sunt programe mult mai mici decât programele pentru PC/laptor. Din acest motiv, memoriile program rareori depăşesc 1-2 Mb.

4. Memorie Salvare Date (EEPROM)

În aplicaţiile practice microcontroller-ele trebuie uneori să memoreze nişte date undeva unde le poate regăsi intacte oricând, chiar şi după restartarea/repornirea echipamentului pe care îl controlează. Eu unul am denumit acel loc memorie salvare date şi din punct de vedere fizic este reprezentat de o memorie de tip EEPROM, adică Electrically Erasable Programmable Read-Only Memory. Din partea cu Read-Only Memory s-ar înţelege că este vorba de o memorie care nu poate fi decât citită, nu şi scrisă. Adevărul este că această memorie poate fi şi scrisă (pentru că altfel nu am avea ce citi din ea 🙂 ) iar menţiunea Read-Only Memory se referă la destinaţia ei: stocarea de date care în timpul funcţionării microcontroller-ului, sunt de obicei doar citite (nu şi scrise). În această categorie de date intră valorile de calibrare, setări personalizate, mesaje de eroare etc. Optimizarea resurselor microcontroller-elor a determinat ca memoria EEPROM să aibă în general valori de cel mult 500-1000 kb. Principiul de funcţionare face ca memoriile EEPROM să fie garantate pentru un număr de scrieri de cel mult 100.000.

5. Pini pentru Intrări şi Ieşiri programabile

Cei mai mulţi pini de care dispune un microcontroller sunt pini prin care acesta comunică cu restul lumii. Aceşti pini sunt numiţi intrări şi ieşiri programabile pentru că destinaţia lor nu este definitiv fixată prin construcţie (aşa cum este cazul componentelor electronice obişnuite) ci este stabilită de instrucţiunile scrise în firmware. Astfel, printr-o programare corespunzătoare intrările şi ieşirile programabile pot fi configurate să aibă funcţii de:

  • intrare digitală. În această configuraţie pinul respectiv poate primi şi interpreta doar semnale digitale: 0 logic (dacă tensiunea aplicată la intrare este mai mică decât 0,5 x Va, unde Va este tensiunea de alimentare a microcontroller-ului) sau 1 logic (dacă tensiunea de la intrare este mai mare decât 0,5 x Va);
  • ieşire digitală. În acest caz, pe pinul respectiv microcontroller-ul poate dicta doar semnale digitale: 0 logic (adică o tensiunea practic egală cu 0V) sau 1 logic (o tensiune practic egală cu tensiunea de alimentare a microcontroller-ului);
  • intrare analogică. În această configuraţie tensiunea aplicată pe pinul respectiv este dirijată către un convertor analog digital (prescurtat convertor A/D). În acest mod, microcontroller-ul poate “înţelege” şi alte semnale de intrare, nu doar pe cele de 0 şi 1 logic. Sau altfel spus, un pin configurat ca intrare digitală nu înţelege decât între alb şi negru, pe când un pin configurat ca intrare analogică poate înţelege şi diferite nuanţe de gri. Numărul acestor nuanţe de gri depinde de rezoluţia convertorului A/D cu care este dotat microcontroller-ul. De regulă, rezoluţia acestuia este de 10 biţi care transformaţi în sistem zecimal ne arată ca acel pin va putea “deosebi” 1024 de “nuanţe de gri”;
  • ieşire PWM. Semnalul PWM (Pulse Width Modulation) este un semnal format din impulsuri cu frecvenţă constantă dar cu durată variabilă. Dacă la ieşirea unui pin configurat ca ieşire PWM aplicăm un filtru RC care să integreze aceste impulsuri (adică să le transforme într-un semnal continuu, “lin”), vom obţine o tensiune a cărei valoare este direct proporţională cu durata impulsurilor. În acest mod, din microcontroller putem obţine şi semnale de ieşire analogice, adică şi “nuanţe de gri”, nu doar “alb” sau “negru”. Spre deosebire rezoluţia de transformare din analogic în digital, rezoluţia unei ieşiri configurate ca ieşire PWM este de obicei doar de 8 biţi (adică doar 256 de “nuanţe de gri”).

6. Pini oscilator cuarţ

La baza funcţionării oricărui procesor stă un oscilator. Acesta, în principiu, are două funcţii:

  • dictează viteza de lucru a procesorului;
  • asigură sincronizarea tuturor proceselor realizate de procesor.

Semnalul creat de acest oscilator este cunoscut preponderent sub numele de semnal de ceas, semnal de tact sau clock signal (echivalentul din limba engleză a expresiei “semnal de ceas”).

Nu vom aborda acum detalii privind funcţionarea oscilatorului, pentru că ne-am îndepărta prea mult de tema acestui articol. Vreau însă să menţionez o metaforă care personal îmi place foarte mult: procesorul unui microcontroller poate fi privit ca un solist care interpretează o partitură (reprezentată de firmware) în ritmul dictat de semnalul de ceas. Necesitatea sincronizării proceselor executate de un procesor devine mai evidentă atunci când avem un modul electronic în care mai multe procesoare trebuie să comunice între ele: fără a avea o sicronizare precisă între procesele fiecărui procesor, ar fi ca şi cum am avea o orchestră în care fiecare interpret îşi cântă partitura cu altă viteză. Nu cred că este nevoie să-ţi explic ce harmalăie ar ieşi :).

Pentru a îndeplini funcţiile menţionate mai sus, oscilatorul unui procesor trebuie să menţină o frecvenţă de oscilaţie foarte constantă, indiferent ce cum variază condiţiile de mediu (temperatură, tensiune de alimentare, umiditate, presiune, vârstă etc.). Din acest motiv, în marea majoritate a cazurilor, procesoarele (inclusiv cele din microcontroller-e) sunt “dirijate” de oscilatoare cu cuarţ.

Acestea fiind zise, pinii oscilator cuarţ sunt pinii prin care microcontroller-ului i se poate ataşa un oscilator cu cuarţ.

7. Pini setare tensiune referinţă convertor analogic – digital.

Ştim deja că un convertor A/D transformă unui semnal analogic (de exemplu tensiunea de 3,25 V) într-un semnal digital (de exemplu numărul 658). Ceea ce e posibil să nu ştii este faptul că fiecare convertor A/D poate converti doar o anumită gamă de semnale de intrare (tensiuni) într-o anumită gamă de semnale digitale de ieşire (numere) cu o anumită eroare maximă de conversie.

Hai să încercăm să lămurim pe scurt ce este eroarea de conversie. Pentru asta hai să presupunem un caz foarte simplu: un convertor A/D care poate transforma gama 0-5V în gama numerelor de la 0 la 5. Pentru 0 V la intrare vom obţine numărul 0 la ieşire, pentru 1V la intrare vom obţine numărul 1 la ieşire şi aşa mai departe. Însă ce număr vom obţine la ieşire când la intrare aplicăm un semnal de 0,7 V ? Convertorul nu ne poate da la ieşire numărul 0,7 (pentru că el nu poate oferi la ieşire decât numere întregi) aşa că va aproxima rezultatul conversiei la cel mai apropiat număr întreg. 0,7 este mai aproape de 1 decât de 0 şi deci rezultatul conversiei va fi 1. Rezultatul unei conversii 100% precise ar fi numărul 0,7, ceea ce înseamnă că în exemplul nostru avem o eroare de conversie de 1 – 0,7 = 0,3 V. Ei bine, eroarea maximă de conversie arată valoarea maximă a aproximării pe care respectivul convertor A/D o poate face. Aceasta se calculează împărţind gama semnalelor de intrare la gama valorilor posibile la ieşire, ceea ce înseamnă ca în exemplu nostru vom avea o eroare de conversie de maxim 5V/5 = 1V. 

Parametrii unui convertor A/D pot fi ajustaţi după necesităţi. Pentru un convertor A/D de 10 biţi, adică unul care poate oferi la ieşire numere între 0 şi 1023 (cum este cazul majorităţii convertoarelor A/D din microcontroller-e) putem avea de exemplu următoarele moduri de funcţionare:

  • pentru semnale analogice de intrare între 0 şi 5V, convertorul A/D oferă la ieşire numere între 0 şi 1023. În acest caz, eroarea maximă de conversie este de maxim 5V/1024 = 4,88mV. De ce am împărţit la 1024 şi nu la 1023 cât am spus că poate fi numărul maxim dat la ieşirea convertorului A/D ? Pentru că am ţinut cont şi de numărul “0” care este şi el una din valorile pe care convertorului A/D îl poate oferi ca rezultat;
  • pentru semnale analogice de intrare între 0 şi 1V, convertorul A/D oferă la ieşire numere între 0 şi 1023. În acest caz, eroarea maximă de conversie este de 1V/1024 = 0,9765 mV.

Observăm că în primul mod de funcţionare convertorul A/D poate lucra cu o gamă mai mare de tensiuni de intrare (0-5 V) însă cu o eroare maximă de conversie mai mare. În cel de-al doilea caz situaţia este exact invers: convertorul suportă o gamă mai mică de tensiuni de intrare (0-1V), însă eroarea maximă de conversie este mult mai mică. Nu putem avea concomitent şi gama mare de semnale de intrare şi eroare de conversie mică, motiv pentru care trebuie să ne decidem asupra unui compromis între cele două. După luarea acestei decizii apare întrebarea: cum impun convertorului A/D din microcontroller să adopte gama de semnale de intrare (şi implicit eroarea maximă de conversie) pe care o vreau eu ? Răspunsul este: prin aplicarea unei tensiuni de referinţă pe pinii care în figura 1 sunt numiţi pini setare tensiune referinţă convertor analogic – digital. Ce valoare trebuie să aibă această tensiune de referinţă ? Păi exact valorea tensiunii maxime din gama de semnale de intrare dorită. Mai precis, dacă vrei ca gama semnalelor acceptate la intrare să fie între 0 si 2,5896542 V, tensiunea de referinta trebuie să aibă şi ea tot 2,5896542 V. Sper că încă nu te-am zăpăcit :).

Menţionez că pentru cei care nu vor să-şi bată prea mult capul cu aplicarea acestei tensiuni de referinţă, multe microcontroller-e au incluse în capsule câteva surse de tensiuni de referinţă care pot fi activate prin instrucţiunile scrise în firmware. Valorile acestor tensiuni de referinţă “interne” sunt fixe şi au de obicei 1,1V, 2,5V şi 5V, adică poţi seta convertorul A/D să lucreze cu game de semnale de intrare de 0-1,1V, 0-2,5V şi 0-5V.

8. Pini alimentare

Acesti pini fac ceea ce le sugerează şi numele: alimentează microcontroller-ul şi tot ce este conţinut în el. Din punct de vedere al tensiunii de alimentare există practic doar două tipuri de microcontroller-e: cele alimentate la 3,3V şi cele alimentate la 5V.

Principalele tipuri de funcţii realizabile de către un microcontroller

Am sugerat mai sus că un microcontroller programat corespunzător poate realiza funcţiile multor alte tipuri de circuite electrice “clasice”. Pe lângă acestea, microcontroller-e pot realiza funcţii care altfel ar fi deosebit de greu de realizat (comunicaţii de date fără erori, afişare de date pe diferite tipuri de display etc.). Nu în ultimul rând versatilitatea microcontroller-elor le permite cercetătorilor (profesionişti sau amatori) să-şi imagineze şi să dezvolte sisteme embedded cu noi şi noi functionalităţi. În continuare voi enumera cele mai întâlnite funcţii posibile prin utilizarea unui microcontroller.

1. Preluarea de date de la practic orice tip de senzor. Senzorii sunt dispozitive care transformă un semnal de natură neelectrică (presiune, forţă, viteză, temperatură etc.) într-un semnal de natură electrică. Cu ajutorul unui senzor potrivit, un microcontroller poate “citi” practic orice fel de mărime fizică.

2. Introducerea de comenzi prin intermediul tastelor şi encoderelor (de ex. rotiţa de la mouse). Controlul unui sistem analogic poate presupune utilizarea de butoane complicate şi de potenţiometre. În contrast, comanda unui microcontroller se poate face cu ajutorul unor taste microswitch, care sunt simple, ieftine, durabile şi nu în ultimul rând, elegante :).

3. Afişarea de date pe diferite tipuri de display-uri. Într-un sistem analogic trebuie ca pentru fiecare informaţie de afişat să ai un dispozitiv de afişare (un bec, un led etc). Într-un sistem cu microcontroller + display poţi folosi acelaşi display pentru a afişa informaţii diferite.

4. Implementarea de structuri de meniuri. Într-un sistem analogic, practic pentru orice comandă trebuie să ai un buton dedicat. Într-un sistem cu microcontroller în care s-a creat o structură de meniuri, poţi da un număr uriaş de comenzi folosind doar câteva taste.

5. Prelucrarea facilă şi rapidă a datelor de intrare. Aici nu pot să-ţi spun decât că practic nu există funcţie de prelucrare a semnalelor care să nu poate fi implementată cu succes cu ajutorul unui microcontroller.

6. Memorarea de date. În contrast cu sistemele analogice, sistemele cu microcontroller pot memora practic orice tip de date.

7. Creează semnale de ieşire de tip On/Off şi PWM. Primul tip de semnale poate fi folosit pentru funcţii de activare/dezactivare (de exemplu a unor becuri, sonerii, electromagneţi etc.) iar al doilea poate fi folosit pentru funcţii de control precis (a turaţiei unui motor, a intensităţii luminoase a unui bec/led, a tensiunii de ieşire a unui regulator de tensiune etc).

Acestea ar fi doar cele mai generale exemple de funcţii care îmi vin acum în minte. Mai multe exemple atât de funcţii cât şi de aplicaţii concrete poţi găsi uşor printr-o simplă căutare pe net. Până când îţi voi putea prezenta o listă consistentă cu aplicaţii cu microcontroller-e îţi recomand să arunci o privire aici.

Programarea microcontroller-elor

Dacă ai ajuns până aici sunt sigur că eşti curios despre cum obţinem faimosul firmware – soft-ul care însufleţeşte un microcontroller şi tot ce este controlat de acesta.

După cum probabil ai înţeles de prin alte surse, un microcontroller este un dispozitiv digital şi prin urmare nu ştie decât de 0 şi de 1 logic. Din acest motiv, firmware-ul este şi el o listă de instrucţiuni de lucru care nu conţine altceva decât şiruri de 0 şi de 1. Apare astfel o problemă: tu ca om foloseşti un limbaj (una care foloseşte litere, semne de punctuaţie şi cifre) iar firmware-ul şi implicit microcontroller-ul foloseşte limbajul digital (care are doar 2 “litere” – 0 şi 1). Bineînţeles, ambele limbaje sunt inventate de om şi cel puţin teoretic ar trebui să poţi învăţa să te exprimi prin ambele. Ai putea, dar ţi-ar fi extraordinar de greu. Din acest motiv cercetătorii în informatica au dezvoltat nişte unelte ajutătoare:

  • limbaje de programare, care sunt colecţii de cuvinte speciale pe care le poţi folosi pentru a scrie firmware-ul. Fişierul sau fişierele în care ai scris firmware-ul poartă denumirea de Cod sursă;
  • compilatoare, care sunt nişte programe care au funcţie de translator – traduc codul sursă într-un limbaj pe care microcontroller-ul îl poate înţelege (limbaj denumit şi cod maşină).

Cele două unelte de mai sus se regăsesc în componenţa unor programe sau set-uri de programe care au denumirea generică de medii de dezvoltare integrate sau Integrated Development Environment (IDE).

Câteva din cele mai întâlnite medii de dezvoltare sunt:

  • Arduino IDE. Este un mediu de dezvoltare destinat îndeosebi constructorilor amatori. Cu ajutorul acestuia se pot realiza firmware-uri pentru microcontroller-ele produse de firma ATMEL;
  • AVR studio. Este un mediu de dezvoltare creat tot pentru microcontroller-ele produse de ATMEL însă spre deosebire de Arduino IDE care este optimizat spre a fi utilizat cu uşurinţă de amatori, AVR studio este un mediu de dezvoltare profesional (a se citi mult mai complet/complex şi prin urmare, ceva mai dificil de utilizat);
  • MPLABX IDE. Este mediu de dezvoltare destinat micrcontroller-elor produse de firma MICROCHIP. La fel ca şi AVR Studio, MPLABX IDE este un mediu de dezvoltare profesional.

Odată ce ai finalizat de scris codul sursă într-un mediu de dezvoltare, vine momentul să instalezi acel cod în memoria program a microcontroller-ului. Pentru aceasta, în primul rând trebuie să conectezi microcontroller-ul de programat la PC-ul/laptopul pe care ai codul sursă, problemă care se rezolva fie cu un simplu cablu USB (ca în cazul modulelor de tip Arduino) fie prin intermediul unui modul special numit programator (de exemplu REAL ICE). După realizarea conexiunii cu microcontroller-ul nu-ţi mai rămâne decât să dai un click pe butonul de programare din ferestra de lucru a mediului de dezvoltare, iar acesta face totul (transformă codul sursă în limbajul microcontroller-ului şi apoi îl instalează în memoria program a acestuia).

Sunt sigur că te-ai aştepta la mai multe noţiuni despre scrierea efectivă a instrucţiunilor din firmware, însă dacă aş face asta pe scurt ar fi ca şi cum aş încerca “pe scurt” să te învăţ să vorbeşti într-o altă limbă. De aceea, prefer să abordez acest subiect pe larg într-un material viitor.

Etapele dezvoltării unui proiect cu microcontroller-e.

Acum ar trebui să ştii în mare ce este un microcontroller, ce poţi face cu el şi cum anume îi poţi impune să facă ce vrei tu. În continuare, hai să vedem care ar fi cea mai practică ordonare a paşilor de urmat atunci când dorim să realizăm o aplicaţie cu microcontroller-e.

1. Realizarea unei scheme bloc

Înainte de a te apuca să construieşti un dispozitiv/aparat/echipament este foarte recomandat să desenezi o schemă bloc în care să adaugi toate blocurile funcţionare de care proiectul are nevoie precum şi toate legăturile dintre aceste blocuri. Cu alte cuvinte, prin realizarea unui scheme bloc obţii o imagine de ansamblu a proiectului, o imagine care conţine toate resursele de care proiectul tău are nevoie pentru a funcţiona aşa cum îţi doreşti.

2. Alegerea microcontroller-ului potrivit. Ştiind ce blocuri funcţionale trebuie să includă proiectul tău ar trebui să fie mai simplu să-ţi dai seama cam ce performanţe ar trebui să aibă microcontroller-ul pe care trebuie să-l foloseşti. În acest sens este indicat să-ţi faci o listă cu estimări cât mai precise în ceea ce priveşte următoarele necesităţi:

  • numărul minim de pini din fiecare categorie (intrări analogice, intrări digitale, ieşiri PWM şi ieşiri digitale);
  • viteza de lucru. Pentru aplicaţii în care te aştepţi să ai de a face cu prelucrări masive de date este bine să te orientezi spre un microcontroller care lucrează la cel puţin 70-100 Mhz. În restul cazurilor, poţi ignora aspectul vitezei de lucru;
  • dimensiunea memoriei program.

Cu toate acestea, de multe ori singurul criteriu important în alegerea microcontroller-ului este numărul minim de pini, pentru că toate celelalte caracteristici sunt natural legate de acest parametru. De exemplu, dacă ai o aplicaţie complexă, asta înseamnă că ai de a face automat cu multe semnale (pentru care îţi trebuie mulţi pini), ai nevoie de o prelucrare rapidă de date (pentru care îţi trebuie o viteză de lucru mare), ai nevoie de un firmware cu multe, multe instrucţiuni (pentru care îţi trebuie o memorie program mare). La cealaltă extremă, este puţin probabil ca pentru o aplicaţie banală (cum ar fi aprinderea şi stingerea unui bec) să ai neaparat nevoie de un microcontroller cu 400 de pini :).

3. Proiectarea parţii hardware. Ştiind schema bloc şi tipul de microcontroller pe care-l putem folosi, se trece la proiectarea parţii hardware (cablaj imprimat, componente electrice, electronice, electromecanice, optice, acustice etc).

4. Crearea firmware-ului. Proiectarea părţii hardware se face înainte de crearea firmware-ului deoarece de multe ori dezvoltarea firmware-ului se face prin testarea lui pe partea hardware. Mai precis, se scrie o parte din firmware, se instalează pe microcontroller (care este conectat la partea hardware) şi se verifică dacă sistemul se comportă cum trebuie. Dacă nu, se modifică firmware-ul, apoi se instalează iar pe microcontroller, se retestează şi tot aşa până când totul merge cum trebuie.

5. Testarea produsului obţinut.După ce proiectul a ajuns în punctul în care poate realiza corect toate funcţiile dorite, se poate realiza o testare finală care să aibă ca scop:

  • depistarea de bug-uri (greşeli) în firmware, care în anumite circumstanţe pot afecta parţial sau total funcţionarea sistemului;
  • evaluarea comportării în timp a sistemului sau mai bine zis probabilitatea de defectare a respectivului aparat prin supraîncălzirea componentelor electronice, sensibilitate excesivă la câmpuri electromagnetice parazite, calitatea îndoielnică a unor componente, şocuri/vibraţii mecanice etc.

În funcţiile de performanţele pe care trebuie să le prezinte respectivul produs, dacă testarea finală arată probleme importante se pot impune sau nu modificări (de firmware sau hardware).

 

Lumea, aşa cum o vedem astăzi, este complet diferită de cea de acum 100 de ani. Acest lucru se datorează în principal avansului tehnologic fără precedent. Unul din pilonii care susţine şi stimulează continuu acest avans tehnologic sunt sistemele embedded controlate de microcontroller-e. De ce ? Pentru că, în termeni simpli, oferă o modalitate simplă, versatilă şi ieftină de a ne exprima creativitatea tehnică.

Aşa că dacă ai idei tehnice care mocnesc în tine, este foarte probabil ca microcontroller-ele să-ţi fie cei mai potriviţi aliaţi.

Am încercat să desenez o hartă menită să te ajute să înţelegi ce este microcontroller, cum anume lucrează el şi unde poţi ajunge cu ajutorul lui. Dacă nu ai înţeles ceva sau daca ai sugestii, lasă-mi un comentariu mai jos şi ajută-mă astfel să fac articolele viitoare mai bune.

Cu bine,

Ciprian

18 thoughts on “Ce este un microcontroller ?”

  1. Buna ziua,

    eu fac felicitari cu leduri (nu radeti, va rog) si vreau sa invat sa folosesc microcontrollere, cele mai simple, ca sa obtin efecte de aprindere si stingere a ledurilor. Va rog frumos sa ma indrumati putin, ce microcontrollere sa caut si ce programator pentru ele. Ma descurc in C si poate si in asamblare daca ma intorc cu memoria acum 25 de ani inapoi.

    Multumesc!

    Reply
    • Salut.

      Nu stiu cine ar putea rade de ideea ta (eu unul sigur nu).

      Eu personal nu am experienta decat cu mediul Arduino asa ca doar pe acesta ti-l pot recomanda si implicit doar in legatura cu el iti pot da sfaturi.

      Asa ca in principiu, cel putin pana inveti mai multe despre microcontrollere, iti recomand sa experimentezi cu Arduino (atat cu placile fizice cat si cu programarea). Daca folosesti placi Arduino nu-ti mai trebuie programator.

      Reply
  2. am citit acest articol pentru a intelege simplificat
    problema este ca nu-mi pot achizitiona o placa de dezvoltare AVR
    am incercat sa iau din china prin aliexpres si am luat teapa de 30 euro si ma las de hobby-ul acesta cu Atmel si asta dupa ce am invatat 2 de zile C-ul si C++ ( tutoriale si biblii de manuale )
    Personal recomand cititorilor acestui articol :NU va apucati de Arduino sau AVR pentru ca sunt costisitoare ca timp si bani .Ca sa faci niste leduri sa pilpie intr-un mod ordonat sau alte chestii la motoare pas cu pas ( dezmembrate din imprimante ) nu are sens

    Reply
    • De ce ai impresia ca daca tu ai luat teapa tot restul lumii va lua si ea teapa ? Si eu mi-am luat de cateva ori teapa, insa pentru ca am vazut ca nu toata lumea isi ia teapa nu m-am dat batut din prima. Si uite asa am invatat cum sa iau din ce in ce mai rar teapa ;).

      Reply
  3. Foarte bun aticolul chiar mar interesa daca se poate adapta dintr-un Kit Arduino un sistem de alimentere si control a unui arzator ci pelleti de lemn sar putea sa fie o varianta mai ieftina decit sa cumperi una gata facuta cam ai nevoie de 16 iesiri/intrari de comanda motoare senzori de caldura aprindere ventivare etc AR FI INTERESANT DE EXPERIMENTAT SI de ce nu si de produs astept un raspuns daca ar fi posibil

    MULTUMESC !!!

    Reply
    • Daca stii ce semnale de intrare si de iesire sunt si bineinteles cum anume trebuie sa se comporte sistemul se poate face chiar si fara toata placa Arduino Uno. Daca te intereseaza serios ideea, da un mail cu toate detaliile necesare si poate o facem.

      Reply
  4. Stimate dl. Ciprian nu am cuvinte .Incet dar sigur incep sa-n-teleg ceva din ”mistica electronicii”.Aveti un har special de-a face sa inteleaga oricine cu o minima pregatire in fizica si electrotehnica minunile din sfera electronicii.Va mulumesc,Sarbatori in pace va doresc.

    Reply
  5. daca comentariul se completa cu un montaj practic in care microcontrollerul efectua, regla, controla un proces tehnologic reglare debit, volum, temperatura sau in TV reglare automata contrast, luminozitate,cautare si memorare stati TV sau CAF se intelegea mult mai bine.
    cu stima Laurentiu.

    Reply
  6. multumesc pentru articol .se cunoaste ca sinteti un profesionist .cindva am avut un dascal care avea aceeasi tactica de explicare a unui lucru. cu mult respect Vasile

    Reply
  7. Multumesc! chiar vroiam sa inteleg ce este cu microcontrolerele.Astept cu interes alte articole interesante.

    Reply

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.