Een veelvoorkomend kenmerk dat in bijna elke embedded applicatie wordt gebruikt, is de ADC-module (Analog to Digital Converter). Deze analoog naar digitaal converters kunnen spanning lezen van analoge sensoren zoals temperatuursensor, kantelsensor, stroomsensor, flex-sensor en nog veel meer. Dus in deze tutorial zullen we leren hoe we ADC in MSP430G2 kunnen gebruiken om analoge spanningen te lezen met behulp van de Energia IDE. We zullen een kleine potentiometer koppelen aan het MSP-bord en een variërende spanning aan een analoge pin leveren, de spanning aflezen en deze weergeven op de seriële monitor.
Inzicht in de ADC-module:
Vertrouw me, het zou nauwelijks 10 minuten duren om de MSP430G2 aan te sluiten en te programmeren om analoge spanning te lezen. Maar laten we wat tijd besteden aan het begrijpen van de ADC-module in het MSP-bord, zodat we deze effectief kunnen gebruiken in al onze aankomende projecten.
Een microcontroller is een digitaal apparaat, wat betekent dat het alleen enen en nullen kan begrijpen. Maar in de echte wereld is bijna alles, zoals temperatuur, vochtigheid, windsnelheid, etc. analoog van aard. Om met deze analoge wijzigingen om te gaan, gebruikt de microcontroller een module genaamd ADC. Er zijn veel verschillende soorten ADC-modules beschikbaar, degene die in onze MSP wordt gebruikt, is de SAR 8-kanaals 10-bits ADC.
Opeenvolgende benadering (SAR) ADC: De SAR ADC werkt met behulp van een comparator en enkele logische gesprekken. Dit type ADC gebruikt een referentiespanning (die variabel is) en vergelijkt de ingangsspanning met de referentiespanning met behulp van een comparator en het verschil, dat een digitale uitgang zal zijn, wordt opgeslagen uit de meest significante bit (MSB). De snelheid van de vergelijking is afhankelijk van de klokfrequentie (Fosc) waarop de MSP werkt.
10-bits resolutie: deze ADC is een 8-kanaals 10-bits ADC. Hier houdt de term 8-kanaals in dat er 8 ADC-pinnen zijn waarmee we analoge spanning kunnen meten. De term 10-bit impliceert de resolutie van de ADC. 10-bits betekent 2 tot de macht van tien (2 10), wat 1024 is. Dit is het aantal voorbeeldstappen voor onze ADC, dus het bereik van onze ADC-waarden is van 0 tot 1023. De waarde neemt toe van 0 tot 1023 op basis van de waarde van de spanning per stap, die kan worden berekend met behulp van de onderstaande formule
Opmerking: in Energia wordt de referentiespanning standaard ingesteld op Vcc (~ 3v), u kunt de referentiespanning variëren met de optie analogReference () .
Controleer ook hoe u ADC met andere microcontrollers verbindt:
- Hoe ADC te gebruiken in Arduino Uno?
- Koppeling tussen ADC0808 met 8051 Microcontroller
- Met behulp van ADC-module van PIC Microcontroller
- Raspberry Pi ADC-zelfstudie
Schakelschema:
In onze vorige tutorial hebben we al geleerd hoe we LCD met MSP430G2 kunnen verbinden, nu gaan we gewoon een potentiometer aan de MSP430 toevoegen om deze van een variabele spanning te voorzien en de spanningswaarde op de LCD weer te geven. Als u zich niet bewust bent van de interfacing van het LCD-scherm, ga dan terug naar de bovenstaande link en lees het door, aangezien ik de informatie zal overslaan om berouw te voorkomen. Het volledige schakelschema van het project wordt hieronder gegeven.
Zoals u kunt zien, worden hier twee potentiometers gebruikt, de ene wordt gebruikt om het contrast van het LCD-scherm in te stellen, terwijl de andere wordt gebruikt om een variabele spanning aan het bord te leveren. In die potentiometer is het ene uiteinde van de potentiometer verbonden met de Vcc en het andere uiteinde met aarde. De middelste pin (blauwe draad) is verbonden met de pin P1.7. Deze pin P1.7 levert een variabele spanning van 0V (massa) tot 3,5V (Vcc). We moeten dus de pin P1.7 programmeren om deze variabele spanning te lezen en op het LCD-scherm weer te geven.
In Energia moeten we weten tot welk analoog kanaal de pin P1.7 behoort? Dit kan worden gevonden door te verwijzen naar de onderstaande afbeelding
Je ziet aan de rechterkant pin P1.7, deze pin hoort bij A7 (kanaal 7). Evenzo kunnen we het respectieve kanaalnummer ook voor andere pinnen vinden. U kunt alle pinnen van A0 tot A7 gebruiken voor het lezen van analoge spanningen, hier heb ik A7 geselecteerd.
Programmering van uw MSP430 voor ADC:
Het programmeren van uw MSP430 om analoge spanning uit te lezen is heel eenvoudig. In dit programma leest de analoog van de waarde en berekent de spanning met die waarde en geeft vervolgens beide weer op het LCD-scherm. Het volledige programma is te vinden onderaan deze pagina, verder hieronder leg ik het programma uit in fragmenten om u te helpen het beter te begrijpen.
We beginnen met het definiëren van LCD-pinnen. Deze bepalen op welke pin van MSP430 de LCD-pinnen zijn aangesloten. U kunt uw verbinding doorverwijzen om ervoor te zorgen dat de pinnen respectievelijk zijn aangesloten
#define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7
Vervolgens voegen we het headerbestand voor het LCD-scherm toe. Dit roept de bibliotheek op die de code bevat over hoe de MSP moet communiceren met de LCD. Deze bibliotheek wordt standaard in de Energia IDE geïnstalleerd, dus u hoeft deze niet toe te voegen. Zorg er ook voor dat de functie Liquid Crystal wordt aangeroepen met de pinnamen die we zojuist hierboven hebben gedefinieerd.
# omvatten
In onze setup () -functie zouden we gewoon een intro-bericht geven dat op het LCD-scherm zou worden weergegeven. Ik ga er niet veel diep op in, aangezien we al hebben geleerd hoe we LCD moeten gebruiken met MSP430G2.
lcd.begin (16, 2); // We gebruiken een 16 * 2 LCD-scherm lcd.setCursor (0,0); // Plaats de cursor op de 1e rij 1e kolom lcd.print ("MSP430G2553"); // Toon een introbericht lcd.setCursor (0, 1); // zet de cursor op 1e kolom 2e rij lcd.print ("- CircuitDigest"); // Geef een introbericht weer
Ten slotte beginnen we in onze infinite loop () -functie de spanning te lezen die aan de A7-pin wordt geleverd. Zoals we al hebben besproken, is de microcontroller een digitaal apparaat en kan het spanningsniveau niet rechtstreeks lezen. Met behulp van de SAR-techniek wordt het spanningsniveau in kaart gebracht van 0 tot 1024. Deze waarden worden de ADC-waarden genoemd, om deze ADC-waarde te krijgen, gebruikt u gewoon de volgende regel
int val = analogRead (A7); // lees de ADC-waarde van pin A7
Hier wordt de functie analogRead () gebruikt om de analoge waarde van de pin te lezen, we hebben A7 erin gespecificeerd omdat we de variabele spanning hebben aangesloten op pin P1.7. Ten slotte slaan we deze waarde op in een variabele genaamd “ val ”. Het type van deze variabele is een geheel getal, omdat we alleen waarden tussen 0 en 1024 zullen krijgen om in deze variabele op te slaan.
De volgende stap zou zijn om de spanningswaarde te berekenen op basis van de ADC-waarde. Hiervoor hebben we de volgende formules
Spanning = (ADC-waarde / ADC-resolutie) * Referentiespanning
In ons geval weten we al dat de ADC-resolutie van onze microcontroller 1024 is. De ADC-waarde is ook te vinden in de vorige regel en heeft de variabele val opgeslagen. De referentiespanning is gelijk aan de spanning waarop de microcontroller werkt. Als het MSP430-bord wordt gevoed via een USB-kabel, is de bedrijfsspanning 3,6V. U kunt ook de bedrijfsspanning meten door een multimeter over de Vcc- en aardingspin op het bord te gebruiken. Dus de bovenstaande formule past in ons geval, zoals hieronder weergegeven
floatspanning = (float (val) / 1024) * 3,6; // formules om de ADC-waarde om te zetten in spanning
U bent misschien verward met de line float (val). Dit wordt gebruikt om de variabele "val" om te zetten van het gegevenstype int naar het gegevenstype "float". Deze conversie is nodig omdat we het alleen met 3,6 kunnen vermenigvuldigen als we het resultaat van val / 1024 in float krijgen. Als de waarde wordt ontvangen in een geheel getal, is deze altijd 0 en is het resultaat ook nul. Nadat we de ADC-waarde en het voltage hebben berekend, hoeven we alleen nog maar het resultaat op het LCD-scherm weer te geven, wat kan worden gedaan door de volgende regels te gebruiken
lcd.setCursor (0, 0); // zet de cursor op kolom 0, regel 0 lcd.print ("ADC Val:"); lcd.print (val); // Geef ADC-waarde lcd.setCursor (0, 1); // zet de cursor op kolom 0, regel 1 lcd.print ("Voltage:"); lcd.print (spanning); // Geef spanning weer
Hier hebben we de waarde van ADC in de eerste regel en de waarde van Voltage in de tweede regel weergegeven. Als laatste geven we een vertraging van 100 miljoen seconden en maken we het LCD-scherm leeg. Dit was de waarde die voor elke 100 mils wordt bijgewerkt.
Je resultaat testen!
Ten slotte komen we neer op het leuke gedeelte, dat is ons programma testen en ermee spelen. Maak gewoon de aansluitingen zoals weergegeven in het schakelschema. Ik heb een klein breadboard gebruikt om mijn verbindingen te maken en heb jumperdraden gebruikt om het breadboard aan te sluiten op MSP430. Zodra de verbindingen zijn gemaakt, zag de mijne er als volgt uit.
Upload vervolgens het onderstaande programma naar het MSP430-bord via de Energia IDE. Je zou de intro-tekst op het LCD-scherm moeten kunnen zien, zo niet, pas dan het contrast van het LCD-scherm aan met de potentiometer totdat je duidelijke woorden ziet. Probeer ook op de resetknop te drukken. Als alles werkt zoals verwacht, zou u het volgende scherm moeten kunnen zien.
Varieer nu met de potentiometer en je zou ook moeten zien dat de spanning die op het LCD-scherm wordt weergegeven, gevarieerd wordt. Laten we controleren of we de spanning correct meten om dat te doen, gebruik een multimeter om de spanning over het midden van de POT en de aarde te meten. De spanning die op de multimeter wordt weergegeven, moet dicht bij de waarde liggen die op het LCD-scherm wordt weergegeven, zoals weergegeven in de onderstaande afbeelding.
Dat is het, we hebben geleerd hoe we analoge spanning kunnen meten met behulp van ADC van de MSP430-kaart. Nu kunnen we veel analoge sensoren met ons bord verbinden om realtime parameters te lezen. Ik hoop dat je de tutorial hebt begrepen en het leuk vond om hem te leren, als je problemen hebt, neem dan contact op via de commentaarsectie hieronder of via de forums. Laten we in een andere tutorial van MSP430 bijpraten met een ander nieuw onderwerp.