- КАК СДЕЛАТЬ ИЗМЕРИТЕЛЬ ЧАСТОТЫ
- Схема простого частотомера
- Схема приставки контур
- Частотомеры
- Проектирование измерителя частоты до 100МГц
- Первая попытка
- Использование таймера/счетчика TCD0
- Использование системы событий
- Выбор микроконтроллера
- Измерение частоты кристалла
- Схема
- Использование частотомера
- Измерение частоты
- Измерение частоты кристалла
- Программная часть
- Код для ATtiny414
- OLED дисплей
- Часы реального времени
- Таймер/счетчик TCD0
- События
- Основной цикл
- Точность
- Компиляция
- Дополнительные возможности
- Интерфейс
- Измерение периода
КАК СДЕЛАТЬ ИЗМЕРИТЕЛЬ ЧАСТОТЫ
Поводом повторения данного частотомера и приставки для определения параметров неизвестных контуров послужила конструкция приемника Р-45. В дальнейшем этот «мини комплекс» облегчит намотку и настройку ВЧ контуров, контроль опорных точек генераторов и так далее. Итак, представленный в данной статье частотомер позволяет измерять частоту от 10 Гц до 60 МГц с точностью 10 Гц. Это позволяет использовать данный прибор для самого широкого применения, например измерять частоту задающего генератора, радио приёмника и передатчика, функционального генератора, кварцевого резонатора. Частотомер обеспечивает хорошие параметры и обладает хорошей входной чувствительностью, благодаря наличию усилителя и TTL-преобразователя. Это позволяет измерять частоту кварцевых резонаторов. Если использовать дополнительный делитель частоты, максимальная частота измерения может достигать 1 ГГц и выше.
Схема простого частотомера
Схема частотомера довольно простая, большинство функций выполняет микроконтроллер. Единственное, для микроконтроллера необходим усилительный каскад, чтобы увеличить входное напряжения с 200-300 мВ до 3 В. Транзистор, включенный по схеме с общим эмиттером, обеспечивает псевдо-TTL сигнал, поступающий на вход микроконтроллера. В качестве транзистора необходим какой-нибудь «быстрый» транзистор, я применил BFR91 — отечественный аналог КТ3198В.
Напряжение Vкэ устанавливается на уровне 1.8-2.2 вольта резистором R3* на схеме. У меня это 22 кОм, однако может потребоваться корректировка. Напряжение с коллектора транзистора прикладывается к входу счетчика/таймера микроконтроллера PIC, через последовательное сопротивление 470 Ом. Для выключения измерения, в PIC задействываются встроенные pull-down резисторы. В PIC реализован 32-битный счетчик, частично аппаратно, частично софтово. Подсчет начинается после того, как выключаются встроенные pull-down резисторы микроконтроллера, продолжительность составляет точно 0.4 секунды. По истечении этого времени, PIC делит полученное число на 4, после чего прибавляет или отнимает соответствующую промежуточную частоту, для получения реальной частоты. Полученная частота конвертируется для отображения на дисплее.
Для того, чтобы частотомер работал правильно, его необходимо откалибровать. Проще всего это сделать так: подключить источник импульсов с заранее точно известной частотой и вращая подстроечный конденсатор выставить необходимые показания. Если данный метод не подходит, то можно воспользоваться «грубой калибровкой». Для этого, выключите питание прибора, а 10 ножку микроконтроллера подсоедините на GND. Затем, включите питание. МК будет измерять и отображать внутреннюю частоту.
Если вы не можете подстроить отображаемую частоту (путем подстройки конденсатора 33 пФ), то кратковременно подсоедините вывод 12 или 13 МК к GND. Возможно, что это нужно будет сделать несколько раз, так как программа проверяет эти выводы только один раз за каждое измерение (0.4 сек). После калибровки, отключите 10 ногу микроконтроллера от GND, не выключая при этом питания прибора, чтобы сохранить данные в энергонезависимой памяти МК.
Печатную плату рисовал под свой корпус. Вот что получилось, при подаче питания выскакивает кратковременно заставка и частотомер переходит в режим измерения, тут на входе нет ни чего:
Схема приставки контур
Автор статьи схему доработал относительно первоисточника, посему оригинал не прилагаю, плата и файл прошивки в общем архиве. Теперь возьмем неизвестный нам контур — приставка для измерения резонансной частоты контура.
Вставляем в не совсем пока удобную панельку, для проверки девайса сойдет, смотрим результат измерений:
Частотомер калибровался и тестировался на кварцевом генераторе 4 МГц, результат был зафиксирован такой: 4,00052 МГц. В корпусе частотомера решил вывести питание и на приставку +9 Вольт, для этого был сделан простой стабилизатор +5 В, +9 В, его плата на фото:
Забыл добавить, плата частотомера разведена немного к верху задом — для удобства съёма pic микроконтроллера, вращении подстроечного конденсатора, минимальной длины дорожек на LCD.
Теперь частотомер выглядит вот так:
Единственное, не стал исправлять пока ошибку в надписи мгГц, а так всё на 100% рабочее. Сборка и испытание схемы — ГУБЕРНАТОР.
Форум по обсуждению материала КАК СДЕЛАТЬ ИЗМЕРИТЕЛЬ ЧАСТОТЫ
Описание нового Блютус протокола беспроводной связи — Bluetooth Mesh.
Схема простого кварцованного передатчика FM диапазона на мощность до 0,2 Вт, при питании от 12 В.
Источник постоянного тока (CC) из понижающего регулятора напряжения (CV). Доработка готового модуля.
Источник
Частотомеры
Частотомеры, сделанные на основе микросхем К561 (CD40) или микроконтроллеров обычно предназначены для измерения частоты не более 1 Мгц. А частотомеры в составе мультиметров DT9206A всего до 20 кГц. Программные частотомеры, использующие в качестве входа звуковую карту компьютера — до 40 кГц. Но .
Схема самодельного частотомера без входного узла, выполненный на микроконтроллере AT-tiny2313 и жидкокристаллическом дисплее DV-162. Схема с минимальным набором навесных элементов. Модуль предназначен для встраивания в лабораторные генераторы, а так же для построения на его основе частотомера .
Принципиальная схема простого частотомера, построенного на микросхемах HCF4026BEY, диапазон измеряемых частот от 1Гц до 10МГц. Сейчас радиолюбителям стала доступна зарубежная элементная база, а, подчас, она бывает даже доступнее отечественной. Вот пример, — искал счетчики К176ИЕ4 чтобы сделать .
Действие цифрового частотомера основано на измерении числа входных импульсов в течение образцового интервала времени в 1 секунду. Исследуемый сигнал подают на вход формирователя импульсов, который собран на транзисторе VT1 и элементе DD3.1, который вырабатывает электрические колебания прямоугольной .
Не сложная схема самодельного пятиразрядного частотомера с пределами измерений от 1Гц до 99999Гц, выполнен на микросхемах CD4001, CD4026, CD4040. Принципиальная схема пятиразрядного частотомера 1Гц до 99999Гц (CD4001, CD4026, CD4040). Это простой частотомер для измерения частоты .
Принципиальная схема самодельной приставки к мультиметру для измерения частоты в пределах 5Гц-20МГц. В некоторых цифровых мультиметрах, например, MY64, MY68, М320, M266F имеется встроенная функция измерения частоты, благодаря чему мультиметр может использоваться как цифровой частотомер .
Этот частотомер может работать и как самостоятельное устройство, так и всоставе генератора ЗЧ в качестве его цифровой шкалы. Частотомер предназначен для измерения частоты в пределах до 100 кГц. (0-99999 Гц). Схема состоит из входного усилителя на транзисторе VТ1, измерительного счетчика .
Частотомер, схема которого приведена ниже, может быть использован в качестве цифровой шкалы для какого-то устройства, к примеру для лабораторного генератора звуковой частоты (ЗЧ). Он измеряет частоту от 1 до 99999 Гц. Входное напряжение сигнала должно быть не ниже 0,5-0,6V. Но, при использовании .
Микросхема ММ74С926 (или другие аналоги 74C926 представляет собой десятичный четырехразрядный счетчик, объединенный с системой индикации из дешифратора в код для семисегментного индикатора и схемы опроса для динамической индикации. На основе этой микросхемы можно строить различные приборы, в том .
Частотомеры, построенные по «медленной» схеме популярны среди радиолюбителей потому, что их схема проще и не требует применения регистров или триггеров для запоминая данных предыдущего измерения. Но, недостаток таких частотомеров вих медленности. Многоразрядный частотомер без переключателя .
Источник
Проектирование измерителя частоты до 100МГц
Этот проект посвящен созданию простого частотомера, способного измерять частоту до 100МГц с точностью 0.002%. За основу я взял ATtiny414, задействовав при этом его таймер/счетчик TCD0 и систему событий.
Недавно я задумал собрать частотомер с возможностью измерения до 100МГц, что позволило бы использовать его для проверки частоты процессора и кристаллов. В сети есть немало схем для сборки подобных девайсов на базе микроконтроллера, ведь в этом и состоит одно из назначений встроенных в МК таймеров/счетчиков. Однако большинство таких устройств не достигают уровня 100МГц, так как измерение внешней частоты ограничено половиной собственной тактовой частоты микроконтроллера.
Первая попытка
Я решил использовать внешние RTC (часы реального времени), тактируемые кристаллом 32.768кГц, для генерации прерываний с частотой 1Гц. Затем второй таймер/счетчик, тактируемый измеряемой частотой, будет отсчитывать количество циклов в этом односекундном интервале, в результате сообщая частоту в Гц.
Для первого прототипа я использовал таймер/счетчик TCB0 , тактируемый через входной вывод, с захватом, который активировался от RTC подачей сигнала 1Гц. Как и предполагалось, измерить я смог только половину тактовой частоты, или 10МГц, поэтому потребовался четырехкаскадный делитель для деления входной частоты 100Мгц на 16, чтобы вписать ее в подходящий диапазон. В качестве делителя я попробовал задействовать CCL. Кстати, о подобной его реализации у меня даже есть отдельная статья Frequency Divider Using CCL.
Использование таймера/счетчика TCD0
Об использовании TCD0 я задумался просто между делом. Это 12-битное устройство, но, в отличие от большинства своих аналогов, работает оно асинхронно, то есть независимо от тактов процессора.
В первую очередь TCD0 предназначен для генерации сигналов, например при управлении электродвигателем, и я даже не знаком со многими из его возможностей. Однако мне показалось, что с его помощью вполне можно реализовать захват значения счетчика, работающего под управлением часов реального времени.
Опытным путем я выяснил, что TCD0 можно тактировать на частоте более 100МГц, что позволило бы собрать очень простой частотомер с нужным мне диапазоном действия без делителя.
Использование системы событий
Я мог использовать RTC для генерации прерывания каждую секунду, а затем захватывать значение счетчика из TCD0 через программу обработки прерываний. Тем не менее последние процессоры AVR предоставляют систему событий (Event System), позволяющую реализовать это более эффективно.
Можно сгенерировать внутренний сигнал с RTC и с помощью него непосредственно активировать захват. Преимущество здесь в том, что вызов службы прерываний не требует лишней обработки, в результате чего ответ возвращается практически мгновенно.
Выбор микроконтроллера
Компания Microchip предлагает три новых серии микроконтроллеров AVR:
- ATtiny 0-, 1- и 2-;
- ATmega 0;
- AVR DA- и DB-.
С позиции периферии они одинаковы, поэтому я мог выбрать, к примеру, ATtiny414, ATmega4809 или AVR128DA28, все из которых снабжены TCD0 и способны использовать для тайминга внешний кварцевый резонатор 32.768КГц.
Первую версию схемы я протестировал с AVR128DA28, но для конечной все же выбрал ATtiny414, потому что он выполнен в более компактном корпусе, а дополнительные входы/выходы мне не требовались.
В итоге получилось так, что при использовании AVR128DA28 события работали, а после перехода на ATtiny414 перестали. Оказалось, что проблема в отличии терминологии для более ранних процессоров. Здесь я хочу поблагодарить пользователя AVR Freaks под ником kabasan за то, что помог разобраться. Если вы хотите побольше узнать о применении системы событий, то советую начать с серии AVR DA- или DB-, для которых используется более логичная терминология.
Примечание. Не стоит путать ATtiny 1 серии, ATtiny414, вышедшие в 2020, с более старыми ATtiny441, появившимися в 2014 в качестве расширенной версии еще более старого ATtiny44.
Измерение частоты кристалла
Я решил, что будет нелишним задействовать кварцевый резонатор, который позволит использовать частотомер для измерения частоты колебаний кристалла. В одном из вариантов схем подобного резонатора применяется небуферизованный КМОП-инвертор LVC1GU04 и ряд других компонентов 1 :
Здесь я задумался о возможности создания инвертора на базе ATtiny414 с применением системы событий таким образом:
- Определить PA2 в качестве событийного выхода, EVOUT0 . Это был единственный вариант, так как другой выход, EVOUT1 , находится на том же выводе, что и TOSC2 , используемый кварцевым резонатором RTC.
- Определить PA1 в качестве асинхронного генератора событий на канале 0. Подойдет любой вывод на PORTA .
- Настроить PA1 на инвертирование входа.
Далее выход инвертора, PA2 , подключается ко входу частотомера, EXTCLK/PA3 .
На моем прототипе эта схема отлично работала без каких-либо дополнительных компонентов с диапазоном частоты кристаллов от 2 до 25МГц. Однако для того, чтобы заставить кварц резонировать, может потребоваться дополнительное место на макетной плате. Так что, если вы проектируете для этой схемы печатную плату, то советую оставить место под пассивные компоненты на случай, если они понадобятся.
Схема
Вот схема частотомера 100МГц, компоновка которой соответствует схеме макетной платы:
Схема частотомера 100МГц на базе ATtiny414
В качестве дисплея используется модуль OLED 128×32 I2C с драйвером SSD1306. Для прототипа я взял дисплей Adafruit 2 , хотя вполне подойдет и любой аналог с AliExpress 3 . Резистор 33кОм и конденсатор 0.1мкФ обеспечивают корректный сброс дисплея при первой подаче питания, хотя они могут и не понадобиться.
В качестве резонатора служит кристалл 32.768кГц с точностью 20ppm и емкостной нагрузкой 12.5пФ 4 . Для вычисления значений конденсатора я использовал формулу С = 2(СL – CS), где СL представляет емкостную нагрузку 12.5пФ, а CS паразитную емкость, которая на макетной плате достигает, вероятно, 5пФ, давая С = 15пФ. На печатной же плате ее значение, возможно, составит 2.5пФ.
В роли процессора выступил ATtiny414 в 14-контактном корпусе SOIC 5 , который я установил на коммутационную плату – подходящий вариант есть у Adafruit 6 . Проект можно также реализовать на базе ATtiny814 или ATtiny1614 с бОльшим объемом памяти, но не на ATtiny404, поскольку в нем нет поддержки внешнего кристалла RTC.
Использование частотомера
Измерение частоты
Для измерения частоты сигнала нужно подключить устройство между In и GND. При питании 3.3В частотомер работал в диапазоне до 105МГц, а при повышении напряжения до 5В верхний порог сместился к 110МГц.
Измерение частоты кристалла
Для измерения частоты колебаний кристалла подключаемся между выводами Xtal и In:
Измерение частоты колебаний кристалла 16МГц
Программная часть
Код для ATtiny414
При написании кода для ATtiny414 и его обвязки мне пригодилась документация AVR1000b: Getting Started with Writing C-Code for AVR MCUs. Кроме того, при выборе символов для конкретных настроек регистра, будет нелишним почитать iotn414.h , который находится у вас на ПК в megaTinyCore.
OLED дисплей
В интерфейсн дисплея я задействовал те же функции, что и во многих прежних проектах, например Tiny Function Generator, где использовался такой же OLED дисплей I2C. Текст отрисовывается при помощи набора символом размером 6х8 пикселей, но при удвоенном масштабе для получения символов 12х16 пикселей используется функция сглаживания, описанная мной в Smooth Big Text.
Обратите внимание, что на ATtiny414 в megaTinyCore размер буфера I2C с целью экономии ОЗУ составляет всего 16 байт, поэтому мне пришлось изменить функции ClearDisplay и PlotChar() на отправку данных меньшими порциями.
Функцию Plotlnt() я подкорректировал на отображение запятых между каждой тройкой цифр, чтобы облегчить их чтение.
Часы реального времени
Настраивать RTC на использование внешнего кристалла сложнее, чем может показаться, поскольку контроллер часов защищен от случайного вмешательства со стороны протокола изменения конфигурации (CCP). По этой причине перед каждым внесением корректировок необходимо это действие активировать. Хорошо, что в приложении есть примечание, объясняющее, как это делать, и код я писал на примере из этого примечания 7 .
Таймер/счетчик TCD0
TCD0 настроен вести отсчет от 0 до 0xFFF и захватывать значение счетчика в регистр CAPTUREB при получении события B . Он генерирует прерывания при событии захвата, а также при переполнении счетчика, и тактируется от внешнего сигнала, поступающего через вывод EXTCLK/PA3 :
Служба прерываний при переполнении инкрементирует счетчик MSByte для старшей части значения частоты:
Служба прерывания при захвате считывает регистр захвата и совмещает его значение с MSbyte , формируя значение Counter .
Она также зажигает светодиод, сигнализируя о выполнении захвата. Если вам это не нужно, можете светодиод исключить.
События
Для того, чтобы задействовать события, нужно настроить переполнение RTC на генерацию события в канале 1, а TCD0 на использование этого события для выполнения захвата:
Канал событий 0 служит для создания инвертора между PA1 и PA2 , который, как говорилось выше, будет выступать в качестве кварцевого резонатора.
Основной цикл
Основной цикл ожидает установки глобальной переменной Ready , что укажет на выполнение захвата. Затем он копирует значение Counter в temp . При этом прерывания отключены, чтобы исключить возможное изменение этого значения службой прерываний в процессе его отображения:
При отсутствии входного сигнала TCD0 не тактируется, и значение Counter не обновляется. Для проверки подобной ситуации присутствует односекундный таймаут, который сбрасывает Counter на ноль, если Ready не была установлена. Нулевое значение отображается функцией PlotInt() в виде трех прочерков.
Точность
Для проверки этого проекта мне нужно было найти способ генерировать точные сигналы с частотой до 100МГц, но такого генератора у меня нет. Точность моего предыдущего проекта, Programmable Signal Generator, составляет всего 1.1%, чего для данного случая будет явно недостаточно, к тому же его верхний предел всего 68МГц.
В связи с этим я купил коммутационную плату генератора тактовых импульсов Si5351A от Adafruit 8 , которую можно через I2C запрограммировать на генерацию сигналов от 8кГц до 160МГц (еще есть вариант аналогичной платы на Banggood 9 ). Управление ей я реализовал через прекрасную библиотеку Si5351 Джейсона Миллдрама 10 , работающую на Arduino Uno.
Точность частотомера в первую очередь зависит от точности кристалла, используемого для генерации дискретизированного сигнала 1Гц. Я использовал цилиндрический кристалл с заявленной точностью 20ppm. Звучит неплохо, пока не вычислишь, что при входном сигнале 100МГц это эквивалентно ±2000Гц. На практике же его точность в целом оказалась раз в 5-10 выше заявленной.
Компиляция
Для компиляции используйте megaTinyCore Спенса Конде c GitHub. В меню Board под вкладкой megaTinyCore выберите опцию ATtiny1614/1604/814/804/441/404/241/204 . Проверьте, чтобы следующие опции были установлены так (на остальные внимания не обращайте):
Затем с помощью программатора UPDI загрузите программу на ATtiny414. Теперь megaTinyCore поддерживает две возможности:
- Создание программатора UPDI из Arduino Uno или другой платы на базе ATmega328P (инструкция на странице Make UPDI Programmer) и установку опции Programmer на jtag2updi .
- Использование платы USB-Serial, такой как SparkFun FTDI Basic 11 , подключение TX к выводу UPDI через резистор 4.7кОм, подключение RX напрямую к выводу UPDI и установку опции Programmer на Serial port and 4.7k (pyupdi style) .
Ошибку «Cannot locate flash and boot memories in description» можете проигнорировать.
Если же возникнет такая ошибка:
Это значит, что вы не установили опцию millis()/micros() как TCA0 , о чем говорилось выше.
Вот вся программа для частотомера до 100МГц: 100MHz Frequency Meter Program.
Дополнительные возможности
Интерфейс
Эта схема подразумевает, что сигнал представляет собой меандр с амплитудой равной логическому уровню. В частотомере для рабочего применения лучше всего реализовать управление счетчиком через аналоговый интерфейс с защитой входа. Как вариант, можно взять модуль, основанный на высокоскоростном компараторе TLV3501.
Измерение периода
Используемая в этом частотомере техника подсчета импульсов наиболее точна на высоких частотах. Данный подход можно совместить с измерением интервалов для низких частот, о чем я писал в статье Frequency Probe.
Источник