- Înțelegerea modulului ADC:
- Diagrama circuitului:
- Programarea MSP430 pentru ADC:
- Testarea rezultatului!
O caracteristică comună care este utilizată în aproape fiecare aplicație încorporată este modulul ADC (convertor analogic digital). Aceste convertoare analog-digitale pot citi tensiunea de la senzorii analogici, cum ar fi senzorul de temperatură, senzorul de înclinare, senzorul de curent, senzorul Flex și multe altele. Deci, în acest tutorial vom învăța cum să folosim ADC în MSP430G2 pentru a citi tensiunile analogice folosind Energia IDE. Vom interfața un mic potențiometru pe placa MSP și vom furniza o tensiune diferită unui pin analogic, vom citi tensiunea și o vom afișa pe monitorul serial.
Înțelegerea modulului ADC:
Crede-mă, cu greu ar dura 10 minute să te conectezi și să programezi MSP430G2 pentru a citi tensiunea analogică. Dar, permiteți-ne să petrecem ceva timp înțelegând modulul ADC din placa MSP, astfel încât să-l putem folosi eficient în toate proiectele noastre viitoare.
Un microcontroler este un dispozitiv digital, ceea ce înseamnă că poate înțelege doar 1 și 0. Dar, în lumea reală, aproape orice, cum ar fi temperatura, umiditatea, viteza vântului etc., sunt de natură analogică. Pentru a interacționa cu aceste modificări analogice, microcontrolerul folosește un modul numit ADC. Există multe tipuri diferite de module ADC disponibile, cel utilizat în MSP-ul nostru este SAR 8 canale ADC pe 10 biți.
ADC de aproximare succesivă (SAR): SAR ADC funcționează cu ajutorul unui comparator și a unor conversații logice. Acest tip de ADC utilizează o tensiune de referință (care este variabilă) și compară tensiunea de intrare cu tensiunea de referință folosind un comparator și diferența, care va fi o ieșire digitală, este salvată de pe bitul cel mai semnificativ (MSB). Viteza comparației depinde de frecvența ceasului (Fosc) pe care funcționează MSP.
Rezoluție de 10 biți: Acest ADC este un ADC de 8 biți pe 8 canale. Aici termenul de 8 canale implică existența a 8 pini ADC cu ajutorul cărora putem măsura tensiunea analogică. Termenul de 10 biți implică rezoluția ADC. 10-bit înseamnă 2 la puterea a zece (2 10) care este 1024. Acesta este numărul de pași de eșantionare pentru ADC-ul nostru, deci intervalul valorilor ADC-ului nostru va fi de la 0 la 1023. Valoarea va crește de la 0 la 1023 pe baza valorii tensiunii pe pas, care poate fi calculată folosind formula de mai jos
Notă: În mod implicit în Energia, tensiunea de referință va fi setată la Vcc (~ 3v), puteți varia tensiunea de referință utilizând opțiunea analogReference () .
De asemenea, verificați modul de interfață ADC cu alte microcontrolere:
- Cum se utilizează ADC în Arduino Uno?
- Interfațarea ADC0808 cu microcontrolerul 8051
- Utilizarea modulului ADC al microcontrolerului PIC
- Tutorial ADC Raspberry Pi
Diagrama circuitului:
În tutorialul nostru anterior am învățat deja cum să interfațăm LCD-ul cu MSP430G2, acum vom adăuga un potențiometru la MSP430 pentru a-i furniza o tensiune variabilă și a afișa valoarea tensiunii pe LCD. Dacă nu sunteți conștienți de interfața LCD-ului, reveniți la linkul de mai sus și citiți-l, deoarece voi ignora informațiile pentru a evita pocăința. Schema completă a circuitului proiectului este prezentată mai jos.
După cum puteți vedea, există două potențiometre utilizate aici, unul este utilizat pentru setarea contrastului LCD, în timp ce celălalt este utilizat pentru a furniza o tensiune variabilă plăcii. În acel potențiometru, un capăt extrem al potențiometrului este conectat la Vcc, iar celălalt capăt este conectat la masă. Pinul central (fir albastru) este conectat la pinul P1.7. Acest pin P1.7 va furniza o tensiune variabilă de la 0V (masă) la 3,5V (Vcc). Deci, trebuie să programăm pinul P1.7 pentru a citi această tensiune variabilă și a o afișa pe ecranul LCD.
În Energia, trebuie să știm cărui canal analog îi aparține pinul P1.7? Acest lucru poate fi găsit făcând referire la imaginea de mai jos
Puteți vedea pinul P1.7 în partea dreaptă, acest pin aparține A7 (Canalul 7). În mod similar, putem găsi numărul canalului respectiv și pentru alți pini. Puteți utiliza orice pini de la A0 la A7 pentru citirea tensiunilor analogice aici am selectat A7.
Programarea MSP430 pentru ADC:
Programarea MSP430 pentru a citi tensiunea analogică este foarte simplă. În acest program se va citi analogul valorii și se va calcula tensiunea cu acea valoare și apoi le va afișa pe ecranul LCD. Programul complet poate fi găsit în partea de jos a acestei pagini, mai jos explic programul în fragmente pentru a vă ajuta să înțelegeți mai bine.
Începem prin definirea pinilor LCD. Acestea definesc la ce pin al MSP430 sunt conectați pinii LCD. Puteți trimite conexiunea pentru a vă asigura că pinii sunt conectați respectiv
#define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7
Apoi, includem fișierul antet pentru afișajul LCD. Aceasta apelează biblioteca care conține codul despre modul în care MSP ar trebui să comunice cu ecranul LCD. Această bibliotecă va fi instalată în Energia IDE în mod implicit, deci nu trebuie să vă deranjați să o adăugați. De asemenea, asigurați-vă că funcția Cristal lichid este apelată cu numele pinilor pe care tocmai le-am definit mai sus.
#include
În funcția noastră de configurare () , am da doar un mesaj introductiv pentru a fi afișat pe ecranul LCD. Nu mă adânc prea mult, deoarece am învățat deja cum să folosim ecranul LCD cu MSP430G2.
lcd.inceput (16, 2); // Folosim un ecran LCD de 16 * 2 lcd.setCursor (0,0); // Plasați cursorul pe primul rând prima coloană lcd.print ("MSP430G2553"); // Afișați un mesaj introductiv lcd.setCursor (0, 1); // setați cursorul la prima coloană al 2-lea rând lcd.print ("- CircuitDigest"); // Afișați un mesaj introductiv
În cele din urmă, în interiorul funcției noastre buclă infinită () , începem să citim tensiunea furnizată pinului A7. După cum am discutat deja, microcontrolerul este un dispozitiv digital și nu poate citi nivelul tensiunilor direct. Folosind tehnica SAR, nivelul de tensiune este mapat de la 0 la 1024. Aceste valori se numesc valori ADC, pentru a obține această valoare ADC pur și simplu utilizați următoarea linie
int val = analogRead (A7); // citiți valoarea ADC din pinul A7
Aici funcția analogRead () este utilizată pentru a citi valoarea analogică a pinului, am specificat A7 în interiorul său, deoarece am conectat tensiunea variabilă la pinul P1.7. În cele din urmă, salvăm această valoare într-o variabilă numită „ val ”. Tipul acestei variabile este întreg deoarece vom obține doar valori cuprinse între 0 și 1024 pentru a fi stocate în această variabilă.
Următorul pas ar fi calcularea valorii tensiunii din valoarea ADC. Pentru a face acest lucru, avem următoarele formule
Tensiune = (valoare ADC / rezoluție ADC) * tensiune de referință
În cazul nostru știm deja că rezoluția ADC a microcontrolerului nostru este 1024. Valoarea ADC se găsește și în linia anterioară și stochează variabila numită val. Tensiunea de referință este egală cu tensiunea la care microcontrolerul funcționează. Când placa MSP430 este alimentată prin cablu USB, atunci tensiunea de funcționare este de 3,6V. De asemenea, puteți măsura tensiunea de funcționare utilizând un multimetru peste Vcc și pinul de masă de pe placă. Deci formula de mai sus se potrivește cazului nostru așa cum se arată mai jos
tensiune de plutire = (float (val) / 1024) * 3,6; // formule pentru a converti valoarea ADC în tensiune
S-ar putea să vă confundați cu linia float (val). Aceasta este utilizată pentru a converti variabila „val” din tipul de date int în tipul de date „float”. Această conversie este necesară deoarece numai dacă obținem rezultatul val / 1024 în float îl putem multiplica 3.6. Dacă valoarea este primită în întreg, va fi întotdeauna 0, iar rezultatul va fi și zero. Odată ce am calculat valoarea și tensiunea ADC, nu mai rămâne decât să afișăm rezultatul pe ecranul LCD, care se poate face folosind următoarele linii
lcd.setCursor (0, 0); // setați cursorul la coloana 0, linia 0 lcd.print ("ADC Val:"); lcd.print (val); // Afișează valoarea ADC lcd.setCursor (0, 1); // setați cursorul la coloana 0, linia 1 lcd.print ("Voltage:"); lcd.print (tensiune); // Tensiunea de afișare
Aici am afișat valoarea ADC în prima linie și valoarea tensiunii în a doua linie. În cele din urmă oferim o întârziere de 100 de mii de secunde și ștergem ecranul LCD. Aceasta a fost valoarea care va fi actualizată pentru fiecare 100 de mil.
Testarea rezultatului!
În cele din urmă, ajungem la partea distractivă, care ne testează programul și ne jucăm cu el. Efectuați doar conexiunile așa cum se arată în schema circuitului. Am folosit o placă mică pentru a-mi face conexiunile și am folosit fire jumper pentru a conecta placa de măsurare la MSP430. Odată ce conexiunile sunt terminate, a mea arăta așa mai jos.
Apoi încărcați programul care este dat mai jos pe placa MSP430 prin Energia IDE. Ar trebui să puteți vedea textul introductiv pe LCD, dacă nu reglați contrastul LCD folosind potențiometrul până când vedeți cuvinte clare. De asemenea, încercați să apăsați butonul de resetare. Dacă lucrurile funcționează conform așteptărilor, ar trebui să puteți vedea următorul ecran.
Acum variați potențiometrul și ar trebui să vedeți și tensiunea afișată pe ecranul LCD variind. Să verificăm dacă măsurăm corect tensiunea pentru a face acest lucru, folosiți un multimetru pentru a măsura tensiunea în centrul POT și al solului. Tensiunea afișată pe multimetru trebuie să fie aproape de valoarea afișată pe ecranul LCD, așa cum se arată în imaginea de mai jos.
Asta este, am învățat cum să măsurăm tensiunea analogică folosind ADC-ul plăcii MSP430. Acum putem interfața mulți senzori analogici cu placa noastră pentru a citi parametrii în timp real. Sper că ați înțeles tutorialul și v-a plăcut să îl învățați, dacă aveți probleme, vă rugăm să contactați secțiunea de comentarii de mai jos sau prin forumuri. Să ajungem din urmă într-un alt tutorial al MSP430 cu un alt subiect nou.