Использование АЦП (аналого-цифрового преобразования) в MSP430G2


Модули АЦП (аналого-цифрового преобразования) в настоящее время находят широкое применение во многих проектах встраиваемой электроники. С их помощью осуществляется считывание информации от многих датчиков с аналоговым выходом: датчики температуры, датчики наклона, датчики изгиба, датчики тока и многих других. Поэтому в данной статье мы рассмотрим использование АЦП в MSP430G2 для считывания аналогового напряжения с помощью Energia IDE. Аналоговое напряжение на вход платы мы будем подавать с помощью потенциометра, измеренное значение напряжения будем отображать на экране ЖК дисплея 16х2.

Внешний вид проекта использования АЦП в плате MSP430G2

Ранее на нашем сайте мы рассматривали использование АЦП в следующих микроконтроллерах (платах):

Необходимые компоненты

  1. Плата MSP430G2 LaunchPad (купить на AliExpress).
  2. ЖК дисплей (купить на AliExpress).
  3. Потенциометр – 2 шт. (купить на AliExpress).
  4. Соединительные провода.

Принцип работы модуля АЦП

Микроконтроллер является цифровым устройством, поэтому он может понимать только цифровые значения: 0 или 1. Но в природе существует масса явлений, которые по своей сути являются аналоговыми: температура, влажность, скорость ветра и т.д. Для того чтобы считывать аналоговые значения от других устройств микроконтроллеры используют модули АЦП. Данные модули бывают различных типов, в нашей плате MSP430G2 используется 8-канальный 10-битный АЦП с последовательным приближением (аппроксимацией).

Принцип работы АЦП с последовательным приближением (SAR) основан на использовании компаратора и ряда логических преобразований. Он использует опорное напряжение (которое, в общем случае, может быть переменным) для сравнения его с напряжением на своем входе и разницу между ними сохраняет в наиболее значащих битах (Most significant bit, MSB). Скорость выполнения данных операций сравнения зависит от тактовой частоты, на которой работает микроконтроллер MSP.

Для считывания аналоговых значений в плате MSP430G2 могут использоваться 8 ее аналоговых контактов, поэтому ее АЦП является 8-канальным. 10 бит – это разрешение (разрешающая способность) АЦП нашей платы. Соответственно, число шагов (отсчетов), которыми может оперировать данный АЦП, равно 1024 (2 в десятой степени). Поэтому в зависимости от значения аналогового напряжения на входе на выходе АЦП формируется значение в диапазоне от 0 до 1023, которое для нашей платы можно рассчитать по следующей формуле:

Формула для расчета значения аналогового напряжения на входе АЦП

Примечание: по умолчанию в Energia IDE опорное напряжение выставляется равным Vcc (~3v), но в коде программы вы можете изменить его вручную с помощью команды analogReference().

Схема проекта

Схема проекта для демонстрации использования АЦП в плате MSP430G2 представлена на следующем рисунке.

Схема проекта для демонстрации использования АЦП в плате MSP430G2В предыдущей статье на нашем сайте мы рассмотрели подключение к плате MSP430G2 ЖК дисплея, в этой же статье мы добавили в схему кроме ЖК дисплей еще два потенциометра – один используется для регулировки контрастности ЖК дисплея, а второй – для подачи аналогового напряжения на модуль АЦП платы MSP430G2. Один из крайних контактов второго потенциометра подключен к Vcc, второй его крайний контакт подключен к земле, а средний контакт – к контакту P1.7 платы MSP430G2. Поэтому на вход контакта P1.7 можно будет подавать аналоговое напряжение в диапазоне от 0V (земля) до 3.5V (Vcc).

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Внешний вид собранной конструкции проекта

В Energia IDE нам необходимо знать какой аналоговый канал относится к контакту P1.7.Это можно посмотреть на следующей картинке.

Распиновка (назначение контактов) платы MSP430G2

Как можно видеть из представленного рисунка, контакт P1.7 расположен справа на нем и он соотносится с аналоговым каналом A7. Аналогичным образом можно посмотреть какие каналы АЦП относятся к другим контактам. В плате MSP430G2 можно использовать каналы с A0 по A7, в данном проекте мы использовали канал A7.

Объяснение кода программы

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В данной программе мы будем считывать значение с выхода АЦП и на его основе рассчитывать значение аналогового напряжения, после чего отображать оба этих значения на экране ЖК дисплея.

Сначала в программе дадим осмысленные имена контактам платы MSP430G2, к которым подключен ЖК дисплей.

Далее в программе подключим заголовочный файл библиотеки для работы с ЖК дисплеем. Данная библиотека устанавливается вместе с Energia IDE по молчанию, поэтому вам не нужно беспокоиться о ее дополнительной установке. Затем объявим объект для работы с ЖК дисплеем, в качестве параметров передадим ему имена контактов, к которым подключен дисплей.

Внутри функции setup() мы покажем приветственное сообщение на экране ЖК дисплея.

И, наконец, внутри функции loop() мы начнем считывание значения напряжения с контакта A7. На выходе АЦП данное значение напряжения преобразуется в число в диапазоне от 0 до 1023. Для считывания значения с выхода АЦП используем следующую команду:

С помощью приведенной функции analogRead() производится считывание аналогового значения с канала A7, который соответствует физическому контакту P1.7. Затем мы сохраняем считанное значение в переменной “val”. Это переменная целого типа потому что нам нужно будет хранить число в диапазоне от 0 до 1024.

На следующем шаге мы на основе этого считанного значения с выхода АЦП будем рассчитывать значение аналогового напряжения на его входе по следующей формуле:

В нашем случае мы знаем что разрешение нашего АЦП равно 1024. Значение с выхода АЦП (ADC value) мы считали ранее. Значение опорного напряжения (reference voltage) равно напряжению, на котором работает микроконтроллер. Когда плата MSP430 получает питание по кабелю USB рабочее напряжение для нее составляет 3.6V. Вы можете непосредственным образом измерить значение этого напряжения между контактами Vcc и землей с помощью мультиметра. Поэтому для расчета значения аналогового напряжения в нашем случае формула принимает вид:

Вас в представленной команде может смутить слово float. Здесь оно используется для преобразования значения переменного целого типа “val” в вещественный тип данных (“float”). Если бы мы использовали переменную целого типа, то в результате вычисления значения по приведенной формуле мы всегда бы получали 0.

Теперь, когда нам известны значения и на входе, и на выходе АЦП, мы можем отобразить их на экране ЖК дисплея.

В данном случае мы отображаем значение с выхода АЦП на первой строке дисплея, а рассчитанное значение аналогового напряжения – на его второй строке. Затем мы будем использовать задержку в 100 мс, после которой будем очищать экран ЖК дисплея. Таким образом, отображаемые значения на экране ЖК дисплея будут обновляться каждые 100 мс.

Тестирование работы проекта

Проект мы решили собрать с помощью макетной платы. После сборки аппаратной части проекта и загрузки программы в плату MSP430 с помощью Energia IDE вы на экране ЖК дисплея должны увидеть приветственное сообщение. Если вы его не видите, то с помощью потенциометра отрегулируйте контрастность ЖК дисплея. Также попробуйте нажать кнопку сброса. Если все работает так, как надо, вы должны увидеть примерно следующую картину:

Тестирование работы проекта

После этого вращайте ручку потенциометра и вы должны увидеть как изменяются значения на экране ЖК дисплея. Для проверки корректности работы проекта вы можете также с помощью мультиметра измерять значение напряжения между центральным контактом потенциометра и общим проводом схемы (землей). Напряжение на экране мультиметра должно примерно соответствовать напряжению, отображаемому на экране ЖК дисплея как показано на следующем рисунке.

Проверка точности работы АЦП с помощью мультиметра

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
37 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *