Самодельный частотомер на ATTINY2313. Самодельный частотомер на ATTINY2313 Измерение коротких импульсов на avr

Конструктивно прибор состоит из дисплея, образованного семью 7-сегментными светодиодными индикаторами, микроконтроллера и нескольких транзисторов и резисторов. Микроконтроллер выполняет все необходимые функции, поэтому применение каких-либо дополнительных микросхем не требуется.

Принципиальная схема прибора достаточно проста и изображена на Рисунке 2. Проект в формате Eagle (принципиальная схема и печатная плата) доступен для скачивания в секции загрузок.

Выполняемые микроконтроллером задачи просты и очевидны: подсчет количества импульсов на входе за 1 секунду и отображение результата на 7-разрядном индикаторе. Самый важный момент здесь - это точность задающего генератора (временная база), которая обеспечивается встроенным 16-разрядным таймером Timer1 в режиме очистки по совпадению (CTC mode). Второй, 8-разрядный, таймер-счетчик работает в режиме подсчета количества импульсов на своем входе T0. Каждые 256 импульсов вызывают прерывание, обработчик которого инкрементирует значение коэффициента. Когда с помощью 16-разрядного таймера достигается длительность 1 с, происходит прерывание, но в этом случае в обработчике прерывания коэффициент умножается на 256 (сдвиг влево на 8 бит). Остальное количество импульсов, зарегестрированное счетчиком, добавляется к результату умножения. Полученное значение затем разбивается на отдельные цифры, которые отображаются на отдельном индикаторе в соответствующем разряде. После этого, непосредственно перед выходом из обработчика прерывания, оба счетчика одновременно сбрасываются и цикл измерения повторяется. В «свободное время» микроконтроллер занимается выводом информации на индикатор методом мультиплексирования. В исходном коде программы микроконтроллера автор дал дополнительные комментарии, которые помогут детально разобраться в алгоритме работы микроконтроллера.

Разрешение и точность измерений

Точность измерений зависит от источника тактовой частоты для микроконтроллера. Сам по себе программный код может вносить погрешность (добавление одного импульса) на высоких частотах, но это практически не влияет на результат измерений. Кварцевый резонатор, который используется в приборе, должен быть хорошего качества и иметь минимальную погрешность. Наилучшим выбором будет резонатор, частота которого делится на 1024, например 16 МГц или 22.1184 МГц. Чтобы получить диапазон измерения до 10 МГц необходимо использовать кварцевый резонатор на частоту 21 МГц и выше (для 16 МГц, как на схеме, диапазон измерений становится немного ниже 8 МГц). Кварцевый резонатор на частоту 22.1184 МГц идеально подходит для нашего прибора, однако приобретение именно такого с минимальной погрешностью для многих радиолюбителей будет сложной задачей. В таком случае можно использовать кварцевый резонатор на другую частоту (например, 25 МГц), но необходимо выполнить процедуру калибровки задающего генератора с помощью осциллографа с поддержкой аппаратных измерений и подстроечного конденсатора в цепи кварцевого резонатора (Рисунок 3, 4).

В секции загрузок доступны для скачивания несколько вариантов прошивок для различных кварцевых резонаторов, но пользователи могут скомпилировать прошивку под имеющийся кварцевый резонатор самостоятельно (см. комментарии в исходном коде).

Входной сигнал

В общем случае на вход прибора может подаваться сигнал любой формы с амплитудой 0 … 5 В, а не только прямоугольные импульсы. Можно подавать синусоидальный или треугольный сигнал; импульс определяется по спадающему фронту на уровне 0.8 В. Обратите внимание: вход частотомера не защищен от высокого напряжения и не подтянут к питанию, это вход с высоким сопротивлением, не нагружающим исследуемую цепь. Диапазон измерений может быть расширен до 100 МГц с разрешением 10 Гц, если применить на входе соответствующий высокоскоростной делитель частоты.

Дисплей

В приборе в качестве дисплея используются семь светодиодных 7-сегментных индикаторов с общим анодом. Если яркость свечения индикаторов будет недостаточной, можно изменить номинал резисторов, ограничивающих ток через сегменты. Однако не забывайте, что величина импульсного тока для каждого вывода микроконтроллера не должна превышать 40 мА (индикаторы тоже имеют свой рабочий ток, о его величине не стоит забывать). На схеме автор указал номинал этих резисторов 100 Ом. Незначимые нули при отображении результата измерения гасятся, что делает считывание показаний более комфортным.

Печатная плата

Двухсторонняя печатная плата имеет размеры 109 × 23 мм. В бесплатной версии среды проектирования печатных плат Eagle в библиотеке компонентов отсутствуют семисегментные светодиодные индикаторы, поэтому они были нарисованы автором вручную. Как видно на фотографиях (Рисунки 5, 6, 7) авторского варианта печатной платы, дополнительно необходимо выполнить несколько соединений монтажным проводом. Одно соединение на лицевой стороне платы - питание на вывод Vcc микроконтроллера (через отверстие в плате). Еще два соединения на нижней стороне платы, которые используются для подключения выводов сегмента десятичной точки индикаторов в 4 и 7 разряде через резисторы 330 Ом на «землю». Для внутрисхемного программирования микроконтроллера автор использовал 6-выводный разъем (на схеме это разъем изображен в виде составного JP3 и JP4), расположенный в верхней части печатной платы. Этот разъем не обязательно припаивать к плате, микроконтроллер можно запрограммировать любым доступным способом.

Загрузки

Принципиальная схема и рисунок печтаной платы, исходный код и прошивки микроконтроллера -

В статье мы рассмотрим, как построить маленький, дешевый и простой частотомер, способный измерять частоту до 40 МГц с ошибкой ниже 1%. Подобной точности вполне достаточно для отладки большинства собственных аналоговых и цифровых устройств. Прибор позволит Вам проанализировать многие аспекты работы схем.

Принципиальная схема частотомера изображена на рисунке 1.

Рис.1. Принципиальная схема прибора

Частотомер собран на макетной плате, основой является микроконтроллер ATmega16 компании Atmel, источником тактовой частоты является внутренний RC осциллятор 8 МГц (это необходимо помнить при программировании микроконтроллера). Дополнительно, во входной части используется 4-битный счетчик 74HC191 в качестве делителя измеряемой частоты на 16 до подачи ее на вход микроконтроллера. Как видно, используется только выход Q3 счетчика, частота на этом выходе будет равна входной частоте деленной на 16.

Вход прибора (щуп) – точка W1, которая напрямую подключена к порту микроконтроллера PB0 и, через делитель, к порту PB1.

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

Схема расположения и назначение выводов примененного индикатора изображена на рисунке 2.


Рис.2. Расположение и назначение выводов примененного 4 разрядного светодиодного индикатора .

Выводы E1…E4 используются для включения соответствующих разрядов (E1 – для включения правого младшего разряда).

Каждая линия ввода/вывода микроконтроллера ATmega16 может обеспечить выходной ток до 40 мА, поэтому нам нет необходимости использовать транзисторы и сигналы управления дисплеем (E1…E4) подключены непосредственно к порту микроконтроллера.

Коннектор для внутрисхемного программирования микроконтроллера J1. После сборки и программирования микроконтроллера Вам потребуется калибровка прибора, настройка некоторых переменных (например, для увеличения яркости дисплея, уменьшения мерцания дисплея). Другими словами Вам потребуется обновление ПО микроконтроллера, и поэтому указанный коннектор необходимо установить на плату.

Алгоритм измерения частоты

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

Максимальная частота, которая может быть обработана счетчиком микроконтроллера ATmega16, не может превышать тактовую частоту, деленную на 2.5. Обозначим максимальную частоту – F max . Тактовая частота для нашего микроконтроллера – 8 МГц, следовательно напрямую мы можем измерять сигналы с частотой до 3.2 МГц. Для измерения частоты выше этого уровня мы используем 4-битный счетчик в качестве делителя входной частоты. Теперь мы можем измерять частоты в 16 раз превышающие F max , но здесь накладывается ограничение со стороны счетчика 74191 и фактическая максимальная измеряемая частота не превышает 40 МГц.

Алгоритм, который был разработан, проводит измерение оригинальной (входной) частоты (обозначимF o ) и частоты получаемой с делителя (обозначим F d ). Пока соблюдается условие, что частота меньшеF max выполняется условие:

F o = 16 × F d ;

Но по мере приближении F o к F max , все больше импульсов должны быть обработаны и выражение выше примет вид:

F o < 16 × F d ;

Следовательно предел измерения микроконтроллера может быть автоматически обнаружен.

Частотомер начинает делать измерение оригинальной частоты (обработка и отображение значений на дисплее), и как только обнаруживает приближение к максимальной частоте F max (с использованием указанного выше метода), выбирает для измерения частоту после делителя.

Алгоритм суммарно изображен на диаграмме (рис. 3)

Рис.3 Алгоритм работы частотомера на микроконтроллере

Программное обеспечение микроконтроллера

Исходный код программы микроконтроллера снабжен подробными комментариями, но некоторые моменты требуют отдельного разъяснения:

  • код разработан так, что измеренное значение отображается на индикаторе в «кГц». Например, если Вы видите на дисплее значение «325.8» – это означает 325.8 кГц, значение «3983» – это 3983 кГц (или 3.983 МГц).
  • Таймер/счетчик 0 микроконтроллера используется для подсчета входных импульсов напрямую;
  • Таймер/счетчик 1 микроконтроллера используется для подсчета входных импульсов после делителя на 16;
  • Таймер/счетчик 2 сконфигурирован как таймер с предварительным делителем на 1024 (частота CPU делится на 1024). Используется для вызова алгоритма вычисления и выбора частоты каждый период T таймера. В нашем проекте Т = 1024 × 256/F cpu .
  • Константа «factor», определенная в начале программы значением «31.78581», должна быть откалибрована измерением эталонной частоты. Вычисляется по выражению:

factor = F cpu /(1024 × 256)=8.E6/(1024×256)=30.51757

Функция Anti-Flickering (устранение мерцания индикатора) довольна сложна, но очень эффективна, особенно при измерении непостоянных частот. Данная функция полностью избавляет индикатор от быстрого переключения между различными значениями, продолжая отображать точное значение, и быстро изменяет показания, если измеренная частота действительно изменилась.

Примечание

Микроконтроллер ATmega16 поставляется с заводскими установками, при которых настроен на работу от внутреннего RC осциллятора 1 МГц. Необходимо с помощью последовательного программатора установить Fuse-биты CKSEL3..0 в значение «0100», что соответствует включению внутреннего RC осциллятора 8 МГц.

ПРИЛОЖЕНИЯ:

- Исходный код программы микроконтроллера

Перевод: Vadim

Частотомер - полезный прибор в лаборатории радиолюбителя (особенно, при отсутствии осциллографа). Кроме частотомера лично мне часто недоставало тестера кварцевых резонаторов - слишком много стало приходить брака из Китая. Не раз случалось такое, что собираешь устройство, программируешь микроконтроллер, записываешь фьюзы, чтобы он тактировался от внешнего кварца и всё - после записи фьюзов программатор перестаёт видеть МК. Причина - "битый" кварц, реже - "глючный" микроконтроллер (или заботливо перемаркированый китайцами с добавлением, например, буквы “А" на конце). И таких неисправных кварцев мне попадалось до 5% из партии. Кстати, достаточно известный китайский набор частотомера с тестером кварцев на PIC-микроконтроллере и светодиодном дисплее с Алиэкспресса мне категорически не понравился, т.к. часто вместо частоты показывал то ли погоду в Зимбабве, то ли частоты "неинтересных" гармоник (ну или это мне не повезло).

Частотомер с хорошими характеристиками, позволяющий измерять частоты от 1Гц до 10 МГц (9,999,999) с разрешением в 1 Гц во всем диапазоне. Идеален для функиональных генераторов, цифровых шкал или как отдельное устройство. Дешев и легок в изготовлении, собран из доступных деталей, имет небольшой размер и может быть смонтирован на панели многих устройств.

Схема состоит из семи 7-сегментных индикаторов, AVR ATtiny2313 и нескольких транзисторов и резисторов. AVR делает всю работу, и дополнительные микросхемы не нужны. Микроконтроллер считает количество импульсов, пришедших на его вход за 1 секунду и отображает это число. Сама важная вещь - это очень точный таймер, и он реализован на 16-битном Timer1 в режиме CTC. Второе, 8-битный счетчик работает как Counter0 и считает импульсы на входе T0. Каждые 256 импульсов он вызывает прерывание, в котором программа увеличивает множитель. Когда мы получаем 1-секундное прерывание, содержимое множителя умножается на 256 (сдвиг влево на 8 бит). Остаток импульсов, которые посчитал счетчик записывается в регистр и добавляется к результату умножения. Это значение затем разбивается на отдельные цифры, которые отображаются на индикаторах. После этого, перед выходом из 1-секундного прерывания, оба счетчика одновременно сбрасываются и измерение начинается заново. В свободное от прерывания время контроллер занимается динамической индикацией.

Разрешение и точность:
Точность зависит от тактового генератора. Кварц должен быть хорошего качества и иметь как можно меньший ppm (допуск). Будет лучше, если частота будет кратна 1024, например, 16 МГц или 22.1184 МГц. Для измерения частоты до 10 МГц, надо использовать кварц не меньше, чем на 21 МГц, например, 22.1184 МГц. Частотомер может измерять частоту до 47% от частоты собственного кварца. Если есть хороший промышленный частотомер, то можно откалибровать схему добавлением подстроечного конденсатора (1пФ-10пФ) между одним из выводов кварца и землей, и подстроить частоту в соответствии с показаниями промушленного частотомера.

В архиве с исходниками есть несколько вариантов под разные кварцы, но вы можете скомпилировать свой вариант.

Форма сигнала:
В принципе, устройство понимает любую форму сигнала от 0 до 5V, не только прямоугольные импульсы. Синусоида и теугольные импульсы сичтаются по заднему фрону при переходе его ниже 0.8V.

В устройстве нет защиты от превышения входного напряжения выше 5 вольт.

Устройство имеет высокоомный вход и не нагружает тестируемую схему – вы даже можете измерить частоту переменного тока в сети 220 вольт, прикоснувшись ко входу пальцем. Частотомер может быть переделан для измерения частоты до 100 МГц с шагом 10 Гц путем добавления на вход быстродействующего делителя.

Дисплей:
Использовано семь семисегментных индикаторов с общим анодом в режиме динамической индикации. Если яркость получается недостаточной, можно уменьшить значения токоограничивающих резисторов, но нужно помнить, что максимальный импульсный ток каждого вывода микроконтроллера составляет 40 мA . По умолчанию сопротивление резисторов 100 Ом. Незначащие нули гасятся програмно. Значения обновляются каждую секунду.

Печатная плата:
Двусторонняя печатная плата размером 109mm x 23mm – к сожалению, 7 индикаторов не влезли в рабочее пространство бесплатной версии Eagle, поэтому они нарисованы от руки. На плате нужно сделать 3 соединения проводом - первое - соединение питания и вывода VCC контроллера – это соединение показано на слое silkscreen. Два других соединяют десятичные точки индикаторов с резисторами на 330 Ом расположенными на слое bottom. Сверху платы расположен коннектор Atmel ISP-6. Контакт 1 первый со стороны кварца. Этот коннектор необязателен и нужен только для программирования контроллера. Индикаторы должны припаиваться на некотором расстоянии от платы, чтобы можно было подлезть паяльником к выводам, припаиваемым с верхней стороны платы.

На разработку конструкции толкнуло прочитанное на форуме по DDS замечание, что должны бы существовать и другие высокочастотные делители кроме серий 193 и 500, а также своевременно увиденная схема нового синтезатора для FM2006. После экспериментов родился простой частотомер на микросхемах LMX 2306, ATtiny 2313 и знакосинтезирующим жидкокристаллическом индикаторе BC 1602 со следующими характеристиками:

  • Диапазон измеряемых частот от 300 Гц до 450 МГц
  • Чувствительность от 50 мВ до 200 мВ
  • Минимальный шаг измерения:
  • В диапазоне от 300 Гц до 4,5МГц 1 Гц
  • В диапазоне от 4,5 МГц до 80 МГц 25 Гц
  • В диапазоне от 80 МГц до 450 МГц 100 Гц
  • Время измерения 0,1 сек / 1 сек
  • Точность измерения не хуже 0,007%
  • Напряжение питания 9В…15В
  • Ток потребления (без подсветки индикатора) 20 мА

Описание и настройка схемы (рис.1 ).

Сигнал со входа F поступает на усилительный каскад на транзисторе VT1 с которого расходится на программируемый высокочастотный делитель, входящий в состав микросхемы DD1, а также на движковый переключатель SA1, которым выбирается диапазон измерения (до 4,5МГц / выше 4,5 МГц). Далее сигнал дополнительно усиливается и поступает на микросхему DD2, которая выполняет счет частоты, вывод данных на ЖКИ и управление микросхемой DD1. Питание схемы обеспечивает стабилизатор DA1.

Переключателем SA2 выбирается время счета и соответственно точность измерения. Кнопкой SB1 проводят калибровку частотомера. Для этого на вход F подают образцовую частоту 1 МГц и нажав на SB1 удерживают ее до получения на дисплее ЖКИ показаний максимально близких к 1 МГц. В дальнейшем калибровку можно не проводить.

Также можно использовать стандартную процедуру настройки, подав на вход F любую образцовую частоту и подбором C9 и C10 добиться нужных показаний ЖКИ.

Цепочка D1, R5, R6, C7 совместно с каскадом на транзисторе VT2 расширяет выходящие с микросхемы DD1 импульсы. При подаче на вход F максимально возможной частоты, но не более 450 МГц, подбором резистора R5 добиваются устойчивых показаний ЖКИ (если осциллограф подключить к 9 ножке DD2 – должно быть что-то близкое к меандру). Конденсатор C7 в собранной нами конструкции переместился на коллектор VT2.

Разъем Prog служит для внутрисхемного программирования ATtiny 2313. Если же микросхема будет прошита в программаторе, то разъем не впаивается. Микросхему лучше установить в панельку.

Детали.

Постоянные резисторы и керамические конденсаторы типоразмера 0805 (поверхностный монтаж). Транзистор VT1 КТ368 заменим на КТ399, VT2 КТ368 – на менее высокочастотный КТ315 (с корректировкой платы). Микросхема DD2 ATtiny 2313-20 (с тактовой частотой до 20 МГц) в DIP корпусе установлена со стороны печатных проводников. DA1 (устанавливается также со стороны печати) - любой 5-ти вольтовый стабилизатор с током более 1 А, но если не использовать подсветку ЖКИ, то можно применить и слаботочный 78L05. Кварцевый резонатор Q1 – 11,0592 МГц в любом исполнении. Переключатели SA1 и SA2 – B1561(DPDT) или SS21 с длиной рычажка более 5 мм. Кнопка тактовая SB1 – TS-A1PS (TS-A2PS, TS-A3PS, TS-A4PS, TS-A6PS). Индикатор BC1602 или BC1601, BC1604, а также подобный с контроллером HD-44780 других фирм изготовителей. Проверять соответствие выводов обязательно! Диод VD2 1N4007 заменим на любой с подходящим рабочим током. Разъем питания – серии AUB 3,5 мм стерео или подобный с некоторой корректировкой платы. Для подачи питания используется любой маломощный сетевой адаптер с подходящим напряжением. Сигнал на плату подается по одножильному проводу диаметром примерно 0,8 мм и длиной 5-8 см.

Можно исключить из схемы C4, R4 и переключатель SA1, подключив C8 перемычкой к базе VT2. 6 ножка DD2 должна висеть в воздухе. В таком варианте нижней граничной частотой становится 1,5 МГц.

Печатная плата разведена в Sprint-Layout и изготовлена из одностороннего фольгированного стеклотекстолита (рис. 2 ).