Наш магазин на eBay Наш магазин на AliExpress Наш канал в telegram

Измерение аналоговых величин микроконтроллером, на практике. Часть 1

Предисловие

В былые, доцифровые времена любому из нас приходилось довольствоваться стрелочными измерительными приборами, начиная от обыденных часов, весов и заканчивая… хм, так вот сразу даже и не найти границу их применения! Ну, скажем – прецизионный лабораторный микро- или еще внушительнее – пикоамперметр. И классов точности их тоже имелось достаточно много, в зависимости от назначения.

Вот, к примеру, обыкновенный указатель количества топлива в баке автомобиля является ярчайшим примером максимальной неточности показаний! Не знаю ни одного автомобилиста, который бы полагался на этот «показометр» и не заправлялся бы заблаговременно. Отпетые пессимисты от шоферов вообще без канистры топлива в багажнике не выезжали!

Зато в лабораториях, особенно в Госповерке, имелись стрелочники с зеркальной шкалой и класом точности много лучше 0,5.

И практически все из нас были довольны и счастливы. А если не были довольны, то приобретали более точные приборы, конечно по-возможности!

Но вот настал цифровой век. Все мы ему обрадовались, — теперь видим на индикаторах сразу числа и счастливы от предлагаемой нам «точности». Причем в нынешние времена эти вездесущие «цифровики» стоят на порядок меньше ставших раритетом «неточных стрелочников». Однако мало кто задумывается, что показываемые нам в цифре величины по-прежнему остались аналоговыми, будь это вес или сила тока – значения не имеет. А это значит, что измеряются эти величины по-прежнему аналогово! И лишь для обработки и представления преобразуются в цифровую величину. Вот тут-то и скрываются погрешности, приводящие нас к удивлению, когда два различных комнатных термометра в одном и том же месте показывают разные значения!

Путь от измеряемой величины к индикатору

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

Для начала я выбираю силу тока!

Мне придется повторить банальность, что для получения цифрового представления аналоговой величины необходим аналогово-цифровой преобразователь (АЦП). Но поскольку сам по себе он нам еще мало пригоден, то понадобятся и другие узлы для завершения всего задуманного. А именно:

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

Существуют готовые микросхемы, объединяющие в себе и АЦП и декодер. Например, ICL7136 или подобные, применяемые в мультиметрах.

По существу, все эти узлы в том или ином виде просто необходимы. Я еще не назвал самого датчика – в данном случае – преобразователь тока в напряжение, или просто шунт.

Итак, пробежимся вкратце по всей цепочке. Ток, протекающий через шунт (мощный резистор с очень низким сопротивлением), создает на его полюсах разность потенциалов. Guten Tag, Herr Ohm! Но эта разность довольно мала и не каждый АЦП способен эту величину в полной мере преобразовать, поэтому сигнал (напряжение) с шунта необходимо усилить до приемлемой величины. Для этого и нужен нормирующий усилитель. Теперь АЦП, получив на вход удобоперевариваемое напряжение, выполнит преобразование с минимально возможной погрешностью. На выходе из него получим число, соответствующее текущему значению измеренного тока в выбранном диапазоне, которое для вывода на индикатор нужно соответствующим образом декодировать. К примеру, преобразовать в код семисегментного индикатора.

Здесь я не вижу необходимости более подробно останавливаться на каждом из приведенных этапов, поскольку в статье я преследую иную цель. А подробности найдутся в интернете с избытком.

Конкретика

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

Фото электронной нагрузки

Мой встроенный амперметр собран и запрограммирован на МК Tiny26L. Частью этого амперметра является второй (свободный) ОУ микросхемы LM358, входящей в составбазовой схемы балласта. Т.е. это мой нормирующий усилитель, поскольку максимальное падение напряжения на шунте (5 А х 0,1 ом) составляет всего 0,5 вольта, что явно недостаточно для полного диапазона преобразования с внутренним опорным напряжением.

Согласно Т.О. (англ.= Datasheet) номинальное напряжение встроенного опорного источника (ИОН) составляет 2,56 вольта. Очень удобная величина! Однако, на практике получается не так уж и здорово: выверенное напряжение ИОН-а моего МК оказалось 2,86 вольта! Каким образом я это определил – отдельная тема. Давайте все-таки вернемся к удобным 2,56 вольтам. Смотрите, что получается: на шунте падает максимально 0,5 вольта, АЦП преобразует максимально 2,56 вольта. Напрашивается нормирующий усилитель с коэффициентом усиления 5, тогда и полученное при преобразовании число не потребует какой-либо развитой арифметики для представления результата: 5 ампер = 2,5 вольта = 250 единиц (для 8-битного преобразования). Придется всего лишь умножить результат на два и поставить десятичную точку между сотнями и десятками, чтобы получить совсем удобное представление: единицы, десятые и сотые доли ампера. Конечное преобразование в семисегментные знаки – дело техники. Всё прекрасно, можно воплощать в «железо»!

Однако, как я уже показал на примере встроенного ИОН-а, приемлемой (я уже не говорю – высокой!) точности на используемых компонентах получить так легко не получится. Можно пойти по пути компенсации погрешностей математически, с помощью программы в МК, хотя для этого придется производить градуировку. Этот путь довольно просто реализуется на Си и других языках высокого уровня. Но мне, упертому ассемблерщику, разводить математику инструкциями RISC – лишняя головная боль!

Я выбрал другой путь, — коррекцию коеффициента усиления нормирующего усилителя (НУ). Много для этого не потребуется – один подстроечный резистор! Значение его нужно правильно выбрать, чтобы диапазон подстройки был достаточным, но не преувеличенным.

Подбор элементов нормирующего усилителя

Итак, необходимо определить диапазон подстройки. Первым делом нужно определиться с допусками компонентов. Например, мой шунт имеет допустимую погрешность 1%. Прочие резисторы в схеме нормирующего усилителя могут имеют допуск до10%. И не забываем неточность нашего ИОН-а, которая составила в моем случае почти +12%! Это значит, что реально преобразованное число будет меньше почти на 12%. Но поскольку эта погрешность у меня уже известна, то я учитываю ее в коэффициенте усиления НУ, который должен составить 5,72. А поскольку реальные погрешности прочих компонентов не известны, то остается найти максимально возможную суммарную погрешность, чтобы расчитать диапазон подстройки.

Напрашивается простая сумма этих вот «процентов»: 1% шунта плюс 2 раза по 10% резистороров обратной связи ОУ. Итого: 21%.

Посмотрим, так ли это на самом деле. Для этого взглянем на часть схемы, где представлен этот НУ с уже подобранными номиналами:

Часть схемы с нормирующим усилителем

Как видно, имеет место неинвертирующий усилитель с перестраиваемым коэффициентом передачи, теоретически регулируемым от 4,979 до 6,735 при указанных на схеме номиналах. Но, если учесть наши ±10% возможной погрешности каждого из резисторов, то получим при найхудшем сочетании Ку = 5,864 – 8,009 , что явно превышает необходимый коэффициент! Если это сочетание будет иметь место, то придется взять другие номиналы. А лучше сразу увеличить номинал подстроечного резистора, например, до 39к. Тогда нижняя граница Ку будет 5,454 , что уже приемлемо.

Ну, мне – «настоящему радиохламеру» — пришлось выбирать подстроечник из того, что было, и просто повезло вложиться в диапазон! Был бы подстроечник другого номинала – не беда, пересчитал бы R2 и R3, которые в моем случае имеют допуск 5%, поэтому мне не пришлось брать другой подстроечник.

Преодоление своих недочетов и упущений

Казалось бы, всё продумано и расчитано – разводи плату. А давай-ка испытаем эту конструкцию сперва на макетке! Сказано – сделано! Ку перестраивается не совсем как ожидалось, но в пределах необходимого. Однако индикатор не собирался показывать 0.00 при отсутствии тока нагрузки! Первым делом я заподозрил программу в МК, но при закорачивании входа АЦП на общий провод заветные нолики появлялись. Значит, что-то таки приходит на вход МК, отличное от нуля вольт. Проверка мультиметром подтвердила это предположение и поставила очередную задачу. Не вдаваясь в подробности моих изысканий, опишу лишь их результат.

Причина оказалась в следующем: я совершенно не учел, что примененный мною ОУ далеко не лучшего качества. Он даже не т.н. «rail-to-rail». Это означает, что его выходной потенциал никогда не достигнет ни одного из полюсов питания, т.е. в моем случае никогда не будет равен 0 вольт! Вот если бы он питался от двуполярного источника, тогда бы на выходе получился ожидаемый ноль. Но у меня источник питания однополярный и усложнять схему каким-либо преобразователем я не намеревался. Выход был найден в создании «виртуальной земли», т.е. благодаря отдельному источнику питания (в отличие от базовой схемы) мне удалось с помошью диода сдвинуть потенциал общего провода относительно минусового полюса батареи.

Смещение потенциала общего провода для нормирующего усилителя

Итак, плата вытравлена и спаяна. Пора бы эту конструкцию упаковать в корпус. Что, собственно, и было сделано. Однако, во время эксплуатации вылез еще один маленький недочет – дрейф входных цепей ОУ. Это выражалось в отрицательном сдвиге показаний, т.е. при токе в пару десятков миллиампер на индикаторе по-прежнему были нули, что меня не устраивало! Я бы допустил сдвиг в несколько мА – все равно единицы миллиампер не отображаются. Пришлось вводить схему смещения на вход НУ.

Смещение на входе нормирующего усилителя

Номиналы R4 и RZ подобраны так, что бы обеспечить смещение плюс/минус несколько десятков милливольт относительно «виртуальной земли». У меня не было желания переделывать готовую плату и я довесил необходимый подстраиваемый делитель на место подстроечника Ку.

Фото прибора, вид изнутри

В общем и целом получившийся приборчик удовлетворяет мои потребности. Усовершенствовать его, конечно же, можно еще долго, но пока нет необходимости!

О цифровой части и математике я расскажу в следующий раз на примере вольт-амперметра лабораторного блока питания.

продолжение…

Добавить комментарий