Частотомер на ардуино: Частотомер на Arduino

Содержание

Частотомер. Очень простой. | AlexGyver Community

Очень простой электронно счетный частотомер из дешевой ардуины.

Пред история.
Заказал платы Arduino UNO. На одной плате при проверке оказался неисправным I2C порт. Просто китайцы ляпнули припоем и удачно закоротили пины A4 и А5 между собой. В остальном плата оказалась рабочая. Часть денег за косячную плату мне вернули, а я стал думать, что же из нее такого полезного сделать. И тут мне попалась статья FreqMeasure Library. Решено сделать частотомер, поскольку в пару строк, благодаря библиотеке можно сразу получить работающее устройство. Изначально сделал усилитель формирователь совсем уж из г-на и палок, поэтому вместо теоретических 8 МГц получил верхний предел в 5 Мгц. 3D принтера в тот момент у меня еще не было и корпус изготовил из первого попавшегося под руку пищевого контейнера. И самое удивительное, спустя несколько лет все это до сих пор успешно работает.


Схему частотомера даю без своего усилителя формирователя.

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

В качестве ардуинки можно использовать и UNO и Nano с Atmega328p на 16МГц 5В. Возможно будет работать и на Atmega168 но их у меня нет, поэтому не пробовал.
Для проверки нарисованной схемы собрал на макетной плате. Для себя в первый раз собирал без предварительно нарисованной схемы.

Генератор использован самый простой из ардуины. Только здесь к самому простому генератору прилеплен энкодер и LCD и все запихнуто в корпус от какого-то сломанного медиаплеера. Шикарная ручка на энкодере , всего то навсего крышка от какого-то закончившегося шампуня.
Для частотомера, чтобы получить максимум, рекомендую схему из статьи про FreqMeasure Library.


Делал такой усилитель формирователь для другого проекта.

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

Простой генератор и простой частотомер позволяют наглядно увидеть, что такое разброс характеристик кварцев. Поэтому в скетче генератора сделано отображение частоты какая бы получилась при идеальном кварце на 16 000 000 Гц с точностью до трех знаков после запятой. В реальности естественно частота генератора отличается от той, которая выводиться на дисплей генератора. Для частотомера в силу подсчета целого количества импульсов за 1 секунду, результат выражен целым числом в Гц. Естественно посчитанная частота отличается от реальной в силу отличия кварца от 16 000 000 Гц и как следствие 1 секунда будет отличаться в наносекундах от точного значения. И разница разброса характеристик кварцев отлично демонстрируется значениями на экранах генератора и частотомера. Немного но отличаются и это замечательно для изучения радиотехники.

Скетч и библиотека.

Успехов в повторении проекта.

 

Частотомер 1 Гц — 10 МГц на AVR

Частотомер с хорошими характеристиками, позволяющий измерять частоты от 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 первый со стороны кварца. Этот коннектор необязателен и нужен только для программирования контроллера. Индикаторы должны припаиваться на некотором расстоянии от платы, чтобы можно было подлезть паяльником к выводам, припаиваемым с верхней стороны платы.

 

СКАЧАТЬ – .BAS исходник и скомпилированная версия 1.1; Проект Eagle 6.4.0 и PDF версия 1.1

СКАЧАТЬ – .BAS исходник и скомпилированная версия 1.1 для ЖК индикатора; Проект Eagle 6.4.0 и PDF версия 1.1 для ЖК индикатора

 

Оценка методов измерения низких частот на Arduino. Источник питания для Частотомера FC1100-M2

Главная особенность данного частотомера:
применён высокостабильный TCXO (Термо-Компенсированный Опорный Генератор). Применение технологии TCXO, позволяет сразу, без предварительного прогрева, обеспечивать заявленную точность измерения частот.

Технические характеристики частотомера FC1100-M2:

параметр минимум норма максимум
Диапазон измеряемых частот 1 Гц. 1100 МГц.
Дискретность отсчета частоты от 1 до 1100 МГц 1 кГц.
Дискретность отсчета частоты от 0 до 50 МГц 1 Гц.
Уровень входного сигнала для входа «A» (от 1 до 1100 МГц). 0,2 В.* 5 В.**
Уровень входного сигнала для входа «B» (от 0 до 50 МГц). 0,6 В. 5 В.
Период обновления показаний 1 раз/сек
Тестирование кварцевых резонаторов 1 МГц 25 МГц
Напряжение питания/потребляемый ток (Mini-USB) +5В./300мА
Стабильность частоты @19,2МГц, при температуре -20С…+80С 2ppm (TCXO)

Отличительные особенности частотомеров линейки FC1100 и FC1100-M2 в частности:

Высокостабильный опорный генератор TCXO (стабильность не хуже +/-2 ppm).
Заводская калибровка.
Независимое одновременное измерение двух частот (Вход «A» и Вход «B»).
Вход «B»: Обеспечивает дискретность измерения частоты 1 Гц.
Вход «B» имеет полноценный аналоговый регулятор порога срабатывания входного компаратора (MAX999EUK), что даёт возможность измерять в том числе и зашумленные гармониками сигналы, отстраивая порог срабатывания компаратора в чистый участок периодического сигнала.
Вход «A» позволяет дистанционно измерять частоту портативных УКВ радиостанций на расстоянии нескольких метров, при использовании короткой антенны.
Функция быстрого тестирования кварцевых резонаторов от 1 до 25 МГц.
Современный TFT цветной дисплей с экономичной подсветкой.
Изготовитель не использует ненадежные электролитические конденсаторы. Вместо них применяются современные высококачественные SMD керамические конденсаторы значительных емкостей.
Унифицированное питание через разъём Mini-USB (+5v). Шнур питания Mini-USB — поставляется в комплекте.
Конструктив частотомера оптимизирован для встраивания в плоскую переднюю панель любого корпуса. В комплекте поставляются нейлоновые изолирующие стойки М3*8мм., для обеспечения зазора между передней панелью и печатной платой частотомера.
Изготовитель гарантирует, что не используются технологии запрограммированного старения, широко распространившиеся в современной технике.
Изготавливается в России. Мелкосерийное производство. Контроль качества на каждом этапе производства.
При производстве используются лучшие паяльные пасты, безотмывочные флюсы и припои.

Габариты печатной платы прибора FC1100-M2: 83мм*46мм.
Дисплей цветной TFT LCD с подсветкой (диагональ 1,44″ = 3,65см).
* Чувствительность по DataSheet MB501L (параметр «Input Signal Amplitude»: -4,4dBm = 135 мВ@50 Ом соответственно).
** Верхний предел входного сигнала ограничен мощностью рассеивания защитных диодов B5819WS (0,2 Вт*2 шт).

Обратная сторона частотомера FC1100-M2

Схема компаратора/формирователя входного сигнала 0…50 МГц.

Схема делителя частоты входного сигнала 1…1100 МГц.

Краткое описание частотомера FC1100-M2:

Частотомер FC1100-M2 имеет два раздельных канала измерения частоты.
Оба канала частотомера FC1100-M2 работают независимо друг от друга, и могут использоваться для измерения двух различных частот одновременно.
При этом, оба значения измеренной частоты одновременно отображаются на дисплее.
«Вход A» — (Тип разъёма SMA-FEMALE) Предназначен для измерения относительно высокочастотных сигналов, от 1 МГц до 1100 МГц. Нижний порог чувствительности этого входа составляет чуть менее 0,2 В., а верхний порог — ограничивается на уровне 0,5…0,6 В. защитными диодами, включенными встречно-параллельно. Нет смысла подавать на этот вход значительные напряжения, ибо напряжения, выше порога открывания защитных диодов будут ограничиваться.
Примененные диоды позволяют рассеивать мощность не более 200 мВт., защищая вход микросхемы делителя MB501L. Не подключайте этот вход непосредственно к выходу передатчиков значительной мощности (более 100 мВт). Для измерения частоты источников сигнала амплитудой более 5 В., или значительной мощности — используйте внешний делитель напряжения (аттенюатор) или переходной конденсатор малой ёмкости (единицы пикофарад), включенный последовательно. При необходимости измерения частоты передатчика — обычно достаточно короткого отрезка провода в качестве антенны, включенного в разъём частотомера, и расположенного на небольшом расстоянии от антенны передатчика или можно использовать подходящую антенну «резинка» от портативных радиостанций, подключенную к разъёму SMA.

«Вход B» — (Тип разъёма SMA-FEMALE) Предназначен для измерения относительно низкочастотных сигналов, от 1 Гц до 50 МГц. Нижний порог чувствительности этого входа ниже, чем у «Входа A», и составляет 0,6 В., а верхний порог — ограничивается защитными диодами на уровне 5 В.
При необходимости измерения частоты сигналов, амплитудой более 5 В., используйте внешний делитель напряжения (аттенюатор). На этом входе использован высокоскоростной компаратор MAX999.
Входной сигнал подается на неинвертирующий вход компаратора, и сюда же подключен резистор R42, увеличивающий аппаратный гистерезис компаратора MAX999 до уровня 0,6 В. На инвертирующий вход компаратора MAX999, с переменного резистора R35, подается напряжение смещения, задающее уровень срабатывания компаратора. При измерении частоты зашумленных сигналов, необходимо вращением ручки переменного резистора R35 — добиться устойчивых показаний частотомера. Наибольшая чувствительность частотомера реализуется в среднем положении ручки переменного резистора R35. Вращение против часовой стрелки — снижает, а по часовой стрелке — увеличивает пороговое напряжение срабатывания компаратора, позволяя сдвигать порог срабатывания компаратора на незашумленный участок измеряемого сигнала.

Кнопкой «Управление», осуществляется переключение между режимом измерения частоты «Вход B» и режимом тестирования кварцевых резонаторов.
В режиме тестирования кварцевых резонаторов, к крайним контактам панели «Кварц Тест» — необходимо подключить тестируемый кварцевый резонатор, с частотой от 1 МГц до 25 МГц. Средний контакт этой панели — можно не подключать, он соединён с «общим» проводом прибора.

Обратите внимание, что в режиме тестирования кварцевых резонаторов, при отсутствии тестируемого кварца в панели, наблюдается постоянная генерация на относительной высокой частоте (от 35 до 50 МГц).
Также, следует заметить, что при подключении исследуемого кварцевого резонатора, частота генерации будет несколько выше его типовой частоты (в пределах единиц килогерц). Это определяется параллельным режимом возбуждения кварцевого резонатора.
Режим тестирования кварцевых резонаторов с успехом можно использовать для подбора одинаковых кварцевых резонаторов для лестничных многокристальных кварцевых фильтров. При этом, основной критерий подбора кварцевых резонаторов — максимально близкая частота генерации подбираемых кварцев.

Разъёмы, применяемые в частотомере FC1100-M2:

Источник питания для Частотомера FC1100-M2:

Частотомер FC1100-M2 оборудован стандартным разъёмом Mini-USB с напряжением питания +5,0 Вольт.
Потребляемый ток (не более 300 мА) — обеспечивает совместимость с большинством источников питания напряжения USB.
В комплекте имеется кабель «Mini-USB» «USB A», который позволяет питать частотомер от любого устройства, обладающего таким разъёмом (Персональный Компьютер, Ноутбук, USB-HUB, Блок Питания USB, Сетевое Зарядное Устройство USB) и так далее.

Для автономного питания Частотомера FC1100-M2 — оптимально подходят широко-распространенные батареи «Power Bank», со встроенными Литий-Полимерными аккумуляторами, используемые обычно для питания аппаратуры, обладающей разъёмами USB. В этом случае, помимо явного удобства, бонусом вы получаете гальваническую развязку от сети и/или питающего устройства, что немаловажно.


Конструктивно прибор состоит из дисплея, образованного семью 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), расположенный в верхней части печатной платы. Этот разъем не обязательно припаивать к плате, микроконтроллер можно запрограммировать любым доступным способом.

Загрузки

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

Построенный . Он позволяет измерять частоты до 10 МГц в четырех автоматически переключаемых диапазонах. Наименьший диапазон имеет разрешение 1 Гц.

Технические характеристики частотомера

  • Диапазон 1: 9,999 кГц, разрешение 1 Гц.
  • Диапазон 2: 99,99 кГц, разрешение до 10 Гц.
  • Диапазон 3: 999.9 кГц, разрешение до 100 Гц.
  • Диапазон 4: 9999 кГц, разрешение до 1 кГц.

Описание частотомера на микроконтроллере

Микроконтроллер Attiny2313 работает от внешнего кварцевого генератора с тактовой частотой 20 МГц (это максимально допустимая частота). Точность измерения частотомера определяется точностью данного кварца. Минимальная длина полупериода измеряемого сигнала должна быть больше, чем период кварцевого генератора (это связано с ограничениями архитектуры микроконтроллера ATtiny2313). Следовательно, 50 процентов от тактовой частоты генератора составляет 10 МГц (это максимальное значение измеряемой частоты).

Установка фьюзов (в PonyProg):

Частотомер 0,1 до 60 МГц, 20 МГц до 2400 МГц 2,4 ГГц

С микрочипом PIC16F648A, частотомером 2,4 ГГц.

Использование термокомпенсированного кварцевого генератора с регулируемым напряжением (2,5 ppm VC-TCXO).
Уникальный контроль диапазона и алгоритм точного времени (несинхронное прерывание).
Время стробирования (обновления дисплея) 0,01 секунды / 0,1 секунды / 1,0 секунды, значение частоты отображения в реальном времени.
Односторонний входной дизайн, трехканальное измерение частоты (низкий канал / высокий канал / автоматический канал).
Двухчастотный дизайн, значение и режим ПЧ / вниз могут быть заданы отдельно.
Использование восьми 0,56 дюймов высокой яркости цифрового дисплея, восемь регулируемой яркости.
Схема простая и разумная структура, управление двумя кнопками, простота в эксплуатации.
Настройки автоматически сохраняются, загружаются напрямую по телефону. Спецификация:
Каналы измерения:

Низкий канал:
Диапазон измерения: 0,1–60 МГц
Точность: 100 Гц (время срабатывания 0,01 с)
10 Гц (строб 0,1 секунды)
1 Гц (1,0 секунды, когда ворота)
Низкая чувствительность канала:
0,1 МГц-10 МГц: лучше, чем 60 мВПП
10 МГц-60 МГц: лучше, чем 60 мВПП
60 МГц -75 МГц: не тестировалось 

Высокий канал: (делится на 64)
Диапазон измерения: 20 МГц — 2,4 ГГц
Точность: 6400 Гц (0,01 секунды)
640 Гц (время срабатывания 0,1 с)
64 Гц (время срабатывания 1,0 с)
Высокая чувствительность канала:
20 МГц-30 МГц: лучше, чем 100 мВПП
30 МГц-60 МГц: лучше, чем 50 мВПП
60 МГц — 2,4 ГГц: 

Авто канал:
Автоматически выбирается по частоте входного сигнала высокого или низкого канала канала, идентифицируя частоту 60 МГц. Например, когда амплитуда входного сигнала превышает 60 МГц, нехватка не может автоматически выбрать верхний канал, канал должен вручную выбрать высокочастотное измерение. 

Настройка:
Независимая конструкция двойного ПЧ, регулировка шага минимальной частоты 100 Гц, диапазон частот 0 -99,9999 МГц, может быть установлен для увеличения или уменьшения режима ПЧ частоты. Частота ссылки:
Использование 5032 пакета 13.000 МГц Нагреваемый управляемый напряжением кварцевый генератор (VC-TCXO), стабильность частоты 2,5 ppm. Рабочее напряжение: DC 9 В -15 В (с защитой от переполюсовки)
Рабочий ток: максимум 160 мА (условия тестирования: источник питания постоянного тока 12 В, красный светодиод, яркость 8 светодиодов)
Восьми светодиодный дисплей, самый высокий дисплей восемь цифр.
Восемь светодиодов яркость регулируется, заводская установка максимальной яркости.
Размеры: 125,5 мм * 25,5 мм * 21,5 мм (Д * В * Ш) Бортовой интерфейс:
DC IN (интерфейс питания): гнездо HX2. 54-2P
RF IN (входной сигнал): гнездо HX2.54-2P
ICSP (интерфейс программирования): 2.54-6P Pin 

В комплект поставки входят:
1 х РЧ-сигнал счетчик частоты тестер измеритель частоты ( красный / зеленый / синий )

FC50 — Частотомер встраиваемый от 1 Гц до 50 МГц.

Технические характеристики частотомера FC50:

параметр минимум норма максимум
Диапазон измеряемых частот 1 Гц. 50 МГц.
Дискретность отсчета частоты от 0 до 50 МГц 1 Гц.
Уровень входного сигнала для входа «B» (от 0 до 50 МГц). 0,6 В.   5 В.
Период обновления показаний 1 раз/сек
Напряжение питания (разъём «+5v») +4,5 В. +5,0 В. +5,5 В.
Напряжение питания (разъём «+8…15v») +8,0 В.   +15,0 В.
Стабильность частоты @19,2МГц, при температуре -20С…+80С   2ppm (TCXO)  

Габариты печатной платы частотомера FC50: 45мм*46мм.
Дисплей цветной TFT LCD с подсветкой (диагональ 1,44″ = 3,65 см).
* Верхний предел входного сигнала ограничен мощностью рассеивания защитных диодов 1N4148WS (0,2 Вт*2шт).


Особенности частотомера FC50:

Принципиальная схема частотомера FC50:


Краткое описание частотомера FC50:

Измеряемый сигнал с входа X1, через RC цепочку R1C1 подаётся на инвертирующий вход высокоскоростного компаратора U1 (MAX999).
Исходно, компаратор MAX999 имеет встроенный аппаратный гистерезис 3,5 мВ, недостаточный для стабильной работы этого узла.
Поэтому, резистором R6 значение гистерезиса увеличено до 100…200 мВ, что обеспечивает оптимальную стабильность входного формирователя.
Подстроечным резистором R2 осуществляется подстройка порога срабатывания компаратора для обеспечения максимальной чувствительности входа.
Сформированный компаратором сигнал поступает на вход таймера/счётчика микроконтроллера U2.

В качестве опорного генератора, используется VC-TCXO (управляемый напряжением термо-компенсированный опорный генератор),
обеспечивающий высокую стабильность опорной частоты (+/-2ppm или лучше), без применения дополнительных мер по термостабилизации.
Транзистор VT1 усиливает амплитуду сигнала с опорного генератора (0,4 vpp) до уровня, необходимого для работы микроконтроллера U2.
При необходимости, частотомер можно откалибровать самостоятельно, подключив ко входу эталон частоты и вращая движок резистора R9 «калибровка».

Резистор R7 устанавливает яркость свечения подсветки LCD-TFT дисплея, с расчётом, чтобы прямой ток не превышал 20 мА.

Узел питания частотомера FC50 состоит из двух ступеней линейных стабилизаторов.
Входное напряжение +8…+15 В, через диод VD3 защиты от переполюсовки напряжения питания, подаётся на вход первого линейного стабилизатора напряжения U3,
понижающего напряжение питания до безопасного уровня +5 В.
Далее, напряжение +5 В, подаётся на вход прецизионного стабилизатора U4, понижающего напряжение до уровня +3,3 В.
Все узлы частотомера (исключая светодиод подсветки дисплея LCD-TFT), питаются от напряжения +3,3 В.
При необходимости, частотомер может питаться от напряжения +5 В, подаваемого в обход стабилизатора U3, непосредственно на вход X3.
В этом случае, защита от переполюсовки питания осуществляется диодом VD4 и плавкой перемычкой «FUSE».
При постоянном питании устройства от напряжения +5 В, через контакты X3, ток потребления частотомера можно несколько снизить,
разрезав перемычку J1, и тем самым отключив выход стабилизатора U3.

Вид тыльной стороны печатной платы частотомера FC50.

Разработано и изготовлено в России лабораторией KitLAB.

Новый частотомер WilkoL’а

Внимательные читатели заметили, что в статьях автора Instructables под ником WilkoL про камертонный генератор и часы с его применением частотомер показан всего один, а в статье про генератор с бокалом в качестве частотозадающего элемента к нему прибавился второй, и он там даже попал на КДПВ. Этот рассказ — о нём.


Работу рад самоделкой мастер начинает с проработки теоретической части, а именно — с выбора способа измерения частоты. Во многих частотомерах для этого подсчитывают количество периодов входного сигнала за определённый промежуток времени, скажем, одну секунду:

Этот способ хорош для достаточно высоких частот, но если частота низкая, он не позволяет получить достаточно большое количество знаков после запятой. Например, если цикл измерения занимает одну секунду, то для частоты порядка 50 Гц после запятой будет ноль знаков. Хотите, например, три знака — выход есть, удлиняем цикл измерения до 1000 секунд. Но одно дело когда тормозит ПК или смартфон, к чему все хотя бы привыкли, и совсем другое — если к этой весёлой компании присоединится ещё и частотомер, такое окончательно выведет пользователя из себя. В общем, нужен другой способ. А что если измерять период колебаний, вот так?

Так тоже делают. Берут сигнал образцовой частоты, которая на несколько порядков выше измеряемой, и считают, сколько периодов образцового сигнала пройдёт за один период измеряемого. Так, например, при образцовой частоте в 10 МГц и измеряемой в 50 Гц это будет 200000. Значит, период равен 20000,0 мс, и современный (как, впрочем, и не очень) микроконтроллер, если программист этому его «научит», с лёгкостью пересчитает период в частоту, равную 50,000 Гц. Если частота увеличится до 50,087 Гц, то в один период входного сигнала уложиться 199650 периодов образцового, и такое изменение частотомер отметит в реальном времени.


Но при таком способе измерения количество знаков после запятой, наоборот, уменьшается с возрастанием частоты входного сигнала. Например, если она равна 40 кГц, а образцовая — по-прежнему 10 МГц, то при 40161 Гц мы получим 249 периодов образцовой частоты, а при 39840 Гц — 251 период. Хоть два частотомера строй: один для высоких частот, работающий по первому способу, другой — для низких, по второму. Хотя — подождите! Нельзя, что ли, в одном частотомере оба способа совместить? Можно, и мастер рассказывает, как. Нужно взять обыкновенный D-триггер, далее приведены его условное обозначение и таблица истинности:

Мастер показывает на графике четыре сигнала, четвёртый из которых вырабатывает триггер:

Первый из этих сигналов — измеряемой частоты, он подан на вход тактирования D-триггера. Второй — образцовой частоты, например, снова составляющей 10 МГц, от которого требуется высокая стабильность. Третий — сигнал с частотой порядка 1 Гц, стабильность от которого не требуется совсем, он подан на тот же триггер на вход D. Ну а четвёртый вырабатывается триггером из первого и третьего следующим образом. Когда третий сигнал переключается из нуля в единицу, триггер реагирует на это не сразу, а лишь когда с первым сигналом после этого происходит именно такое переключение. Таким образом, фронт одного из импульсов четвёртого сигнала ровно совпадает с фронтом одного из импульсов первого. Затем третий сигнал, а за ним и четвёртый, переключается в нуль, на что микроконтроллер не реагирует никак, затем третий сигнал переключается снова в единицу, но триггер снова реагирует на это не сразу, а лишь после такого же переключения первого сигнала. И снова фронты первого и четвёртого сигналов полностью совпадают. И в полный период четвёртого сигнала укладывается целое количество периодов первого. Далее — дело техники: не забываем, что у нас есть ещё и второй сигнал. Микроконтроллер подсчитывает, сколько полных периодов первого и второго сигналов попало в полный период четвёртого.


Итак, у нас получилось два числа. Например, 32 и 10185892. Умножаем 32 на 10000000 (образцовая частота) и делим на 10185892. Получаем 31,416 Гц. Три знака после запятой. И измерение остаётся точным и при низких частотах, и при высоких, приближающихся к образцовой. А если нужно измерять ещё более высокие частоты, можно добавить делитель.

Теперь надо определиться, на каком микроконтроллере выполнять частотомер. Мастер уже пробовал делать их и на ATmega328, и даже на STM32F407, работающем на тактовой частоте в 168 МГц. Но в этот раз он проникается минимализмом и решает проверить, сможет ли получить аналогичный результат на ATtiny2313.

Выводов у него более чем достаточно, особенно если применить светодиодный дисплей со встроенной микросхемой драйвера типа MAX7219:

Полная схема устройства выглядит так:

Довольно сложный формирователь на дискретных компонентах, содержащий RC-цепи, диодный ограничитель, усилительные каскады, служит для получения прямоугольных импульсов из сигнала практически любой формы. D-триггер расположен снаружи, сигнал измеряемой частоты (первый) подаётся на него с формирователя, сигналы с частотами в 10 МГц и 1 Гц (второй и третий соответственно) поступают с микроконтроллера, выходной сигнал (четвёртый) идёт обратно в микроконтроллер. Второй такой триггер служит для формирования сигнала на контрольной точке. Та же схема в формате PDF в ZIP-архиве доступна здесь.

Составив схему, мастер собирает по ней частотомер, получается так:

На фото, в отличие от схемы, показаны аккумулятор и контроллер заряда, также мастером упомянут и импульсный стабилизатор, но где он, не видно. Все эти компоненты добавлены позже, что сделало работу с частотомером более удобной. Аккумулятор типа 18650 следует брать обязательно с защитой, пайка проводов к нему недопустима. Либо отсек, либо точечная сварка.

Прошивку (лежит здесь также в ZIP-архиве) мастер пишет с учётом необходимости перевода микроконтроллера с тактирования RC-генератором на работу от внешнего кварца, а также возможности назначения различных функций каждому из выводов микросхемы:

Для заливки прошивки мастер берёт внутрисхемный программатор фирмы Olimex. Это болгарская компания, по профилю близкая к Adafruit.

Младший разряд на дисплее мастер заклеивает, а затем вырезает отверстие в крышке корпуса таким образом, чтобы этот разряд оказался закрыт, так как его показания оказались неточными несмотря на все принятые меры. Тут сказываются и особенности алгоритма, и не слишком высокая температурная стабильность кварцевого генератора. Для его настройки мастер подключает к контрольной точке внешний частотомер со стабилизацией частоты тактового генератора от GPS-приёмника, после чего вращением подстроечного конденсатора выставляет точные 5 МГц (триггер делит тактовую частоту на два). Правильно настроенный частотомер обеспечивает требуемую точность в диапазоне измеряемых частот от 0,2 Гц до 2 МГц. На следующих двух фото показано, как мастер подал один и тот же сигнал одновременно на эталонный и проверяемый частотомеры:



Источник (Source) Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

Самодельный частотомер на ATTINY2313. Самодельный частотомер на ATTINY2313 Частотомер на attiny2313 с динамической индикацией

Особенностью первой схемы частотомера на микроконтроллере AVR является то, что она работает вместе с компьютером и подсоединена к материнской плате через разъем IRDA. От этого же разъема конструкция получает питание. Вторая схема частотомера базируется на микроконтроллере Attiny2313 и способна измерять частоту до 10 мГц. Третья рассмотренная конструкция частотомера построена на базе легендарной платы Arduino, основа которой также микроконтроллер AVR.

Схема частотомера состоит из микропроцессора Attiny2313 и двоичного счетчика 74AC161. Входящий сигнал для усиления следует на транзистор VT1, затем с его коллекторного вывода он поступает на вход «С» двоичного счётчика. Контроль за работой счетчика закреплен за МК Attiny2313, который осуществляет обнуление, останавливает или запускает счет путем подачи управляющего сигнала на десятый вывод.


Непродолжительной подачей логического нуля на вход сброса двоичного счётчика, МК обнуляет его, а после этого, отправляет уровень логической единицы на входе ЕР, запускает его работу. Затем, он считает импульсы с выхода старшего разряда счетчика в течение полусекунды.

Частотомер на микроконтроллере AVR. Сигналы данных на компьютер идут с порта PD6 Attiny2313. Линия порта РВ1 используется для сигналов синхронизации следующие от компьютера.

В начальный момент времени МК генерирует стартовый импульс продолжительностью около 1,6 мкс после чего идет пауза. Программа время от времени обращается к порту 2F8H и при регистрации байта, инициирует передачу синхроимпульсов. Данные синхроимпульсы пойдут при отправке числа ноль в инфракрасный порт компьютера. Состав импульсов: Первый бит стартовый и 8 бит число ноль.

При обнаружении уровня логической единицы, микроконтроллер начинает передачу, отправляя 1-й стартовый импульс устанавливая логическую единицу на линии данных и дожидается спада по линии синхронизации, для того чтобы было можно отправить импульсы данных. Если бит данных нулевой, то выставляется «1» .

Так как скорости передачи и приёма одинаковы, это позволяет получить независимость от заданной скорости ИК порта компьютера.

Фъюзы для программы Ponyprog и сама прошивка доступна по зеленой ссылке чуть выше.

В этом простом проекте частотомера, контроллер Arduino считывает напряжение, затем высчитывает его частоту и посылает данные через USB UART в компьютер, на котором необходимо установить программу считывания и визуализации данных, приложение и скетч в архиве для скачки.

Плата Arduino генерирует точную односекундную временную основу для счетчика с помощью каскадирования двух таймеров timer0 и timer2. Связь между цифровыми входами 3 и 4 соединяет выход таймера 2 (250 Гц) со входом таймера 0. Программный код ожидает, когда выход таймера 0 станет положительным, и начинает отсчет частоты входного сигнала таймером 1. Timer1 – это 16-разрядный таймер, он переполняется при достижении значения 2 16 , после этого, изменяется значение регистра переполнения overF. В конце первой секунды записывается 16-разрядный регистр. Затем Arduino отправляет на ПК 6 байтов данных. Схема подключения к Arduino простая, и ее можно,посмотреть на фото ниже.

Сначала Arduino необходимо подсоединить к компьютеру, а только потом запустить приложение на Visual Basc 6. Приложение ищет Com-порт, отправляя байты и ожидает их обратное принятие. Это занимает пару секунд. Приложение должно быть обязательно отключено, в тот момент когда вы прошиваете плату через Arduino IDE. Частотный вход платы Ардуино представляет собой уровни сигнала TTL, при слабом сигнале необходимо добавить усилитель.

Этот самодельный частотомер на ATTINY2313 предназначен для измерения частоты в диапазоне примерно от 4МГц до более 160МГц. Его можно использовать как измеритель частот или в качестве устройства ввода-вывода TRX, например, на диапазон 144МГц (2м).

Технические характеристики частотомера:

  • измерение частоты в диапазоне 4-160 Мгц
  • отображение измерений на ЖК-дисплее
  • чувствительность 700мВ
  • входное напряжение, макс
  • питание: 8-15В
  • очень простая плата, минимальное количество
    элементов, быстрый запуск
  • размеры платы: 37х80мм

Схема прекрасно отработала в диапазоне от 3,8МГц до 162МГц. Основой схемы является микроконтроллер ATTINY2313. Его преимуществом является возможность работать на частотах до 20МГц. В схеме использован кварц на 16МГц, таким образом, сам процессор теоретически должен правильно измерять частоты до 8МГц.

Зачастую оказывается, что диапазон до 8МГц слишком мал. Увеличение верхнего диапазона можно получить, используя делитель частоты (прескалер). В схеме задействован прескалер LB3500, который позволяет измерять до 150 Мгц.

Краткая информация о LB3500:

  • напряжение питания — 4,5…5,5В
  • потребляемый ток — l6мА-24мА
  • входное напряжение — 100мВ-600мВ
  • выходное напряжение — 0,9 Vpp
  • делитель — 8

Без применения дополнительного делителя схема способна измерять частоты до 64МГц. Добавление дополнительного делителя в виде двоичного счетчика 74LS293 (ICl) позволяет увеличить диапазон измерений до 150 Мгц (макс. для LB3500).

ICl делит частоту на 4. Таким образом, вся система прескалера (ICl и IC4) делит входную частоту на 32. Транзистор Tl с элементами C7, R2, R3 обеспечивает высокое входное сопротивление.

Входной сигнал после разделения попадает на вход микросхемы LB3500. На выходе в 9 IC4 сигнал получается в 8 раз меньшей частоты, чем на входе. К сожалению, выходной сигнал микросхемы LB3500 не согласовывается с TTL уровнями. Для устранения этого недостатка в схему добавлен транзистор Т2, который предназначен для согласования. Потенциометр PRI обеспечивает точное соответствие.

Построенный . Он позволяет измерять частоты до 10 МГц в четырех автоматически переключаемых диапазонах. Наименьший диапазон имеет разрешение 1 Гц.

Технические характеристики частотомера

  • Диапазон 1: 9,999 кГц, разрешение 1 Гц.
  • Диапазон 2: 99,99 кГц, разрешение до 10 Гц.
  • Диапазон 3: 999.9 кГц, разрешение до 100 Гц.
  • Диапазон 4: 9999 кГц, разрешение до 1 кГц.

Описание частотомера на микроконтроллере

Микроконтроллер Attiny2313 работает от внешнего кварцевого генератора с тактовой частотой 20 МГц (это максимально допустимая частота). Точность измерения частотомера определяется точностью данного кварца. Минимальная длина полупериода измеряемого сигнала должна быть больше, чем период кварцевого генератора (это связано с ограничениями архитектуры микроконтроллера ATtiny2313). Следовательно, 50 процентов от тактовой частоты генератора составляет 10 МГц (это максимальное значение измеряемой частоты).

Установка фьюзов (в PonyProg):

Конструктивно прибор состоит из дисплея, образованного семью 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), расположенный в верхней части печатной платы. Этот разъем не обязательно припаивать к плате, микроконтроллер можно запрограммировать любым доступным способом.

Загрузки

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

Частотомер на микроконтроллере ATtiny2313 . Схема отличается простотой и надежностью. Частотомер позволяет измерять частоты до 65 кГц. Программа для микроконтроллера написана на BascomAVR. Отображение частоты на дисплее 16*2. Напряжение питания устройства от 5 до 9 вольт.

Счет импульсов происходит путем подсчитывания импульсов по нарастающему фронту на ноге 9 (PD.5/T1 и вход таймера Timer1). Для защиты входа от перенапряжения включены два диода 1N4148 и резистор на 10кОм. Отображение происходит на любой дисплей 16*2 , но обязательно с контроллером HD44780 или аналогичным KS066.

Программа написана на бэйсике в среде BascomAVR. Демо версия имеет ограничение по размеру кода в 4 Кб, чего вполне достаточно. Скачать BascomAVR с официального сайта разработчика. В программе используются два таймера: таймер0 для отсчета фиксированных интервалов времени, в нашем случае 1 секунда(можно поэкспериментировать с этим значением), а таймер1 считает пришедшие импульсы за это время. Стоит отметить, что счет импульсов будет вестись только в том случае, если уровень сигнала на ноге 9 будет соответствовать уровню лог. «1» (порядка 3-5 вольт). Timer0 работает на частоте тактирования микроконтроллера т.е 8МГц, делитель тактовой частоты не включён.

Как посчитать частоту с помощью Arduino · Один транзистор

Правильный способ подсчета частот от нескольких герц до 6 МГц с помощью платы Arduino. Настройте аппаратные таймеры и используйте прерывания. Добавьте дисплей и создайте недорогой частотомер.

Подсчет частоты с помощью Arduino казался легкой задачей. Но большинству людей нравится делать это простым, но неправильным способом: использовать pulseIn для измерения ширины импульса. Это ограничивает максимальную измеряемую частоту примерно до 50 кГц.Кроме того, функция производит выборку только одного цикла сигнала.

Хороший способ измерения частоты — подсчет переходов входного сигнала, которые происходят за определенный промежуток времени. Это требует знания таймеров и прерываний. Метод сложнее реализовать, и для того, чтобы все было правильно, нужно установить несколько регистров.

Это было сделано раньше, и хотя его было трудно найти, я обнаружил код, который может считать частоты до 8 МГц, если входной сигнал имеет рабочий цикл 50%.Единственным недостатком является то, что входной вывод частоты закреплен на цифровом выводе 5. Однако верхний диапазон не ограничивается лишь несколькими МГц. С помощью некоторого дополнительного оборудования (микросхема предварительного делителя частоты) частоты в сотни МГц могут быть измерены с достаточной точностью.

Аппаратное обеспечение очень простое: подключите любой дисплей к Arduino, но избегайте использования контакта 5. У вас его нет? Запишите измерения в последовательный порт. Единственное необходимое оборудование — это плата разработки AVR. Программное обеспечение — это самая большая проблема. Мой код основан на библиотеке, написанной Martin Nawrath , и коде, опубликованном Nick Gammon .

На моей макетной плате на фотографии выше вы видите плату, совместимую с Arduino Nano, и простой кварцевый генератор, построенный на старом шестнадцатеричном инверторе 74LS04.

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

Внешняя тактовая частота должна быть меньше половины системной тактовой частоты (fTn Следовательно, максимальная частота, которую вы можете рассчитывать с ATmega328 Arduino, составляет 16 / 2,5 = 6,4 МГц. Немного, но все же намного лучше, чем PulseIn. Я буду использовать Timer1 (который составляет 16 бит) для подсчета входных импульсов неизвестного сигнала. При входной частоте, скажем, максимальной 8 МГц, 16-битный регистр переполнится (достигнет максимального значения 65535) через 8,192 мс. Это слишком мало для низкочастотных сигналов. Разрешение таймера необходимо увеличить за счет счетчика переполнения. При каждом переполнении переменная счетчика будет увеличиваться (увеличивая разрешение таймера).Таким образом, Timer1 увеличивается на каждом нарастающем фронте, приложенном к выводу D5.

Таймер 2 сохранит… время. Это 8-битный таймер, но мы позволим ему считать только до 124 (это означает 125 «тиков»). Частота счета определяется установкой предварительного делителя на 128. При тактовой частоте 16 МГц плат Arduino Timer2 будет «тикать» с частотой 16 МГц / 128 = 125 кГц. Считайте 125 раз с частотой 125 кГц. Сколько времени прошло? Ну 1 миллисекунда. Таймер 2 переполняется каждые 1 мс. Сколько раз он переполняется до того, как вычисляется частота Timer1, — это переменная, которую можно изменить, если хотите.Высокие частоты могут быть дискретизированы за короткие периоды, в то время как низкочастотные сигналы могут дискретизироваться за более длительный период времени для точного считывания. Значение по умолчанию для переменной samplingPeriod установлено на 200 мс. Мне удалось измерить с его помощью всего 50 Гц (период 20 мс) — засчитываются только 10 отсчетов.

Вот код (также на GitHub):

 // Частотомер Arduino от нескольких Гц до 6 МГц
// Один транзистор, 2018
//  https://www.onetransistor.eu/ 
//
// На основе:
// * Скетч частотомера Ника Гаммона (CC BY 3.0 AU)
//  http://www.gammon.com.au/timers 
// * Библиотека FreqCounter от Мартина Наврата (LGPL 2.1)
//  http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-frequency-counter-library/ 

// здесь задаем период выборки (в миллисекундах):
беззнаковое int samplingPeriod = 200;

// Таймер 1 переполняет счетчик
изменчивое беззнаковое длинное переполнение1;

void init_Timer1 () {
 переполнение1 = 0; // сбросить счетчик переполнения

 // Устанавливаем регистры управления (см. Таблицу)
 TCCR1A = 0; // нормальный режим работы
 TCCR1B = бит (CS12) | бит (CS11) | бит (CS10); // использовать внешний источник синхронизации

 TCNT1 = 0; // устанавливаем текущее значение таймера на 0

 TIMSK1 = бит (TOIE1); // разрешить прерывание при переполнении
}

ISR (TIMER1_OVF_vect) {
 overflow1 ++; // увеличиваем счетчик переполнения
}

// Таймер 2 переполняет счетчик
изменчивый беззнаковый int overflow2;

void init_Timer2 () {
 переполнение2 = 0; // сбросить счетчик переполнения

 GTCCR = бит (PSRASY); // сбросить предделители

 // Устанавливаем регистры управления (см. Таблицу)
 TCCR2A = бит (WGM21); // Режим CTC
 TCCR2B = бит (CS22) | бит (CS20); // предделитель установлен на 1/128, "тики" на 125 кГц
 OCR2A = 124; // считает от 0 до 124, затем запускает прерывание и сбрасывается;

 TCNT2 = 0; // устанавливаем текущее значение таймера на 0

 TIMSK2 = бит (OCIE2A); // разрешаем прерывание
}

// прерывание происходит через каждые 125 отсчетов / 125 кГц = 0.001 секунда = 1 мс
ISR (TIMER2_COMPA_vect) {
 if (++ overflow2  Серийный  .print ("Частота:");
  Serial  .print ((длинное без знака) freqHz);
  Серийный номер  .println ("Гц");

 // сбрасываем таймеры
 TCNT1 = 0; переполнение1 = 0;
 TCNT2 = 0; переполнение2 = 0;
}

void setup () {
 // включить последовательный вывод
  Серийный .begin (115200);
  Serial  .println («Частотомер Arduino»);
  Серийный  .println ();

 // Отключить Timer0; millis () больше не будет работать
 TCCR0A = 0; TCCR0B = 0;

 // запускаем таймер 1 (частота счета)
 init_Timer1 ();
 init_Timer2 ();
}

void loop () {
 // здесь ничего; прерывания выполняют все
 // вы можете добавить пользовательский ввод, который изменяет период выборки
}
 

В отличие от проектов, на которых я основывал свой код, мой скетч выполняет непрерывный подсчет частоты и отображение после каждого периода выборки.Обратите внимание, что период дискретизации следует регулировать в зависимости от желаемого частотного диапазона. Это напрямую влияет на интервал обновления дисплея. Автоматический выбор диапазона также возможен путем увеличения периода выборки, если подсчитанных выборок мало, и наоборот. Этот код был разработан и протестирован только на ATmega328. У других микроконтроллеров могут быть другие регистры. Обязательно посетите форум Ника Гаммона, где он адаптирует аналогичный код для ATmega2560 и очень хорошо объясняет, как это работает.

Теперь построить частотомер довольно просто.Просто добавьте дисплей и буфер ввода. Если вы не будете измерять только сигналы 5 В, вам понадобится буферная схема. Он может быть построен с использованием транзистора, операционного усилителя или триггера Шмитта.

DIY простой измеритель частоты Arduino до 6,5 МГц

Диапазон измерения от нескольких герц до 6,5 мегагерц. Также доступны три временных интервала измерения — 0,1, 1 и 10 секунд. Если мы измеряем только прямоугольные сигналы, тогда нет необходимости в усилителе-формирователе, и сигнал подается непосредственно на цифровой вывод 5 от Arduino.
Код очень прост благодаря библиотеке FreqCount, которую вы также можете скачать ниже.

Этот проект спонсировался NextPCB. Вы можете помочь мне, проверив их по одной из этих ссылок:
Всего 7 долларов для заказа SMT:
https://www.nextpcb.com/?code=Mirko
Производитель надежных многослойных плат:
https: // www. nextpcb.com
Платы для печатных плат, 10 шт. бесплатно:
https://www.nextpcb.com/pcb-quote?act=1
Скидка 20% — Заказы на печатные платы:
https: // www.nextpcb.com/pcb-quote

Устройство очень простое и состоит из нескольких компонентов:

— Микроконтроллер Arduino Nano
— Плата формирующего усилителя
— ЖК-дисплей
— Селектор формы входного сигнала
— Входной разъем
— и переключатель временного интервала: мы можем выбрать три интервала 0,1-1 и 10 секунд.

Как вы можете видеть на видео, прибор очень точен во всем диапазоне, и мы также можем откалибровать частотомер с помощью простой процедуры, описанной ниже:

В папке библиотек Arduino найдите библиотеку FreqCount,
в FreqCount.cpp найдите строки:
#if defined (TIMER_USE_TIMER2) && F_CPU == 12000000L
float corrective = count_output * 0.996155;
и замените их на:
#if defined (TIMER_USE_TIMER2) && F_CPU == 16000000L
float right = count_output * 1.000000;
, где 1.000000 — ваш коэффициент коррекции, коррекция
должна выполняться путем подачи 1 МГц на вход частотомера.
После изменения файла загрузите новый скетч на плату Arduino.

Наконец, частотомер встроен в подходящий пластиковый ящик и является еще одним полезным инструментом в электронной лаборатории.

Прецизионный частотомер Arduino 5 или 120 МГц поражает Kickstarter

Компьютерный инженер Тьери Генну из Франции создал новый совместимый с Arduino прецизионный частотомер 5 или 120 МГц. Вдохновением для платы Arduino было создание открытого, очень универсального частотомера, чтобы его можно было использовать для измерения самых разных сигналов.Он разработан таким образом, чтобы его можно было настраивать всеми возможными способами.

Ранние взносы спонсора теперь доступны для изобретательского проекта от примерно 46 до 35 фунтов стерлингов, предлагая значительную скидку в размере примерно 00000% от розничной цены, в то время как кампания краудфандинга продолжается. Если кампания по разработке платы для разработки Arduino на Kickstarter будет успешной и полная реализация будет проходить гладко, ожидается, что доставка по всему миру состоится примерно в феврале 2021 года. Чтобы узнать больше о проекте платы для разработки Arduino, просмотрите рекламный видеоролик ниже.

«На плате Freq_LF_HF используется знаменитый микроконтроллер AVR Atmega328p-AU. Это не новейшая модель ATMEL, но этот чип входит в стандартную комплектацию платы Arduino UNO v3.0. Это мощный микроконтроллер и очень маленький (TQFP-32). Это дает пользователям возможность пользоваться поддержкой сообщества Arduino и множеством программных библиотек. «

«Очень широкополосный, он может измерять частоты от менее 5 Гц до 5 МГц или 120 МГц, благодаря уникальной архитектуре аппаратного и программного обеспечения.Низкочастотные сигналы (LF), высокочастотные сигналы (HF) и очень высокочастотные сигналы (VHF, на модели 120 МГц) обрабатываются отдельно, чтобы получить полную точность во всем диапазоне ».

— Использует стандартный 16-символьный однострочный ЖК-дисплей для четкого представления частоты. ЖК-дисплей можно снять с платы и при необходимости установить на коробку.
— Может питаться от преобразователя переменного / постоянного тока 9 В или непосредственно на контакты печатной платы или от батареи 9 В с адаптером, входящим в комплект.Он выдерживает напряжение от 7,5 до 12 вольт. Источник питания защищен плавким предохранителем.
— Защищен от перенапряжения и пониженного напряжения. Доска будет показывать сообщения об ошибках.
— Сигнал может быть подан на плату с помощью разъема BNC или заголовков печатной платы.
— Входное сопротивление 1 МОм.
— Вход сигнала защищен от электростатических разрядов диодом TVS с максимальной мощностью разряда до 600 Вт / 100 А (Внимание, речь идет только об электростатических разрядах! Пользователи никогда не должны пытаться измерять сигналы выше 30 вольт от пика до пика!) имеет кнопку сброса для сброса AVR.

Амплитуда сигнала колеблется от 0,2 до 10 вольт (допустимо 30 вольт). Чтобы получить полный список всех доступных обещаний кампании, перспективных целей, дополнительных средств массовой информации и подробных спецификаций, перейдите на официальную страницу кампании краудфандинга совета разработчиков Arduino, перейдя по ссылке ниже.

Источник: Kickstarter

В рубриках: Оборудование, Главные новости

Последние скидки на гаджеты


Раскрытие информации: Некоторые из наших статей содержат партнерские ссылки.Если вы покупаете что-то по одной из этих ссылок, Geeky Gadgets может получать партнерскую комиссию. Учить больше. Частотомер

| Hackaday

Нет никаких сомнений в том, что осциллограф — необходимая часть оборудования для хакера в области электроники. Это критически важная часть оборудования для обратного проектирования устройств и протоколов, и, к счастью для нас, они так же дешевы, как и когда-либо. Даже достаточно многофункциональный четырехканальный прицел, такой как Rigol DS1054Z, стоит примерно столько же, сколько смартфон среднего класса.Но если это все еще слишком богато на ваш вкус и вы хотите немного сэкономить на функциях, вы можете получить функциональный цифровой осциллограф за небольшую сумму, равную карману.

Несмотря на то, что на рынке существует ряд очень дешевых карманных цифровых запоминающих осциллографов (DSO), [Питер Балч] решил, что он скорее выпустит свою собственную версию, используя готовые компоненты. Это не только послужило поводом для глубокого погружения в некоторые интересные инженерные задачи, но и привело к тому, что цена оказалась даже ниже, чем у готовых моделей «под ключ».Состоящий из немногим более чем Arduino Nano и OLED-дисплея, стоимость приличного DSO размером со спичечный коробок составляет менее 10 долларов США.

А не отличный . [Питер] очень откровенно говорит об ограничениях этого карманного прицела, сделанного своими руками: он не может достигать очень высоких частот дискретизации, а дисплей недостаточно большой, чтобы передать что-то большее, кроме основ. Но если вы проводите быструю и грязную диагностику в полевых условиях, это может быть все, что вам нужно. Тем более, что есть большая вероятность, что вы сможете собрать эту вещь из деталей из мусорной корзины.

Даже если вы не собираетесь создавать свою собственную версию прицела на базе Arduino, о котором говорит [Питер], его рецензия по-прежнему полна увлекательных деталей и теорий. Он объясняет, как его программный подход состоит в том, чтобы отключить все прерывания и включить микроконтроллер в жесткий цикл опроса, чтобы как можно быстрее считывать данные с АЦП. Потребовались некоторые эксперименты, чтобы найти правильное значение предделителя для тактовой частоты Atmega 16 МГц, но в конце концов обнаружил, что он может получить полезный (хотя и несколько шумный) выход с частотой дискретизации 1 мкс.

К сожалению, АЦП Arduino оставляет желать лучшего с точки зрения входного диапазона. Но с добавлением двойного операционного усилителя LM358 осциллограф Arduino получает некоторое усиление, поэтому он может улавливать сигналы в диапазоне мВ. Для полноты картины [Питер] включил в прошивку устройства некоторые полезные функции, такие как частотомер, источник прямоугольных сигналов и даже вольтметр. С добавлением футляра, напечатанного на 3D-принтере, этот маленький гаджет может быть очень удобен в вашем мобильном наборе инструментов.

Если вы предпочитаете коммерческий путь, собственный [Jenny List] Hackaday рассматривает ряд очень доступных моделей, таких как DSO Nano 3 и комплект для самостоятельной сборки JYE Tech DSO150.

[Спасибо BaldPower за подсказку.]

Эксперименты с частотомером Arduino

Обзор

В этом посте я хотел бы подвести итоги своих недавних экспериментов с различными подходами к подсчету частот с использованием платформы Arduino. Моя первоначальная цель — разработать небольшой емкостный датчик приближения, который был бы более надежным, чем датчик, измеряющий время зарядки по умолчанию (и, что не менее важно, работающий от аккумулятора).Идея состоит в том, чтобы, как и в терменвоксе, использовать осциллятор для генерации прямоугольных волн и обнаружения небольших изменений частоты, вызванных близостью человека. Для этого мне сначала понадобился надежный частотомер. Мои требования были следующие:

  • он должен быть максимально точным, по крайней мере, до 100 кГц
  • он должен работать на ATtiny (даже на ATtiny13)

Результаты

В итоге я получил небольшую библиотеку, которая может подсчитывать частоту до диапазона МГц на более сложных платформах (например,грамм. Uno, Mega), и я также заставил его работать на большинстве ATtiny (я тестировал его на ATtiny85), но не на ATtiny13 (технически это было бы возможно, но я не смог поместить код датчика приближения в 1K флеш-память, поэтому я решил не тратить на нее больше времени). На ATTiny неточность внутреннего генератора может повлиять на измерение с постоянным коэффициентом, но это нормально для моего приложения (в любом случае, зачем вам считать частоту с помощью ATTiny?)

Библиотека использует фиксированное время стробирования 100 мс (период подсчета импульсов), что вносит некоторую ошибку (счетчик импульсов умножается на 10, чтобы получить частоту, таким образом, последняя цифра всегда равна 0).Из-за этого также стоит упомянуть, что эта библиотека плохо работает на очень низких частотах.

Библиотека частотомеров доступна по адресу https://github.com/domoszlai/arduino-frequency-counter. Он реализует два разных подхода, так как у них есть плюсы и минусы, и отдельный подход для ATTiny. Подробности реализации можно найти в исходном коде и на странице github.

Подходы

Я выделил три основных метода подсчета частоты в зависимости от количества требуемых аппаратных таймеров:

Это очень наивный подход, и это даже не совсем таймер, поскольку он неявно использует Timer0 для подсчета времени.Эти методы обычно основаны на одной из функций pulseIn () , millis () , micros () для измерения времени стробирования или ширины импульса. Я нашел их слишком неточными для моих целей.

В этом методе используется один таймер для измерения времени стробирования и прерывание со сменой вывода (PCI) для подсчета импульсов. Это очень часто используется, поскольку прерывания по смене вывода доступны для многих / большинства выводов, но он может хорошо работать только на более низких частотах (в моих тестах он отлично работал с ~ 60 кГц).Это метод, который используется счетчиком ATTiny как самый маленький, например ATTiny85 имеет только один доступный таймер (два, но, Timer0 используется ядром Arduino).

См .: frequency_counter_PCI.cpp

Я обнаружил, что это самый надежный метод, работающий на частотах до нескольких МГц. Он использует один таймер для измерения времени стробирования и аппаратный таймер / счетчик (TC) (TC) для подсчета импульсов. Однако аппаратный счетчик требует использования одного конкретного вывода, что в некоторых ситуациях может быть очень непрактичным.Это должен быть контакт T1 (обычно контакт 5) для большинства плат, но T5 (контакт 47) в случае Arduino Mega.

См .: frequency_counter_TC.cpp

Знаете ли вы какой-либо другой / лучший способ надежного измерения частоты? Может быть, измерение ширины импульса с использованием внешних прерываний?

Многократный частотомер

для Arduino

/ *

* 29.03.2018 — Девон Брей — https://www.esologic.com/multiple-frequency-counter-arduino/

*

* Я написал большинство важных примечаний в виде комментариев в источнике, но пара дополнительных деталей:

*

* — Важные данные хранятся в `period_averages_ms` и` frequency_averages_hz`.Вы обращаетесь к ним, используя индексы, определенные в верхней части файла. Эти массивы обновляются каждый раз при вызове compute_counts (). Сохраните его compute_counts () где-нибудь в цикле main ().

*

* — Вы можете легко добавить больше частот, вам просто нужно `NUMSIGS`, сделать определенный ISR и еще одну строку` attachInterrupt` в setup ()

*

* — Он использует [прерывания] ( https://playground.arduino.cc/Code/Interrupts), что может не подходить для вашего проекта, но обычно не должно мешать слишком многим вещам.

*

* — Если ISR не обнаружил нового фронта в 1000000us, то и период_averages_ms [p_index], и frequency_averages_hz [p_index] будут установлены в ноль!

* — Это означает, что самая низкая частота, которую может обнаружить этот код, составляет 1 Гц!

*

* /

int freq_pin_1 = 2; // вывод, подключенный к первому сигналу, должен быть выводом прерывания! См. Документацию по arduino

int freq_pin_2 = 3; // вывод, подключенный ко второму сигналу, должен быть выводом прерывания! См. Документы arduino

#define BUFFSIZE 100 // вычисляется скользящее среднее частоты / периода, и это размер этого буфера

#define NUMSIGS 2

#define FREQ1INDEX 0

определить FREQ2INDEX 1

volatile int period_buffer_indices [NUMSIGS] = {0}; // расположение индекса для добавления к скользящему буферу среднего значения

volatile unsigned long period_buffers [NUMSIGS] [BUFFSIZE] = {0}; // буферы

volatile unsigned long previous_edge_times_us [NUMSIGS] = {0}; // время появления предыдущего фронта в микросекундах

volatile float period_averages_ms [NUMSIGS] = {0}; // время периода данного сигнала в миллисекундах

volatile float frequency_averages_hz [NUMSIGS] = {0}; // частота данного сигнала в герцах

volatile bool period_buffer_locked [NUMSIGS] = {false}; // спиновые блокировки для разных буферов

void setup () {

Serial.begin (9600);

// контакты должны быть сопоставлены с их ISR

pinMode (freq_pin_1, INPUT_PULLUP);

attachInterrupt (digitalPinToInterrupt (freq_pin_1), new_freq1_edge, RISING); // вы можете изменить этот режим на все, что вы искали, ПАДЕНИЕ, ИЗМЕНЕНИЕ и т. д.

pinMode (freq_pin_2, INPUT_PULLUP);

attachInterrupt (digitalPinToInterrupt (freq_pin_2), new_freq2_edge, RISING);

}

void loop () {

compute_counts ();

Последовательный.print («Контакт 1:»);

Serial.print (период_средн_мс [FREQ1INDEX]);

Serial.print («мс,»);

Serial.print (частота_средн_гц [FREQ1INDEX]);

Serial.print («гц»);

Serial.print («- Контакт 2:»);

Serial.print (период_средн_мс [FREQ2INDEX]);

Serial.print («мс,»);

Serial.print (frequency_averages_hz [FREQ2INDEX]);

Serial.print («гц»);

Serial.println («»);

}

void compute_counts () {

// вычисляет среднее значение буфера для данного сигнала.Должен быть вызван перед использованием буферов period_averages_ms или frequency_averages_hz.

для (int p_index = 0; p_index

float buffer_sum = 0;

в то время как (period_buffer_locked [p_index]) {}; // ждать завершения ISR

period_buffer_locked [p_index] = true; // ISR не будет добавлять новые данные в `period_buffers`

if ((micros () — previous_edge_times_us [p_index]) <1000000) {

for (int j = 0; j

buffer_sum + = период_буферов [p_index] [j];

}

}

period_buffer_locked [p_index] = false; // ISR теперь добавит новые данные в `period_buffers`

if (buffer_sum> 0) {

period_averages_ms [p_index] = ((buffer_sum / (float) BUFFSIZE)) / 1000;

frequency_averages_hz [p_index] = (1 / period_averages_ms [p_index]) * 1000;

}

else {

period_averages_ms [p_index] = 0;

frequency_averages_hz [p_index] = 0;

}

}

}

void new_edge (int period_index) {

unsigned long current = micros ();

if (period_buffer_locked [period_index] == false) {// если compute_counts использует буфер, пропустите добавление к нему, потому что этот процесс не является атомарным

period_buffer_locked [period_index] = true;

период_буферов [period_index] [period_buffer_indices [period_index]] = current — previous_edge_times_us [period_index];

period_buffer_locked [period_index] = false;

индексы_буфера_периода [индекс_периода] ++;

if (period_buffer_indices [period_index]> = BUFFSIZE) {

period_buffer_indices [period_index] = 0;

}

}

previous_edge_times_us [period_index] = текущий; // но убедитесь, что новое время установлено, потому что эта операция атомарная

}

void new_freq1_edge () {

new_edge (FREQ1INDEX);

}

void new_freq2_edge () {

new_edge (FREQ2INDEX);

}

Частотомер Arduino — WA5BDU.COM

Частотомер Arduino от WA5BDU

Введение

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

Несколько лет назад я хотел разработать и запрограммировать частотомер, который можно было бы встроить в приемопередатчик и выдавать частоту по Морзе.Я в основном перешел от PIC к Arduino, но я узнал, что микроконтроллеры AVR семейства ATMega от Arduino не могут выполнять высокоскоростной подсчет частоты напрямую, как это может делать PIC. PIC12F683, который я использовал, имеет интерфейс предварительного делителя частоты, который работает независимо от его внутренних часов и может регистрировать счетчики на частотах более 100 МГц и, по моему опыту, до 140 МГц. Это описано в моем блоге по ссылке ниже:


http://wa5bdu.blogspot.com/2017/11/pic-frequency-counter-with-morse-output.html


Делая домашнее задание для этого проекта, я получил предложение от одного любителя попробовать 32-битный счетчик 74LV8154 в качестве внешнего интерфейса для Arduino. Это выглядело интересно, поэтому я принял к сведению.

Моя текущая потребность или, по крайней мере, мое желание состояла в том, чтобы разработать другой частотомер, который мог бы выводить показания через равные промежутки времени на последовательный порт, чтобы они могли быть захвачены в .CSV или другом формате массива данных и отображены. Это было сделано для построения графика дрейфа и обнаружения внезапных скачков частоты в VFO старого якоря, над которым я работал.

32-битный счетчик 74LV8154

Отличный чип для этой цели. Он имеет 32-битный счетчик, поэтому он может перейти на 4.29E9 перед переходом. 32-битное число считывается из четырех регистров с использованием 8 выделенных контактов. Выбор того, какой из четырех регистров поставить на контакты, осуществляется с помощью четырех выделенных контактов: GAL, GAU, GBL, GBU, что означает A-нижний, A-верхний, B-нижний, B-верхний. (Счетчик можно разделить на два 16-битных счетчика «A» и «B», но здесь мы используем их как один большой 32-битный счетчик.)

Подсчет продолжается, когда –CCLR имеет значение HIGH, и останавливается, когда счетчики сбрасываются до нуля, когда значение LOW. Итак, задача состоит в том, чтобы установить –CCLR HIGH на точное время (в данном случае около 1 секунды) и прочитать счет в конце.

Внутренний счет передается в четыре выходных регистра переходом с высокого уровня на низкий на выводе RCLK. Как мы увидим, время этого действия очень важно.

Для 32-битного счетчика контакты 1 (CLKA) и 2 (CLKB) связаны вместе, и туда подключается сигнал для подсчета.Микросхема работает при напряжении питания 5 В постоянного тока, поэтому входной сигнал должен быть примерно на уровне ТТЛ.

В техпаспорте прямо не указана максимальная частота, но я считаю на ней 50,125 МГц.

HEF4521B, 24 ступенчатый делитель с кварцевым генератором

Это микросхема, которая генерирует сигнал временной развертки приблизительно в 1 секунду. На самом деле я сначала сделал версию, в которой не использовалась внешняя временная развертка кристалла, но вместо этого я позволял Arduino генерировать ее с прерыванием по таймеру.Он работал довольно хорошо, но при измерении сигнала 7 МГц в последней цифре было колебание от 5 до 10 Гц. Я хотел добиться большей стабильности.

Я подумал об использовании кристалла 32 768 Гц, который используется в часах и часах, но я не думал, что это может дать желаемую стабильность. Я выбрал кристалл 4,096 МГц из своей корзины для запчастей. Это не точная степень двойки, поэтому я не могу получить точную временную развертку в 1 секунду, но это нормально, поскольку фактическое значение заложено в программном обеспечении. Мне нужен сигнал 0,5 Гц, чтобы показать максимальное время в 1 секунду.23 равно 8 388 608. Это дает мне выходной сигнал 0,48828 Гц с периодом 2,048 секунды и максимальным временем 1,024 секунды.

В таблице данных приведены значения компонентов для кристаллов 50 кГц и 500 кГц. Я не был уверен, может ли он перейти на 4 МГц, и испытывал трудности, пока не заметил, что в дополнение к контактам Vdd и Vss есть также контакты Vdd1 и Vss1, которым требуется питание. Ни мощности, ни колебаний. Я придерживался рекомендуемых значений для резисторов и конденсаторов, за исключением того, что сделал последовательный резистор 3 к3 Ом вместо 47 кОм, рекомендованного для 500 кГц.

Больше особо нечего сказать об этой микросхеме. Это дает большую гибкость при выборе кристалла, имея выходы для Q18 — Q24.

Логика и сложение

Основная идея довольно проста. Подключите 1-секундные тактовые импульсы к –CCLR, чтобы микросхема выполняла отсчет ~ 1 секунды, пока он высокий, затем перенесите счет в выходные регистры и считайте их в Arduino, соберите и выполните арифметические операции, по сути разделив количество отсчетов. по времени развертки, чтобы дать частоту.

Естественно, есть пара сложностей. Я хочу, чтобы по окончании периода подсчета активировал RCLK, который переведет счет в регистры. Но для этого требуется переход от низкого уровня к высокому, и в конце периода счета часы переходят от высокого уровня к низкому. Я надеялся избежать добавления каких-либо микросхем для выполнения разных функций, без NAND, NOR или инверторных пакетов, если это возможно. Поэтому я использовал один транзистор в качестве инвертора, который вы видите на схеме. Его выход — –CLOCK или «NOT CLOCK», что на 180 градусов не совпадает по фазе с CLOCK, и он используется для запуска RCLK.

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

Чтобы справиться с этим, у меня есть Arduino задерживать низкий сигнал до –CCLR с помощью одной из своих линий ввода / вывода.Но мне не нужна какая-либо программная задержка на другом конце, где –CCLR принимает высокий уровень, поэтому я хочу, чтобы сигнал был «активирован» до того, как наступит переход. Это функция двух диодов, которую, я думаю, вы бы назвали логическим элементом И отрицательной логики. Оба сигнала должны быть низкими, чтобы низкий уровень достиг –CCCR.

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

Я надеюсь, что все имело смысл.

Одинарная версия ИС

В этой версии HEF4521B и связанные с ним компоненты, а также инвертор опущены, а сигналы синхронизации и фиксации предоставляются Arduino.Я публикую отдельный исходный код для этой версии, поскольку он работает достаточно хорошо, чтобы быть полезным и упрощающим оборудование. Линия ввода-вывода Arduino D6 идет на вывод RCLK, а линия D7 — на –CCLR.

Отображение вывода

Поскольку моим первоначальным намерением было собирать данные с течением времени для построения графика, я печатаю частоту на последовательный порт с интервалом в одну секунду. Обратите внимание, что на Arduino вы можете включить последовательный монитор, нажав Control-Shift-M и увидеть этот вывод.В версии без кристаллической временной развертки я пытался количественно оценить количество «джиттера», которое я получаю из-за неопределенностей программного обеспечения. Мне нужно было отклонение от среднего, а не от некоторого абсолютного значения, поэтому я сохраняю среднее значение последних десяти отсчетов и отображаю отклонение каждого показания от этого среднего. Вот теперь он смотрит на сигнал 50,125 МГц:

частота: 50124948 Среднее10: 50124948 Отклонение: 0
частота: 50124948 Среднее10: 50124948 Отклонение: 0
частота: 50124948 Среднее10: 50124948 Отклонение: 0
частота: 50124948 Среднее10: 50124948 Отклонение: 0
частота: 50124948 Среднее10: 50124948
частота: 50124948 Среднее10: 50124948 Отклонение: 0
частота: 50124948 Среднее10: 50124948 Отклонение: 0

Так что это довольно солидно.Обычно на цифре Герца есть, по крайней мере, небольшая отметка.

Вот результат, сделанный для версии с синхронизацией, взятой из Arduino, с учетом сигнала 7,150 МГц:

частота: 7149968 Среднее10: 7149966 Отклонение: 6
частота: 7149965 Среднее10: 7149967 Отклонение: 1
частота: 7149967 Среднее10: 7149967 Отклонение: -2
частота: 7149965 Среднее10: 7149967 Отклонение: 0
частота: 7149972 Среднее10: 7149966 -1
частота: 7149968 Среднее 10: 7149967 Отклонение: 5

Я предполагаю, что на 50 МГц отклонения были бы примерно в семь раз больше.Итак … это было неплохо, но добавление кристаллической временной шкалы того стоило.

Незавершенное прочие предметы :

I: Другие варианты вывода

ЖК-дисплей или другой дисплей, независимый от ПК или последовательного монитора, было бы очевидным дополнением к рассмотрению.

Я думаю, что моим первым шагом в этом направлении было бы добавление вывода на языке Морзе, например вывода типа AFA (звуковое оповещение о частоте) моего счетчика PIC. Я бы хотел, чтобы кнопка сообщала Arduino, когда говорить.Я близок к тому, чтобы это сработало.

II: Другие варианты временной развертки и калибровки

Развертка в одну секунду хороша тем, что дает разрешение 1 Гц. Но измерение 0,1 секунды тоже было бы неплохо, поскольку оно обновлялось бы в десять раз быстрее. Поскольку я имею дело со степенью двойки, я, вероятно, выберу измерения с точностью до 1/8 секунды. Затем я просто умножаю свои счета на восемь и обрабатываю как обычно.

Кроме того, не стоит тратить одну секунду на каждую секунду, потраченную на измерения.Я уверен, что будет способ сбросить и перезапустить шкалу времени, чтобы время между периодами измерения было минимальным.

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

Кроме того, моя математическая корректировка в программном обеспечении требует, чтобы я использовал математику с плавающей запятой. Числа слишком велики даже для длинных целых чисел без знака. Но с плавающей запятой разрешение ограничено чем-то выше одной части в 1E7. Хорошим решением было бы иметь кристалл, который делит ровно 1 секунду, с триммером. Тогда я смогу полностью избежать математических исправлений программного обеспечения. Обновление: у меня их 4.Кристаллы 194304 МГц, которые должны выполнять эту работу.

IV: Преобразование и усиление входного сигнала.

В настоящее время я использую счетчик с входными сигналами не менее пары вольт p-p на входе. Для увеличения чувствительности обычно используется какой-то усилитель с ограничителем / квадратором. Один из моего счетчика PIC, сделанный из одного логического элемента NAND, дал мне чувствительность в диапазоне от 35 до 180 мВ между пиками. Возьмем одну секцию пакета ворот NAND 74HC00.С одним затвором соедините входы вместе и пропустите их через конденсатор емкостью 0,1 мкФ. Подключите резистор 22 кОм между выходом и входом. Это простое решение, которое отлично работает.

Ссылка на исходный код для версии с кварцевой шкалой времени:

http://www.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *