- Разбиране на модула ADC:
- Електрическа схема:
- Програмиране на вашия MSP430 за ADC:
- Тестване на вашия резултат!
Една обща характеристика, която се използва в почти всяко вградено приложение, е модулът ADC (аналогов към цифров конвертор). Тези аналогово-цифрови преобразуватели могат да отчитат напрежение от аналогови сензори като сензор за температура, сензор за наклон, сензор за ток, Flex сензор и много други. Така че в този урок ще научим как да използваме ADC в MSP430G2 за четене на аналогови напрежения с помощта на Energia IDE. Ще свържем малък потенциометър към платката MSP и ще подадем различно напрежение към аналогов щифт, ще прочетем напрежението и ще го покажем на серийния монитор.
Разбиране на модула ADC:
Повярвайте ми, едва ли ще отнеме 10 минути за свързване и програмиране на MSP430G2 за четене на аналогово напрежение. Но нека прекараме известно време в разбирането на модула ADC в MSP таблото, за да можем да го използваме ефективно във всички наши предстоящи проекти.
Микроконтролерът е цифрово устройство, което означава, че може да разбира само 1 и 0. Но в реалния свят почти всичко като температура, влажност, скорост на вятъра и т.н. са аналогови по своята същност. За да взаимодейства с тези аналогови промени, микроконтролерът използва модул, наречен ADC. Налични са много различни видове ADC модули, използваният в нашия MSP е 8-канален 10-битов ADC SAR.
Последователно приближаване (SAR) ADC: SAR ADC работи с помощта на компаратор и някои логически разговори. Този тип ADC използва референтно напрежение (което е променливо) и сравнява входното напрежение с референтното напрежение с помощта на компаратор и разликата, която ще бъде цифров изход, се запазва от най-значимия бит (MSB). Скоростта на сравнението зависи от тактовата честота (Fosc), на която работи MSP.
10-битова резолюция: Този ADC е 8-канален 10-битов ADC. Тук терминът 8 канал предполага, че има 8 ADC щифта, чрез които можем да измерим аналоговото напрежение. Терминът 10-битова предполага разделителната способност на ADC. 10-битово означава 2 в степен на десет (2 10), което е 1024. Това е броят на примерните стъпки за нашия ADC, така че диапазонът на нашите ADC стойности ще бъде от 0 до 1023. Стойността ще се увеличи от 0 до 1023 въз основа на стойността на напрежението на стъпка, която може да се изчисли, като се използва формулата по-долу
Забележка: По подразбиране в Energia референтното напрежение ще бъде настроено на Vcc (~ 3v), можете да променяте референтното напрежение, като използвате опцията analogReference () .
Също така проверете как да свържете ADC с други микроконтролери:
- Как да използвам ADC в Arduino Uno?
- Връзка ADC0808 с 8051 микроконтролер
- Използване на модул ADC на микроконтролера PIC
- Raspberry Pi ADC Урок
Електрическа схема:
В нашия предишен урок вече научихме как да свързваме LCD с MSP430G2, сега просто ще добавим потенциометър към MSP430, за да му подадем променливо напрежение и да покажем стойността на напрежението на LCD. Ако не сте наясно с взаимодействието на LCD, върнете се към връзката по-горе и прочетете, тъй като ще пропусна информацията, за да избегна покаянието. Пълната схема на проекта е дадена по-долу.
Както можете да видите, тук се използват два потенциометра, единият се използва за настройка на контраста на LCD, докато другият се използва за подаване на променливо напрежение към платката. В този потенциометър единият край на потенциометъра е свързан към Vcc, а другият край е свързан към земята. Централният щифт (син проводник) е свързан към щифта P1.7. Този щифт P1.7 ще осигурява променливо напрежение от 0V (земя) до 3,5V (Vcc). Така че трябва да програмираме щифта P1.7 да отчита това променливо напрежение и да го показва на LCD.
В Energia трябва да знаем към кой аналогов канал принадлежи пинът P1.7? Това може да се намери, като се обърнете към долната снимка
Можете да видите P1.7 щифт от дясната страна, този щифт принадлежи на A7 (Канал 7). По същия начин можем да намерим номера на съответния канал и за други пинове. Можете да използвате всякакви щифтове от A0 до A7 за четене на аналогови напрежения, тук избрах A7.
Програмиране на вашия MSP430 за ADC:
Програмирането на вашия MSP430 за четене на аналогово напрежение е много просто. В тази програма ще прочете аналога на стойността и ще изчисли напрежението с тази стойност и след това ще покаже и двете на LCD екрана. Най- пълната програма може да се намери в дъното на тази страница, по-долу съм разясняване на програмата в фрагменти, които да ви помогнат да разберете по-добре.
Започваме с определяне на LCD щифтове. Те определят към кой щифт на MSP430 са свързани LCD щифтовете. Можете да насочите връзката си, за да сте сигурни, че щифтовете са свързани съответно
#define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7
След това включваме заглавния файл за LCD дисплея. Това извиква библиотеката, която съдържа кода за това как MSP трябва да комуникира с LCD. Тази библиотека ще бъде инсталирана в Energia IDE по подразбиране, така че не е нужно да се притеснявате да я добавяте. Също така се уверете, че функцията Liquid Crystal е извикана с имената на щифтове, които току-що дефинирахме по-горе.
#include
Вътре в нашата функция за настройка () , ние просто ще дадем встъпително съобщение, което да се покаже на LCD екрана. Не навлизам много навътре, тъй като вече се научихме как да използваме LCD с MSP430G2.
lcd.begin (16, 2); // Използваме 16 * 2 LCD дисплей lcd.setCursor (0,0); // Поставете курсора на 1-ви ред 1-ва колона lcd.print ("MSP430G2553"); // Показване на встъпително съобщение lcd.setCursor (0, 1); // задайте курсора на 1-ва колона 2-ри ред lcd.print ("- CircuitDigest"); // Показване на въвеждащо съобщение
И накрая, вътре в нашата функция за безкраен контур () , започваме да четем напрежението, подавано към щифта A7. Както вече обсъдихме, микроконтролерът е цифрово устройство и не може директно да отчита нивото на напрежението. Използвайки техниката на SAR, нивото на напрежението се преобразува от 0 до 1024. Тези стойности се наричат ADC стойности, за да получите тази ADC стойност, просто използвайте следния ред
int val = analogRead (A7); // прочитаме ADC стойността от щифт A7
Тук функцията analogRead () се използва за отчитане на аналоговата стойност на щифта, ние сме посочили A7 вътре в него, тъй като сме свързали променливо напрежение към щифт P1.7. Накрая запазваме тази стойност в променлива, наречена „ val “. Типът на тази променлива е цяло число, защото ще получим само стойности от 0 до 1024, които да се съхраняват в тази променлива.
Следващата стъпка ще бъде да се изчисли стойността на напрежението от стойността на ADC. За целта имаме следните формули
Напрежение = (ADC стойност / ADC резолюция) * Референтно напрежение
В нашия случай вече знаем, че разделителната способност на ADC на нашия микроконтролер е 1024. Стойността на ADC също се намира в предишния ред и съхранява променливата, наречена val. В референтната напрежение е равно на напрежението в който оперира микроконтролер. Когато платката MSP430 се захранва чрез USB кабел, работното напрежение е 3.6V. Можете също така да измерите работното напрежение, като използвате мултицет през Vcc и заземен щифт на платката. Така че горната формула се вписва в нашия случай, както е показано по-долу
плаващо напрежение = (поплавък (val) / 1024) * 3,6; // формули за преобразуване на стойността на ADC в напрежение
Може да бъдете объркани с линията float (val). Това се използва за преобразуване на променливата „val“ от тип данни int в тип „float“. Това преобразуване е необходимо, защото само ако получим резултата от val / 1024 в float, можем да го умножим 3.6. Ако стойността е получена в цяло число, тя винаги ще бъде 0 и резултатът също ще бъде нула. След като изчислим ADC стойността и напрежението, остава само да покажем резултата на LCD екрана, което може да се направи, като се използват следните редове
lcd.setCursor (0, 0); // задаваме курсора на колона 0, ред 0 lcd.print ("ADC Val:"); lcd.print (val); // Показва ADC стойност lcd.setCursor (0, 1); // задаваме курсора на колона 0, ред 1 lcd.print ("Voltage:"); lcd.print (напрежение); // Напрежение на дисплея
Тук сме показали стойността на ADC в първия ред и стойността на напрежението във втория ред. Накрая даваме забавяне от 100 милиона секунди и изчистваме LCD екрана. Това беше стойността, която ще се актуализира на всеки 100 мила.
Тестване на вашия резултат!
Накрая стигаме до забавната част, която тества нашата програма и си играе с нея. Просто направете връзките, както е показано на електрическата схема. Използвах малка дъска за свързване и използвах джъмперни кабели за свързване на макет с MSP430. След като свързването свърши, моето изглеждаше така по-долу.
След това качете програмата, която е дадена по-долу, на платката MSP430 чрез IDE на Energia. Трябва да можете да видите въвеждащия текст на LCD, ако не регулирате контраста на LCD с помощта на потенциометъра, докато не видите ясни думи. Също така, опитайте да натиснете бутона за нулиране. Ако нещата работят според очакванията, трябва да можете да видите следния екран.
Сега променяйте потенциометъра и вие също трябва да видите напрежението, показвано на LCD, да се променя. Нека проверим дали измерваме напрежението правилно, за да направим това, използвайте мултицет за измерване на напрежението в центъра на POT и земята. Напрежението, показвано на мултицет, трябва да бъде близко до стойността, показана на LCD, както е показано на снимката по-долу.
Това е, научихме как да измерваме аналоговото напрежение с помощта на ADC на платката MSP430. Сега можем да свържем много аналогови сензори с нашата платка, за да четем параметри в реално време. Надявам се, че сте разбрали урока и сте се радвали да го научите, ако имате някакви проблеми, моля, обърнете се към раздела за коментари по-долу или чрез форумите. Нека настигнем в друг урок на MSP430 с друга нова тема.