Частотомер на ATmega8 для диапазона частот 1Гц — 1МГц

В данной статье я хотел бы вас познакомить с «самоделкой выходного дня» — частотомером на уже «легендарном» микроконтроллере ATmega8. Данный прибор не позиционируется как «лучший» по параметрам, да и схемотехника не претендует на оригинальность. Единственное его отличие от большинства конструкций, которое можно найти в сети — повышенная точность в диапазоне низких частот (1 — 1000Гц). Это достигается за счет различного подхода при измерении НЧ и СЧ с ВЧ. При измерении НЧ производится подсчет количества тактов микроконтроллера за некоторое количество импульсов на входе прибора. А при измерении СЧ и ВЧ, традиционно считается количество импульсов за определенный промежуток времени.

Характеристики частотомера:

  • Диапазон частот с погрешностью измерения +/- 1Гц: 1000Гц — 1МГц (при погрешности +/- 20-200Гц, [> частота, > погрешность] возможно измерение частот до 10МГц без предделителя).
  • Напряжение питания: 5В
  • Потребляемый ток: <50мА
  • Время измерения: 1с (1кГц — 1МГц) и до 10с (1Гц — 1кГц).
  • Точность: 4 знака после запятой (1 — 10Гц), 3 знака после запятой (10 — 100Гц), 2 знака после запятой (100 — 1000Гц), целое число (> 1кГц).
  • Время индикации: 3с

Принципиальная схема

Проект был собран и протестирован в Proteus, а после и «в живую». Для создания прошивки использовался компилятор avr-gcc (он же WinAVR под Windows).

Основа схемы, как уже говорилось, микроконтроллер ATmega8. Отображение данных производится на семисегментном светодиодным (не обязательно) индикаторе на 8 знакомест с общим анодом. В моем случае был использован малогабаритный индикатор, соответственно и печатная плата была разработана небольших размеров. На схеме, как вы видите, есть контакты для подключения кнопки (J7, J8), но это «на будущее», и в данным момент они не используются. Для тактирования микроконтроллера применен кварцевый резонатор на 16МГц. Светодиод D1 отображает действия прибора — при цикле измерения он включается. Измерение длится 1 секунду. После пауза в 3 секунды, а потом снова измерение и т.д.

Для индикаторов с общим катодом необходимо следующим образом изменить транзисторные ключи:

Ключ для ОК

Кроме этого, потребуется подправить программу.

В заголовочном файле «display7seg_lib.h» необходимо эту строку:

 #define OK 

Заменить на

 #define OA

А затем рекомпилировать проект.

К слову, библиотеку для семисегментного индикатора я делал не только для этого проекта, и возможно она вам пригодится, так как имеет несколько полезных функций (к примеру, вывод строки).

Для измерения частоты, как уже упоминалось выше, в устройстве используются два метода: счет тактов микроконтроллера за кол-во импульсов и счет поступающих на вход прибора импульсов за определенное время.

Порядок измерения следующий:

  1. Производится измерение частоты посредством счета импульсов на ходе
  2. Если количество импульсов более тысячи (частота более одного килогерца), то результат выводится на дисплей а устройство ожидает 1 секунду и повторяет измерение
  3. Если же количество импульсов менее тысячи, то происходит дополнительно сравнение. В том случае, когда частота менее 10Гц , производится счет тактов на протяжении 20 импульсов на входе (10 < 100Гц — 10 импульсов и 100 < 1000Гц — 2 импульса). За счет этого и удается получить маленькую погрешность при измерении.

В обоих вариантах измерения частоты подсчет импульсов или тактов производится таймером Т0, так как Т1 более предпочтительно применять для определения временных промежутков с высокой точностью, чем он собственно в программе и занимается. Таймер Т2 отвечает за индикацию. При его переполнении срабатывает прерывание, в котором на светодиодный индикатор выводится 1 символ. Так как частота прерываний довольно высока, человеческий глаз не успевает уследить за сменой состояний на индикаторе и картинка воспринимается как цельная, хоть переключение знакомест происходит по очереди.

Печатная плата устройства выполнена на двухстороннем фольгированном материале. Основная сложность при ее изготовлении — развести дорожки для ножек микроконтроллера. Впрочем, если вы используете технологию ЛУТ или фоторезист, проблем с этим пунктом у вас возникнуть не должно.

Лицевая сторона:

Печатная плата. Лицевая сторона.

Обратная сторона:

Печатная плата. Обратная сторона.

Расположение элементов:

Печатная плата. Расположение элементов.

Варианты замены деталей

Резисторы R1 — R8, R14 желательно использовать в диапазоне 220 — 680 Ом. Меньшего номинала брать очень нежелательно (у микроконтроллера не такая высокая нагрузочная способность на портах), а больше нет смысла так как яркость индикатора и светодиода будет крайне низкой. Конденсаторы C2 и C3 можно взять 18 — 33пФ. Конденсатор для предотвращения помех по питанию, под номером C1, желательно использовать емкостью 0,068 — 0,47мкФ. Резисторы R9 — R16 можно взять 1 — 4.7кОм .Транзисторы Q1 — Q8 заменяются на КТ315 или КТ3102, но подойдут и любые другие маломощные кремниевые структуры n-p-n. Микроконтроллер можно применить и в DIP корпусе, но придется заново разводить плату.

Небольшое послесловие

В данном приборе мной было решено вынести блок формирователя импульсов за пределы основной платы (к примеру, в виде выносного пробника).

Самый простой вариант — использовать компаратор или ОУ в режиме масштабного усиления (показано ниже) . Выгодная сторона — малый порог по напряжению. Недостаток же данной схемы — очень скромный предел по частоте. При использовании популярного ОУ LM358, максимальная частота не превышает 100кГц. Но для наладки, к примеру, звуковой аппаратуры и различных устройств, работающих на небольших частотах вполне сгодится.

Формирователь

Еще один вариант — использование транзистора и логического элемента, к примеру, КТ3102 + 74LS13 (шустрый аналог нашей К155ТЛ1). Этот вариант вполне жизнеспособен и на высоких частотах.

Входной узел. Вариант 2

Так же схемы формирователей можно найти в интернете, главный критерий — комплиментарность с высоким и низким логическим уровнем КМОП-логики.

В архиве, прикрепленном к статье, есть файлы прошивки и для схемы с ОА так и с ОК. В прочем, как и сами схемы и печатные платы (смотрите в проектах Proteus).

Удачи вам в сборке ваших устройств

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
U1 МК AVR 8-бит ATmega8A-AU 1 TQFP-32
Q1-Q8 Биполярный транзистор BC547 8 или КТ312/315/3102
R1-R8, R17 Резистор 220 Ом 9
R9-R16 Резистор 1 кОм 8
R18 Резистор 10 кОм 1
R19 Резистор 100 кОм 1
C1 Конденсатор 100 нФ 1
C2-C3 Конденсатор 22 пФ 2
X1 Кварцевый резонатор 16МГц 1
LED1 Светодиодный индикатор Индикатор на 8 разрядов с ОК или ОА 1
J1-J8 Разъем PLS-40 1
D1 Светодиод Желтый 1 3 мм