Jedną wspólną cechą, która jest używana w prawie każdej aplikacji wbudowanej, jest moduł ADC (przetwornik analogowo-cyfrowy). Te konwertery analogowo-cyfrowe mogą odczytywać napięcie z czujników analogowych, takich jak czujnik temperatury, czujnik pochylenia, czujnik prądu, czujnik Flex i wiele innych. Dlatego w tym samouczku nauczymy się, jak używać ADC w MSP430G2 do odczytywania napięć analogowych za pomocą Energia IDE. Połączymy mały potencjometr z płytą MSP i dostarczymy zmienne napięcie do pinu analogowego, odczytamy napięcie i wyświetlimy je na monitorze szeregowym.
Zrozumienie modułu ADC:
Zaufaj mi, podłączenie i zaprogramowanie MSP430G2 do odczytu napięcia analogowego zajmie zaledwie 10 minut. Poświęćmy jednak trochę czasu na zrozumienie modułu ADC w płycie MSP, abyśmy mogli go efektywnie wykorzystać we wszystkich naszych przyszłych projektach.
Mikrokontroler jest urządzeniem cyfrowym, co oznacza, że może odczytywać tylko jedynki i zera. Ale w prawdziwym świecie prawie wszystko, takie jak temperatura, wilgotność, prędkość wiatru itp., Ma charakter analogowy. Aby współdziałać z tymi zmianami analogowymi, mikrokontroler wykorzystuje moduł o nazwie ADC. Dostępnych jest wiele różnych typów modułów ADC, jeden używany w naszym MSP to 8-kanałowy 10-bitowy ADC SAR.
Kolejne przybliżenie (SAR) ADC: SAR ADC działa z pomocą komparatora i kilku rozmów logicznych. Ten typ ADC wykorzystuje napięcie odniesienia (które jest zmienne) i porównuje napięcie wejściowe z napięciem odniesienia za pomocą komparatora, a różnica, która będzie wyjściem cyfrowym, jest zapisywana z najbardziej znaczącego bitu (MSB). Szybkość porównania zależy od częstotliwości zegara (Fosc), na której działa MSP.
Rozdzielczość 10-bitowa: ten przetwornik ADC to 8-kanałowy 10-bitowy przetwornik ADC. Tutaj termin 8 kanał oznacza, że jest 8 pinów ADC, za pomocą których możemy zmierzyć napięcie analogowe. Termin 10-bitowy oznacza rozdzielczość ADC. 10-bitowe oznacza 2 do potęgi dziesięciu (2 10), czyli 1024. Jest to liczba przykładowych kroków dla naszego ADC, więc zakres naszych wartości ADC będzie wynosił od 0 do 1023. Wartość wzrośnie od 0 do 1023 w oparciu o wartość napięcia na krok, którą można obliczyć za pomocą poniższego wzoru
Uwaga: Domyślnie w Energia napięcie odniesienia zostanie ustawione na Vcc (~ 3v), można zmieniać napięcie odniesienia za pomocą opcji analogReference () .
Sprawdź również, jak połączyć ADC z innymi mikrokontrolerami:
- Jak korzystać z ADC w Arduino Uno?
- Połączenie ADC0808 z mikrokontrolerem 8051
- Korzystanie z modułu ADC mikrokontrolera PIC
- Samouczek Raspberry Pi ADC
Schemat obwodu:
W naszym poprzednim samouczku nauczyliśmy się już, jak połączyć wyświetlacz LCD z MSP430G2, teraz dodamy tylko potencjometr do MSP430, aby dostarczyć mu zmienne napięcie i wyświetlić wartość napięcia na wyświetlaczu LCD. Jeśli nie jesteś świadomy tego, że łączysz się z LCD, wróć do powyższego łącza i przeczytaj go, ponieważ pominę informacje, aby uniknąć pokuty. Pełny schemat obwodu projektu przedstawiono poniżej.
Jak widać, zastosowano tutaj dwa potencjometry, jeden służy do ustawiania kontrastu LCD, a drugi do zasilania płytki zmiennym napięciem. W tym potencjometrze jeden skrajny koniec potencjometru jest podłączony do Vcc, a drugi koniec jest podłączony do masy. Środkowy pin (niebieski przewód) jest podłączony do pinu P1.7. Ten pin P1.7 zapewni zmienne napięcie od 0 V (masa) do 3,5 V (Vcc). Musimy więc zaprogramować pin P1.7, aby odczytywał to zmienne napięcie i wyświetlał je na LCD.
W Energii musimy wiedzieć, do którego kanału analogowego należy pin P1.7? Można to znaleźć, odnosząc się do poniższego obrazu
Możesz zobaczyć pin P1.7 po prawej stronie, ten pin należy do A7 (kanał 7). Podobnie możemy znaleźć odpowiedni numer kanału również dla innych pinów. Możesz użyć dowolnych pinów od A0 do A7 do odczytu napięć analogowych tutaj wybrałem A7.
Programowanie MSP430 dla ADC:
Programowanie MSP430 do odczytu napięcia analogowego jest bardzo proste. W tym programie odczyta wartość analogową i obliczy napięcie z tą wartością, a następnie wyświetli oba na ekranie LCD. Kompletny program można znaleźć na dole tej strony, poniżej wyjaśniam program na fragmenty, które pomogą Ci lepiej zrozumieć.
Zaczynamy od zdefiniowania pinów LCD. Definiują one, do którego pinu MSP430 podłączone są piny LCD. Możesz skierować połączenie, aby upewnić się, że piny są odpowiednio połączone
# zdefiniować RS 2 # zdefiniować EN 3 # zdefiniować D4 4 # zdefiniować D5 5 # zdefiniować D6 6 # zdefiniować D7 7
Następnie dołączamy plik nagłówkowy wyświetlacza LCD. To wywołuje bibliotekę, która zawiera kod, w jaki sposób MSP powinien komunikować się z LCD. Ta biblioteka zostanie domyślnie zainstalowana w środowisku IDE Energia, więc nie ma potrzeby jej dodawania. Upewnij się również, że wywoływana jest funkcja Liquid Crystal z nazwami pinów, które właśnie zdefiniowaliśmy powyżej.
#zawierać
Wewnątrz naszej funkcji setup () po prostu podajemy wiadomość wprowadzającą, która ma być wyświetlana na ekranie LCD. Nie wchodzę zbyt głęboko, ponieważ nauczyliśmy się już korzystać z LCD z MSP430G2.
lcd.begin (16, 2); // Używamy wyświetlacza LCD 16 * 2 lcd.setCursor (0,0); // Umieść kursor w pierwszym wierszu, pierwszej kolumnie lcd.print ("MSP430G2553"); // Wyświetl wiadomość wprowadzającą lcd.setCursor (0, 1); // ustaw kursor na pierwszą kolumnę, drugi wiersz lcd.print ("- CircuitDigest"); // Wyświetl wiadomość wprowadzającą
Wreszcie, wewnątrz naszej nieskończonej funkcji loop () , zaczynamy odczytywać napięcie podawane na pin A7. Jak już mówiliśmy, mikrokontroler jest urządzeniem cyfrowym i nie potrafi bezpośrednio odczytać poziomu napięć. Używając techniki SAR, poziom napięcia jest mapowany od 0 do 1024. Te wartości nazywane są wartościami ADC, aby uzyskać tę wartość ADC, po prostu użyj następującego wiersza
int val = analogRead (A7); // odczytaj wartość ADC z pinu A7
Tutaj funkcja analogRead () służy do odczytu wartości analogowej pinu, określiliśmy w niej A7, ponieważ podłączyliśmy zmienne napięcie do pinu P1.7. Na koniec zapisujemy tę wartość w zmiennej o nazwie „ val ”. Typ tej zmiennej to liczba całkowita, ponieważ otrzymamy tylko wartości z zakresu od 0 do 1024, które będą przechowywane w tej zmiennej.
Następnym krokiem byłoby obliczenie wartości napięcia z wartości ADC. Aby to zrobić, mamy następujące formuły
Napięcie = (wartość ADC / rozdzielczość ADC) * napięcie odniesienia
W naszym przypadku już wiemy, że rozdzielczość ADC naszego mikrokontrolera wynosi 1024. Wartość ADC znajduje się również w poprzednim wierszu i zapisuje zmienną o nazwie val. Napięcie odniesienia jest równe napięciu na którym mikrokontroler pracuje. Gdy płyta MSP430 jest zasilana kablem USB, napięcie robocze wynosi 3,6V. Możesz również zmierzyć napięcie robocze za pomocą multimetru na obwodzie Vcc i bolcu uziemienia na płycie. Zatem powyższy wzór pasuje do naszego przypadku, jak pokazano poniżej
napięcie float = (float (val) / 1024) * 3,6; // formuły do konwersji wartości ADC na napięcie
Możesz być pomylony z linią float (val). Służy do konwersji zmiennej „val” z typu danych int na typ danych „float”. Ta konwersja jest potrzebna, ponieważ tylko jeśli otrzymamy wynik val / 1024 w float, możemy go pomnożyć 3,6. Jeśli otrzymana wartość jest liczbą całkowitą, zawsze będzie równa 0, a wynik również będzie równy zero. Po obliczeniu wartości ADC i napięcia pozostaje tylko wyświetlenie wyniku na ekranie LCD, co można zrobić za pomocą następujących linii
lcd.setCursor (0, 0); // ustaw kursor na kolumnę 0, wiersz 0 lcd.print ("ADC Val:"); lcd.print (val); // Wyświetl wartość ADC lcd.setCursor (0, 1); // ustaw kursor na kolumnę 0, wiersz 1 lcd.print ("Napięcie:"); lcd.print (napięcie); // Wyświetl napięcie
Tutaj wyświetliliśmy wartość ADC w pierwszej linii i wartość napięcia w drugiej linii. Na koniec dajemy opóźnienie 100 milionów sekund i czyścimy ekran LCD. To była wartość, która będzie aktualizowana co 100 mil.
Sprawdzam Twój wynik!
Wreszcie przechodzimy do części zabawnej, czyli testowania naszego programu i zabawy z nim. Po prostu wykonaj połączenia zgodnie ze schematem połączeń. Użyłem małej płytki stykowej do wykonania połączeń i użyłem przewodów połączeniowych do podłączenia płytki stykowej do MSP430. Po wykonaniu połączeń mój wyglądał tak poniżej.
Następnie prześlij poniższy program na płytę MSP430 poprzez Energia IDE. Powinieneś być w stanie zobaczyć tekst wprowadzający na wyświetlaczu LCD, jeśli nie, wyreguluj kontrast wyświetlacza LCD za pomocą potencjometru, aż zobaczysz wyraźne słowa. Spróbuj także nacisnąć przycisk resetowania. Jeśli wszystko działa zgodnie z oczekiwaniami, powinieneś być w stanie zobaczyć następujący ekran.
Teraz zmień potencjometr i powinieneś zobaczyć, jak zmienia się napięcie wyświetlane na wyświetlaczu LCD. Sprawdźmy, czy prawidłowo mierzymy napięcie, aby to zrobić, użyj multimetru do pomiaru napięcia na środku POT i ziemi. Napięcie wyświetlane na multimetrze powinno być zbliżone do wartości wyświetlanej na wyświetlaczu LCD, jak pokazano na poniższym obrazku.
To tyle, nauczyliśmy się mierzyć napięcie analogowe za pomocą ADC płyty MSP430. Teraz możemy połączyć wiele czujników analogowych z naszą płytą, aby odczytać parametry w czasie rzeczywistym. Mam nadzieję, że zrozumiałeś samouczek i dobrze się go nauczyłeś. Jeśli masz jakiekolwiek problemy, skontaktuj się z sekcją komentarzy poniżej lub na forach. Przejdźmy do kolejnego samouczka MSP430 z innym nowym tematem.