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

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

Внешний вид измерителя емкости на Arduino Uno

Устройство нашего измерителя емкости будет достаточно простое и недорогое по цене. Для создания измерителя емкости мы воспользуемся платой Arduino Uno, триггером Шмидта и микросхемой таймера 555 (555 IC timer).

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

Плата Arduino Uno
Источник питания
ЖК дисплей 16х2
Резистор 1 кОм (2 шт.)
Резистор 10 кОм
Микросхема таймера 555 (555 timer IC)
Микросхема триггера Шмидта 74HC14 (с триггерным затвором или без него)
Конденсатор 100 нФ
Конденсатор 1000 мкФ
Макетная плата и соединительные провода

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема измерителя емкости на Arduino Uno

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

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

Микросхема таймера 555 (генератор прямоугольных колебаний)

Микросхема таймера 555 (555 Timer IC) представляет собой генератор прямоугольных колебаний, или, по другому ее еще называют несинхронизованным мультивибратором. Поскольку плата Arduino Uno имеет дело с цифровыми сигналами, то она сама по себе не может измерить емкость. Для переведения емкости в цифровой вид как раз и служит используемый нами генератор прямоугольных колебаний.

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

Общая схема таймера 555 в автоколебательном режиме показана на следующем рисунке.

Схема таймера 555 в автоколебательном режиме

Выходная частота сигнала в данной схеме будет зависеть от резисторов RA, RB и емкости конденсатора C. Частоту в этом случае можно рассчитать по следующей формуле:

Frequency (F) = 1/ (Time period) = 1.44/ ((RA+RB*2)*C).

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

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

Frequency (F) = 1/ (Time period) = 1.44/ (21000*C).

Выражая из этой формулы емкость, получим

Capacitance C = 1.44/ (21000*F).

В приведенном ниже тексте программы мы для расчета емкости конденсатора в нанофарадах (нФ) будем умножать полученный результат (в фарадах) на “1000000000”. Также мы будем использовать ‘20800’ вместо 21000 потому что точные значения номиналов резисторов в нашем случае равны 0.98K and 9.88K.

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

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

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

Уровень сигнала на его выходе зависит от сигнала на его входе. Триггер Шмидта имеет определенную границу (порог) напряжения – если напряжение на входе триггера больше этой границы, то на выходе триггера сигнал высокого уровня, а если напряжение на входе триггера меньше этой границы, то на выходе триггера будет сигнал низкого уровня. Триггер Шмидта чаще всего используется совместно с логической схемой НЕТ (NOT) на его выходе.

Мы в нашем проекте будем использовать микросхему 74HC14, которая имеет в своем составе 6 триггеров Шмидта. Схема соединений этих триггеров с контактами микросхемы приведена на следующем рисунке.

Схема соединений триггеров Шмидта в микросхеме 74HC14

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

Таблица истинности триггера Шмидта с инверсным выходом

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

Исходный код программы

Плата Arduino Uno имеет специальную функцию pulseIn, которая позволяет определить длительность положительной или отрицательной части прямоугольной волны:

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

В представленном примере функция pulseIn измеряет время (в микросекундах), в течение которого на контакте PIN8 присутствует напряжение высокого (Htime) или низкого (Ltime) уровня. Когда мы сложим Htime и Ltime мы получим длительность цикла (периода), инвертировав которую мы получим значение частоты. А зная значение частоты, мы можем определить значение емкости по вышеприведенной формуле.

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

На следующем рисунке показаны результаты измерения емкости. Когда к нашему устройству мы подсоединили электролитический конденсатор емкостью 1 мкФ, результат составил 1091.84 нФ ~ 1 мкФ. А с полиэстеровым конденсатором 0,1 мкФ результат составил 107.70 nF ~ 0.1uF.

Измерение электролитического конденсатора емкостью 1 мкФ Измерение полиэстерового конденсатора емкостью 0,1 мкФ

Затем мы подсоединили к устройству керамический конденсатор 0,1 мКФ и результат измерения емкости составил 100.25 nF ~ 0.1uF. При подсоединении электролитического конденсатора 4,7 мкФ результат составил 4842.83 nF ~ 4.8uF.

Измерение керамического конденсатора емкостью 0,1 мкФ Измерение электролитического конденсатора емкостью 4,7 мкФ

Далее приведен полный текст программы.

#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); //pin 8 – на ввод данных
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("capacitance =");
}
void loop()
{
for (int i=0;i<5;i++) // измеряем длительность 5 раз
{
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);
}

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
39 просмотров

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

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