Лучшее из возможного!

Размер шрифта:  Aa Aa Aa Aa Aa



Измеритель индуктивности и емкости на Arduino

В радиолюбительской практике часто бывает необходимо измерить емкость конденсатора или индуктивность катушки. Особенно это актуально для SMD компонентов, на которых отсутствует маркировка. Функция измерения емкости есть во многих мультиметрах, но при измерении небольших емкостей, порядка единиц – десятков пФ, погрешность обычно бывает недопустимо велика.

Индуктивность могут измерять далеко не все мультиметры и, аналогично, в большинстве случаев, погрешность при измерении малых индуктивностей довольно большая. Есть, конечно, точные векторные измерители LC, но их стоимость начинается от 150 USD. Сумма для российского радиолюбителя не малая, особенно учитывая, что такой прибор нужен не каждый день.

Выход есть – собрать измеритель LC своими руками. Еще в 2004 году я разработал и изготовил такой прибор. Его описание было опубликовано в журнале «Радио» №7 за 2004 г. Более 10 лет этот измеритель LC исправно выполнял свои функции, но потом вышел из строя индикатор. В приборе был использован самый дешевый и доступный на момент разработки LCD индикатор типа KO-4B. В настоящее время он снят с производства и найти его почти невозможно.

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

Схема измерителя LC

Принципиальная схема прибора показана на рисунке. Сейчас стоимость платы Arduino практически равна стоимости установленного на ней контроллера, поэтому в качестве основы я использовал плату Arduino-Pro-Mini. Такие платы выпускаются в двух версиях – с напряжением питания 3,3 В и кварцем на 8 мГц, а также 5 В и 16 мГц. В данном случае подойдет только вторая версия – 5 В, 16 мГц. Индикатор – один из самых распространенных на сегодняшний день, WH1602A фирмы «Winstar» или его аналог. Он имеет две строки по 16 символов.

С целью упрощения схемы и конструкции я использовал операционный усилитель с однополярным питанием типа MCP6002, который допускает работу с уровнями напряжения от нуля до напряжения питания как по входу, так и по выходу. В англоязычных источниках это называется «Rail-to-Rail Input/Output». Возможная замена MCP6001, AD8541, AD8542 и другие, с минимальным потребляемым током, способные работать от однополярного источника 5 В. При поиске задавайте ключевые слова «rail-to-rail input output».

Если в корпусе более одного ОУ, отрицательные входы всех неиспользуемых усилителей нужно подключить к «земле», а положительные – к питанию +5 вольт.

Измерительная схема с незначительными изменениями взята из первого варианта прибора. Принцип измерения следующий. Сигнал возбуждающего напряжения прямоугольной формы с вывода D10 Arduino (порт PB1 микроконтроллера) поступает на измерительную часть схемы. Во время положительной полуволны измеряемый конденсатор заряжается через резистор R1 и диод VD4, а во время отрицательной - разряжается через R1 и VD3. Средний ток разряда, пропорциональный измеряемой емкости, преобразуется с помощью операционного усилителя DA1 в напряжение. Конденсаторы C1 и C2 сглаживают его пульсации.

При измерении индуктивности во время положительной полуволны ток в катушке нарастает до значения, определяемого номиналом резистора R2, а во время отрицательной - ток, создаваемый ЭДС самоиндукции через VD2 и R3, R4 также поступает на вход DA1. Таким образом, при постоянном напряжении питания и частоте сигнала, напряжение на выходе ОУ прямо пропорционально измеряемой емкости или индуктивности.

Но это справедливо только при условии, что емкость успевает полностью зарядиться в течение половины периода возбуждающего напряжения и полностью разрядиться в течение другой половины. Аналогично и для индуктивности. Ток в ней должен успевать нарастать до максимального значения и спадать до нуля. Это обеспечивается соответствующим выбором номиналов R1...R4 и частоты возбуждающего напряжения.

Напряжение, пропорциональное измеренному значению с выхода ОУ через фильтр R9, C4 подается на встроенный 10-и разрядный АЦП микроконтроллера – вывод A1 Arduino (порт PC1 контроллера). Рассчитанное значение индуктивности или емкости отображается на индикаторе. Кнопка SB1 служит для программной коррекции нуля, что компенсирует начальное смещение нуля ОУ, а также емкость и индуктивность клемм и переключателя SA1.

Для повышения точности прибор имеет 9 диапазонов измерения. Частота возбуждающего напряжения на первом диапазоне равна 1мГц. На такой частоте измеряется емкость до ~90 пФ и индуктивность до ~90 мкГн. На каждом последующем диапазоне частота снижается в 4 раза, соответственно во столько же раз расширяется предел измерения. На 9 диапазоне частота равна примерно 15 Гц, что обеспечивает измерение емкости до ~5 мкФ и индуктивности до ~5 Гн. Нужный диапазон выбирается автоматически, причем после включения питания измерение начинается с 9 диапазона.

В процессе переключения диапазонов частота возбуждающего напряжения и результат преобразования АЦП отображаются в нижней строке индикатора. Это справочная информация, которая может помочь оценить корректность измерения параметров. Через несколько секунд после стабилизации показаний эта строка индикатора очищается, чтобы не отвлекать внимание пользователя.

Результат измерения отображается в верхней строке. Измеренное значение напряжения с выхода ОУ интерпретируется как емкость или индуктивность в зависимости от положения переключателя SA1.

Стабилизатор напряжения, смонтированный на плате Arduino, очень маломощный. Чтобы не перегружать его, питание подсветки индикатора подается через резистор R11 непосредственно с блока питания прибора. В качестве блока питания используется стабилизированный сетевой адаптер на 9...12 В с допустимым током нагрузки не менее 100 мА. Диод VD6 защищает прибор от ошибочного подключения к блоку питания обратной полярности. Номинал резистора R11 определяется током светодиодов подсветки индикатора, т.е. необходимой яркостью его свечения.

Плата измерительного блока

Измерительный блок смонтирован на печатной плате размерами 40x18 мм. Ее чертеж показан на рисунке. Все постоянные резисторы и конденсаторы в корпусах для поверхностного монтажа типоразмера 1206. Конденсаторы C1 и C2 составлены из двух, включенных параллельно, по 22 мкФ. Диоды VD1...VD4 - высокочастотные с барьером Шоттки. Подстроечные резисторы R3, R5 и R10 малогабаритные типа СП3-19 или их импортные аналоги. DA1 типа MCP6002 в корпусе SOIC.

Номинал емкостей C1, C2 уменьшать не следует. Тумблер SA1 должен быть малогабаритным и с минимальной емкостью между контактами.

Плата Arduino, плата измерительного блока и индикатор монтируются на основной плате. На ней же установлены регулятор контрастности R10, диод VD6, резистор R11, конденсаторы C5, C6, гнездо питания и кнопка калибровки SB1. Индикатор и конденсаторы монтируются со стороны печатных проводников, все остальное – с противоположной стороны.

Основная плата измерителя LC

Все это размещается в корпусе размерами 120х45х35 мм, спаянном из фольгированного гетинакса. Клеммы для подключения измеряемого элемента и переключатель SA1 крепятся непосредственно на корпус. Проводники до SA1 и входных клемм должны быть минимально возможной длины.

LC meter. Вид сверху

LC meter. Вид снизу

Программа для контроллера написана на Си в среде CodeVisionAVR v2.05.0. Совсем не обязательно программировать Arduino в фирменной среде. В контроллер можно загрузить любой HEX файл без программатора с помощью программы XLoader. Однако на плате Arduino-Pro-Mini отсутствует конвертер USB-COM, поэтому придется использовать для программирования внешний конвертер. СтОит он не дорого, а в дальнейшем такой конвертер вам еще пригодится. Так что рекомендую заказать на Aliexpress вместе с платой Arduino-Pro-Mini (5 V, 16 mHz) и модуль USB-COM для ее программирования.

Скачиваем с сайта https://github.com/binaryupdates/xLoader или по ссылке в конце этой странички с моего сайта программу XLoader и устанавливаем ее. Работа с программой проста и интуитивно понятна. Нужно выбрать тип платы - Nano(ATmega328) и номер виртуального COM порта. Скорость обмена 57600 установится сама, менять ее не нужно. Затем указываем путь к HEX файлу прошивки, который находится в папке «Exe» проекта: ...\Exe\lcmeter_2.hex. О FUSE битах можно не беспокоиться, они уже выставлены и возможности испортить их нет. После этого нажимаем кнопку «Upload» и ждем несколько секунд до окончания загрузки.

Окно программы XLoader

Разумеется, предварительно модуль USB-COM должен быть подключен к USB порту компьютера и для него должен быть установлен драйвер, так, чтобы виртуальный COM порт определился в системе. Разъем программирования на плате Arduino должен быть подключен к соответствующим выводам на плате модуля USB-COM. Внешнее питание на плату во время программирования можно не подавать, она его получит от USB порта компьютера.

Для наладки измерителя LC необходимо подобрать несколько катушек и конденсаторов в диапазоне измерения прибора, имеющих минимальный допуск по номиналу. Если есть возможность, их точные значения следует измерить с помощью промышленного измерителя LC. Учитывая, что шкала линейная, в принципе достаточно одного конденсатора и одной катушки. Но лучше проконтролировать весь диапазон. В качестве образцовых катушек подходят дроссели типа ДМ, ДП.

Устанавливаем движки резисторов R3 и R5 в среднее положение. Переводим SA1 в положение измерения емкости, подаем питание на прибор (к клеммам ничего не подключено) и контролируем результат преобразования АЦП на частоте 1мГц. Эта информация выводится в нижней строке индикатора. Должно быть не менее 15 и не более 30.

Через несколько секунд в верхней строке появится измеренное значение емкости. Если оно отличается от 0.0 pF, нажимаем кнопку коррекции нуля и вновь ждем несколько секунд.

После этого к входным клеммам подключаем образцовую емкость и, вращая движок R5, добиваемся соответствия показаний истинному значению емкости. Оптимально взять емкость номиналом в пределах 4700...5100 пФ.

Затем подключаем к клеммам конденсатор емкостью 2...3 пФ и контролируем точность измерения его емкости. Если измеренное значение меньше истинного более, чем на 0,5...1 пФ, следует увеличить смещение нуля ОУ. Для этого уменьшаем номинал резистора R7. Напряжение на выходе ОУ и результат АЦП должны увеличиться. Если использован операционный усилитель типа «Rail-to-Rail Input/Output» достаточно смещения нуля около 100 мВ, что соответствует результату преобразования АЦП около 20 (к входным клеммам ничего не подключено).

У меня номинал R7 получился 47 кОм, результат АЦП при этом равен 18...20.

При проведении калибровки обращайте внимание на результат преобразования АЦП, выводимый в нижней строке индикатора. Желательно в качестве эталонной использовать емкость такого номинала, чтобы результат АЦП был по возможности ближе к верхнему пределу измерения на данном диапазоне. Прибор переключается на следующий диапазон, когда результат АЦП превышает 900. Таким образом, для достижения максимально возможной точности измерения, калибровку следует проводить по эталонной емкости, для которой значение АЦП находится в пределах 700...850.

Затем необходимо проконтролировать весь диапазон и, при необходимости, уточнить положение движка R5, добиваясь точности не хуже +/- 2...3%.

Настроив прибор в режиме измерения емкости, следует перевести SA1 в нижнее по схеме положение, закоротить входные гнезда и нажать SB1. После коррекции нуля на вход подключается образцовая катушка и резистором R3 выставляются необходимые показания. Цена младшего разряда 0,1 мкГн. Если нужных показаний достичь не удается, следует изменить номинал R4.

Необходимо стремиться к тому, чтобы R2 и сумма (R3+R4) отличались не более, чем на 20%. Такая настройка обеспечит примерно одинаковую постоянную времени "заряда" и "разряда" катушки и, соответственно, минимальную погрешность измерения.

Погрешность не хуже +/- 2...3% для емкости обеспечивается без труда, с катушками же все обстоит несколько сложнее. Ведь катушка всегда имеет много паразитных параметров - активное сопротивление обмотки, потери в сердечнике на вихревые токи, на гистерезис и др. Кроме того, магнитная проницаемость ферромагнетиков нелинейно зависит от напряженности магнитного поля. Индуктивность при измерении подвергается воздействию однополярных токов, а все реальные ферромагнетики имеют достаточно высокое значение остаточной индукции.

В результате воздействия всех этих факторов показания прибора при измерении индуктивности некоторых катушек могут существенно отличаться от того, что покажет векторный измеритель LC. Тут следует учитывать особенности принципа измерения. Для катушек без сердечника, для незамкнутых магнитопроводов и для ферромагнитных магнитопроводов с зазором точность измерения вполне удовлетворительна, если активное сопротивление катушки не превышает 20…30 Ом. А это значит, что индуктивность всех ВЧ катушек, дросселей, трансформаторов для импульсных источников питания и т.п. можно измерять достаточно точно.

А вот при измерении индуктивности малогабаритных катушек с большим количеством витков тонкого провода и замкнутым магнитопроводом без зазора, особенно из трансформаторной стали, будет большая погрешность. Но ведь в реальной схеме условия работы катушки могут и не соответствовать тому идеалу, который обеспечивается при измерении комплексного сопротивления. Так что еще неизвестно, показания какого прибора будут ближе к реальности.

Дополнение 2022г.

И в 2022 году прибор не потерял своей актуальности. Один из радиолюбителей перевел мою программу, которая написана на Си с ассемблерными вставками на самый популярный язык программирования для AVR контроллеров - родной язык среды Arduino. Вот ссылка на это проект:
https://community.alexgyver.ru/threads/izmeritel-lc.6314/

© 2018г.


ZIP Платы в Sprint Layout и схема в sPlan
ZIP Прошивка ATmega328P для Arduino Nano
ZIP Проект программы для ATmega328P на Си в среде CodeVisionAVR v2.05.0.
ZIP Программа XLoader для программирования HEX файла в Arduino