- Понимание модуля ADC:
- Принципиальная электрическая схема:
- Программирование вашего MSP430 для АЦП:
- Тестируем свой результат!
Одной общей функцией, которая используется почти во всех встроенных приложениях, является модуль АЦП (аналого-цифровой преобразователь). Эти аналого-цифровые преобразователи могут считывать напряжение с аналоговых датчиков, таких как датчик температуры, датчик наклона, датчик тока, датчик Flex и многое другое. Итак, в этом руководстве мы узнаем, как использовать АЦП в MSP430G2 для считывания аналоговых напряжений с помощью Energia IDE. Мы подключим небольшой потенциометр к плате MSP и подадим переменное напряжение на аналоговый вывод, считываем напряжение и отображаем его на последовательном мониторе.
Понимание модуля ADC:
Поверьте мне, подключение и программирование MSP430G2 на считывание аналогового напряжения не займет 10 минут. Но давайте потратим некоторое время на понимание модуля ADC на плате MSP, чтобы мы могли эффективно использовать его во всех наших будущих проектах.
Микроконтроллер - это цифровое устройство, что означает, что он может понимать только единицы и нули. Но в реальном мире почти все, например температура, влажность, скорость ветра и т. Д., Является аналоговым по своей природе. Чтобы взаимодействовать с этими аналоговыми изменениями, микроконтроллер использует модуль под названием 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 (~ 3в), вы можете изменять опорное напряжение с помощью () analogReference вариант.
Также проверьте, как взаимодействовать АЦП с другими микроконтроллерами:
- Как использовать АЦП в Arduino Uno?
- Взаимодействие ADC0808 с микроконтроллером 8051
- Использование модуля АЦП микроконтроллера PIC
- Учебник Raspberry Pi ADC
Принципиальная электрическая схема:
В нашем предыдущем руководстве мы уже узнали, как подключить ЖК-дисплей к 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 должен взаимодействовать с ЖК-дисплеем. Эта библиотека будет установлена в Energia IDE по умолчанию, поэтому вам не нужно беспокоиться о ее добавлении. Также убедитесь, что функция 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 = аналоговое чтение (A7); // считываем значение АЦП с вывода A7
Здесь функция analogRead () используется для чтения аналогового значения вывода, мы указали внутри него A7, поскольку мы подключили переменное напряжение к выводу P1.7. Наконец, мы сохраняем это значение в переменной с именем « val ». Тип этой переменной - целочисленный, потому что мы получим только значения от 0 до 1024, которые будут сохранены в этой переменной.
Следующим шагом будет вычисление значения напряжения из значения АЦП. Для этого у нас есть следующие формулы
Напряжение = (ADC Value / Разрешение АЦП) * опорного напряжения
В нашем случае мы уже знаем, что разрешение АЦП нашего микроконтроллера составляет 1024. Значение АЦП также находится в предыдущей строке и хранит переменную с именем val. Опорное напряжение равно напряжению, при котором микроконтроллер работает. Когда MSP430 плата получает питание через кабель USB, то рабочее напряжение 3.6V. Вы также можете измерить рабочее напряжение, используя мультиметр на контакте Vcc и заземлении на плате. Таким образом, приведенная выше формула подходит для нашего случая, как показано ниже.
плавающее напряжение = (float (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 ("Voltage:"); lcd.print (напряжение); // Отображение напряжения
Здесь мы отобразили значение АЦП в первой строке и значение напряжения во второй строке. Наконец, мы даем задержку 100 миллисекунд и очищаем ЖК-экран. Это значение будет обновляться через каждые 100 мил.
Тестируем свой результат!
Наконец, мы подошли к самой интересной части - тестированию нашей программы и экспериментированию с ней. Просто выполните соединения, как показано на принципиальной схеме. Я использовал небольшую макетную плату для подключения и перемычки для подключения макета к MSP430. После того, как соединения были выполнены, мой выглядел так, как показано ниже.
Затем загрузите приведенную ниже программу на плату MSP430 через Energia IDE. Вы должны увидеть вводный текст на ЖК-дисплее, если не отрегулируйте контрастность ЖК-дисплея с помощью потенциометра, пока не увидите четкие слова. Также попробуйте нажать кнопку сброса. Если все работает, как ожидалось, вы должны увидеть следующий экран.
Теперь измените потенциометр, и вы также должны увидеть, как изменяется напряжение, отображаемое на ЖК-дисплее. Давайте проверим, правильно ли мы измеряем напряжение, чтобы сделать это, используйте мультиметр для измерения напряжения между центром POT и землей. Напряжение, отображаемое на мультиметре, должно быть близко к значению, отображаемому на ЖК-дисплее, как показано на рисунке ниже.
Вот и все, мы научились измерять аналоговое напряжение с помощью АЦП платы MSP430. Теперь мы можем связать множество аналоговых датчиков с нашей платой для считывания параметров в реальном времени. Надеюсь, вы поняли руководство и получили удовольствие от его изучения. Если у вас возникнут проблемы, напишите в разделе комментариев ниже или на форумах. Давайте поговорим в другом руководстве по MSP430 с другой новой темой.