Часто при ремонте старых телевизоров, радиоприемников и других электронных устройств у радиолюбителя возникает необходимость в измерении емкости ряда конденсаторов, входящих в состав данных устройств. И достаточно часто это становится ощутимой проблемой, особенно когда речь идет об элементах [компонентах] с поверхностным монтажом. Простейшие мультиметры не всегда умеют измерять емкость, а специализированные устройства для выполнения этой задачи часто отличаются достаточно высокой ценой. Для решения этой проблемы мы в данной статье рассмотрим создание простейшего измерителя емкости на основе платы Arduino Uno.
Устройство нашего измерителя емкости будет достаточно простое и недорогое по цене. Для создания измерителя емкости мы воспользуемся платой Arduino Uno, триггером Шмитта и микросхемой таймера 555 (555 IC timer).
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- Микросхема таймера 555 (555 timer IC) (купить на AliExpress).
- Микросхема триггера Шмитта 74HC14 (с триггерным затвором или без него) (купить на AliExpress).
- Резистор 1 кОм (2 шт.) (купить на AliExpress).
- Резистор 10 кОм (купить на AliExpress).
- Конденсатор 100 нФ (купить на AliExpress).
- Конденсатор 1000 мкФ (купить на AliExpress).
- Макетная плата и соединительные провода.
- Источник питания.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Работа схемы
Схема устройства представлена на следующем рисунке.
ЖК дисплей 16х2 используется для отображения емкости измеряемого конденсатора. Схема генератора прямоугольных колебаний (волн) (555 в автоколебательном режиме) подсоединена к Arduino, также к ней подключается конденсатор, емкость которого необходимо измерить. Триггер Шмитта (микросхема 74LS14 или 74HC14) включен в состав схемы чтобы удостовериться в том, что только прямоугольная волна будет попадать на контакт Arduino. Для фильтрации шумов в схему добавлены два конденсатора, включенных по питанию.
Схема может измерять емкость конденсаторов в диапазоне от 10 нФ до 10 мкФ.
Микросхема таймера 555 (генератор прямоугольных колебаний)
Микросхема таймера 555 (555 Timer IC) представляет собой генератор прямоугольных колебаний, или, по другому ее еще называют несинхронизованным мультивибратором. Поскольку плата Arduino Uno имеет дело с цифровыми сигналами, то она сама по себе не может измерить емкость. Для переведения емкости в цифровой вид как раз и служит используемый нами генератор прямоугольных колебаний.
Говоря простыми словами, таймер обеспечивает на своем выходе прямоугольный сигнал, частота которого напрямую зависит от емкости конденсатора, подключенного к нему.
Общая схема таймера 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 триггеров Шмитта. Схема соединений этих триггеров с контактами микросхемы приведена на следующем рисунке.
Таблица истинности триггера Шмитта с инверсным выходом показана на рисунке ниже, поэтому в программе для 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.
Затем мы подсоединили к устройству керамический конденсатор 0,1 мКФ и результат измерения емкости составил 100.25 nF ~ 0.1uF. При подсоединении электролитического конденсатора 4,7 мкФ результат составил 4842.83 nF ~ 4.8uF.
Далее приведен полный текст программы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#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); } |