Схема получилась недорогой и легкой в повторении. Измеритель емкости собран на Arduino UNO, триггере Шмитта и генераторе на 555 микросхеме
Для изготовления понадобятся:
1. Универсальный таймер NE555 (аналог КР1006ВИ1)2. Инвертирующий триггер Шмитта 74HC14 (аналог 1564ТЛ2)
3. Резисторы 0.125Вт сопротивлением 1KΩ (2 шт.) и 10кОм (1шт.)
4. Конденсаторы 100nF и 1000мкФ
5. LCD индикатор 1602
6. Макетная плата и провода
Принципиальная схема:
Электрическая схема измерителя емкости с использованием Arduino показана на рисунке ниже. Схема проста, для отображения измеренной емкости конденсатора на 2,3,4,5,6,7 выводы Arduino подключен индикатор 1602 . Генератор прямоугольных имульсов на 555 микросхеме в астабильном режиме с измеряемым конденсатором в качестве частотозадающего подключен через инвертирующий триггер Шмитта на микросхеме 74HC14 к 8 выводу Arduino. Триггер Шмитта необходим для преобразования сигнала генератора в стабильный цифровой сигнал. Для фильтрации помех было добавлено пару конденсаторов по питанию.Данная схема позволяет достаточно точно измерять емкости в диапазоне от 10нФ до 10мкФ .
Генератор прямоугольных импульсов основе 555 таймера
Прежде всего, мы поговорим о генераторе прямоугольных импульсов основе 555 таймера или если точнее о режиме астабильного мультивибратора для 555 таймера. Мы знаем, что емкость конденсатора не может быть измерена непосредственно в цифровой цепи, другими словами, Arduino UNO работает с цифровыми сигналами и не может напрямую измерять емкость конденсатора. Таким образом, мы используем генератор для связи конденсатора с цифровым миром.Проще говоря, мультивибратор обеспечивает прямоугольный сигнал на выходе, частота которого напрямую связана с емкостью частотозадающего конденсатора. Поэтому сначала мы получаем прямоугольные импульсы, частота которых зависит от емкости измеряемого конденсатора и подаем этот сигнал на Arduino UNO для вычисления соответствующего значения.
Схема включения микросхемы 555 в астабильном режиме выглядит так:
Частота выходного сигнала зависит от резисторов R1, R2 и конденсатора C.
Частоту можно определить по уравнению:
где
f - частота ренератора, Гц
R1 и R2 - сопротивление резисторов, Ом
C - емкость конденсатора, Ф (фарады)
Зная значения сопротивлений и емкости в приведенном выше уравнении, мы можем рассчитать частоту выходных импульсов.
Так как согласно схемы R1=1кОм, а R2=10кОм формулу можно упростить:
Преобразуем формулу, Чтобы можно было вычислить емкость конденсатора, зная частоту:
В нашем скетче (см. ниже) для вывода значения емкости
в нФ (нанофарадах), необходимо полученные результаты (в фарадах) умножить «1000000000».
Также в скетче используется число «20800» вместо 21000, поскольку точные значения сопротивлений R1 и R2 составили 0.98кОм и 9.88кОм соответственно. Вы можете использовать свое число, в зависимости от точности используемых резисторов.
В общем, если мы знаем частоту импульсов генератора, мы можем рассчитать значение емкости конденсатора.
Триггер Шмитта - преобразователь уровня:
Для согласования выхода генератора и входа микроконтроллера Arduino Uno используется триггер Шмитта на микросхеме 74HC14.Как видно из схемы ниже - 74HC14 состоит из шести триггеров Шмитта с инвертирующим выходом.
Таблица истинности инвертированного выхода триггера Шмитта показана ниже, соответственно нужно в программе Arduino UNO инвертировать сигнал высокого и низкого состояния сигнала на входе.
В итоге с генератора мы получим сигнал, безопасный для входа Arduino.
Измерение емкости при помощи Arduino:
В Arduino есть специальная функция pulseIn, которая позволяет определить длительность высокого или низкого состояния прямоугольного импульса:Htime = pulseIn (8, HIGH);
Ltime = pulseIn (8, LOW);
Данная функция pulseIn измеряет время, в течение которого высокий или низкий уровень присутствует на 8 выводе Arduino, измеряет время высокого (Htime) и низкого уровня сигнала (Ltime) в микросекундах. Когда мы сложим Htime и Ltime, то получим продолжительность цикла и, инвертируя его, узнаем частоту частоту.
Зная частоту, рассчитаем емкость при помощи формулы, которую мы обсудили ранее.
Итог и тестирование:
Итак, для проверки, я подключил измеряемый конденсатор к схеме таймера 555, который генерирует прямоугольные импульсы на выходе, частота которых напрямую связана с емкостью конденсатора. Этот сигнал передается через триггер на вход Arduino. Arduino измеряет частоту сигнала. Зная частоту, программа Arduino вычисляет емкость используя формулы, обсуждаемые ранее.Посмотрим, какие результаты я получил:
После подключения электролитического конденсатора емкостью 1мкФ, результат получился 1091.84нФ ~ 1мкФ .
При измерении полимерного конденсатора емкостью 0.1мкФ результат составляет 107.70нФ ~ 0.1 мкФ.
Затем я подключил керамический конденсатор 0.1мкФ и результат составил 100.25нФ ~ 0,1мкФ.
При измерении электролитического конденсатора 4.7мкФ показания составили 4842.83 нФ ~ 4.8 мкФ
Таким образом, мы можем запросто измерить емкость любого конденсатора.
Код Arduino:
#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);
}
а есть проект протеуса этой схемы?
ОтветитьУдалитьФормула расчёта ёмкости конденсатора в описании отличается от формулы в скече. Формула в описании описании: c=(1.44/((r1+2*r2)*f))*Farad; в скетче: c=(1.44*farad)/((r1+2*r2)*f) какая формула верна?
ОтветитьУдалитьсовсем с математикой проблемы?
УдалитьА разве (a*b)/(c+d) не то же самое, что (a/(c+d))*b?
ОтветитьУдалить