Найти в Дзене
Электроника, ESP32, Arduino

Как измерять и положительные и отрицательные напряжения с помощью АЦП

Многие современные микроконтроллеры имеют встроенный АЦП. Диапазон напряжений с которыми может работать АЦП определяют уровни опорных напряжений и они не должны выходить за диапазон питания микроконтроллера. Диапазон напряжений, питающих микроконтроллер, может быть от 0V до 3.3V (например плат ESP), либо от 0V до 5V (например платы Arduino). Отсюда, становится понятно, что измерять отрицательные напряжения АЦП не может, а это бывает необходимо.

Мне для одной из своих задач потребовалась возможность измерять одновременно и положительные и отрицательные напряжения - и поэтому для этих целей я решил использовать операционный усилитель MCP6021.

Конвертер напряжения от -15V до +15V на входе в +5V.....0V на выходе.
Конвертер напряжения от -15V до +15V на входе в +5V.....0V на выходе.

Все формулы расчета резисторов есть на схеме - и при желании схема легко может быть пересчитана на другой диапазон входных напряжений.

Данная схема будет выдавать:

  • при напряжении на входе -15V на выходе будет +5V
  • при напряжении на входе 0V на выходе будет +2.5V
  • при напряжении на входе 15V на выходе будет +0V

Поскольку выходное напряжение мы все равно будем оцифровывать с помощью микроконтроллера, сконвертировать обратно полученное значение напряжения с выхода Vout можно либо с помощью формулы:
Vin = (2.5 - Vout) х 6
либо, если используется среда Arduino IDE с помощью оператора map():
Vin = map(Vout, 1023, 0, -15, 15);

В DIP корпусе в своем городе я эту микросхему найти не смог, поэтому купил переходник на SOIC-8 и установил её с помощью фена.

Для проверки прототипа, опорное напряжение 5V было подано с помощью линейного стабилизатора 78L05. Сам стабилизатор был запитан от батарейки 9V.

Для настройки схемы выход Vout замыкается на землю и на выходе с помощью подстроченного резистора устанавливается напряжение 2.5V.

Прототипирование схемы на макетной плате
Прототипирование схемы на макетной плате

Далее с помощью самодельного лабораторного блока питания подаем на вход напряжение от 0 до 15 , меняем полярность подключения и опять прогоняем по всему диапазону.

Результаты измерений
Результаты измерений

Схема рабочая, оцифровать такой выходной сигнал с помощью АЦП Arduino не составит ни какого труда. Точность конвертации в данном случае будет зависеть от точности используемых резисторов - впрочем можно будет добавить небольшой программный фильтр и добиться большей точности измерений. Опорное напряжение полученное с помощью стабилизатора 78L05 в этой схеме имеет смысл подать на вход AREF с помощью оператора analogReference(EXTERNAL); Но это уже совсем другая история.