En vanlig funksjon som brukes i nesten alle innebygde applikasjoner er ADC-modulen (Analog til Digital Converter). Disse analoge til digitale omformerne kan lese spenning fra analoge sensorer som temperaturføler, vippesensor, strømføler, flekssensor og mye mer. Så i denne opplæringen vil vi lære hvordan du bruker ADC i MSP430G2 for å lese analoge spenninger ved hjelp av Energia IDE. Vi vil koble et lite potensiometer til MSP-kortet og levere en varierende spenning til en analog pin, lese spenningen og vise den på Serial Monitor.
Forstå ADC-modulen:
Stol på meg, det vil neppe ta 10 minutter å koble til og programmere MSP430G2 for å lese analog spenning. Men la oss bruke litt tid på å forstå ADC-modulen på MSP-kortet, slik at vi kan bruke den effektivt i alle kommende prosjekter.
En mikrokontroller er en digital enhet, noe som betyr at den bare kan forstå 1 og 0. Men i den virkelige verden er nesten alt som temperatur, fuktighet, vindhastighet osv. Analog av naturen. For å samhandle med disse analoge endringene bruker mikrokontrolleren en modul som heter ADC. Det er mange forskjellige typer ADC-moduler tilgjengelig, den som brukes i vår MSP er SAR 8-kanals 10-biters ADC.
Successive Approximation (SAR) ADC: SAR ADC fungerer ved hjelp av en komparator og noen logiske samtaler. Denne typen ADC bruker en referansespenning (som er variabel) og sammenligner inngangsspenningen med referansespenningen ved hjelp av en komparator, og forskjellen, som vil være en digital utgang, lagres fra den mest betydningsfulle biten (MSB). Hastigheten på sammenligningen avhenger av klokkefrekvensen (Fosc) som MSP opererer på.
10-biters oppløsning: Denne ADC er en 8-kanals 10 bit ADC. Her innebærer begrepet 8-kanal at det er 8 ADC-pinner som vi kan måle analog spenning med. Begrepet 10-bit innebærer oppløsningen til ADC. 10-bit betyr 2 til kraften av ti (2 10) som er 1024. Dette er antall eksempletrinn for ADC, så området for ADC-verdiene vil være fra 0 til 1023. Verdien vil øke fra 0 til 1023 basert på verdien av spenningen per trinn, som kan beregnes ved hjelp av formelen nedenfor
Merk: Som standard i Energia vil referansespenningen være satt til Vcc (~ 3v), du kan variere referansespenningen ved å bruke alternativet analogReference () .
Sjekk også hvordan du kobler ADC til andre mikrokontrollere:
- Hvordan bruke ADC i Arduino Uno?
- Grensesnitt ADC0808 med 8051 mikrokontroller
- Bruker ADC-modulen til PIC Microcontroller
- Raspberry Pi ADC opplæring
Kretsdiagram:
I vår forrige opplæring lærte vi allerede hvordan vi skal grensesnitt LCD med MSP430G2, nå skal vi bare legge til et potensiometer til MSP430 for å forsyne den med en variabel spenning og vise spenningsverdien på LCD-skjermen. Hvis du ikke er klar over å grensesnittet til LCD-skjermen, kan du falle tilbake til lenken ovenfor og lese gjennom den, siden jeg vil hoppe over informasjonen for å unngå anger. Det komplette kretsskjemaet for prosjektet er gitt nedenfor.
Som du ser er det to potensiometre som brukes her, den ene brukes til å stille kontrasten til LCD, mens den andre brukes til å levere en variabel spenning til kortet. I det potensiometeret er den ene ekstreme enden av potensiometeret koblet til Vcc og den andre enden er koblet til bakken. Senterpinnen (blå ledning) er koblet til pinnen P1.7. Denne pinnen P1.7 vil gi en variabel spenning fra 0V (jord) til 3,5V (Vcc). Så vi må programmere pinnen P1.7 for å lese denne variable spenningen og vise den på LCD-skjermen.
I Energia trenger vi å vite hvilken analog kanal pin P1.7 tilhører? Dette kan du finne ved å henvise til bildet nedenfor
Du kan se P1.7 pin på høyre side, denne pin tilhører A7 (Channel 7). På samme måte kan vi også finne det respektive kanalnummeret for andre pinner. Du kan bruke alle pinner fra A0 til A7 for å lese analoge spenninger her. Jeg har valgt A7.
Programmering av MSP430 for ADC:
Programmering av MSP430 for å lese analog spenning er veldig enkel. I dette programmet vil du lese den analoge verdien og beregne spenningen med den verdien og deretter vise begge på LCD-skjermen. Hele programmet finner du nederst på denne siden, lenger nedenfor forklarer jeg programmet i utdrag for å hjelpe deg med å forstå bedre.
Vi begynner med å definere LCD-pinner. Disse definerer til hvilken pin av MSP430 LCD-pinnene er koblet til. Du kan henvise til din tilkobling for å forsikre deg om at pinnene er koblet til henholdsvis
#define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7
Deretter inkluderer vi toppteksten for LCD-skjermen. Dette kaller biblioteket som inneholder koden for hvordan MSP skal kommunisere med LCD-skjermen. Dette biblioteket vil bli installert i Energia IDE som standard, så du trenger ikke å legge til det. Forsikre deg også om at funksjonen Liquid Crystal heter med pinnenavnene vi nettopp definerte ovenfor.
#inkludere
Inne i vår setup () -funksjon vil vi bare gi en intro-melding som skal vises på LCD-skjermen. Jeg kommer ikke veldig dypt inn, siden vi allerede har lært hvordan vi bruker LCD med MSP430G2.
lcd.begin (16, 2); // Vi bruker en 16 * 2 LCD-skjerm lcd.setCursor (0,0); // Plasser markøren på 1. rad 1. kolonne lcd.print ("MSP430G2553"); // Vis en intro-melding lcd.setCursor (0, 1); // sett markøren til 1. kolonne 2. rad lcd.print ("- CircuitDigest"); // Vis en intro-melding
Til slutt, inne i vår uendelige loop () -funksjon, begynner vi å lese spenningen som leveres til A7-pinnen. Som vi allerede har diskutert, er mikrokontrolleren en digital enhet, og den kan ikke lese spenningsnivået direkte. Ved å bruke SAR-teknikk blir spenningsnivået kartlagt fra 0 til 1024. Disse verdiene kalles ADC-verdiene, for å få denne ADC-verdien, bruk bare følgende linje
int val = analogRead (A7); // les ADC-verdien fra pin A7
Her brukes funksjonen analogRead () til å lese den analoge verdien av pinnen, vi har spesifisert A7 inni den siden vi har koblet ut variabel spenning til pin P1.7. Til slutt lagrer vi denne verdien i en variabel kalt “ val ”. Typen av denne variabelen er heltall fordi vi bare får verdier fra 0 til 1024 som skal lagres i denne variabelen.
Det neste trinnet vil være å beregne spenningsverdien fra ADC-verdien. For å gjøre dette har vi følgende formler
Spenning = (ADC-verdi / ADC-oppløsning) * Referansespenning
I vårt tilfelle vet vi allerede at ADC-oppløsningen til mikrokontrolleren vår er 1024. ADC-verdien finnes også i forrige linje og lagret variabelen kalt val. Den referansespenning er lik spenningen ved hvilken mikrokontrolleren er i drift. Når MSP430-kortet får strøm via USB-kabel, er driftsspenningen 3,6V. Du kan også måle driftsspenningen ved å bruke et multimeter over Vcc og jordpinnen på brettet. Så formelen ovenfor passer inn i vårt tilfelle som vist nedenfor
flytespenning = (flottør (val) / 1024) * 3,6; // formler for å konvertere ADC-verdien til spenning
Du kan forveksles med linjefloat (val). Dette brukes til å konvertere variabelen “val” fra int datatype til “float” datatype. Denne konverteringen er nødvendig fordi bare hvis vi får resultatet av val / 1024 i float, kan vi multiplisere den 3.6. Hvis verdien mottas i heltall, vil den alltid være 0 og resultatet vil også være null. Når vi har beregnet ADC-verdien og spenningen, er det bare å vise resultatet på LCD-skjermen, noe som kan gjøres ved å bruke følgende linjer
lcd.setCursor (0, 0); // sett markøren til kolonne 0, linje 0 lcd.print ("ADC Val:"); lcd.print (val); // Vis ADC-verdi lcd.setCursor (0, 1); // sett markøren til kolonne 0, linje 1 lcd.print ("Voltage:"); lcd.print (spenning); // Vis spenning
Her har vi vist verdien av ADC i første linje og verdien av Voltage i den andre linjen. Til slutt gir vi en forsinkelse på 100 mill. Sekunder og tømmer LCD-skjermen. Dette var verdien vil bli oppdatert for hver 100 mil.
Tester resultatet ditt!
Til slutt kommer vi ned til den morsomme delen, som tester programmet vårt og leker med det. Bare gjør tilkoblingene som vist i kretsskjemaet. Jeg har brukt et lite brødbrett for å få tilkoblingene mine, og brukt hopperkabler for å koble brødbordet til MSP430. Når tilkoblingene er gjort, så mine ut slik nedenfor.
Last deretter opp programmet som er gitt nedenfor til MSP430-kortet gjennom Energia IDE. Du bør kunne se introteksten på LCD-skjermen, hvis ikke justere kontrasten på LCD-skjermen ved hjelp av potensiometeret til du ser klare ord. Prøv også å trykke på tilbakestillingsknappen. Hvis ting fungerer som forventet, bør du kunne se følgende skjermbilde.
Nå kan du variere potensiometeret, og du bør også se at spenningen som vises på LCD-skjermen blir variert. La oss kontrollere om vi måler spenningen riktig for å gjøre det, bruk et multimeter for å måle spenningen over midten av POT og bakken. Spenningen som vises på multimeteret skal være nær verdien som vises på LCD-skjermen, som vist på bildet nedenfor.
Det er det, vi har lært hvordan vi måler analog spenning ved hjelp av ADC på MSP430-kortet. Nå kan vi grensesnitt mange analoge sensorer med kortet vårt for å lese sanntidsparametere. Håper du forsto opplæringen og likte å lære den. Hvis du har noen problemer, kan du kontakte kommentarfeltet nedenfor eller gjennom forumene. La oss ta igjen i en annen tutorial av MSP430 med et annet nytt emne.