Это старая версия документа!


Эксперимент 14. Измерение напряжения

В предыдущей статье мы узнали о том что такое аналого- цифровой преобразователь. Микроконтроллер, на базе которого работает наш электронный конструктор, имеет встроенный аналого- цифровой преобразователь. Попробуем им воспользоваться.

Подключение переменного резистора

На плате конструктора установлен переменный резистор. Переменный резистор состоит из полукруглой пластины, покрытой веществом, имеющим электрическое сопротивление, и скользящего контакта с ручкой. У переменного резистора три вывода — по концам пластины и скользящий контакт. Сопротивление меняется в зависимости от длины отрезка резистивной пластины от ее начала до скользящего контакта. Чем больше этот путь, тем выше сопротивление.

Рисунок 1. Переменный резистор. Внешний вид, устройство и условное обозначение

Переменный резистор можно представить как схему из двух резисторов

Делитель напряжения

С помощью переменного резистора будем получать аналоговый сигнал. Используем широко распространенную схему резисторного делителя напряжения. Резисторный делитель — это два последовательных участка цепи, называемых плечами, сумма напряжений на которых равна напряжению питания. Плечо между минусом питания и средней точкой называют нижним, а другое — верхним.

Резисторный делитель используется для деления напряжения. Например, если верхнее и нижнее плечи имеют одинаковые сопротивления, то напряжение на средней точке делителя равно половине напряжения питания. Такой делитель делит напряжение на 2.

Подключим нижнее плечо с земле, а верхнее к напряжению питания. Тогда при вращении ручки переменного резистора на его средней точки напряжение будет изменяться от 0 до напряжения питания (3,3в в нашем конструкторе). Подключим среднюю точку ко входу аналого- цифрового преобразователя и будем измерять напряжение на ней.

Схема эксперимента

Рисунок 2. Электрическая принципиальная схема эксперимента

Рисунок 3. Монтажная схема эксперимента

Программный код эксперимента

Exp14.ino
  1. #define ACD_PIN A0
  2.  
  3. int value = 0;
  4.  
  5. void setup()
  6. {
  7. Serial.begin(9600);
  8. delay(200);
  9. }
  10.  
  11. void loop()
  12. {
  13. value = analogRead(ACD_PIN);
  14. Serial.println(value);
  15. }

В строке 1 мы задаем псевдоним ACD_PIN для номера канала АЦП. В нашем микроконтроллере только один канал и он имеет номер A0.

  1. #define ACD_PIN A0

В строке 3 мы объявляем переменную value с новым для нас типом int и присваиваем ей значение 0. Переменные типа int могут хранить только целые числа в диапазоне от -32 768 до 32 767.

  1. int value = 0;

В строке 7 мы с помощью функции begin() включаем последовательный порт Serial микроконтроллера для отправки сообщений на компьютер. В качестве параметра функция begin() принимает число бод (число символов в секунду), определяющее скорость передачи сообщений.

  1. Serial.begin(9600);

В цикле просим АЦП оцифровать текущее напряжение на его входе cпомощью функции analogRead() и записать полученное значение в переменную value. Результатом является число в диапазоне от 0 до 1023.

  1. value = analogRead(ACD_PIN);

После чего с помощью функции println() «печатаем» значение в последовательный порт Serial.

  1. Serial.println(value);

Дополнительное задание

  • Если наш АЦП при напряжении 0 вольт возвращает результат 0, а при 3.3 вольт — 1023, то какой результат преобразования будет при напряжении 1.65? А если напряжение 1 вольт ровно?
  • Какое напряжение соответствует значению 785?