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

Добавлено 7 мая 2019 в 06:34
Измеритель емкости на Arduino
Измеритель емкости на Arduino

При ремонте какой-либо электроники, чтобы устранить неисправность, иногда нам нужно знать емкость конкретного конденсатора на плате. Тогда мы сталкиваемся с проблемой получения точного значения номинала конденсатора, особенно если это SMD элемент. Мы можем купить устройство для измерения емкости, но почему бы нам самим не разработать измеритель емкости на Arduino для возможности измерения емкости неизвестных конденсаторов?

Данная статья является третьей в серии статей про измерение с помощью Arduino параметров различных компонентов и физических величин, используемых в радиоэлектронике. Рассмотрим измерение емкости конденсатора с помощью Arduino.

Этот измеритель может быть легко реализован и быть экономически выгодным. Мы собираемся собрать измеритель емкости, используя Arduino Uno, триггер Шмитта и микросхему таймера 555.

Необходимые компоненты

Объяснение схемы

Принципиальная схема измерителя емкости на Arduino показана на рисунке ниже. Схема проста, для отображения измеренной емкости конденсатора к Arduino подключен LCD дисплей. К Arduino подключена схема генератора прямоугольных импульсов (555 в астабильном режиме), к которой мы должны подключить конденсатор, емкость которого необходимо измерить. Триггер Шмитта (микросхема 74LS14) используется для подачи на Arduino только прямоугольного сигнала. Для фильтрации шума мы добавили пару конденсаторов на линию питания.

Данная схема может точно измерять емкости в диапазоне от 10 нФ до 10 мкФ.

Измеритель емкости на Arduino. Схема электрическая принципиальная
Измеритель емкости на Arduino. Схема электрическая принципиальная

Генератор прямоугольных импульсов на микросхеме таймера 555

Прежде всего, мы поговорим о генераторе прямоугольного сигнала на микросхеме таймера 555, или, я бы сказал, об астабильном мультивибраторе на 555. Мы знаем, что емкость конденсатора не может быть измерена цифровой схемой напрямую, другими словами, Arduino Uno имеет дело с цифровыми сигналами и не может измерять емкость напрямую. Поэтому для связи конденсатора с «цифровым миром» мы используем схему генератора прямоугольного сигнала на 555.

Проще говоря, таймер обеспечивает прямоугольный выходной сигнал, частота которого напрямую зависит от подключенной к нему емкости. Итак, сначала мы получаем сигнал прямоугольной формы, частота которого является показателем емкости неизвестного конденсатора, и передаем этот сигнал на Arduino Uno для получения соответствующего значения.

Типовая схема на таймере 555 в астабильном режиме показана ниже.

Типовая схема на таймере 555 в автоколебальном режиме
Типовая схема на таймере 555 в автоколебальном режиме

Частота выходного сигнала зависит от резисторов RA и RB и конденсатора C. Формула будет следующей:

\[Частота (F) = {1 \over \text{длительность периода}} = {1,44 \over (RA + 2RB) \cdot C}\]

Здесь RA и RB – значения сопротивлений, а C – значение емкости. Подставляя значения сопротивлений и емкости в приведенную выше формулу, мы получаем частоту выходного прямоугольного сигнала.

Мы собираемся установить резисторы 1 кОм в качестве RA и 10 кОм в качестве RB. Поэтому формула становится следующей

\[Частота (F) = {1,44 \over 21000 \cdot C}\]

Выведем емкость.

\[Емкость (C) = {1,44 \over 21000 \cdot F}\]

В коде нашей программы (смотрите ниже) для точного получения значения емкости мы рассчитали результат в нФ, умножив полученные результаты (в фарадах) на "1000000000". Также мы использовали "20800" вместо 21000, потому что точные значения сопротивлений RA и RB равны 0,98 кОм и 9,88 кОм.

Следовательно, если мы знаем частоту прямоугольного сигнала, то можем получить значение емкости.

Триггер Шмитта

Сигналы, генерируемые схемой на таймере, не совсем безопасны для непосредственной передачи на Arduino Uno. Учитывая чувствительность Arduino Uno, мы используем элемент триггера Шмитта. Триггер Шмитта представляет собой цифровой логический элемент, предназначенный для арифметических и логических операций.

Этот элемент обеспечивает выходной сигнал (OUTPUT) на основе уровня напряжения входного сигнала (INPUT). Триггер Шмитта имеет пороговый уровень напряжения (THERSHOLD): когда уровень входного сигнала выше порогового уровня элемента, уровень сигнала на выходе будет равен высокому логическому уровню. Если уровень входного сигнала ниже порога, на выходе будет низкий логический уровень. Обычно у нас нет отдельного триггера Шмитта, за ним всегда следует элемент НЕ.

Мы собираемся использовать микросхему 74LS14, которая содержит 6 триггеров Шмитта. Эти шесть элементов внутри подключены, как показано на рисунке ниже.

Микросхема 74LS14, содержащая шесть триггеров Шмитта. Распиновка
Микросхема 74LS14, содержащая шесть триггеров Шмитта. Распиновка

Таблица истинности инвертированного триггера Шмитта показана ниже, в соответствии с ней мы должны запрограммировать Arduino Uno для инвертирования положительных и отрицательных периодов времени на ее выводах.

\(Y = \bar{A}\)

Таблица истинности
ВходВыход
AY
LH
HL
  • H – высокий логический уровень;
  • L – низкий логический уровень.

Теперь, когда мы подадим сигнал любого типа на элемент триггера Шмитта, у нас на выходе будет прямоугольный сигнал с инвертированными временными периодами, и этот сигнал мы подадим на Arduino Uno.

Как Arduino измеряет емкость

У Arduino есть специальная функция pulseIn, которая позволяет нам определять длительность положительного или отрицательного состояния конкретного прямоугольного сигнала:

Htime=pulseIn(8,HIGH);
Ltime = pulseIn(8, LOW);

Функция pulseIn измеряет время, в течение которого высокий или низкий логический уровень присутствует на выводе 8 Arduino. Функция pulseIn измеряет время высокого логического уровня (Htime) и время низкого логического уровня (Ltime) в микросекундах. Когда мы сложим Htime и Ltime вместе, то получим длительность периода, а инвертировав её, мы получим частоту.

Получив частоту, мы можем получить емкость, используя формулу, которую обсуждали ранее.

Код

#include <LiquidCrystal.h>

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

int32_t Htime;
int32_t Ltime;
float Ttime;
float frequency;
float capacitance;

void setup()
{
    pinMode(8,INPUT);            //вывод 8 - сигнальный вход
    lcd.begin(16, 2);
    lcd.setCursor(0,0);
    lcd.print("capacitance =");
}
void loop()
{
    for (int i=0;i<5;i++)        // измеряем время пять раз
    {
        Ltime=(pulseIn(8,HIGH)+Ltime)/2;        // получаем среднее значение для каждого периода
        Htime=(pulseIn(8,LOW)+Htime)/2;
    }

    Ttime = Htime+Ltime;
    frequency=1000000/Ttime;
    
    capacitance = (1.44*1000000000)/(20800*frequency);   // расчет емкости в нФ
    lcd.setCursor(0,1);
    lcd.print(capacitance);
    lcd.print(" nF   ");
    delay(500);
}

Заключение и тестирование

Итак, в итоге мы подключаем неизвестный конденсатор к схеме на таймере 555, которая генерирует прямоугольный выходной сигнал, частота которого напрямую связана с емкостью конденсатора. Этот сигнал подается на Arduino Uno через триггер Шмитта. Arduino Uno измеряет частоту. Мы программируем Arduino Uno для расчета емкости по известной частоте, используя формулу, которую обсуждали ранее.

Давайте посмотрим некоторые результаты, которые я получил.

Когда я подключил электролитический конденсатор на 1 мкФ, результат составил 1091,84 нФ ~ 1 мкФ. Для полиэстерового конденсатора 0,1 мкФ результат составил 107,70 нФ ~ 0,1 мкФ.

Тестирование измерителя емкости на Arduino – электролитический конденсатор 1 мкФ
Тестирование измерителя емкости на Arduino – электролитический конденсатор 1 мкФ
Тестирование измерителя емкости на Arduino – полиэстеровый конденсатор 0,1 мкФ
Тестирование измерителя емкости на Arduino – полиэстеровый конденсатор 0,1 мкФ

Затем я подключил керамический конденсатор 0,1 мкФ, и результат составил 100,25 нФ ~ 0,1 мкФ. Для электролитического конденсатора 4,7 мкФ результат измерений составил 4842,83 нФ ~ 4,8 мкФ.

Тестирование измерителя емкости на Arduino – керамический конденсатор 0,1 мкФ
Тестирование измерителя емкости на Arduino – керамический конденсатор 0,1 мкФ
Тестирование измерителя емкости на Arduino – электролитический конденсатор 4,7 мкФ
Тестирование измерителя емкости на Arduino – электролитический конденсатор 4,7 мкФ

Видео

Теги

ArduinoArduino UnoЕмкостьИзмерениеИзмеритель емкостиТриггер Шмитта

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

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.