Частотомер на 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 секунду и повторяет измерение
  • Если же количество импульсов менее тысячи, то происходит дополнительно сравнение. В том случае, когда частота менее 10Гц , производится счет тактов на протяжении 20 импульсов на входе (10 < 100Гц — 10 импульсов и 100 < 1000Гц — 2 импульса). За счет этого и удается получить маленькую погрешность при измерении.
  • В обоих вариантах измерения частоты подсчет импульсов или тактов производится таймером Т0, потому что Т1 более предпочтительно применять для определения временных промежутков с высокой точностью, чем он собственно в программе и занимается. Таймер Т2 отвечает за индикацию. При его переполнении срабатывает прерывание, в котором на светодиодный индикатор выводится 1 символ. Так как частота прерываний довольно высока, человеческий глаз не успевает уследить за сменой состояний на индикаторе и картинка воспринимается как цельная, хоть переключение знакомест происходит по очереди.

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

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

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

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

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

    Резисторы 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). Этот вариант вполне жизнеспособен и на высоких частотах.

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

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

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


    Список радиоэлементовОбозначение
    Тип
    Номинал
    Количество
    ПримечаниеМагазинМой блокнот

    U1
    МК AVR 8-битATmega8A-AU1
    TQFP-32Q1-Q8
    Биполярный транзисторBC5478
    или КТ312/315/3102R1-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-401
    D1
    СветодиодЖелтый1
    3 ммДобавить все

    Скачать список элементов (PDF)

    Прикрепленные файлы:

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

    Ваш адрес email не будет опубликован.