Измерение отрицательного напряжения микроконтроллером

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

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

Для измерения отрицательных напряжений с помощью АЦП существует несколько способов, во всех примерах будем считать что -VREF = 0, а +VREF = 5 вольт.

Необходимо измерять только отрицательные напряжения, например, от -5 до 0.
В таком случае можно применить инвертирующий усилитель, построенный на операционном усилителе(ОУ), с коэффициентом усиления равным -1.

Когда на вход схемы будет приходить -1 вольт, на вход АЦП будет поступать +1 вольт. Если же сигнал, который хотим измерить нужно усилить, достаточно изменить номиналы резисторов R1 и R2.

Необходимо измерять только отрицательные напряжения, например, от -15 до 0.
В таком случае можно применить сумматор построенный на ОУ

Предположив, что R1 и R4 равны 10К, получаем

Необходимо измерить напряжение, которое может изменяться от -10 до 10 вольт.

Сделать это очень просто, для этого надо создать смещение, чтобы при подаче -10 вольт на вход схемы на входе АЦП было 0 вольт, тогда при подаче 10 вольт на входе АЦП будет 5 вольт.

Реализовать это можно несколькими способами:

  • на резисторах

Номиналы резисторов рассчитываются очень просто, когда мы подаём на левый вход R2 -10 вольт на его правом выводе должно быть 0 вольт, в таком случае ток через R3 не течёт, так как на его концах отсутствует разность потенциалов.

Ток, протекающий через R2, равен

Предположим R2 равен 10K, тогда R1 равен 5K.

Осталось рассчитать R3, для этого на левый вывод R2 подадим 10 вольт, при этом на правом выводе должно быть 5 вольт, в таком случае ток через R1 не течёт.

Ток через R2 равен току через R3, получаем

Минус схемы на резисторах, это то что R2 ограничивает ток, поступающий на вход АЦП и то что любой шум в цепи питания будет попадать на вход АЦП. Хотелось бы обратить внимание на то, что у АЦП есть такой параметр, как входное сопротивление, которое, как правило, зависит от частоты сэмплирования, ниже изображена таблица в которой показано как зависит сопротивление входа от периода преобразования АЦП для STM32

сопротивление источника сигнала должно быть меньше этого значения, а последовательно включеный резистор R2 явно его не уменьшает. Говоря простыми словами за короткий промежуток времени АЦП должно получить достаточный заряд чтобы работать с ним, а резистор, включённый последовательно с входом, не даёт этого сделать.

Этот недостаток можно исправить, собрав схему, которая обладает низким выходным сопротивлением, то есть может отдать большой ток.

  • сумматор на операционном усилителе

Источник

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

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

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

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

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

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

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

Читайте также:  Напряжение ядра видеокарты 3060 ti

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

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

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

Источник

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

Я работаю с микроконтроллером PIC со встроенным 10-битным АЦП и хочу измерять напряжение в диапазоне от -1 до -3 Вольт.
Я думал об использовании операционного усилителя в инвертирующем режиме, чтобы сделать напряжение положительным, а затем подать его на АЦП микроконтроллера, однако здесь я должен был бы питать операционный усилитель с отрицательным источником питания, верно? Я не хочу использовать отрицательный источник питания в данный момент, и мне было интересно, возможно ли достичь этой конфигурации? Вы можете помочь?

Инвертирующий усилитель не нуждается в отрицательной шины , чтобы инвертировать напряжение.

Попытайтесь думать о своих силовых шинах как о том, что обеспечивает ваш выход. Если вы посмотрите на схему, все выводы ОУ связаны с напряжением 0 В или выше. Когда ваш диапазон от -1 до -3 входит, он будет отображаться как полная противоположность от 1 до 3 на выходе. Это также дает вам некоторые преимущества в качестве буфера, так как входное сопротивление вашего вывода не будет сильно влиять на эту цепь (если R в || R f велико).

Я согласен, что простой резисторный делитель делает работу — просто сообщаю вам, что это также работает.

Вы можете использовать делитель напряжения с одним концом, свисающим с положительной шины питания. Допустим, у вас есть один с равными резисторами и источником питания 5 В, это приведет к напряжению от + 2 В до + 1 В для диапазона от -1 до -3 В.

Идея делителя напряжения хороша, дешева, но дает вам проблему изменения измеряемого напряжения, которое будет восприниматься как 1/2 изменения на входе АЦП. Если точные измерения представляют интерес, решение представляет собой стабилитрон в качестве нижней половины делителя. Если измеряемая вещь может терпеть потерю небольшого тока, это будет прекрасно работать. Стабилитроны не являются абсолютно плоскими в своем обратном напряжении пробоя, особенно для очень малых токов, поэтому не делайте R1 слишком большим.

Теперь, чтобы увидеть, если этот сайт stackexchange позволяет мне добавлять изображения .

Это стандартная схема для такого рода преобразования. Я смоделировал это, чтобы доказать кому-то, что это работает, следовательно, схема SPICE. Вам нужно выбрать подходящие значения резистора, он работает, пока они 2R, 2R и R.

Я сейчас работаю (не по электронике), без удобной электроники или книг, так что это будет просто грубая идея. Может быть, кто-то еще может заполнить детали .

Попробуйте текущее зеркало, используя пару транзисторов PNP, висящих на Vcc-рейке. Подайте отрицательный сигнал напряжения на входную сторону зеркала через соответствующий резистор. Тот же самый ток должен затем течь через выходной транзистор зеркала. С правильно подобранным резистором вы создаете диапазон напряжения в пределах от 0 В до Vcc.

РЕДАКТИРОВАТЬ — НОВЫЙ: Вот текущая зеркальная схема. Какой бы ток не проходил через транзистор T1, T2 будет пытаться протекать одинаково. Измеряемое отрицательное напряжение относительно источника питания, который я случайно выбрал равным 15 В, создает некоторую струйку тока через R1 (измеряется при моделировании как «входной ток»). Если бы R2 был таким же, как и R1, вы бы нашли такое же напряжение на нем, если бы ему было позволено. Но он подключен к 0 В (gnd) — наша схема основана исключительно на положительном напряжении. Это не будет работать, если мы не сделаем R2 меньше, скажем, 1/2 от R1, тогда напряжение на нем будет 1/2 от того, что на R1. Измерьте это, сделайте математику (ууу, умножьте на 2, трудно!) И вот, пожалуйста. Схема имеет разные значения, другое соотношение , но я думаю, что мы все можем справиться с математикой для этого.

Читайте также:  Номинальные напряжения систем электроснабжения приемников

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

Источник

PIC Урок 25. Модуль ADC (АЦП). Измеряем напряжение. Часть 1

Переходим к изучению следующего модуля контроллера PIC – ADC, я считаю, одного из самых важных модулей.

ADC (Analog-to-Digital Converter, в переводе на русский АЦП или аналого-цифровой преобразователь) – это периферия, которая преобразует электрический сигнал на её входе в цифровой код. Затем данный код мы уже используем для обработки или для отображения тем или иным образом данной электрической величины. Это очень распространённая периферия или технология. АЦП активно используется в звукозаписи, измерительной технике, видеозаписи и во многих других случаях. Поэтому нам обойти данную вещь стороной никак не получится, тем более АЦП поддерживается аппаратно в контроллерах PIC16.

Как вообще работает цифровое преобразование?

Берётся опорное напряжение и сравнивается с измеряемым. Соответственно, опорное напряжение всегда должно быть больше измеряемого. Если это не так, то нужно будет применять делители напряжения.

Изобразим схематично процесс измерения

Отрезок — это диапазон измерений. Он находится между нулём и опорным напряжением. А стрелка — это измеряемое напряжение.

Данный отрезок делится пополам, и АЦП оценивает, в какой половине находится приложенное напряжение

Если оно находится в стороне нуля, то в самый старший бит результата записывается 0, а если в стороне максимального напряжения, то единица. У нас будет единица. Затем та половина отрезка, на которой находится измеряемое напряжение делится ещё пополам, и АЦП опять измеряет, в какой половинке уже данного отрезка у нас находится измеряемое напряжение

Оценка идёт по тому же принципу — в какой стороне отрезок. В нашем случае будет 0. И этот ноль записывается в следующий более младший бит.

Затем та четвертинка опять делится пополам и АЦП опять оценивает, где находится отрезок

И АЦП так и продолжает такой процесс до тех пор, пока не кончатся ячейки для битов. То есть если мы используем 10-битный режим, то. соответственно, и будет 10 подобных измерений и заполнятся 10 бит величины. Чем больше бит, тем точнее результат, но уже потребуется на это больше времени и более серьёзный и точный АЦП. Имея данный результат, нам несложно будет посчитать величину измеренного напряжения. Мы знаем. что если у нас АЦП 10-битный, то данный результат у нас лежит в промежутке от 0 до 1023 (0xFFFF), получается всего у нас 1023 отрезка. И мы затем наш результат делим на 1024 (количество отрезков плюс 1) и умножаем на величину опорного напряжения.

Теперь посмотрим, как устроен модуль ADC в контроллере PIC16 (нажмите на картинку для увеличения изображения)

Измеряемый сигнал поступает на коммутатор входов, управляемый с помощью битов CHS2:CHS0, в A/D конвертер, в котором преобразовывается в цифровой код. Также в конвертер подаётся опорное напряжение, которое также может поступать из различных источников, что управляется тоже определёнными битами регистров настроек, с которым и сравнивается поступивший сигнал.

A/D-конвертер работает следующим образом. Сигнал, который поступил в него через коммутатор, заряжает внутренний конденсатор CHOLD. Затем модуль преобразует напряжение, удерживаемое на конденсаторе в соответствующий 10-разрядный цифровой код методом, описанным выше (данный метод называется методом последовательного приближения).

Время, необходимое для преобразования напряжения в цифровой код, поэтому складывается из времени заряда конденсатора и времени собственно преобразования. Расчёт этого времени – задача не совсем тривиальная. Подробно об этом рассказано в технической документации. Нам данное время рассчитывать незачем, так как момент окончания преобразования мы будем обнаруживать по состоянию определённого бита, с которым мы познакомимся немного ниже. Тем не менее иногда возникает необходимость досрочного прекращения преобразования, например для того, чтобы обеспечить большую скорость преобразования за счёт уменьшения точности АЦП. Тогда до следующего запуска преобразования необходимо выдержать определённую паузу.

Теперь давайте познакомимся с регистрами модуля ADC, которые, я надеюсь, внесут ещё большую ясность в понимание процесса работы АЦП.

Управляющий регистр ADCON0

Читайте также:  Допустимые напряжения для нержавеющей стали

Рассмотрим отдельные биты данного регистра:

ADCS1:ADCS0 (A/D Conversion Clock Select bits): Выбор источника тактового сигнала. Также есть третий бит выбора источника тактового сигнала ADCS2, который находится в регистре ADCON1. Вот как зависит выбор источника тактового сигнала, а также его частота от состояний этих трёх битов

ADCS2:ADCS0 Частота преобразователя
000 FOSC/2
001 FOSC/8
010 FOSC/32
011 FRC (Внутренний RC генератор модуля АЦП)
100 FOSC/4
101 FOSC/16
110 FOSC/64
111 FRC (Внутренний RC генератор модуля АЦП)

CHS2:CHS0 (Analog Channel Select bits): Выбор аналогового канала

GO/DONE (A/D Conversion Status bit): Статус модуля АЦП

1 – модуль АЦП выполняет преобразование (установка бита вызывает начало преобразования)

0 – состояние ожидания (сбрасывается аппаратно по окончанию преобразования).

ADON (A/D On bit): Бит включения модуля АЦП

1 – модуль АЦП включен

0 – модуль АЦП выключен. Ток модулем не потребляется.

Управляющий регистр – ADCON2

Рассмотрим биты данного регистра:

ADFM (A/D Result Format Select bit): Формат сохранения 10-битного результата

1 – правое выравнивание (два старших бита находятся в двух младших битах регистра ADRESH, остальные нули, а 8 младших битов – в регистре ADRESL)

0 – левое выравнивание (два младших бита находятся в двух старших битах регистра ADRESL, остальные нули, а 8 старших битов – в регистре ADRESH).

ADCS2 (A/D Conversion Clock Select bit): Старший бит выбора источника тактового сигнала

PCFG3:PCFG0 (A/D Port Configuration Control bits): Управляющие биты настройки каналов АЦП. Данные биты настраивают тип входов (цифровой или аналоговый), а также влияют на выбор источника опорного напряжения. Для этого в технической документации существует вот такая таблица

Из данной таблицы мы видим, что можно одновременно работать с несколькими каналами измеряемого сигнала. В этом случае преобразование сигнала каналов происходит не одновременно, а по очереди. Мы перед началом преобразования выбираем определённый канал, а перед началом следующего – другой канал.

Теперь поговорим о последовательности действий при работе с модулем ADC.

  1. Сначала мы настраиваем модуль, в том числе и биты PCFG3:PCFG0, выбираем направление ножек портов (ножки, участвующие в измерении сигналов, должны быть включены на вход). Затем выбираем канал, на котором будет производиться замер напряжения сигнала, выбираем источник тактирования АЦП и включаем модуль.
  2. Затем настраиваем прерывание от ADC, если необходимо. Прерывания настраиваются следующим образом: бит ADIF сбрасывается в 0, ADIE устанавливается в 1, также включаем глобальные прерывания с помощью битов PEIE и GIE.
  3. Выдерживаем паузу, необходимую для зарядки конденсатора.
  4. Начинаем аналого-цифровое преобразование с помощью установки бита GO/DONE.
  5. Ждём окончания преобразования путём отслеживания состояния бита GO/DONE или обрабатывая соответствующее прерывание.
  6. Считываем результат из регистров ADRESH:ADRESL, сбрасываем бит ADIF при необходимости.
  7. Чтобы начать следующее преобразование, процесс повторяется с шага 1 или 2. Минимальное время ожидания перед запуском следующего преобразования должно быть не менее двух периодов преобразования одного бита.

Думаю, для начала работы с модулем АЦП нам пока информации достаточно. Хотя в документации существует ещё немало различных нотаций, диаграмм и таблиц, которые нам пока не сильно требуются, а если вдруг и потребуются, мы обратимся к ним в процессе написания исходного кода проекта.

В данном занятии мы попытаемся отследить изменение напряжения на ножке AN0, а результат мы мониторить будем с помощью жидкокристаллического дисплея подключенного через переходник к шине I2C.

В качестве подопытного контроллера мы возьмём PIC16F877A, расположенный на плате от WaveShare, а в качестве источника испытуемого сигнала соберём примитивный делитель с помощью переменного резистора на 10 килоом, подключенного с одной стороны к плюсу питания контроллера, а с другой – к общему проводу. Центральный провод соединим с ножкой AN0.

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

Подключим программатор, подключив его затем и к ПК, а также подключим внешний блок питания к плате.

В следующей части занятия мы настроим проект, АЦП, напишем код для измерения напряжения и проверим код на практике.

Купить программатор (неоригинальный) можно здесь: PICKit3

Купить программатор (оригинальный) можно здесь: PICKit3 original

Отладочную плату PIC Open18F4520-16F877A можно приобрести здесь: PIC Open18F4520-16F877A

Дисплей LCD 20×4 можно приобрести тут: Дисплей LCD 20×4

Переходник I2C to LCD можно приобрести здесьI2C to LCD1602 2004

Смотреть ВИДЕОУРОК (нажмите на картинку)

Источник

Оцените статью
Adblock
detector