РадиоКот :: Mini USB L/C meter
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Примочки к ПК >

Теги статьи: Добавить тег

Mini USB L/C meter

Автор: Bonio
Опубликовано 06.11.2013
Создано при помощи КотоРед.
Участник Конкурса "Поздравь Кота по-человечески 2013!"

   Хочу представить схему измерителя емкости и индуктивности небольших величин, прибор, часто просто необходимый в радиолюбительской практике. Измеритель выполнен в виде usb-приставки к компьютеру, индикация показаний происходит в специальной программе на экране монитора.
 
Характеристики:
   - Диапазон измерения C: 0.1pF - ~1µF. Переключение диапазонов автоматическое: 0.1-999.9pF, 1nF-99.99nF, 0.1µF-0.99µF.
   - Диапазон измерения L: 0.01µH - ~100mH. Переключение диапазонов автоматическое: 0.01-999.99µH, 1mH-99.99mH.
 
Преимущества:
   - Устройство не требует драйвера.
   - Программа не требует установки.
   - Не требует настройки (За исключением процедуры калибровки, которая, к слову, не требует доступа к схеме).
   - Не нужно подбирать точные номиналы калибровочных емкости и индуктивности (допустим разброс до ±25%! от указанных).
 
 
 
- Схема.
   Органов управления на схеме нет, все управление (переключение режимов измерения, L или С, а так же калибровка прибора) происходит из управляющей программы. Пользователю доступны лишь две клеммы, для установки в них измеряемой детали, usb разъем и светодиод, который горит при запущенной управляющей программе и мигает в противном случае.
   Сердцем прибора является LC генератор на компараторе LM311. Для успешного вычисления величины измеряемой емкости/индуктивности нам должны быть точно известны значения установленных refC и refL, а так же частота генератора. За счет использования мощности компьютера в процессе калибровки прибора будут перебираться все возможные значения refC±25% и refL±25%. Затем из массива полученных данных в несколько этапов будут выбираться наиболее подходящие, об алгоритме ниже. За счет этого алгоритма не нужно с точностью подбирать значения емкости и индуктивности для применения в приборе, можно ставить просто, что есть и не заботится о точности номиналов. Тем более значения refC и refL могут в широком диапазоне отличаться от указанных на схеме.
   Микроконтроллер с помощью библиотеки V-USB, организовывает связь с компьютером а так же производит подсчет частоты с генератора. Впрочем, расчетом частоты тоже занимается управляющая программа, микроконтроллер лишь отправляет необработанные данные с таймеров.
   Микроконтроллер - Atmega48, но возможно так же применить Atmega8 и Atmega88, прошивки для трех разных микроконтроллеров прилагаю.
   Реле K1 - миниатюрное с двумя группами на переключение. Я применил РЭС80, загнув ножки пинцетом как у РЭС80-1 для поверхностного монтажа, с током срабатывания 40мА. Если нет возможности найти реле способное сработать от 3.3v с небольшим током, можно применить любое реле на 5v, заменив соответственно R11, K1 каскадом, нарисованным пунктиром.
   Кварц на 12MHz я тоже применил миниатюрный, размером даже чуть меньше часового.
 
 
 
 
 
- Управляющая программа.
   Управляющая программа написана в среде Embarcadero RAD Studio XE на языке С++. Главное и основное окно, в котором происходит отображение измеряемого параметра выглядит так:
 
   Из элементов управления на главной форме видны всего три кнопки.
   - Выбор режима измерения, C - измерение емкости и L - измерение индуктивности. Выбрать режим можно также нажатием клавиш C или L на клавиатуре.
   - Кнопка установки нуля, но пользоваться ей, надо сказать, придется не часто. Каждый раз при запуске программы и переключении в режим С, ноль устанавливается автоматически. Для установки нуля в режиме измерения L надо установить перемычку в клеммы прибора, если в этот момент на экране покажется ноль, значит установка прошла автоматически, если же на экране показания больше нуля, надо нажать кнопку установки нуля и показания обнулятся.
 
   При подключении к компьютеру, если прибор не откалиброван, на экран будет выведено соответствующее предупреждение.
Для начала калибровки пройдем в меню Settings->Calibration.
 
   Процесс калибровки прибора очень прост. Для этого нам понадобится конденсатор с известной емкостью и перемычка - кусочек провода минимальной длины. Емкость может быть любой, но от точности примененного для калибровки конденсатора будет зависеть точность прибора. Я применил конденсатор K71-1, емкостью 0,0295µF, точностью ±0,5%.
   Для начала калибровки нужно ввести значения установленных refC и refL (Только при первой калибровки, впоследствии эти значения сохранятся в памяти устройства, впрочем их всегда можно изменить). Напомню, что значения могут на порядок отличатся от указанных на схеме, а так же совершенно не важна их точность. Далее следует ввести значение калибровочного конденсатора и нажать кнопку "Start Calibration". После появления сообщения "Insert the calibration capatitor" установите калибровочный конденсатор (у меня 0,0295µF) в клеммы прибора и ждите несколько секунд до появления сообщения "Insert the jumper". Извлеките конденсатор из клемм и установите в клеммы перемычку, подождите несколько секунд до появления сообщения "Calibration completed" на зеленом фоне, извлеките перемычку. При возникновении ошибки в процессе калибровки (например, слишком рано извлекли калибровочный конденсатор) будет выведено сообщение об ошибке на красном фоне, в таком случае просто повторите процедуру калибровки сначала. Всю последовательность калибровки в виде анимации можно видеть на скриншоте слева.
   По завершению калибровки все калибровочные данные, а так же значения установленных refC и refL будут записаны в энергонезависимую память микроконтроллера. Таким образом в памяти конкретного прибора хранятся установки, конкретно для него.
 
 
 
- Алгоритм работы программы
   Подсчет частоты выполнен с использованием двух таймеров микроконтроллера. 8-битный таймер работает в режиме подсчета импульсов на входе T0 и генерирует прерывание через каждые 256 импульсов, в обработчике которого инкрементируется значение переменной-счетчика (COUNT). 16-битный таймер работает в режиме очистки по совпадению и генерирует прерывание раз в 0.36 секунд, в обработчике которого сохраняется значение переменной-счетчика (COUNT) а так же остаточное значение счетчика 8-битного таймера (TCNT0) для последующей передачи на компьютер. Дальнейшим расчетом частоты занимается уже управляющая программа. Имея два параметра (COUNT и TCNT0) частота генератора (f) рассчитывается по формуле:
   Зная частоту генератора, а так же значения установленных refC и refL можно определить номинал подключенной для измерения емкости/индуктивности.
 
   Калибровка, со стороны программы, происходит в три этапа. Я приведу наиболее интересную часть кода программы - функции, ответственные за калибровку.
1) Первый этап. Сбор в массив всех значений из диапазона refC±25% и refL±25%, при которых вычисленные L и C очень близки к нулю, при этом в клеммы прибора не должно быть ничего установлено.
 
//Допустимый разброс нуля при калибровке pF, nH
bool allowC0range(double a) { if (a>=0 && a<= 0.1) return true; else return false; }
bool allowL0range(double a) { if (a>=0 && a<= 5) return true; else return false; }
 
bool all_zero_values(int f, int c, int l) { //f- частота, c и l - установленные refC и refL
    int refC_min = c-c/(100/25);
    int refC_max = c+c/(100/25);
    int refL_min = l-l/(100/25);
    int refL_max = l+l/(100/25);
    for(int a=refC_min; a<=refC_max; a++) { //Перебор С с шагом 1pF
        for(int b=refL_min; b<=refL_max; b+=10 ) { //Перебор L с шагом 0.01µH
            if( allowC0range(GetCapacitance(f, a, b)) && allowL0range(GetInductance(f, a, b)) ) {
                //Если при данном значении refC и refL вычисленные значения С и L близки к нулю
                //кладем данные значения refC и refL в массив
                values_temp.push_back(a);
                values_temp.push_back(b);
            }
        }
    }
...
}
 
Обычно после этой функции в массиве накапливается от сотни до нескольких сотен пар значений.
 
2) Второй этап. Замер установленной в клеммы калибровочной емкости по очереди со всеми значениями в качестве refC и refL из предыдущего массива и сравнение с известным значением калибровочного конденсатора. В конечном итоге из вышеуказанного массива выбирается одна пара значений refC и refL, при которых разница между измеренным и известным значением калибровочного конденсатора будет минимальной.
 
bool calibrateC(int f, int C) { //f - частота, C - емкость калибровочного конденсатора
    ...
    //c_diff - разница между известным и вычисленным значение калибровочного конденсатора
    double c_diff = fabs(C - GetCapacitance(f, values_temp.at(0), values_temp.at(1)));
    //Кладем в calC_new и calL_new первое значение из массива
    int calC_new = values_temp.at(0);
    int calL_new = values_temp.at(1);
    int temp_c, temp_l;
    //Проходим циклом по всему массиву и выбираем пару значений refC и refL, при которых
    //разница между измеренным и известным значением будет минимальной
    for (int i=2; i < values_temp.size(); i+=2) {
        temp_c = values_temp.at(i);
        temp_l = values_temp.at(i+1);
        //Если разница между значениями меньше, обновляем значения calC_new и calL_new
        if(fabs(C - GetCapacitance(f, temp_c, temp_l)) < c_diff) {
            c_diff = fabs(C - GetCapacitance(f, temp_c, temp_l));
            calC_new = temp_c;
            calL_new = temp_l;
        }
    }
    ...
}
 
На данном этапе в переменных calC_new и calL_new находятся действительные значения refC и refL, именно они будут потом использоваться для расчетов.
 
3) Третий этап. После установки перемычки производится замер индуктивности, это индуктивность цепи до клемм прибора. Впоследствии это корректировочное значение будет вычитаться из рассчитанных данных в режиме L, чтобы не влиять на показания.
 
   Итак, у нас есть три калибровочных значения, которые сразу после завершения калибровки записываются во внутреннюю память прибора. При подключении же прибора к компьютеру эти значения считываются из внутренний памяти и используются для расчетов.

 
 
- Сборка.
   Прибор собран на двухсторонней печатной плате, сделанной методом ЛУТ. Все компоненты для поверхностного монтажа. Плата делалась под готовый корпус, который, впрочем, был немного доработан. На верхнюю часть прибора нарисована и напечатана наклейка. Ниже привожу некоторое количество фотографий, кликните для просмотра увеличенной версии.
 
Готовая, не запаянная плата:
 
 
 
Запаянная плата.
 
 
 
Корпус до доработки:
 
 
Корпус после доработки. Просверлено окошко для светодиода, прорезано отверстие для клемм, заклеено окошко сбоку, и наклеены стоечки для платы. Плата прижимается сверху крышкой.
 
 
Наклейки. Самодельные, напечатаны на тонкой фотобумаге, снизу двухсторонний скотч, сверху простой, прозрачный скотч.
 
 
 
Готовое устройство:
 
 
 
 
- Демонстрация работы.
   Ниже привожу фотографии прибора в работе. Над миниатюрой фотографии подписан известный номинал детали, на заднем плане, на мониторе, видно запущенную программу и определенное значение. Кликните на фотографии для просмотра увеличенной версии.
 
0,1µF   0,47µF   0,22µF   0,047µF   22pF  
3,3nF   82µH   200µH   330µH   ?  
2,2µH   10µH   Ферритовая бусина   ?   ?  
 
 
 
   В файлах ниже вы найдете управляющую программу, прошивки для разных микроконтроллеров а так же схему устройства в формате PDF.
В файле "Source" лежат все исходники проекта, это прошивка (WinAVR), управляющая программа (RAD Studio XE), а так же плата (Sprint Layout 6.0) и наклейка (CorelDraw).

Файлы:
Программа
Source
Прошивка
Схема


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

83 0 0
36 2 3