Изобретаем велосипед! (а точнее — омметр)

Много лет использую в работе обычный мультиметр (фирму и модель указывать не стану, т. к. это не суть важно). И всем он меня устраивал до того самого момента, пока мне не пришлось измерять очень малые сопротивления (принесли в работу стабилизатор сетевого напряжения большой мощности, у которого мне «приспичило» измерить сопротивления обмоток автотрансформатора). Тут-то и оказалось, что с точки зрения моего мультиметра сопротивления обмоток практически одинаковые! И тогда решил я, что «время пришло»…

Принцип

Как всегда, начинать пришлось с выбора базовой идеи. Казалось бы, что тут такого? Загони в измеряемый резистор ток, измерь падение напряжения на нем, подели их согласно закону Ома, и радуйся! Вот, например, как показано тут [1]. Но интернет был преисполнен скептицизма…

Основная проблема такого подхода заключается в стабильности тока, подаваемого в измеряемый резистор. Будет плавать ток, будут плавать и результаты измерений! Можно, конечно, ГСТ (генератор стабильного тока) сделать «покруче», чем просто на LM317, можно добавить в него «обратные связи», «термокомпенсации» и т.д. и т.п., но…  идеального ничего не существует.

Поэтому, была найдена другая идея, описанная в [2]. Ее преимущество в том, что качество ГСТ не критично для точности измерений! Бесспорно, «бесплатный сыр лишь в мышеловке», и если нам ток не критичен, то будет «нечто другое», от чего будет зависеть итоговая точность прибора! И этим «чем-то другим» является (дополнительный) резистор, используемый в качестве эталонного. Сам принцип, описанный в [2], заключается в том, что измерительный ток пропускается сразу через два резистора, которые включены последовательно. Один из них — измеряемый, а второй — эталонный. Измеряется падение напряжения на обоих резисторах, после чего простая формула позволяет посчитать сопротивление измеряемого резистора:

Как видите, «ток здесь вообще не при чем!» В итоге, я остановился именно на этом варианте измерений, а вопрос точности эталонного резистора был возложен на продавцов. Тот же AliExpress на вскидку предлагает пару вариантов, отличающихся и точностью, и ценой: EE High Precision Resistor (подешевле, точность 0,1%) и RX70-E High-precision Low temperature drift Resistor (точность уже 0,01%, но и ценник выше).

Схема

Собственно, после выбора методики измерений, родилась на свет и сама схема прибора:

В ней все максимально просто:

  • Генератор тока U6 подает ток на эталонный резистор R6 и измеряемый резистор, подключаемый к гнезду XS1;
  • Модуль U4, в котором использована микросхема ADS1115, меряет напряжения на эталонном и измеряемом резисторе;
  • Стабилизатор напряжения U3 (с указанными на схеме номиналами резисторов R3 и R4) ограничивает напряжение на входе ГСТ значением 6,2…6,3 Вольта, благодаря чему напряжение на входах микросхемы ADS1115 не превышает 5 Вольт, указанных в ее характеристиках как максимально допустимое;
  • Процессор U1 (ESP32-C3) по шине I2C считывает результаты измерений из микросхемы ADS1115, производит все необходимые вычисления и по все той же шине I2C выводит информацию на Display1;
  • Стабилизатор U2 формирует напряжение питания 5 Вольт для компонентов U1, U4  и Display1;
  • Импульсный блок питания U5 выдает 12 Вольт, которое подается как входное и на U2, и на U3;

Конструкция

Печатная плата для прибора мною не разрабатывалась. Весь монтаж выполнен на макетной плате, аналогичной показанным на рисунке ниже (но немного большего размера):

Выглядит это, может быть, и не так красиво, как разведенная печатная плата, но, с одной стороны, работает устройство нормально, а с другой — спрятано все это «неподобство» внутри вполне презентабельного корпуса…

Процессор ESP32-C3, модуль АЦП на микросхеме ADS1115, импульсный блок питания 12 Вольт/1 Ампер, ЖКИ с модулем I2C, микросхемы стабилизаторов LM317T и LM1117T, макетная плата — все это было приобретено на сайте AliExpress.

Программа

Программа для процессора была написана в IDE Arduino. Код ее вы можете скачать по ссылке, приведенной ниже:

source.zip

Для поддержки процессора ESP32-C3 в Arduino нужно установить поддержку для плат ESP32, как это описано тут [3]. После выбора процессора ESP32-C3 Dev Module в менеджере плат IDE Arduino достаточно будет изменить лишь один параметр : USB CDC On Boot — установить его в Enabled. Благодаря этому вы сможете получать в консоль Arduino сообщения от процессора устройства.

Для прочих дополнительных библиотек, использованных в программе, ссылки даны прямо в исходном коде.

Т. к. использованный мною дисплей не имеет поддержки кириллицы, все сообщения выводятся на него на английском языке. Если вы установите дисплей с поддержкой кириллицы, то можно отредактировать исходный код, заменив английские сообщения русскими (или иными) в массиве messages.

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

float etalon_r = 3.002; // значение эталонного сопротивления в Омах

Вторая переменная выглядит так:

float wiresRes = 0.0319; // значение сопротивления проводов щупов

В ней нужно указать сопротивление измерительных щупов вашего прибора (об этом — см. ниже).

Щупы

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

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

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

13:42:41.722 -> Current ADC range is ±1.024 Volts
13:42:41.722 -> Voltage 1 is 0.153
13:42:41.722 -> Voltage 2 is 0.001
13:42:41.722 -> "Dirty" resistance: 0.0196 Ohm
13:42:41.722 -> Resistance : 0.012 Ohm
13:42:41.722 -> -----------------

Как видите, в консоль прибор сообщает два значения сопротивления, одно из которых я назвал «грязным» (dirty). Так вот в случае, когда вы соедините щупы прибора между собой (напрямую), «грязное» сопротивление как раз и будет равно сопротивлению щупов. Можете взять эту цифру и вписать ее в исходник как значение переменной wiresRes, скомпилировать программу по-новой и залить ее в процессор.

Но есть и второй вариант (по которому делать вообще ничего не нужно!). По нажатию кнопки, подписанной на схеме как S1, программа прибора сама записывает значение «грязного» сопротивления в переменную wiresRes. То есть, вы просто замыкаете щупы между собой, нажимаете кнопку S1 и ждете пару секунд. Все! В итоге, вам можно ничего не менять в исходном коде программы, а просто выполнять указанную процедуру «калибровки» каждый раз перед проведением измерений. Недостаток заключается лишь в том, что значение переменной wiresRes прибор хранит в обычной оперативной памяти, и оно сбрасывается при каждом его выключении. А плюс заключается в том, что вы можете легко подстраивать прибор в случае смены щупов.

Точность

  • У меня в запасниках лежит десяток 5-Ваттных керамических резисторов сопротивлением 0,01 Ома (согласно маркировке). Прибор все их измерил как 0,009 Ома. Полагаю, это как раз и есть «предел возможностей» данного прибора (он не увидел между ними разницы!!!).
  • Также лежит десяток подобных резисторов, но уже  сопротивлением 0,47 Ома (согласно маркировке). Вот тут результаты измерений отличались, и не нашлось даже пары одинаковых до третьего знака после запятой.
  • На заглавном фото показан результат измерения резистора 4,3 Ома (согласно маркировке).
  • И да, возвращаясь к тому автотрансформатору, с которого все началось! Его обмотки были так же измерены, и сопротивления их оказались такими: 0,35 Ома, 0,014 Ома и 0,018 Ома (а мой старый «неназванный» тестер показывал 0,7 Ома, 0,2 Ома и 0,3 Ома соответственно).

Думаю, меня результат устраивает…

Ссылки:

  1. Цифровой портативный миллиомметр
  2. Точное измерение малых сопротивлений
  3. Installing | Arduino ESP32 latest documentation

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *