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