Эксперимент 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. Serial.begin(9600);
  7. }
  8.  
  9. void loop() {
  10. value = analogRead(ACD_PIN);
  11. Serial.println(value);
  12. delay(200);
  13. }

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

  1. #define ACD_PIN A0

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

  1. int value = 0;

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

  1. Serial.begin(9600);

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

  1. value = analogRead(ACD_PIN);

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

  1. Serial.println(value);

Чтобы увидеть «напечатанные» значения включите монитор порта, нажав соответствующую кнопку в правом верхнем углу Arduino IDE. Подробнее про монитор порта.

Задержка в строке 13 нужна для того, чтобы сообщения микроконтроллера не «печатались» слишком быстро.

  1. delay(200);

Попробуй изменить значение задержки и посмотреть как изменится скорость вывода сообщений в монитор порта.

В принципе наша программа может обойтись без переменной value, т.к. она только хранит считаное значение с АЦП, при этом изменения значения не происходит. Мы можем удалить строку 3 с объявлением переменной value, а в бесконечном цикле сразу передавать полученное значение функции analogRead() в качестве аргумента в функцию печати Serial.println(). В итоге тело бесконечной функции loop() будет выглядеть следующим образом.

  Serial.println(analogRead(ACD_PIN)); 
  delay(200)

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

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