Stm32 частотомер
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь. Страницы: QRA: KP67lx. Цитата: Дмитрий Макаров от 13 Февраль , Novgorod R3TGM.
Поиск данных по Вашему запросу:
Схемы, справочники, даташиты:
Прайс-листы, цены:
Обсуждения, статьи, мануалы:
Дождитесь окончания поиска во всех базах.
По завершению появится ссылка для доступа к найденным материалам. ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: Самодельный измеритель емкости и индуктивности на микроконтроллере PIC 16F628A / PIC16F84
Микроконтроллеры STM32 и отладочные платы для них
Таймер — очень важное периферийное устройство в наборе внутренней аппаратуры микроконтроллера. Количество таймеров и их функциональных возможностей отличается от одного семейства микроконтроллеров STM32 к другому, однако все же у большинства таймеров есть общие функции и рабочие режимы.
Таймер STM32 разрабатывался как краеугольный камень большинства встраиваемых приложений: он используется для самых разных задач от управления двигателями до генерации периодических событий в приложениях. Спецификации таймера доступны во всех руководствах STM32, и информации по таймерам очень много из-за их широких функциональных возможностей. Назначение этого руководства перевод [1] — дать простое и ясное описание базовых функций и рабочих режимов таймеров STM32 общего назначения.
Это так называемые general-purpose таймеры сокращенно GP. Этот документ сопровождает спецификации периферийных устройств таймеров STM32, доступных в руководстве по каждой конкретной серии микроконтроллеров STM Примечание: расшифровку некоторых непонятных терминов и сокращений можно найти в статье [5].
Здесь будет предоставлено более глубокое описание основных функций таймера STM32, используемых для создания демонстрационного приложения. Здесь также будет описана архитектура используемого исходного кода.
В этом документе обсуждаются только простые вопросы, и не будут затронуты такие сложные темы, как приложения управления двигателями. Информация, представленная здесь, применима к следующим сериям микроконтроллеров STM Общая информация по таймерам STM Микроконтроллеры STM32 имеют несколько таймеров, которые используются для генерации отсчета времени, подсчета импульсов, измерения длительности импульсов и периодов сигналов, генерации сигналов ШИМ, переключения внешних устройств.
Перед тем, как начать рассматривать таймеры STM32, следует заметить, что они слишком сложны, чтобы в одной статье рассмотреть все их функции. Поэтому здесь мы рассмотрим базовые вопросы работы с таймерами, что позволит начать их использовать.
Полную информацию ищите в даташите на конкретную модель микроконтроллера. Из этих трех типов таймеров первые два будут общими для всех моделей STM Последний третий тип доступен только в старших моделях.
Количество таймеров определенного класса также меняется в зависимости от емкости или размера микроконтроллера STM Библиотека STM32CubeMX может использоваться для определения того, какие таймеры доступны в имеющейся модели микроконтроллера, если Вы не хотите заблудиться в большом массиве документации.
General purpose GP таймеры имеют все функции стандартного модуля таймера-счетчика, они почти такие же, как в большинстве 8-битных микроконтроллеров. GP-таймеры могут использоваться для любых связанных с отсчетом времени и подсчетом событий целей, в том числе и генерация ШИМ и захват импульсов. Изучение GP-таймеров позволяет лучше понять базовые концепции. Базовые таймеры доступны только в старших моделях STM32, и это самый простой класс таймеров.
Продвинутые таймеры в основном похожи на GP-таймеры, но имеют дополнительные возможности по генерации комплементарных сигналов ШИМ, а также формировать сигнал торможения и фазы ШИМ с «мертвым» интервалом, предотвращающим сквозные токи силового моста dead-time. Эти функции полезны для приложений, связанных с управлением двигателями, с силовыми инверторами, системами SMPS и другими задачами, связанными с источниками питания электроники и управлением мощностью.
В большинстве микроконтроллеров STM32 есть как минимум один такой таймер. В старших моделях STM32, продвинутых таймеров может быть два. Каждый таймер в микроконтроллере STM32 не зависит от других, и поэтому не использует никакие общие ресурсы.
Единственное, что общее между таймерами, это типы регистров, принципы именования регистров и общий принцип работы. С очень малыми исключениями модули таймеров более или менее совместимы по всем семействам микроконтроллеров STM Обычно большинство таймеров STM32 состоит из битного счетчика с автоматической загрузкой и битного прескалера.
Прескалер отвечает за деление приходящего тактового сигнала согласно потребностям приложения. Функция автоматической загрузки счетчика работает почти так же, как мы привыкли видеть в 8-битных микроконтроллерах, с единственным исключением.
В 8-битных MCU старой школы нам нужно было перезагрузить таймер после каждого прерывания или после каждого переполнения таймера. Это не требуется в таймерах STM32, так как обрабатывается автоматически. Однако в большинстве приложений традиционно и предпочтительно используется счет вверх.
Они могут использоваться следующим образом:. Таймеры могут тактироваться либо от внутреннего источника тактов тактового генератора RC или от генератора, стабилизированного внешним кварцем , или от внешнего источника тактов.
Внешние источники тактирования:. Из всей этой информации видна универсальность таймеров STM32, и по этой причине они не очень просты для освоения начинающими программистами. Перед тем, как мы начнем программировать, следует обратить внимание на возможно наиболее сложный набор регистров микроконтроллера STM32, относящийся к модулям таймера-счетчика. В конкретном приложении все эти регистры могут не понадобиться, и чтобы упростить их использование, мы просто обсудим их назначение для определенной задачи.
Еще одна важная вещь, которую стоить заметить — все регистры в ядре микроконтроллера ARM имеют разрядность 32 бита, и для модулей таймеров и многих других периферийных устройств многие биты в этих регистрах зарезервированы т.
Это упрощает обработку бит. Чтобы еще больше упростить кодирование, в этом руководстве будут использоваться собственные определения и функции, подобные тем, что находятся в библиотеке SPL от ST. Библиотеки MikroC также используют похожий подход к кодированию. Работа отдельных счетчиков, функций DMA и прерываний разрешается после настройки всего остального. Для регистров таймера значение по умолчанию это все нули, что означает запрет всех функций.
Таким образом, не нужно эти биты принудительно очищать при старте точно так же обстоят дела и с любым другим периферийным устройством STM Однако если Вам нужно поменять кое-что на лету, то лучше всего сначала сбросить все настройки, чтобы не попасть в ситуацию непредсказуемого поведения таймеров и обслуживающего их кода. Если точность не очень важна, то таймеры могут использоваться в качестве обычного средства отслеживания реального времени в программе.
Без сомнений таймеры более точны и эффективны, чем тупые пустые циклы задержки, но они не очень хороши для использования вместо выделенной аппаратуры RTC. Блок AFIO должен быть разрешен даже если переназначение не используется. Однако все равно не рекомендуется не превышать уровень напряжения питания VDD, который обычно составляет 3.
Очень важно, чтобы ток через вывод микроконтроллера не превышал предел, указанный в спецификации на микроконтроллер. Если выходной ток недостаточен, то применяйте усиливающие транзисторные ключи и микросхемы буфера. Утилита Timer Calculator от MikroElektronika MikroE позволит учитывать эти факторы для реальной тактовой частоты микроконтроллера.
Отсчет текущего времени в программе — основной режим таймера. В этом режиме работы таймер программируется так, чтобы он вызывал периодически генерируемые события с равными интервалами времени так называемый генератор временной базы. Для этой цели мы можем использовать любой таймер, однако лучше всего использовать или базовый таймер если он присутствует , или GP-таймер. Для создания генератора временной базы рационально использовать метод прерываний.
Сначала надо определиться, какой таймер использовать, и какая должна быть частота прерываний таймера. Затем нужно будет рассчитать значения для прескалера PSC , регистра автоперезагрузки auto-reload register, ARR и регистра счетчика повторений repetition counter register, RCR , если последний присутствует. Счетчики повторений доступны только в продвинутых таймерах. Можно использовать следующую формулу для определения частоты срабатывания прерываний:.
RCR будет нулевым кроме случаев, когда он доступен и используется, тогда формула будет следующей:. Для настройки таймера в качестве генератора базового времени нужно использовать следующие регистры вместо x подставляется номер таймера :.
Все микроконтроллеры STM32 оборудованы как минимум одним таймером, и многие из них имеют в своем составе периферии таймеры нескольких типов.
В этом документе рассматриваются обычные таймеры general purpose, GP-таймеры. GP-таймеры можно отличить от таймеров других типов по имени в руководстве микроконтроллера STM В документации микроконтроллеров STM32 GP-таймер именуется как «TIMx timer», где «x» может быть любым числом, и это не отражает количество таймеров, встроенных в этот микроконтроллер.
Например, микроконтроллеры серии STM32F имеют на борту таймер TIM17, однако общее количество таймеров в этом микроконтроллере меньше В основном через все семейства микроконтроллеров STM32 соблюдается принцип, что таймеры с одинаковым именем имеют один и тот же набор функциональных возможностей, но из этого правила есть несколько исключений. GP-таймеры, встроенные в микроконтроллеры STM32, используют одинаковую основную структуру; они отличаются только уровнем функций, встроенных в определенный таймер.
Блок базы времени. Блок каналов таймера. Блок функции Break. Этот блок в основном предоставляет управляющие сигналы для блока базового времени. Этот блок может быть сконфигурирован для вывода сигнала синхронизации сигнал TRGO рядом с определенным внутренним событием таймера. Он может быть сконфигурирован также для управления счетчиком базового времени в функции внешних событий наподобие внутренних событий других таймеров или внешних сигналов.
Можно сконфигурировать один slave-таймер для инкремента своего счетчика, базируясь на событиях master-таймера, таких как его обновление.
Этот управляющий блок использует сигнал выхода master-таймера TRGO. Нельзя их тактировать ни от другого источника тактов, ни от внутренних тактов. Блок базы времени сделан на основе счетчика вместе с каскадом прескалера и счетчиком повторений. Тактовый сигнал поступает в блок базы времени, проходя через каскад прескалера перед тем, как достичь счетчика базы времени.
Сигнал на выходе прескалера является тактовым сигналом счета, который поступает на каскад счетчика. Автоматическая перезагрузка счетчика работает следующим образом. Каждый раз, когда начинается новый цикл счета, срабатывает «событие обновления» таймера, пока счетчик повторений repetition counter равен 0. Если счетчик повторений не равен 0, то событие обновление не сработает, но перезапустится новый цикл счета, и содержимое счетчика повторений уменьшится на 1.
Не у всех таймеров STM32 есть счетчик повторений. Если его нет, то таймер ведет себя так, как если бы счетчик повторений был всегда равен 0. Блок канала таймера. Каналы таймера это рабочие элементы таймера, с помощью них таймер взаимодействует с внешним аппаратным окружением.
Канал таймера, отображенный на вывод микроконтроллера STM32, может использоваться либо как вход, либо как выход. Когда вывод сконфигурирован как выход, канал используется для генерации сигналов.
На основе этого постоянного логического сравнения и сконфигурированного подрежима выхода наподобие PWM1 mode или Inactive mode , канал таймера либо устанавливает, либо сбрасывает флаг OCyREF, и его значение поступает на каскад выхода канала. Каскад выхода применяет набор уточняющих операций к сигналу OCyREF, базируясь на наборе сконфигурированных параметров наподобие полярности канала или генерации интервала dead-time, и других параметров.
Частотомер на STM32F10x
Войти через. Найдите лучшие предложения hot stm32 частотомер. Защита Покупателя. Помощь Служба поддержки Споры и жалобы Сообщить о нарушении авторских прав.
суть делителя в том — что он ставиться вдобавок к частотомеру на свч Идея частотомера пока такая- STM32, АЦП оцифорвывает ПЧ.
STM32: Урок 6.2 — Таймеры общего назначения и продвинутые
Перейти к содержимому. Отправлено 24 Январь — Игорь Бутывский 24 Январь — писал:. MAZ 24 Январь — писал:. Отправлено 31 Октябрь — Отправлено 09 Ноябрь — Система для сообществ IP.
Частотомер на STM32F050F4
Вход Регистрация Восстановление пароля Вход Запомнить меня. Получить ссылку на изменение пароля. Частотомер на микроконтроллере stm Статья описывает способ измерения какой-либо внешней частоты с помощью микроконтроллера stm32 , а заодно является косвенным продолжением статей о таймерах.
Захват у STM
Частотомер + ШИМ на STM8L
Среда разработки Здравствуйте, у меня такой вопрос, можно ли с помощью STM8L, сгенерировать определенное количество Частотомер Привет всем, есть программа таймера частотомера написана на ассемблере, в протеусе проверил сам Сбоит частотомер Доброго времени суток! Проблема: считаю период входного прямоугольного импульса с помощью захвата Тут появилась задача сделать частотомер.
STM Урок 5. Библиотека HAL. STM32 CUBE MX. Таймеры
Логин или эл. Войти или Зарегистрироваться. Авторизация Логин или эл. How it all began… Как-то появилась у меня задача — померять частоту сигнала с некого датчика, который по сути являлся кварцевым резонатором с внешней схемой возбуждения. Об этом я узнал позднее, а до того момента пришлось откинуть разные варианты реализации, погрешность которых выходила больше — например с делителями входного сигнала.
STM32 CUBE MX. Таймеры Сегодня мы попробуем поработать с таймерами также с помощью библиотеки HAL. У нашего контроллера.
Частотомер до 1ГГц на STM32
В одной программе работает отлично, но вызывается правда постоянно с одним и тем же значением. В другой то ли работает криво, то ли не работает вообще:. Не пойму почему не выдерживается задержка?
Измерительная техника
Данные таймеры — это таймеры с расширенным управлением. Таких таймеров всего два. Это таймеры общего назначения. У них функционал очень ограничен, зато их у нас целых шесть. Далее идем в пункт
Войдите или зарегистрируйтесь как работодатель, чтобы увидеть контактную информацию.
Частотомер для ГПД на STM32F100
Запросить склады. Перейти к новому. Частотомер на stm Подскажите, пожалуйста, как настроить таймер 3 для измерения частоты входного сигнала в stm32f Меню пользователя Batisto4ka Посмотреть профиль Отправить личное сообщение для Batisto4ka Найти ещё сообщения от Batisto4ka.
Авторизация Зарегистрироваться Логин или эл. Напомнить пароль Пароль. Войти Запомнить меня. Продолжаем тему таймеров в STM
Дайте немного космоса или микроконтроллер как частотомер
Все знают о спутниковых системах определения координат. Они также позволяют узнать скорость и текущее время. На основе таких систем строят серверы точного времени, о которых уже много раз здесь говорилось, и не только здесь. Точность этих систем растет, цена падает, короче, прогресс не стоит на месте. Совсем, казалось бы, недавно речь шла о миллисекундах, и вот уже микросекунды никого не удивляют. И недалек тот день, когда…
Честно говоря, этот день уже настал для меня. Не так давно попалась на глаза информация о том, что один из производителей для своих модулей обещает точность интервала выходного сигнала PPS порядка десятков наносекунд.
Другими словами, появился эталон секунды с очень приличной точностью. Правда, он не всегда под рукой, и часто зависит от внешних обстоятельств, но вы можете добиться благоприятных условий и получить его. И, главное, как бы скопировать себе.
На всякий случай я посмотрел, как идут дела у других производителей подобной продукции и обнаружил примерно такие же технические характеристики. “Тенденция, однако” — пронеслась мысль в моей голове, примерно, как у Штирлица. Надо было что-то делать.
Те из читателей, кто знает, как отпаять резистор от печатной платы или как припаять микросхему и даже умеют это делать, мысленно согласятся со мной, что иметь в хозяйстве частотомер, который обеспечивает точность 7-8 знаков, никогда не помешает. Особенно, если он будет занимать мало места, а вам не придется занимать много денег на его покупку. А те, у кого мысль не любит останавливаться могут подумать о часах, которые ошибаются на несколько секунд в год (в седьмом знаке, Клара). Поклонники любительской радиосвязи вспомнят, наверное, о конструировании хорошего самодельного узкополосного фильтра на кварцевых резонаторах.
Первое, что надо было сделать — это найти подходящее “железо”. Мне приглянулась простая оценочная плата с небольшим модулем Teseo-LIV3F от известной компании. Ниже показано, как она выглядит.
Эта штука продается с выносной активной антенной, которую можно установить ближе к окну, чтобы хорошо “видела” спутники. Перемычки (jumpers) выставлены на плате так, как требуется для нашего дальнейшего повествования и успешного программирования. На фото также присутствуют схемотехнические доработки в виде одного диода с хорошим быстродействием.
Схема доработок будет показана ниже. Производителем предусмотрено, что эту плату можно вставить в подходящую оценочную плату Nucleo с микроконтроллером на борту (на самом деле это разъемы для Arduino, но с 32-ух бит не хочется уходить). В описании самого GPS/GNSS модуля я нашел следующее.
Это весьма неплохо и может послужить первым приближением к хорошему частотомеру. Теперь у меня есть очень точный секундный интервал, и я могу подсчитать частоту колебаний, например, своего, собственноручно термостатированного, кварцевого генератора. И даже, возможно, подстроить ее в нужную для себя сторону. Это будет потом, наверное. А пока что захотелось замерить частоты кварцевых резонаторов, скопившихся в хозяйстве.
Подходящая плата из серии Nucleo построена на STM32L476RG. Она поставляется без кварцевого резонатора (часовой – не в счет). Ниже на фото показаны стрелками места, куда пришлось припаять недостающие элементы.
Этот вариант платы выбран по трем соображениям. Первое, генератор микроконтроллера с внешним резонатором работает от 4 до 48 МГц. Такие допуски есть не у всех микроконтроллерных плат Nucleo. Этот генератор мы и будем запускать с нашими кварцами. Второе, последовательный порт (UART) можно тактировать от отдельного встроенного RC-генератора с точностью 1% на частоте 16 МГц. Следовательно, не надо будет менять настройки и делители в конфигурации UART с изменением частоты внешнего генератора. И самое главное, для кварцевого резонатора предусмотрено место под навесной монтаж, куда можно установить разъемы, чтобы не припаивать каждый раз очередной резонатор.
Последовательный порт уже соединен с виртуальным USB портом в бортовом отладчике. Значит можно воспользоваться эмулятором терминала для вывода информации. После доработки и установки для кварца двух обрезков от цангового разъема, плата выглядит следующим образом.
Теперь надо запускать таймер ровно на одну секунду, а считать он будет импульсы своего системного тактового генератора, то есть частоту нашего кварцевого резонатора. К счастью, в таймере предусмотрен режим, при котором он одновременно сбрасывается и запускается от нарастающего фронта внешнего импульса.
Сразу захотелось сделать так, чтобы не усреднять несколько секундных измерений, а мерить частоту за десять секунд, то есть, более точно. Для этого, собственно, и потребовалось добавить в схему диод и поддержать эту мысль программным путем. Доработка схемы показана ниже.
На следующих диаграммах показано, как из секундного интервала сделать десятисекундный.
Сигнал PPS подается на таймер через диод, а на дополнительный вход внешнего прерывания – напрямую. В прерывании от таймера разрешается внешнее прерывание, которое, досчитав до десяти, запрещает себя и меняет подтягивающий резистор с верхнего на нижний.
Красными стрелками показаны моменты срабатывания прерывания таймера, а зелеными отмечены моменты запуска внешнего прерывания, по которому считаются требуемые секундные интервалы. Синим показано включение-выключение подтягивающих резисторов. Проект сделан в IAR и посмотреть его можно здесь. На фото ниже показан результат работы программы контроллера совместно с эмулятором терминала, на котором видно установившееся состояние.
Чтобы увидеть график, а не сухие строчки значений частоты, пришлось сочинить небольшую утилиту под Windows. Ее тушка находится там же где и проект прошивки.
Все эксперименты проходили по одинаковому сценарию. Перед измерениями плату оставляли на пятнадцать — двадцать минут в холодильнике, где было чуть ниже нуля. Затем она естественным путем нагревалась до комнатной температуры в течение получаса. Потом плата и резонатор получали от фена теплый воздух на несколько минут (тут одинаковых условий не получилось).
Хорошие резонаторы вели себя хорошо, то есть в соответствии с графиком температурной зависимости AT среза кристалла. Эти графики (или многочисленные копии?) легко отыскать в сети. Ниже показаны результаты измерений трех резонаторов на 16 МГц.
Потом оказалось, что бывают исключения из привычной картины поведения. Ниже показаны данные двух кварцев одинакового вида и, скорее всего, одного происхождения, которые повели себя по-разному.
На резонатор, который ведет себя привычно, я просто подышал немного, а второй решил нагреть сильнее, поскольку он показал себя иначе. Как легко видеть зависимость от температуры у него или сдвинута, или просто другая.
Еще одно интересное наблюдение. После воздействия по температуре, резонатор не возвращается к прошлым значениям частоты, или у меня не хватило терпения дождаться. В любом случае, это не важно, если вас не волнуют знаки после шестого.
Вот еще одно наблюдение. Это один и тот же резонатор, который пришлось замерить дважды, поскольку он вызвал удивление. Я пока объяснения такому поведению не нашел и не придумал.
Полезно было бы снять индивидуальную зависимость частоты от температуры для отдельного резонатора. Тогда можно сделать высокостабильный генератор секундных интервалов используя хороший датчик температуры и зная температурную кривую резонатора. Однако, для этого уже понадобится термокамера. Интересно, какие датчики температуры сегодня можно считать хорошими?
Автор: Сергей
Источник
Рис. 1. Блок-схема частотомера, использующего метод прямого счета.
1 Интерполирующий частотомер FC-510 (черновик) Частотомер является одним из самых распространенных измерительных приборов. Существует много разных по принципу действия частотомеров, но в последнее время все они практически полностью вытеснены электронно-счетными частотомерами. Современные частотомеры имеют встроенный микропроцессор и кроме измерения частоты сигнала могут осуществлять другие измерения: периода сигнала, длительности импульсов, скважности импульсов, количества импульсов, суммы, разности и отношения частот двух сигналов, разности фаз между ними и многого другого. Иногда сам частотомер может осуществлять статистическую обработку результатов измерений: поиск минимума и максимума, среднего значения, стандартного отклонения и т.д. с выводом значений на дисплей или в порт. Таким образом, современный частотомер представляет собой сложный измерительный прибор с широкими возможностями. Электронно-счетный частотомер может использовать разные методы измерения частоты. Каждому методу присущи свои достоинства и недостатки. Ниже будут рассмотрены основные из этих методов. Метод прямого счета Самым простым способом измерения частоты является метод прямого счета. Метод заключается в подсчете количества периодов входного сигнала за известный промежуток времени. Поскольку частота сигнала это количество периодов за единицу времени, то если выбрать промежуток времени, равный 1 сек., то полученное количество периодов будет численно равно частоте входного сигнала в герцах. Полученное значение счетчика можно сразу выводить на индикатор, никаких математических операций не требуется. Благодаря этой особенности частотомеры прямого счета без труда могут быть построены на простой логике, и они получили широкое распространение. Блок-схема такого частотомера приведена на рис. 1. Fref Gate T IN Fin & Counter N Рис. 1. Блок-схема частотомера, использующего метод прямого счета. Для получения измерительного интервала T используется сигнал опорной частоты, который подается на вход счетчика Gate. В течение измерительного интервала на второй счетчик Counter N пропускаются импульсы входной частоты Fin. Значение N, полученное в счетчике после окончания измерительного интервала, позволяет определить частоту входного сигнала: Fin = N / T. При T = 1 сек. частота Fin = N, поэтому значение счетчика Counter N можно непосредственно выводить на индикатор.
2 Поскольку измерительный интервал не синхронизирован с входным сигналом, в начале и в конце измерительного интервала возникает погрешность Tb и Te соответственно (рис. 2). Fref Gate Fin Tb Te N Рис. 2. Возникновение погрешности счета. Интервалы Tb и Te являются независимыми случайными величинами, каждая из которых лежит в интервале 0 Tin, где Tin период входного сигнала (Tin = 1 / Fin). Реальная длительность N периодов входной частоты равна N Tin = T + Tb Te. С учетом возможных диапазонов интервалов получаем N Tin = T ± Tin, или T = Tin (N ± 1). Отсюда Fin = (N ± 1) / T. Возникает погрешность, известная как ±1 единица счета. На рис. 3 показано, как небольшое изменение частоты входного сигнала (или даже изменение момента переключения входного компаратора, вызванное шумами) может привести к изменению показаний в диапазоне от 3 до 5. Gate Fin N = 4 Tb Te Gate Fin N = 3 Gate Fin N = 5 Рис. 3. Погрешность ±1 единица счета.
3 Поскольку при уменьшении частоты число N будет уменьшаться, то относительная погрешность измерения, связанная с ошибкой N на ±1, будет расти. Или, с другой стороны, количество значащих цифр результата измерения будет уменьшаться с уменьшением частоты. На рис. 4 приведен график зависимости разрешения (количества значащих цифр) для метода прямого счета в зависимости от частоты для интервала счета 1 сек. (для других значений интервала счета график будет пропорционально сдвигаться вверх или вниз). Digits k 10k 100k 1M 10M 100M 1G Fin, Hz Рис. 4. Зависимость разрешения от частоты для метода прямого счета. На рис. 4 видно, что с понижением частоты разрешение у частотомеров прямого счета падает. Для работы с сигналами высокой частоты такие приборы еще подходят, а вот на низких частотах разрешение оказывается совершенно недостаточным. Допустим, требуется измерить частоту около 1 кгц. При интервале измерения 1 сек. получим одно из следующих значений: 999 Гц, 1000 Гц, 1001 Гц. Относительная погрешность измерения составит ±0.1%, а это довольно плохо. Еще хуже обстоит дело с измерением более низких частот. На частоте 100 Гц погрешность составит ±1%, а на частоте 10 Гц ±10%. Уменьшить погрешность можно увеличением измерительного интервала, но устанавливать его больше 10 сек. не является практичным. С повышением частоты разрешающая способность метода прямого счета растет, достигая весьма высоких значений. Например, при измерении частоты 10 МГц при длительности измерительного интервала 1 сек. частотомер может показать Гц, Гц, или Гц. Относительная погрешность измерения составит ± %, что весьма неплохо. На более высоких частотах разрешение будет еще выше. Но на практике существует ограничение, связанное с ограниченным быстродействием логических схем, на которых построена схема частотомера. Как правило, верхняя граница частоты, которую можно непосредственно подавать на вход частотомера, лежит в пределах МГц. Для более высоких частот применяют предварительные делители частоты (прескалеры). Использование прескалера снижает разрешение частотомера прямого счета пропорционально коэффициенту деления. На рис. 4 серой линией показан ход графика разрешения реального частотомера, у которого на высоких частотах включается прескалер с коэффициентом деления 100.
4 Измерение периода Чтобы исправить ситуацию при измерении низких частот, в некоторых частотомерах реализован режим измерения периода. Тогда в качестве интервала измерения используется один период входного сигнала Tin. В течение этого интервала производится счет импульсов M опорной частоты Fref. Частоту входного сигнала можно вычислить по формуле Fin = Fref / M, но для этого требуется операция деления. Для частотомеров на жесткой логике реализовать ее затруднительно, поэтому они обычно индицируют длительность периода в единицах времени. Например, если выбрать Fref = 1 МГц, то результат получится в микросекундах. Перевод значения периода в значение частоты предоставляется пользователю. Для метода измерения периода тоже будет присутствовать погрешность счета в виде M ± 1. Но поскольку значение M с уменьшением частоты входного сигнала увеличивается, то относительная погрешность измерения с уменьшением частоты будет падать. Надо отметить, что измерительный интервал для этого метода не является постоянным, он равен длительности периода измеряемого сигнала. На рис. 5 приведен график зависимости разрешения для метода измерения периода в зависимости от частоты входного сигнала (синий график). Digits k 10k 100k 1M 10M 100M 1G Fin, Hz Рис. 5. Зависимость разрешения от частоты при измерении периода. Для сравнения на рис. 5 показано разрешение для метода прямого счета (серый график). Видно, что для низких частот имеет преимущество метод измерения периода, а для высоких частот метод прямого счета. Комбинируя эти два метода, можно получить неплохое разрешение для любых частот. Хотя в районе звуковых частот разрешение все равно остается недостаточным.
5 Метод обратного счета (Reciprocal Counting) Существует метод измерения частоты, когда относительная погрешность измерения не зависит от значения входной частоты. Блок-схема такого частотомера приведена на рис. 6. Fref Tc Gate D C T Fin = Fref N / M Fref & Counter M IN Fin & Counter N Рис. 6. Блок-схема частотомера обратного счета (Reciprocal Counting). Сигнал опорной частоты Fref используется для получения желаемого интервала измерения Tс с помощью счетчика Gate. Этот интервал напрямую не используется для подсчета импульсов, а лишь разрешает формирование настоящего измерительного интервала T, который начинается и заканчивается синхронно с началом периодов входного сигнала. В течение этого интервала с помощью двух счетчиков производится счет количества входных импульсов N и количества импульсов опорной частоты M. Значение частоты входного сигнала можно вычислить по следующей формуле: Fin = Fref N / M. Для реализации таких вычислений частотомер должен содержать микропроцессор, но для современных приборов это трудностей не представляет. Временная диаграмма работы частотомера обратного счета показана на рис. 7. Fref Gate Fin CntEn N Tb Te M Рис. 7. Временная диаграмма частотомера обратного счета.
6 Поскольку интервал T синхронизирован с входным сигналом, ошибки счета N не возникает. Но зато по-прежнему присутствует ошибка счета M ± 1. На рис. 6. серым цветом выделены случайные интервалы времени Tb и Te, которые приводят к этой ошибке. Интервал измерения T всегда остается приблизительно постоянным (это округленный до целого значения периодов входной частоты интервал Tc), поэтому вклад этой ошибки также остается приблизительно постоянным. Разрешающая способность частотомера обратного счета не зависит от значения входной частоты. Если описать метод обратного счета пошагово, то получится следующая последовательность: 1. Начинается формирование интервала измерения Tc. Этот интервал будет определять скорость обновления показаний и погрешность измерения (чем больше интервал, тем погрешность меньше). Сам интервал Tc можно формировать приблизительно, можно даже не использовать для его формирования опорную частоту. В случае реализации частотомера на микроконтроллере, для формирования Tc достаточно программно таймера. 2. После начала измерительного интервала Tc по ближайшему фронту входного сигнала начинает формироваться интервал счета T. В течение этого интервала разрешается счет входных импульсов N и импульсов опорной частоты M. Для этого требуются два счетчика. 3. Ожидание окончания интервала измерения Tc. 4. После окончания измерительного интервала Tc по ближайшему фронту входного сигнала завершается интервал счета T. При этом счет входных импульсов N и импульсов опорной частоты M прекращается. 5. По формуле Fin = Fref N / M вычисляется частота входного сигнала. В реальном частотомере к этой последовательности надо добавить обработку нештатных ситуаций, связанных с исчезновением входного сигнала во время измерения или с его слишком низкой частотой. В пункте 2 ожидание фронта входного сигнала имеет смысл делать только до окончания интервала Tc. Если фронт так и не был обнаружен, значит, входная частота слишком низкая для выбранного интервала измерения. В такой ситуации логично индицировать 0 Гц. Так же и с обнаружением фронта входного сигнала при окончании счета. После окончания интервала Tc имеет смысл ожидать фронт в течение времени не более Tc. Если фронт не приходит, это значит, что входной сигнал исчез во время измерения. В такой ситуации также логично индицировать 0 Гц. Если фронт входного сигнала был обнаружен с большой задержкой относительно начала интервала Tc, то на фактическое измерение останется слишком мало времени. Это приведет к потере разрешающей способности. Поэтому имеет смысл в момент обнаружения фронта входной частоты продлевать интервал Tc до его номинального значения. Эти дополнения нужны при реализации универсальных частотомеров. Если диапазон входных частот ограничен, и когда точно известно, что период входного сигнала всегда меньше измерительного интервала, таких проверок можно не делать. Выше было показано, что при измерении входного сигнала частотой 1 кгц относительная погрешность измерения для частотомера прямого счета с интервалом измерения 1 сек. составляет ±0.1%. У частотомера обратного счета при Fref = 10 МГц в тех же условиях получится N = 1000, M = , или При этом результат будет Гц, Гц или Гц. Относительная погрешность составляет ± %, что на 4 порядка лучше. Причем такая же погрешность сохранится для любой измеряемой частоты. На рис. 8 приведен график зависимости разрешения для метода обратного счета с интервалом счета 1 сек. в зависимости от частоты (зеленый график). Как и
7 для метода прямого счета, длительность интервала измерения будет пропорционально влиять на разрешение. Digits k 10k 100k 1M 10M 100M 1G Fin, Hz Рис. 8. Зависимость разрешения от частоты для метода обратного счета. Для сравнения на рис. 8 показано также разрешение частотомера прямого счета (серый график). При входной частоте, равной опорной частоте Fref, разрешение частотомеров становится одинаковым. На более высоких частотах у частотомера прямого счета появляется преимущество (серая область). Однако у реальных частотомеров прямого счета, которые на высоких частотах используют прескалеры, преимущество будет проявляться только в узком диапазоне частот (светло-серая область). Частотомер обратного счета тоже может использовать прескалер на высоких частотах, но в отличие от частотомера прямого счета это не приведет к падению разрешающей способности. В большинстве случаев у частотомера обратного счета имеется существенное преимущество. Особенно, если речь идет об измерении частот в звуковом диапазоне. Тем не менее, в подавляющем большинстве любительских частотомеров используется метод прямого счета. И это несмотря на то, что почти в каждом из них есть микроконтроллер. Проекты, в которых реализован метод обратного счета, можно пересчитать по пальцам []. Повышение разрешающей способности частотомеров обратного счета Для дальнейшего повышения разрешающей способности частотомеров обратного счета можно повышать значение опорной частоты Fref. Так сделано в некоторых промышленных приборах, но сложность этого решения оказывается довольно высокой. Дело в том, что опорная частота должна обладать высокой стабильностью. В качестве источника Fref применяют образцовые генераторы, которые, как правило, работают на относительно невысокой частоте. Типичным является значение частоты 10 МГц. Поэтому дальнейшее повышение частоты предусматривает ее умножение. При этом требуется как можно меньше ухудшить значение фазового шума, иначе появится дополнительная погрешность измерения. Для умножения иногда используют высококачественные схемы PLL, но чаще используется выделение высших гармоник из опорного сигнала с последующим их усилением и фильтрацией. Конструктивно такое решение оказывается довольно громоздким. Например, в частотомере SR-620 фирмы Standford Research выделяется 9-я гармоника опорной частоты 10 МГц, которая затем усиливается и фильтруется кварцевым фильтром.
8 Еще один способ повышения разрешающей способности состоит в уменьшении погрешности счета импульсов опорной частоты M. Как было показано на рис. 7, погрешность возникает из-за наличия двух случайных интервалов времени в начале и в конце счета. Если эти интервалы измерить и учесть при вычислении частоты, то погрешность можно значительно уменьшить. Каждый из интервалов имеет длительность в диапазоне от нуля до одного периода опорной частоты. При значении Fref = 10 МГц, длительность интервалов лежит в диапазоне нс. Для измерения малых интервалов времени может применяться ряд методов, таких как верьньерный метод, метод совпадений, основанный на использовании малых задержек, метод преобразования времени в напряжение, метод растяжки длительности импульса. Существуют интегральные решения для таких измерений, называемые TDC (Time to Digital Converter). Но они недостаточно распространены и имеют высокую стоимость. Аналоговый интерполятор Устройства, которые позволяют измерять интервалы времени внутри одного периода опорной частоты, часто называют интерполяторами. Наиболее распространенный способ построения такого устройства заключается в преобразовании длительности импульса в напряжение. В течение времени измеряемого импульса включается генератор тока I1 (рис. 9), который по линейному закону заряжает емкость интерполятора Cint. Когда импульс заканчивается, генератор тока выключается, а емкость продолжает хранить свой заряд. Уровень напряжения, до которого окажется заряженной емкость, пропорционален измеряемой длительности. Это напряжение можно измерить с помощью АЦП, выходной цифровой код которого будет пропорционален длительности импульса. После измерения конденсатор нужно разрядить с помощью ключа K, и интерполятор снова готов к работе. Если значение зарядного тока и емкости конденсатора выбрать так, чтобы при максимальной длительности измеряемого импульса (а это один период опорной частоты) напряжение на конденсаторе было равным полной шкале АЦП, то, например, при 10- разрядном АЦП можно получить разрешение по времени примерно 1/1000 периода опорной частоты. Для Fref = 10 МГц это разрешение составит 100 пс. Если с таким разрешением измерить интервалы Tb и Te, а затем вычислить полный интервал T и подставить его в формулу для расчета частоты, то получим разрешение, эквивалентное разрешению частотмера с опорной частотой 10 ГГц. Но на практике улучшение разрешающей способности будет несколько ниже, так как на работу интерполятора оказывают влияние шумы и помехи, как и на любую другую аналоговую схему. К тому же, процесс зарядки емкости интерполятора обладает некоторой нелинейностью. Но получить практическое улучшение примерно в 100 раз относительно несложно. Рис. 9. Аналоговый интерполятор с использованием АЦП.
9 Применение АЦП не является единственным способом реализации аналогового интерполятора. С помощью конденсатора и двух источников тока можно осуществить растяжку длительности импульса, после чего можно выполнить ее измерение методом заполнения опорной частотой. Рис. 10. Аналоговый интерполятор с растяжкой импульса. В схеме интерполятора с растяжкой длительности импульса имеются два генератора тока. Генератор разрядного тока I2 включен постоянно (рис. 10). Генератор зарядного тока I1 включается течение времени измеряемого импульса. При этом емкость интерполятора Cint заряжается по линейному закону током, равным I1 I2. Как только импульс заканчивается, генератор зарядного тока I1 выключается, и начинается разряд емкости током I2. Одновременно запускается счетчик, который измеряет длительность разрядки путем заполнения импульсами опорной частоты. По окончанию разрядки срабатывает компаратор, который останавливает счет. В счетчике будет содержаться число, которое представляет собой длительность растянутого импульса, выраженную в периодах опорной частоты. Коэффициент растяжки определяется отношением зарядного и разрядного токов. Обычно ток I1 выбирается в 100 и более раз больше тока I2. В результате разрешающая способность измерения длительности импульса повышается в 100 и более раз. Digits k 10k 100k 1M 10M 100M 1G Fin, Hz Рис. 10a. Зависимость разрешения от частоты.
10 На рис. 10a показана зависимость разрешения от частоты для всех методов: прямого счета (черный график), измерения периода (синий график), обратного счета (зеленый график) и обратного счета с интерполятором (красный график). Как видно, частотомер обратного счета с интерполятором превосходит по разрешающей способности все другие варианты реализации. Fref Gate Fin CntEn N Tb Te M Tb, Te Cint IntEn Nb, Ne Рис. 11. Временная диаграмма частотомера обратного счета с интерполятором. Временная диаграмма работы частотомера обратного счета с интерполятором приведена на рис. 11. С помощью логических схем формируются импульсы Tb и Te, которые подлежат растяжке. Эти импульсы включают генератор зарядного тока, в результате емкость интерполятора Cint заряжается до некоторого напряжения. После окончания импульса зарядного тока емкость начинает линейно разряжаться. В это время формируется сигнал IntEn, разрешающий работу счетчика интерполятора, который измеряет длительность процесса разрядки. По окончанию разрядки срабатывает компаратор, который снимает сигнал IntEn и запрещает дальнейшую работу счетчика. В результате после измерения микроконтроллер считывает значения N, M, Nb, Ne и вычисляет частоту входного сигнала по формуле Fin = Fref N / M + (Nb Ne) / k, где k коэффициент растяжки интерполятора. Разрешающая способность такого измерения повышается в k раз по сравнению с вариантом без интерполятора. На практике измерение длительности импульса от 0 до Tref представляет сложности, так как может потребовать сформировать очень короткий импульс Tb или Te. Быстродействие ключа тока зарядки является ограниченным, поэтому в случае очень короткого импульса схема будет обладать высокой нелинейностью или станет вовсе неработоспособной. Вместо
11 измерения длительности в интервале 0 Tref на практике используют измерение в интервале Tref 2Tref (рис. 12). Логика частотомера построена таким образом, что автоматически формирует импульсы, увеличенные по длительности на Tref. Поскольку при вычислении частоты требуется разность длительностей импульсов Tb и Te, удлинение их на одинаковую величину на результате не сказывается. M Tb Cint Tb + Tref IntEn Nb Рис. 12. Временная диаграмма работы реального интерполятора. Поскольку интерполятор является аналоговым устройством, ему свойственны различного рода нестабильности, например, временная и температурная. Если изменится какой-то из параметров схема, например, значение тока I1 или I2, значение емкости Cint, величина напряжения смещения компаратора и т.д., изменится и коэффициент растяжки k. А это приведет к погрешности измерения. Для устранения такой погрешности используется процедура калибровки интерполятора. В процессе калибровки логика частотомера вместо импульсов случайной длительности Tb и Te подает на вход интерполятора импульсы фиксированной длительности Tref и 2Tref. Эти значения как раз являются границами рабочего диапазона интерполятора. Сделав измерения для двух таких импульсов, можно вычислить значение k. Калибровка интерполятора проводится полностью автоматически и не требует много времени, поэтому ее можно проводить довольно часто, что позволит устранить влияние дрейфа аналоговых компонентов. На практике ограничивающими факторами повышения точности остаются лишь нелинейность и шум интерполятора. Continuous time stamping Нелинейность интерполятора может быть уменьшена с помощью определенных схемотехнических приемов []. Для уменьшения шума интерполятора можно использовать усреднение его показаний, что фактически является низкочастотной фильтрацией. Но в обычном понимании усреднение использовать нельзя, так как при каждом измерении на интерполятор поступает интервал случайной длительности, выходной код интерполятора тоже меняется по случайному закону. Чтобы полностью использовать потенциал аппаратной части частотомера с интерполятором, лучше задействовать интерполятор не только в начале и в конце измерительного интервала, а как можно чаще. Фактически, в конце измерения мы получаем пару значений: это значение количества входных импульсов N и момент времени, в который это значение получено. Момент времени выражается в количестве периодов опорной
12 частоты M и уточняется с помощью интерполятора. Такие пары значений можно получать не только в конце измерения, но и в его процессе. Если входная частота в процессе измерения остается неизменной, все полученные значения N должны лежать на некоторой прямой, имеющей определенный наклон. Этот наклон определяется значением входной частоты. В реальности из-за шума интерполятора значения будут иметь некоторое хаотическое отклонение от этой прямой. Применяя метод линейной регрессии (linear regression), можно определить наклон этой прямой по совокупности всех полученных точек. При этом эффективное значение шума будет уменьшено. Такой метод измерения получил название «Continuous time stamping» и применяется в некоторых современных частотмерах []. Для измерительных интервалов от 0.1 до 10 сек. этот метод дает улучшение разрешающей способности около 10 раз. Реализация метода требует возможности защелкивания счетчиков «на лету» в специальные регистры, которые микропроцессор может прочитать, не прерывая измерения. Это несколько усложняет логику частотомера. Другие методы повышения разрешающей способности Для частотомеров прямого счета тоже существуют методы повышения разрешающей способности. Счетчик такого частотомера подсчитывает количество импульсов входной частоты, которое укладывается внутри измерительного интервала. Округление количества импульсов до целого значения приводит к появлению ошибки квантования. Фактически, в процессе измерения производится определение среднего значения последовательности импульсов с помощью П-образной весовой функции (усредняющего окна Дирихле). Но это окно не является оптимальным []. Может быть найдено оптимальное окно с точки зрения минимизации среднеквадратической ошибки квантования. Для применения в цифровом частотомере подходят ступенчатые окна. Коэффициенты оптимального окна с числом ступеней N будут вычисляться по формуле a n = (n + 1)(N n). Эффективность применения окна будет увеличиваться с ростом числа N участков весовой функции. Процесс измерения частоты разбивается на N этапов. Результат, полученный на каждом этапе, умножается на свой весовой коэффициент. Затем все результаты складываются. В конце производится деление результата на площадь окна. При переходе к оптимальной весовой функции при N >> 1 среднеквадратическая относительная погрешность квантования будет составлять (6 / N) 1/2 от ошибки с П-образным окном. Вместо оптимального окна можно использовать треугольное окно (окно Бартлетта) или трапецеидальное окно. Такие окна совсем незначительно проигрывают оптимальному, зато они довольно просто реализуются на основе кода счетчика, формирующего измерительный интервал. Как вариант, формирование измерительного интервала можно реализовать с помощью реверсивного счетчика, который до половины интервала увеличивает свое значение, а затем уменьшает. Вместо подсчета входных импульсов по приходу каждого из них нужно прибавлять к значению накапливающего сумматора текущий код счетчика. Это будет эквивалентно применению треугольного окна. Применение весовых окон уменьшает погрешность квантования, но при этом усложняет реализацию частотомера, особенно в случае жестких требований по быстродействию. Поколения частотомеров Современные универсальные частотомеры представляют собой многофункциональные измерительные устройства, но все же основной функцией является измерение частоты. Фирма «Pendulum» делит частотомеры по используемому принципу измерения частоты на 4 поколения (таблица 1).
13 Таблица 1. Поколения частотомеров. Поколение Год Метод измерения Разрешение (для интервала 1 сек.) Прямой счет 2-8 разрядов Обратный счет 7-9 разрядов Обратный счет с интерполятором 9-11 разрядов Continuous time stamping 12 разрядов Согласно этой классификации частотомер FC-510 относится к приборам 3-го поколения. В то же время подавляющее большинство любительских частотомеров являются приборами 1-го поколения. Реализация частотомера обратного счета Как было показано выше, для реализации частотомера обратного счета требуются два счетчика. Один из них должен вести счет входных импульсов, а другой импульсов опорной частоты. При реализации частотомера на основе микроконтроллера в качестве счетчиков обычно используют встроенные таймеры. Как правило, все внешние сигналы микроконтроллера при переходе в домен внутренней тактовой частоты проходят через синхронизаторы. Поэтому максимальная частота счета внешних событий обычно ограничена величиной 1/2Fclk, где Fclk тактовая частота микроконтроллера. Если в качестве тактовой частоты используется опорная частота Fref = 10 МГц, то такой частотомер сможет измерять частоты до 5 МГц. Для измерения более высоких частот потребуется дополнительный делитель. Счет импульсов опорной частоты в режиме счета внешних событий невозможен, но без этого можно обойтись. Второй счетчик фактически осуществляет измерение временного интервала, что можно реализовать с использованием схемы захвата. При этом автоматически решается вопрос запуска и остановки счетчика синхронно с фронтами входного сигнала. Если на вход захвата таймера подать входной сигнал, то разница соседних захваченных значений будет соответствовать одному периоду входной частоты. Подобным образом можно измерить длительность любого количества периодов входной частоты, нужно только их подсчитать. Сделать это можно программно в обработчике прерывания по захвату. Но при этом максимальная частота входного сигнала ограничена возможностями программного счета импульсов и не превышает нескольких сотен кгц. Хотя в некоторых случаях этого может оказаться достаточно. Таким способом можно реализовать частотомер обратного счета на микроконтроллере семейства AVR. Пример такого частотомера показан на рис. 13. Входной сигнал подается на вход ICP1, никаких внешних схем или соединений не требуется. Результат выводится в порт в виде строки символов на скорости 9600 бод и может быть принят любой терминальной программой. Максимальная измеряемая частота составляет 500 кгц. Измерительный интервал задан равным 1сек., что при опорной частоте 10 МГц обеспечивает относительную погрешность измерения для любой частоты не более 0.1 ppm, что превосходит стабильрность большинства TCXO генераторов. Рис. 13. Пример частотомера обратного счета без внешней логики.
14 Для повышения максимальной входной частоты до 1/2Fclk заманчиво использовать для подсчета входных импульсов еще один таймер в режиме счета внешних событий. Однако при практической реализации этой идеи возникает проблема синхронизации двух таймеров. Дело в том, что в микроконтроллере отсутствует возможность разрешения или запрещения работы двух таймеров строго одновременно. В результате может появиться ошибка счета входных импульсов N ± 1, что приведет к значительной ошибке результата. Надо сказать, что даже такая развитая периферия, какой обладают микроконтроллеры семейства STM32, не позволяет простыми способами реализовать на внутренних таймерах частотомер обратного счета. В полной мере проблема решается лишь применением внешней логики, с помощью которой возможно корректное формирование измерительного интервала. Если появляется внешняя логика, тогда нет смысла ограничиваться максимальной входной частотой 1/2Fclk. Добавив внешний триггер или счетчик, можно повысить максимальную входную частоту до значения, определяемого лишь возможностями примененной логики. Таким же способом можно реализовать логику интерполятора и дополнительные режимы работы частотомера. Но сложность внешней логики при этом может превысить разумные пределы. В таких случаях оптимальным решением будет применение микросхемы CPLD. Фактически, можно реализовать всю цифровую часть частотомера внутри CPLD, но стоимость одного триггера в виде ячейки ОЗУ внутри микроконтроллера намного ниже, чем стоимость триггера внутри CPLD. В то же время, жесткие требования по быстродействию предъявляются лишь к незначительной части схемы частотомера. Это позволяет сочетать ресурсы CPLD и микроконтроллера таким образом, чтобы обойтись CPLD минимального размера (и стоимости). Поскольку измеряемая частота Fin и опорная частота Fref могут быть высокими, первые каскады счетчиков должны быть размещены в CPLD. Необходимая разрядность этих счетчиков должна выбираться исходя из максимальных значений частот Fin и Fref и максимальной входной частоты таймеров микроконтроллера. Вслед за первыми каскадами счетчиков можно включить таймеры микроконтроллера. Общая разрядность счетчиков частотомера должна быть высокой, чтобы обеспечить работу в широком диапазоне входных частот и измерительных интервалов. Поэтому разрядности аппаратных счетчиков обычно недостаточно. Но эту разрядность можно неограниченно наращивать за счет программных счетчиков, которые подсчитывают переполнения таймеров и хранят свои значения в ОЗУ. Переполнения являются редкими событиями, поэтому их обработка почти не загружает микроконтроллер. Получаются такие многоступенчатые счетчики: CPLD таймер микроконтроллера ОЗУ микроконтроллера. Суммарная разрядность счетчиков определяется максимальными значениями частот Fin и Fref и максимальной длительностью измерительного интервала. Рис. 14. Принципиальная схема цифровой части частотомера FC-510.
15 Схема цифровой части частотомера FC-510 показана на рис. 14. Микроконтроллер с помощью программного таймера формирует измерительный интервал и в виде сигнала Gate подает его на CPLD. После появления сигнала Gate ближайший фронт входного сигнала запускает счетный интервал. После снятия сигнала Gate ближайший фронт входного сигнала завершает счетный интервал. С началом счетного интервала разрешается работа счетчиков входных имульсов и импульсов опорной частоты. С выхода последнего разряда счетчиков сигнал поступает на входы таймеров микроконтроллера, которые осуществляют счет переполнений. По окончанию счета микроконтроллер считывает значения счетчиков из CPLD по трехпроводному последовательному интерфейсу, который использует сигналы SDATA, SCLOCK и FSYNC. При использовании метода обратного счета реальный интервал счета не совпадает с измерительным интервалом, формируемым микроконтроллером. Когда измеряемая частота относительно высокая, эти интервалы почти совпадают. Но когда период измеряемой частоты становится соизмеримым с длительностью измерительного интервала, ситуация меняется. Например, после того, как микроконтроллер сформировал сигнал Gate, фронт входного сигнала может появиться только в середине или даже в конце измерительного интервала, что вызовет сильный сдвиг начала интервала счета. Фронт входного сигнала в течение измерительного интервала T может не прийти вовсе, это должно расцениваться как попытка измерить частоту ниже 1/T и приводить к индикации нуля. Если реальный измерительный интервал задержан на какое-то время, для сохранения точности измерений микроконтроллер должен продлить сигнал Gate на такое же время. Аналогичная ситуация возникает и с окончанием интервала для этого требуется фронт входного сигнала, который может и не прийти. Поэтому микроконтроллер не просто формирует сигнал Gate заданной длительности, а работает по более сложному алгоритму. Микроконтроллер получает информацию о реальном измерительном интервале. Для опроса текущего состояния, которое требуется только во время счета, для экономии портов используется линия последовательного порта SDATA. Установив сигнал Gate, микроконтроллер ждет начала интервала счета. Если в течение измерительного интервала подтверждения начала счета нет, это означает, что входная частота слишком низкая или входной сигнал отсутствует. В таком случае индицируется ноль. Если подтверждение получено, микроконтроллер заново начинает отсчет измерительного интервала. По окончанию этого интервала микроконтроллер снимает сигнал Gate и ждет подтверждения окончания счетного интервала. Если подтверждение не появляется в течение еще одного счетного интервала, индицируется ноль. Если подтверждение есть, микроконтроллер считывает содержимое счетчиков CPLD, а также содержимое своих внутренних таймеров и переменных, в которых производился счет их переполнений. Из этих значений формируется число входных импульсов N и число импульсов опорной частоты M, на основе которых потом вычисляется частота входного сигнала. Реализация аналогового интерполятора Аналоговый интерполятор, примененный в частотомере FC-510, работает по принципу растяжки длительности импульса. Его схема приведена на рис. 15. Длительность растянутого импульса измеряется с помощью счетчика, который реализован в CPLD. В качестве компаратора используется входной логический элемент CPLD, порог которого составляет примерно 1.3 В. Генераторы зарядного и разрядного тока емкости интерполятора выполнены на транзисторах VT4 и VT5. Чтобы избежать переходных процессов, генераторы тока работают постоянно. Для выключения зарядного тока служит ключ на транзисторе VT3, который переключает зарядный ток на землю. Генератор разрядного тока при напряжении на емкости ниже некоторого значения выходит из линейного режима и перестает работать, но эта точка лежит ниже порога компаратора и на работоспособность схемы не влияет. В результате, внешняя схема, реализованная всего на трех транзисторах, дает увеличение разрешающей способности частотомера на два порядка. Если не считать, конечно,
16 задействованных для интерполятора ресурсов CPLD и фрагмента программы микроконтроллера. Рис. 15. Принципиальная схема интерполятора FC-510. Генератор разрядного тока, выполненный на транзисторе VT5, включен постоянно и обеспечивает ток разрядки около 400 мка. В исходном состоянии конденсатор интерполятора C3 разряжен до значения, соответствующего напряжению насыщения VT5. Генератор зарядного тока выполнен на транзисторе VT4 и также включен постоянно. Вместе с транзистором VT3 он образует переключатель тока. На базу транзистора VT3 через делитель R7R8 поступает импульс, подлежащий растяжке. Когда на выходе CPLD PulseOut присутствует логический ноль, транзистор VT3 открыт, а VT4 закрыт. Тока зарядки конденсатора при этом отсутствует. Когда на выходе PulseOut появляется единица, транзистор VT3 закрывается. При этом включается ток зарядки конденсатора интерполятора C3, в результате напряжение на нем начинает линейно нарастать. Когда импульс на выходе PulseOut заканчивается, ток зарядки прекращается. Поскольку генератор разрядного тока на VT5 работает всегда, тут же начинается процесс линейной разрядки конденсатора C3. Одновременно внутри CPLD запускается счетчик интерполятора. Как только напряжение на входе CPLD PulseIn становится ниже логического порога, счет прекращается. Конденсатор продолжает разряжаться дальше, причем по мере приближения к насыщению VT5 этот процесс становится нелинейным. Но это никак не влияет на работу интерполятора, к этому времени счетчик уже содержит значение измеренного интервала. При работе частотомера появляются два интервала случайной длительности, которые необходимо измерить. Один из этих интервалов (Tb) появляется в начале интервала счета, другой (Te) в конце. Поскольку длительность интервала счета достаточно большая (для FC-510 она лежит в пределах 1 мс 10 с), для измерения интервалов Tb и Te можно использовать одну схему аналогового интерполятора. За время интервала счета растянутый импульс Tb заведомо успеет закончиться, и интерполятор будет готов к измерению интервала Te. Как было сказано выше, интервалы времени Tb и Te, подлежащие измерению, лежат в диапазоне от 0 до Tref, т.е. они могут быть очень короткими. Короткие импульсы не в состоянии включить генератор зарядного тока, быстродействие которого ограничено.
17 Поэтому возле нуля будет наблюдаться заметная нелинейность. Чтобы избежать этой проблемы, управляющая логика, реализованная в CPLD, удлиняет управляющие импульсы для генераторов тока ровно на один период опорной частоты Tref. Это осуществить очень просто, так как окончание интервалов Tb и Te как раз приходится на фронт сигнала Fref. В результате, длительность импульсов, подлежащих растяжке, лежит в диапазоне от Tref до 2Tref. Как и любая аналоговая схема, аналоговый интерполятор подвержен действию различных дестабилизирующих факторов, таких как колебания температуры, нестабильность напряжения питания, дрейф параметров компонентов. Кроме того, компоненты аналогового интерполятора имеют некоторые начальные отклонения номиналов. Все это делает обязательным процесс калибровки. В результате калибровки необходимо определить точное значение коэффициента растяжки импульса. Калибровка не требует каких-либо дополнительных аппаратных затрат и может быть полностью автоматизирована. При калибровке логика интерполятора, реализованная в CPLD, формирует импульсы PulseOut длительностью Tref и 2Tref. Полученные результаты считываются из счетчика интерполятора и в дальнейшем используются при расчетах длительности интервалов. Калибровка интерполятора несколько усложняется тем, что заряд конденсатора начинается не от нуля, а от неизвестного значения (напряжения насыщения VT5). К тому же, точный порог срабатывания компаратора тоже неизвестен. Тем не менее, замерив две калибровочные точки, можно узнать все необходимые характеристики интерполятора. Рис. 16. Калибровка интерполятора. Пусть длительность импульса, подлежащего растяжке, равна Tx. За время S напряжение на конденсаторе C3 увеличится от своего начального значения до порога компаратора. Преодолев этот порог, напряжение продолжит рост и к моменту окончания импульса достигнет некоторого значения. После окончания импульса напряжение на конденсаторе начнет линейно уменьшаться и через время N достигнет порога компаратора. Время N мы измеряем с помощью счетчика, реализованного в CPLD. Время N связано с временем Tx соотношением: N = k (Tx S), где k отношение зарядного тока к разрядному. На этапе калибровки на интерполятор по очереди подаются импульсы длительностью Tref и 2Tref. В результате имеем систему из двух уравнений, решив которую, можно найти значения двух неизвестных k и S. На практике это делать не нужно. Дело в том, что при измерении частоты не стоит задача измерения отдельно взятых интервалов времени, а требуется измерить лишь разницу интервалов Tb Te. В этом случае неизвестную S можно исключить.
18 Пусть при калибровке на интервале 2Tref получилось значение длительности N1, а на интервале Tref значение N2. Учитывая, что N1 = k (2Tref S), а N2 = k (Tref S), разность результатов N1 N2 = k ((2Tref S) (Tref S)) = k Tref. Откуда k = (N1 N2) / Tref. Для запуска процедуры калибровки микроконтроллер формирует специальный сигнал, который поступает на вход CPLD CalibIn. Этот сигнал во многом аналогичен сигналу GateIn, но только не запускает измерение входной частоты. В начале сигнала CalibIn логика интерполятора производит измерение интервала 2Tref, а после окончания сигнала интервала Tref. После чего микроконтроллер может прочитать значение N1 N2. Длительность процесса калибровки не превышает двух циклов работы интерполятора, каждый из которых при Fref = 10 МГц длится не более 30 мкс. Поэтому калибровку можно проводить довольно часто. В FC-510 она проводится в начале и в конце каждого цикла измерения частоты. Полученные два значения коэффициента k усредняются. При измерении частоты с помощью полученной разности кодов счетчика интерполятора Nb Ne и полученного при калибровке коэффициента k можно определить разность интервалов Tb Te = (Nb Ne) / k. Теперь достаточно добавить полученную разность к значению измеренного интервала счета M, чтобы получить в k раз более точное значение этого интервала и во столько же раз повысить разрешающую способность частотомера. Поскольку и при калибровке, и при измерении используется только разница длительностей растянутых импульсов, нет необходимости передавать в микроконтроллер отдельно величины Nb и Ne. Счетчик, реализованный в CPLD и служащий для измерения длительности растянутого импульса, сделан реверсивным. При измерении Tb он работает на сложение, а при измерении Te на вычитание. Так можно обойтись всего одним счетчиком и в конце измерения передать в микроконтроллер готовую разность Nb Ne. Надо отметить, что это возможно только при измерении частоты, а также длительности больших временных интервалов, когда измерения коротких импульсов Tb и Te разнесены по времени. Если требуется точно измерить длительность короткого одиночного импульса, то понадобятся два отдельных аналоговых интерполятора, для каждого из которых в процессе калибровки нужно будет определить коэффициенты k и S. Выбор опорного генератора Метод обратного счета совместно с аналоговым интерполятором позволяют добиться очень высокого разрешения частотомера. При этом на первое место выходит погрешность, связанная с источником опорной частоты. Начальная погрешность частоты опорного генератора может быть учтена при калибровке частотомера. Но его временная и температурная нестабильность будут в полной мере сказываться на результате измерения частоты. Существуют различные варианты реализации опорного генератора, начиная с обычного кварцевого генератора, заканчивая квантовыми эталонами частоты. Они существенно отличаются по стоимости, габаритам, энергопотреблению. Сравнительные характеристики опорных генераторов разных типов приведены в таблице 2.
19 Таблица 2. Характеристики опорных генераторов. Тип опорного генратора Обычный кварцевый генератор (XO) Термокомпенсированный кварцевый генератор (TCXO) Термостабилизированный кварцевый генератор (OCXO) Генератор с синхронизацией от GPS Рубидиевый генератор Начальное отклонение частоты, ppm Температурная стабильность, ppm/ C Для любительского частотомера достаточной будет стабильность, которую обеспечивает термокомпенсированный кварцевый генератор (TCXO). При эксплуатации прибора в лабораторных условиях у хороших TCXO отклонение частоты не превышает 0.1 ppm. При желании можно применить и термостатированный генератор (OCXO), но его габариты и энергопотребление значительно выше. Применение более точных генераторов внутри частотомера вряд ли оправдано. Как вариант, можно предусмотреть возможность подключения внешней опорной частоты. Некоторый интерес представляет идея, используемая в генераторах с микропроцессорной стабилизацией (MCXO). В них в тепловом контакте с кварцевым резонатором находится датчик температуры. Для каждого значения температуры микроконтроллер по таблице компенсирует частоту генератора. Для таких генераторов типичный температурный коэффициент частоты обычно не превышает ppm/ C. В вычислительном частотомере ситуация еще проще не обязательно иметь точную и стабильную опорную частоту. Достаточно в каждый момент времени эту частоту знать. Поэтому для частотомера существует возможность пассивной термостабилизации, когда для каждого значения температуры микроконтроллер использует свое значение опорной частоты, взятой из таблицы. Достоинством метода перед активной термостабилизацией является нулевое время готовности к работе и отсутствие затрат энергии на нагрев элементов опорного генератора. Недостатком пассивной термостабилизации является необходимость построения таблицы температурной зависимости частоты для конкретного генератора. Базовый вариант частотомера FC-510 использует термокомпенсированный опорный генератор (TCXO). Частота этого генератора может лежать в широких пределах, конкретное значение частоты задается в меню. Наиболее распространенной является опорная частота 10 МГц. Именно такую выходную частоту имеют многие рубидиевые генераторы и генераторы, синхронизированные от GPS. В случае необходимости их можно использовать в качестве внешнего источника опорной частоты. Среди распространенных TCXO можно еще назвать генераторы на частоту 12.8 МГц и 13 МГц. Их тоже можно использовать в качестве опорного генератора частотомера. Чаще всего TCXO имеют синусоидальную форму выходного сигнала, поэтому частотомер FC-510 содержит формирователь опорного сигнала, собранный на транзисторах VT1 и VT2. С выхода формирователя сигнал поступает на CPLD, для этого задействован вход глобального клока GCLK2. Тактирование микроконтроллера может осуществляться этим же сигналом, который с CPLD подается на вход XTAL1. Но при этом в программе все константы должны соответствовать выбранной опорной частоте. Намного универсальнее вариант тактирования микроконтроллера от встроенного RC-генератора частотой 8 МГц. Тогда опорную частоту можно менять без перепрошивки микроконтроллера.
20 Входной тракт частотомера В зависимости от назначения частотомера требования к его входной части различаются. Универсальные частотомеры, способные работать в очень широком диапазоне частот, часто имеют два, а иногда и три раздельных входных разъема. Входной формирователь частотомера должен обеспечивать заданную чувствительность и заданное входное сопротивление. Первый вход обычно является низкочастотным. Он используется в полосе частот от DC до МГц. На таких частотах согласование входного импеданса частотомера и волнового сопротивления кабеля еще не требуется, так как кабель для таких длин волн представляет собой короткую линию. Поэтому обычно такой вход делают высокоомным. Предпочтительным является выбор таких же параметров входного импеданса, как у входов осциллографов (типично 1 МОм параллельно с пф). Тогда совместно с частотомером можно использовать стандартные осциллографические щупы с делителями. Второй вход обычно используется для измерения высоких частот, от десятков мегагерц до единиц или десятков гигагерц. Такой вход обычно имеет входное сопротивление 50 Ом. Низкочастотный вход В наиболее простых частотомерах низкочастотный вход обычно имеет связь по переменному току и нулевой порог, а его чувствительность задается гистерезисом компаратора. Такой вход подходит для многих случаев, но в более универсальных частотомерах есть возможность связи по постоянному току и регулировки порога. Особенно это актуально для частотомеров, предназначенных для работы в низкочастотном диапазоне. Рис. 17. Принципиальная схема входной части частотомера FC-510.
21 Входной формирователь FC-510 собран на отдельной плате, которая закреплена параллельно передней панели. Входной разъем низкочастотного входа частотомера имеет импеданс 1 МОм 30 пф, что типично для входов осциллографов. Сигнал с входного разъема поступает на переключатель S1 «AC/DC», который позволяет выбрать закрытый (accoupled) и открытый (dc-coupled) вход. Закрытый вход необходим для измерения частоты сигналов, которые имеют значительную постоянную составляющую. В то же время, он может не подойти для сигналов с изменяющейся скважностью, так как при этом будет меняться уровень нулевой линии. Входной динамический диапазон частотомера определяется как область линейной работы входного усилителя. Для частотомера высокая линейность входного усилителя не является настолько важной, как, например, для осциллографа. Однако из-за эффектов насыщения усилителя его скоростные характеристики могут ухудшиться, что может привести к искажениям счета. Кроме того, любой усилитель имеет ограниченный диапазон допустимых входных напряжений, поэтому всегда должна применяться защита от перенапряжений. Нужно иметь в виду, что при срабатывании защиты может упасть входное сопротивление. Для возможности измерения сигналов большой амплитуды и чтобы избежать перегрузок входного усилителя, входной блок частотомера имеет аттенюатор 1:10, отключаемый кнопкой S2 «1:10/1:1». Кроме устранения перегрузок усилителя, аттенюатор уменьшает влияние шумов. На самом деле, аттенюатор переключается между значениями 1:2 и 1:20. Это вызвано тем, что при напряжении питания аналоговой части ±5 В диапазон входных напряжений довольно мал. А с аттенюатором 1:2 он достигает ±5 В, что является наиболее практичным. С аттенюатором 1:20 входной диапазон составляет ±50 В, что тоже достаточно для большинства случаев. При измерении частоты более высоковольтных сигналов можно использовать стандартный осциллографический щуп с делителем 1:10. Другой положительной стороной использования аттенюаторов 1:2 и 1:20 является повышение надежности защиты от перенапряжений. В случае аттенюатора 1:1 входной разъем связан с входом усилителя через низкоомную цепь. При перегрузке по напряжению по ней будет протекать значительный ток. А для аттенюатора 1:2 с входным сопротивлением 1 МОм последовательно с входом усилителя оказывается включенным сопротивление 500 ком. Это существенно упрощает реализацию защиты, достаточно диодной сборки VD1. В качестве VD1 применена сборка BAV199, имеющая малый ток утечки. Недостатком применения аттенюаторов 1:2 и 1:20 является необходимость их частотной компенсации (аттенюатор 1:1 ее не требует). Это удваивает количество подстроечных элементов во входной цепи. Надо признаться, схемотехника входного аттенюатора в частотомере FC-510 не очень удачная. Причина кроется в том, что на первоначальном этапе проектирования ставилась задача переключать аттенюатор одной контактной группой. Для таких условий задача решена хорошо. Но использованные кнопочные переключатели имеют две контактные группы. Вполне можно было сделать два полностью независимых аттенюатора и коммутировать их по входу и выходу. Это сделало бы полностью независимой регулировку частотной компенсации. С другой стороны, в частотомере не требуется получения идеально плоской АЧХ, как, например, в осциллографе. С выхода аттенюатора сигнал поступает на вход буферного усилителя, который часто называют каскадом преобразования импедансов. Фактически он представляет собой истоковый повторитель на полевом транзисторе VT1, за которым следует эмиттерный повторитель на транзисторе VT3. Поскольку частотомер имеет режим открытого входа (dccoupled), то становится важным неискаженная передача постоянной составляющей. Сами по себе транзисторные каскады справляются с этим довольно плохо, поэтому введена сервопетля на ОУ U1, которая выравнивает постоянную составляющую на входе и выходе
Разработка простого частотомера на базе FPGA
На выходных
Прежде всего, я желаю всем вам счастливого китайского Нового года.
Справочник статей
Одна из больших работ в маленьких классах.
Я делал это раньше, потому что это был вопрос национального конкурса, а затем я искал в Интернете полдня. Все материалы измеряются с одинаковой точностью. Затем я просто выбрал другой …
Принцип измерения частоты
Существует три наиболее распространенных метода измерения частоты.
Прямое измерение
Измерьте количество импульсов измеренного сигнала в течение заданного времени затвора (обычно 1 с) и преобразуйте, чтобы получить частоту измеренного сигнала.
Периодическое измерение
Измеряя количество импульсов измеряемого сигнала за один цикл, частота измеряемого сигнала затем преобразуется.
Точность этих двух методов измерения связана с измеряемым сигналом, поэтому они относятся к методу измерения с неравной точностью.
Комплексное измерение
Предположим, что фактическое время затвора равно t, а число циклов измеренного сигнала равно Nx, затем он измеряет частоту измеренного сигнала в течение нескольких циклов, а затем преобразует частоту измеренного сигнала, чтобы преодолеть зависимость точности измерения от измеренного сигнала. Основная идея алгоритма состоит в том, чтобы синхронизировать сигнал затвора с тестируемым сигналом и управлять временем затвора t до целого числа, кратного периоду тестируемого сигнала. Во время измерения предварительно установленный вентиль открывается первым. Когда обнаруживается, что тестируемый вентиль закрыт, стандартный сигнал не прекращает отсчет немедленно. Вместо этого он останавливается, когда поступает обнаруженный импульс сигнала, и завершает целое число циклов тестируемого сигнала. измерения. Фактическое измеренное время затвора может не совпадать с заданным временем затвора, но максимальная разница не превышает одного цикла тестируемого сигнала.
Процесс измерения частоты
Поскольку это одно из объяснений домашней работы небольшого класса (даже если они считают электричество или основание пустоты), вот первые два метода. (Третий вид может связаться со мной для ссылки на исходный код.
Между прочим, я также написал процесс, который я использовал, чтобы выполнить национальный вопрос F чемпионата 2015 года
Формирование схемы
Он состоит в том, чтобы сформировать измеряемый сигнал в импульсный сигнал (прямоугольная волна), который может быть распознан счетчиком. Это немного сложнее. Многие люди думают, что нужно только реализовать высокоскоростной компаратор, но на самом деле, для измерения сигнала каждой амплитуды, сигнал должен быть Ограничение, AGC (автоматическая регулировка усиления), поднятие и последующее сравнение (прослушивание заявления г-на Чжу о снижении шума). Ожидание различных операций, но на самом деле оборудование написано другим небольшим партнером @ , поэтому Не волнуйтесь слишком сильно … Кажется, что есть чип, который напрямую реализует вышеуказанную обработку.
Общая рамка ПЛИС
Предыдущее заявление:
- Модуль последовательного порта, использованный в этом дизайне, был заменен старшим братом из Black Gold … либо продавать рекламу, либо просто объявлять …
- Версия кода v0.1, которая может быть реализована примерно, но не оптимизирована и не удалена. Оптимизированная версия сигнала будет использоваться в качестве следующего назначения малого класса …
- При первом чтении не рекомендуется читать исходный код
Описание порта
- ensig — это вывод управления внешним ключом, используемый для открытия шлюза (для отладки)
- sig — это входной сигнал
- rx — управляющий сигнал, возвращаемый последовательным портом 32
- tx — значение выходной частоты
Таймер 1с
Запись немного избыточна, в основном потому, что операций на две больше, чем внешних:
- Я не использовал асинхронный для запуска этого таймера (в противном случае я всегда писал его всегда @ensig, я решил использовать трехступенчатый синхронный сигнал запуска
- Две контрольные линии (сигналы) изолированы, start_up и op_reg.
module timer_1s(
clk,rst_n,en_sig,
gate_control //Выходной сигнал управления
);
input clk;
input rst_n;
input en_sig;
output gate_control;
reg [1:0] en_sig_edge;
reg [1:0] en_sig_edge_n;
reg start_up;
reg [31:0] count;
reg op_reg;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
en_sig_edge <= 2'b0;
end
else
begin
en_sig_edge <= en_sig_edge_n;
end
end
always @(*)
begin
if(!rst_n)
begin
en_sig_edge_n = 2'b0;
end
else
begin
en_sig_edge_n = {en_sig_edge[0],en_sig};
end
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
count <= 31'b0;
op_reg <= 1'b0;
end
else
begin
if(start_up && count!= 31'd49999999)
begin
count <= count + 1'b1;
op_reg <= 1'b1;
end
else
begin
count <= 31'b0;
op_reg <= 1'b0;
end
end
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
start_up <= 1'b0;
end
else if(count == 31'd49999999)
begin
start_up <= 1'b0;
end
else if(start_up == 1'b1)
begin
start_up <= start_up;
end
else if(count == 31'b0)
begin
start_up <= en_sig_edge[0]^en_sig_edge[1];
end
else
begin
start_up <= start_up;
end
end
assign gate_control = op_reg;
endmodule
Модуль измерения частоты
Первый взгляд на Excel
Метод прямого измерения слишком прост, не говоря уже о счетчике …
Использование двусторонних ребер фактически позволяет каждому записать регистр двустороннего сдвига ребра, фактически достаточно подсчитать одно ребро.
Видно, что мой модуль измерения частоты и сигнал затвора могут быть неактуальными, но из-за требований проблемы я продолжу выводить эти номера циклов, а затем выполню обработку данных для stm32, потому что это приведет к гораздо большему количеству результатов. Иметь дело с.
Основными задачами являются:
- Создайте часы 200M с PLL для подсчета и обнаружения краев
- Я написал сдвиговый регистр, срабатывающий по обоим краям
- Используется двухэтапный цикл расчета конвейера (то есть формула выше)
- Написать демо (duty_count) измерения рабочего цикла
module FRE_SINE_CHECK_MODULE(
clk,rst_n,gate,sig,
fre_count,duty_count
);
input clk;
input rst_n;
input gate;
input sig;
output [31:0] fre_count;
output [31:0] duty_count;
wire clk_200;
wire locked;
pll_200 pll_module(
. en_sig_edge[1]; //Обнаружить двусторонние края
reg [31:0] time_record[3:0];
always @(posedge clk_200 or negedge rst_n)
begin
if(!rst_n)
begin
time_record[0] <= 32'b0;
time_record[1] <= 32'b0;
time_record[2] <= 32'b0;
time_record[3] <= 32'b0;
end
else if(gate == 1'b0 )
begin
time_record[0] <= 32'b0;
time_record[1] <= 32'b0;
time_record[2] <= 32'b0;
time_record[3] <= 32'b0;
end
else
begin
if(edge_turn)
begin
time_record[0] <= counter;
time_record[1] <= time_record[0];
time_record[2] <= time_record[1];
time_record[3] <= time_record[2];
end
else
begin
time_record[0] <= time_record[0];
time_record[1] <= time_record[1];
time_record[2] <= time_record[2];
time_record[3] <= time_record[3];
end
end
end
reg [31:0] pipe_add_1;
reg [31:0] pipe_add_2;
reg [31:0] pipe_result;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
pipe_add_1 <= 32'b0;
pipe_add_2 <= 32'b0;
end
else
begin
pipe_add_1 <= time_record[0] + time_record[1];
pipe_add_2 <= time_record[2] + time_record[3];
end
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
pipe_result <= 32'b0 ;
end
else
begin
pipe_result <= pipe_add_1 - pipe_add_2;
end
end
reg [31:0] duty_count_reg;
always @(posedge sig or negedge rst_n)
begin
if(!rst_n)
begin
duty_count_reg <= 32'b0 ;
end
else
begin
if(gate == 1'b1)
duty_count_reg <= time_record[0] - time_record[1];
else
duty_count_reg <= 32'b0;
end
end
assign duty_count = duty_count_reg;
assign fre_count = pipe_result;
endmodule
Последовательный порт + часть stm32
Отвечает за отображение на дисплее и преобразование цикла вывода fpga в частоту. Поскольку последовательный порт использует черное золото, stm32 не входит в мои обязанности, поэтому я не буду здесь останавливаться на этом.
Вывод
Если вы случайно прочитали исходный код, а затем расстроились и проскользнули до конца, вы можете захотеть взглянуть на исходный код и взглянуть на слова и картинки … в конце концов, это оригинальный исходный код, который не был упорядочен (или даже искусственно созданные грамматические ошибки)
Как вы можете видеть, на самом деле его принцип чрезвычайно прост, подходит новичкам для начала и знаком с грамматикой verilog. Маленькие одноклассники и младшие старые собаки, кажется, начинают изучать этот язык. Возможно, попытайтесь объединить книгу профессора Ся Юйвэня, чтобы попытаться
Небольшое продвинутое домашнее задание: разбирайтесь в исходном коде (небольшая часть исходного кода и большинство комментариев было удалено для вас), избыточные части логики и ошибки удаляются
Первый год нового года больше, но в следующем году, если вы хотите сдать вступительный экзамен в аспирантуру, вам, возможно, придется начать меняться или просто отправить какое-то внеклассное расширение.
Еще раз настоятельно рекомендую, чтобы редактор cddn md мог добавить поддержку языка verilog …
Канал благодарности
У многих радиолюбителей в закромах валяется немало старых микросхем серии К155, в связи с чем возникает вопрос об их использовании. Как вариант предлагается для сборки неплохой частотомер с цифровой индикацией. Собранный частотомер позволяет измерять частоту синусоидальных гармонических и импульсных электрических колебаний от единиц Герц до десятков мегагерц и амплитудой от 0,15 до 10 В, а также считать импульсы сигнала. Структурная схема частотомера показана на рис. 1 Работа прибора основана на подсчете числа импульсов в течении определенного – образцового интервала времени. В режиме счета импульсов управляющее устройство блокирует источник образцовой частоты, двоично-десятичный счетчик ведет непрерывный счет поступающих на его вход импульсов, а блок цифровой индикации отображает результаты счета. Кроме того в конструкции увеличено количество цифровых индикаторов до пяти и соответственно количество микросхем счетчика К155ИЕ2 и дешифраторов К155ИД1. Расширение цифровой индикации дает более удобное отображение информации. Налаживание прибора сводится к проверке правильности монтажа и измерении питающих напряжений. Правильно собранный частотомер уверенно выполняет свои функции. Естественно вакуумные индикаторы можно заменить на более современные, светодиодные типа АЛС, а микросхемы на аналогичные новых серий. Форум по измерительной техникеФорум по обсуждению материала ЧАСТОТОМЕР
|
STM32. Настройка RCC в «железе».
Как и обещал, перехожу к вопросам настройки тактирования микроконтроллера STM32F100C4. Эта статья родилась из ковыряния в носу с простейшим макетом и многосерийными танцами вокруг вопросов настройки узлов МК.
Прежде всего, распечатайте себе структурную схему (дерево) системы тактирования из документа RM0041 Reference manual STM32F100xx advanced ARM-based 32-bit MCUs (стр.71).
Это позволит наглядно отслеживать «путь» тактовых импульсов от источников по всему контроллеру, анализировать делители, разветвители и пр. Причём рассмотрение структурной схемы полезно, и даже необходимо для всех субблоков и узлов микроконтроллера.
?так, прошлые опыты мне показали, что ядро контроллера работает на частоте 36 МГц, несмотря на утверждение техдокументации о максимальной частоте 24 МГц для STM32F100C4. Нужно разобраться в причинах этого явления…
Вдумчивое чтение юзермануала обнажило очень полезную «фишку» в микроконтроллерах рассматриваемого семейства. В них имеется вывод MCO (смотрим на структурную схему, зеленая птичка), на который возможно подавать один из 4-х тактирующих сигналов: — делённый на 2 выходной сигнал умножителя PLL; — выход внутреннего RC-генератора HSI; — выход внешнего кварцевого генератора HSE; — системный тактовый сигнал SYSCLK. «Полезность» же вывода MCO заключается в возможности использовать его для тактирования внешних устройств аппаратно, без задействования программных ресурсов, ну, и, конечно, в возможности вывода на него различных клоков МК и контроля их осциллографом. Напишем пару строчек кода чисто для «погонять сигналы».
Подключаем осциллограф, выбрав сигнал SYSCLK входным для MCO (раскомментировав соответствующую строку). Да, реально частота 36 МГц.
Прохожу в симуляторе пошагово инициализацию камня и причина находится без особого труда. Смотрим скриншот ниже
При выполнении функции SetSysClockTo24 установки частоты 24 МГц (максимальной в зависимости от типа выбранного нами семейства контроллера) оная рассчитывается по формуле PLL configuration = (HSE / 2) * 6 = 24 MHz , подразумевая, что внешний кварц HSE — 8 МГц. У нас же HSE — 12 МГц, естественно, что 12/2 * 6 = 36. Как видите, при частоте ядра контроллера большей чем максимальная на треть, работа вполне стабильна!!! Хотя на некоторых форумах я встречал посты в которых народ пишет о нестабильной работе узлов микроконтроллера в таком режиме. Однако, разработчики почему-то ограничили максимальную частоту для STM32F100C4 на уровне 24 МГц, и, наверное, имели все для этого основания! Поэтому множитель PLLMULL и мы изменим с 6 на 4 (смотрите скриншот). После таких изменений частота становится, как и должна быть — 24 МГц.
Согласно инициализации микроконтроллера, которую я отслеживал в режиме отладки, «путь» тактового сигнала от его источника (внешнего кварца) до потребителей отмечен на структурной схеме в начале статьи красным сплошным, а красным пунктиром — вывод его на МСО.
Для закрепления своих знаний по настройкам тактирования STM32F100C4 советую в приведённом проекте в файле инициализации поизменять различные настройки тактового сигнала: источники, коэффициенты делителей, умножителей и пр., и пронаблюдать на экране осциллографа, как изменения в программе меняют тактирование в «железе». Если при этом перед глазами будут распечатанная структурная схема и описания управляющих регистров — то процесс уяснения, несомненно, пройдёт гораздо плодотворнее.
STM32 — счетчик частоты с модулем таймера Как настроить таймер как счетчик, и какие возможны варианты настройки. И мы сделаем пару практических лабораторных работ, первая из которых представляет собой базовый цифровой счетчик, а вторая — мини-проект счетчика частоты. Давайте погрузимся в это!
Необходимые компоненты для лабораторных работ
Все примеры кода/лабораторных работ/проектов в курсе будут выполняться с использованием указанных ниже плат.
★ Ознакомьтесь со списком комплектов полного курса
Некоторое чрезвычайно полезное тестовое оборудование для устранения неполадок:
Раскрытие партнерской информации: Если вы нажмете на ссылку в этом разделе и сделаете покупку, это может привести к тому, что этот сайт заработает комиссию. Партнерские программы и членство включают, помимо прочего, партнерскую сеть eBay (EPN) и Amazon.com.
Лаборатория режима счетчика STM32 Предисловие
Как мы обсуждали в предыдущем руководстве, модули таймера могут работать в режиме счетчика.Где таймер тактируется от внешнего источника (входной контакт) и подсчитывает количество импульсов. Однако модули таймера STM32 имеют несколько режимов для самого режима подсчета. Вот краткое описание каждого из них, но в конце дня мы будем использовать режим прямого счета.
1 Режим обратного счета
В режиме обратного счета счетчик считает от 0 до значения автоматической перезагрузки (содержимое регистра TIMx_ARR), затем перезапускается с 0 и генерирует событие переполнения счетчика.Событие Update может генерироваться при каждом переполнении счетчика или установкой бита UG в регистре TIMx_EGR (с помощью программного обеспечения или с помощью контроллера ведомого режима).
2 Режим обратного счета
В режиме обратного счета счетчик ведет отсчет от значения автоматической перезагрузки (содержимое регистра TIMx_ARR) до 0, затем перезапускается со значения автоматической перезагрузки и генерирует потерю значения счетчика. мероприятие. Событие Update может генерироваться при каждом опустошении счетчика или путем установки бита UG в регистре TIMx_EGR (с помощью программного обеспечения или с помощью контроллера ведомого режима).
3 Режим с выравниванием по центру (вверх/вниз)
В режиме с выравниванием по центру счетчик считает от 0 до значения автоперезагрузки (содержимое регистра TIMx_ARR) – 1, генерирует событие переполнения счетчика, затем считает от значения автоматической перезагрузки до 1 и генерирует событие опустошения счетчика. Затем он перезапускает счет с 0. В этом режиме бит направления (DIR из регистра TIMx_CR1) не может быть записан. Он обновляется аппаратно и выдает текущее направление счетчика.
STM32 Counter LAB9 Задачи
6
Шаг1: Открыть CubeMx & Создать новый проект
Шаг2: Выберите цель MCU и дважды щелчок его имени
STEP3: Настройка Timer2 Perifigrable для работы в Counter Mode
Примечание. что теперь источником синхронизации является внешний контакт (входной контакт timer2 ETR2), который, как вы можете видеть, выделен как A0 . Мы также можем настроить цифровой фильтр для этого входного канала, чтобы подавлять шум из-за дребезга переключателя.Значение фильтра может варьироваться от 0 до 15. И последнее, но не менее важное: выбор края для счетчика. Я хочу, чтобы счетчик подсчитывал каждый нарастающий фронт входного контакта.
Я также включу функцию автоматической перезагрузки и установлю верхний предел счета на 20 «значение предварительной загрузки». Теперь всякий раз, когда счетчик считает 20 тиков, он переполняется и генерирует сигнал прерывания!
9002
STEP4: Включить сигнал прерывания таймера в NVIC Tab
STEP5: Configure Module USArt1 Для работы в Async Mode с 9600BPS
STEP6: Установить внешний источник RCC Source
Шаг 7. Перейдите к настройке часов
Шаг 8. Установите системные часы на 72 МГц или любое другое значение
. Использование
Затем откройте проект в используемой среде IDE.И перейдите к файлу main.c. Итак, мы можем начать писать код приложения и взглянуть на код инициализации, сгенерированный инструментом STM32 CubeMX.
Прикладной код в Cubeide
Вот сгенерированный код инициализации в Main.cile
1 2 3 4 5 6 7 7 8
8 9 10 12 11 13 12 13 12 14 13 15 16
17 18 19 20 19 21 20 21 22 23 24 | #include «main.h «
tim_handletypedef htim2;
uart_handletypedef huart1;
void systemclock_config (void); Статическая пустота mx_gpio_init (void); Статическая пустота mx_tim2_init (void); статическая пустота mx_usart1_uart_init void);
int main (void) { hal_init (); systemclock_config (); mx_gpio_init (); mx_tim2_init (); mx_usart1_uart_init ();
(1) {
} } |
Теперь приложение, которое мы сейчас разрабатываем, предназначено для многократного считывания строки с терминала Timer2 для подсчета тактов через UART1 и вывода значения мониторинг.И всякий раз, когда он достигает 20, срабатывает прерывание. И это тот же сигнал прерывания из предыдущего урока, и у него будет та же функция-обработчик.
Итак, откройте файл stm32f1xx_it.c, чтобы найти обработчик прерывания таймера, которым является функция TIM2_IRQHandler(). Наведите указатель мыши на функцию HAL_TIM_IRQHandler() и щелкните правой кнопкой мыши, чтобы перейти к ее реализации.
void TIM2_IRQHandler(void) {
HAL_TIM_IRQHandler(&htim2);
} |
После перехода к процедуре обработки прерывания таймера вы найдете следующую реализацию.В этом коде мы ищем имя функции обратного вызова, которая вызывается при возникновении прерывания по переполнению. Вы можете заметить, что все источники имеют одинаковый выход сигнал прерывания.
9
10
10
11
12
13
13
14
15
16
17
16
18
17
18
20
19
20
21
22
23
22
23
void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
{
// Другой таймер прерывает события..
// ..
// ..
// ..
// ..
// ..
/ * TIM Обновление события * /
Если (__hal_tim_get_flag (htim, tim_flag_eupdate)! = Сброс)
{
, если (__hal_tim_get_it_source ( htim, TIM_IT_UPDATE) != RESET)
{
__HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);
#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
htim->PeriodElapsedCallback(htim);
#else
HAL_TIM_PeriodElapsedCallback(htim);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
}
}
//..
//..
// Другие события прерывания таймера..
}
Теперь у нас есть имя функции обратного вызова, которая вызывается всякий раз, когда происходит переполнение таймера. Это HAL_TIM_PeriodElapsedCallback(). Итак, напишем для него свою реализацию в файле приложения (main.c). И стоит упомянуть, что вы также должны включить (запустить) таймер, чтобы он синхронизировался и начал считать, иначе он останется бездействующим.
Полный код LAB (главн.C)
1 2 3 4 6 5
6 7 8 70002 9 8 9 10 11 12 13 12 13 14 15 16 170002 16 17 18 19
19 21 20 22 21 23 22 21 23 25 24 25 240002 26 25 27 28 27 28 29 30 31 32 32 33 34 35 35 36 37 37 38 39 39 40 41 | #include «Main.h»
TIM_HandleTypeDef htim2;
UART_HandleTypeDef huart1;
uint8_t END_MSG[35] = «Переполнение достигнуто! Сброс счетчика! \ N \ r «;
void systemclock_config (void); Статическая пустота mx_gpio_init (void); Статическая пустота mx_tim2_init (void); Статическая пустота mx_usart1_uart_init (void);
INT MAIN (void) { uint8_t msg [20] = {‘\ 0’}; uint16_t counterticks = 0;
hal_init (); systemclock_config (); mx_gpio_init (); MX_TIM2_INIT (); MX_USART1_UART_INIT (); HAL_TIM_BASE_START_IT (& HTIM2);
В то время как (1) { // Читайте счетчик щипновений щипцов counterticks = TIM2-> CNT; // Распечатать количество тиков через UART1 sprintf(MSG, «Ticks = %d\n\r», CounterTicks); HAL_UART_Transmit(&huart1, MSG, sizeof(MSG), 100); (_) ; } } }
// Счетчик переполнения ISR обработчик ISR void hal_tim_periodelapsedcallback (tim_handletypedef * htim) { hal_uart_transmit (& huart1, end_msg, sizeof (end_msg), 100); } |
Соберите и запишите код и давайте проверим результаты!
Примечание : стоит отметить, что вы должны запускать таймер в режиме прерывания, чтобы он синхронизировался и запускал сигнал прерывания при переполнении и так далее.В противном случае таймер вообще не будет работать.
HAL_TIM_Base_Start_IT(&htim2); |
2
0
0
Шаг1: Подключите ST-Link на USB Port & SWD Pins На плате
Шаг 2: Нажмите кнопку отладки, чтобы скомпилировать код, записать его на плату и начать сеанс отладки
Шаг 3: Вы можете остановить сеанс отладки или продолжить его.Но вам нужно перезапустить MCU один раз, чтобы запустить новое приложение в процессе загрузки.
Загрузка Countermode Lab9 Project
Результаты для этой лаборатории Push-кнопка -> A0 USArt1 -> USB-TTL Pins Тестовые видео Примечание : даже при установке фильтра входного канала на максимальное значение, контакт все еще улавливает некоторый дребезжащий шум от кнопки, а значение счетчика иногда перескакивает на несколько делений.Таким образом, может потребоваться внешний RC-фильтр на входном контакте или какие-либо средства аппаратного подавления дребезга.
0 1 STM32 Counter — LAB10
Lab Labout | 10 |
Лабораторное название | Модуль таймера в Counter Mode — частота счетчик мини-проекта |
- Настройте TIM2 в качестве счетчика и подключите его входной контакт к источнику сигнала. циклов в ISR TIM3, считывая тики счетчика TIM2 и умножая это значение на 20, вы получите фактическую частоту сигнала.
- Configure USART1 в Async Mode с скоростью передачи данных = 9600бин
- Распечатать вычисляемую частоту к последовательному порту клемма
STM32 CHASTACT CHANTER Project Lab
в этой лаборатории, наша цель — построить система, измеряющая частоту цифрового сигнала с помощью модуля таймера в режиме счетчика. Основная идея этого метода состоит в том, чтобы настроить другой таймер в режиме таймера и заставить его переполнять каждый конкретный интервал времени.Скажем, 50 мс ради этого эксперимента. Каждые 50 мс таймер переполняется и запускает сигнал прерывания, а в ISR мы проверим количество тиков в регистре счетчика. Это значение представляет собой количество полных циклов сигнала каждые 1/20 секунды. Таким образом, фактическая частота сигнала равна значению счетчика CNT, умноженному на 20.
Примечание : это не лучший способ измерения частоты. Тем не менее, это должно быть доказательством концепции и дать вам представление о том, как совместно настроить несколько периферийных устройств для выполнения конкретной задачи.Недостатки этого метода будут упомянуты в конце лабораторной работы после просмотра окончательных результатов.
Шаг 1: Открыть cubexx & Создать новый проект
STEP2: Выберите цель MCU и дважды щелчок его имени
Шаг 3. Настройка Timer2 Perifigrabe для работы в Counter Mode
Step4: Configure Периферийное устройство Timer3 для работы в режиме таймера (Tout = 0,05 с)
F CLK равно 72 МГц, я буду использовать прескалер со значением 100.Итак, найдя значение регистра предварительной загрузки. Получается 36000. Поэтому пропишем это значение во вкладке конфигурации.
Включить прерывания Timer3 на вкладке управления NVIC.
STEP5: Configure USART1 Модуль для работы в Async Mode с 9600BPS
Шаг6: установить RCC внешний источник часов
STEP7: Перейти к конфигурации часов
STEP8: Установите системные часы Чтобы быть 72 МГц
STEP9: Имя и генерировать код инициализации проекта для кубиджа или IDE, вы используете
Вот прикладной код для этой лаборатории
#include «главный.h «
uint32_t gu32_counterticks = 0x00; uint32_t gu32_freq = 0x00; uint8_t gu8_msg [40] = {‘\ 0’};
tim_handletypedef htim2; tim_handletypedef htim3; uart_handletypedef huart1;
Void SystemClock_config (void); Статическая пустота mx_gpio_init (void); Статическая пустота mx_tim2_init (void); Статическая пустота mx_tim3_init (void); Статическая пустота mx_usart1_uart_init (void);
INT Main (void) { hal_init (); systemclock_config (); mx_gpio_init (); mx_tim2_init (); mx_tim3_init (); mx_usart1_uart_init (); hal_tim_base_start (& htim2) ; HAL_TIM_Base_Start_IT(&htim3); в то время как (1) {
2 03} } void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) { if(htim->Instance == TIM3) { gu32_CounterT gu32_Freq = gu32_CounterTicks * 20; sprintf(gu8_MSG, «Частота = %d Гц\n\r», gu32_Freq); HAL_UART_Transmit(&huart1, gu8_MSG, sizeof(gu8_MSG), 100); TIM3->CNT = 0; TIM2->CNT = 0; } } } |
Полученные сообщения UART могут быть декодированы DSO , как вы можете увидеть на моем экране DSO, декодированное сообщение показывает 2020 Гц для сигнала 2 кГц, что довольно близко. Полученные сообщения UART на терминале последовательного порта (тестовое видео) ценность. Это не постоянная фиксированная ставка, поэтому мы можем легко компенсировать ее в коде. А также характер ошибки предполагает, что она повторяема и может быть вызвана несколькими причинами. Прежде всего, прерывание таймера (каждые 50 мс) является асинхронным сигналом.Он поступает не синхронно с входным сигналом, поэтому следует ожидать небольшой дрейф в измерении. Другой момент заключается в том, что задержка прерывания также может способствовать небольшому увеличению количества тиков. И очистка обоих TIM2,3 в конце ISR может немного помочь. Мы действительно можем устранить этот процент ошибок с помощью некоторых калибровок. Однако у этой техники есть и будет много ограничений. Период таймера (50 мс) определяет минимально допустимый входной сигнал, который может быть обнаружен и измерен. Итак, как я уже говорил ранее, это хорошее доказательство концепции, и оно прошло успешно. Но в следующем уроке мы обсудим ICU (модуль захвата ввода) и как настроить модуль таймера, чтобы его можно было использовать для очень точного обнаружения внешних событий. Это правильный способ выполнения таких измерительных задач и один из самых надежных вариантов. Следите за выходом новых руководств и не забывайте ДЕЛИТЬСЯ ими.И подумайте о ПОДДЕРЖКЕ этой работы, чтобы продолжать публиковать бесплатный контент! Нравится Загрузка…
Подобно этому:
Связанные
Сеть обмена стеками
Сеть Stack Exchange состоит из 179 сообществ вопросов и ответов, включая Stack Overflow, крупнейшее и пользующееся наибольшим доверием онлайн-сообщество, где разработчики могут учиться, делиться своими знаниями и строить свою карьеру.
Посетите биржу стека- 0
- +0
- Войти
- Зарегистрироваться
Электротехника Stack Exchange — это сайт вопросов и ответов для специалистов в области электроники и электротехники, студентов и энтузиастов.Регистрация занимает всего минуту.
Зарегистрируйтесь, чтобы присоединиться к этому сообществуЛюбой может задать вопрос
Любой может ответить
Лучшие ответы голосуются и поднимаются на вершину
спросил
Просмотрено 8к раз
\$\начало группы\$Этот вопрос в основном является запросом совета.
Пытаюсь реализовать частотомер на STM32F4. На данный момент у меня есть работающий преобразователь АЦП с DMA и таймером, который проверяет текущее значение напряжения и ловит пересечение нуля (с запасом) и считает счетчик.
Теперь, как лучше всего определить фактическую частоту? В смысле — полагаться на скорость таймера или использовать RTC?
Или есть способ лучше определить частоту?
спросил 19 марта 2013 в 12:38
Артурс ВанкансАртурс Ванканс72311 золотой знак1212 серебряных знаков2222 бронзовых знака
\$\конечная группа\$ \$\начало группы\$Я бы использовал схему детектора перехода через ноль (погуглите — их множество, очень просто), а затем (в зависимости от частоты, которую вы пытаетесь измерить) либо использовал таймер/счетчик захвата ввода для автоматизации подсчета, просто читая & сброс счетчика с заданными интервалами измерения (намного меньше нагрузка на ЦП) или использование входных импульсов для стробирования быстрого счетчика (для подсчета НИЗКОЙ частоты) и вычисления обратного (для низких частот проще измерить время, затрачиваемое на импульс, а не чем количество импульсов, накопленных за период времени).
Любой из них должен оставить вашему процессору очень мало тяжелой работы.
ответ дан 19 марта 2013 в 13:19
Джон ЮДжон Ю6 58922 золотых знака2020 серебряных знаков3333 бронзовых знака
\$\конечная группа\$ \$\начало группы\$Чтобы измерить частоту, вы обычно используете более высокую или более низкую и хорошо известную частоту.
Если вы хотите измерить частоту (намного) ниже частоты вашего системного генератора, вы можете сделать следующее: Выполните прерывание на нарастающем или спадающем фронте вашего сигнала и используйте его для запуска счетчика. При следующем прерывании вы читаете значение таймера.
Наоборот: На каждом нарастающем фронте вашего (теперь намного быстрее) сигнала увеличивается ваш счетчик. Через некоторое время (~100 -> ~10000 циклов сигнала) таймер считывает и сбрасывает счетчик.
ответ дан 19 марта 2013 в 13:22
БотникБотник2,17522 золотых знака1616 серебряных знаков3232 бронзовых знака
\$\конечная группа\$ 2язык-с
Ваша конфиденциальность
Нажимая «Принять все файлы cookie», вы соглашаетесь с тем, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой использования файлов cookie.
Принять все файлы cookie Настроить параметры
Подробный базовый таймер STM32 — Code World
Содержание
01.Введение таймера
02, источник часов
03. Базовая единица времени
04. Режим счета
4.1, режим прямого счета
4.2, режим прямого счета
4.3, выравнивание по центру (режим прямого/обратного счета)
05, код базовой синхронизации
Самая основная функция таймера — регулярно обрабатывать данные. Например, регулярно отправляйте данные USART, регулярно собирайте данные AD, регулярно определяйте потенциал порта ввода-вывода и выводите сигналы через порт ввода-вывода.Может реализовать очень богатую функцию. Таймер — очень мощное периферийное устройство. Различные отрасли используют его по-разному и обладают широким спектром знаний.
Прежде всего, мы можем найти ресурсы настройщика в руководстве по данным STM32F207. На рисунке ниже видно, что STM32F207 имеет в общей сложности 10 таймеров общего назначения, 2 расширенных таймера и 2 базовых таймера.
Разница между разными таймерами
Вы можете увидеть базовую блок-схему таймера в справочном руководстве пользователя STM32F207.На следующем рисунке показаны таймеры 1 и 8.
Из рисунка выше видно, что разные регистры имеют разные параметры, разница в цифрах, разница в режиме счета, разница в запросе DMA, разница в канале, разница в комплементарном выходе и другие. Какой таймер выбрать в конкретном проекте, зависит от конкретных сценариев применения. Далее в основном объясняется основная функция таймера, выберите Таймер 3.Принципы других таймеров такие же. Если вы понимаете функцию синхронизации Таймера 3, вы можете понять и другие таймеры. Для однокристальных микрокомпьютеров серии STM32 периферийные устройства в основном одинаковы, и микроконтроллеры других семейств также похожи, например, Zhaoyi Innovation, Nuvoton Technology, Shanghai Smart Microelectronics и так далее.
Блок-схема основной функции синхронизации таймера.
①CK_PSC — это часы таймера TIMxCLK, которые делятся на прескалер APB1 и предоставляются.
②После того, как часы таймера проходят через предварительный делитель PSC, то есть CK_CNT, они используются для запуска счетчика для подсчета.
③Счетчик CNT — это 16-битный счетчик, режим счета вверх, вниз, вверх/вниз, максимальное значение счетчика 65535. Когда счетчик достигает регистра автоматической перезагрузки, генерируется событие обновления, и счетчик сбрасывается с начала .
④ Регистр автоматической перезагрузки ARR представляет собой 16-битный регистр, который содержит максимальное значение, которое может подсчитать счетчик.Когда счетчик достигает этого значения, если прерывание разрешено, таймер генерирует прерывание по переполнению.
Грубо говоря, таймер — это счетчик, точно так же, как мы используем сердцебиение для грубой оценки времени, сердцебиение можно грубо считать 1 с, тогда мы считаем 60 сердцебиений и прошло 60 секунд. Часы CK_CNT аналогичны пульсу, а счетчик CNT подобен количеству пульсаций. Чтобы привести предельно простой пример, мы хотим добиться 60-секундного тайминга, CK_CNT равно 1 с, мы устанавливаем счетчик CNT на счет вверх для включения прерывания, потому что прерывание будет только при его переполнении, то есть при счет достигает 65535, затем мы устанавливаем счетчик CNT на 65535 -60 = 65475, запуск по времени, затем через 60 секунд будет сгенерировано прерывание.Мы устанавливаем регистр автоматической перезагрузки ARR на 65475. Когда счетчик CNT переполняется, регистр автоматической перезагрузки ARR будет автоматически загружен в счетчик CNT, который может реализовать автоматическую синхронизацию цикла в течение 60 секунд.
После вышеприведенного анализа ключом к точной синхронизации является частота CK_CNT, а CK_CNT выводится из частотного деления часов таймера. Затем нам нужно знать часы таймера timer3. Мы должны взглянуть на часть системы тактовой частоты, в частности, см. статью «Анализ системы тактовой частоты STM32F207», в этой статье в основном объясняется, как тактовая частота системы 120M получается из внешнего кварцевого генератора 25M.В нем говорится о проблеме с периферийными часами APB.
Таймер находится под часами таймера APB, в частности, под часами APB1 или APB2, как видно из таблицы данных STM32F207, название изображения — блок-схема STM32F20x.
Из приведенного выше видно, что timer3 находится под APB1.
Итак, давайте проанализируем частоту APB1
Из приведенного выше рисунка видно, что тактовая частота подчиненной системы 120M таймера APB1 (системные часы настраиваются, мы используем тактовую частоту 120M по умолчанию) получена разделением частоты AHB и разделением частоты APB.
Mengxin может не понимать «ошибку» в красном поле выше. Во-первых, в инструкции отсутствует закрывающая скобка. После модификации должно читаться:
если (APBx presc == 1)
Х1
еще
Х2
Другими словами
Если коэффициент деления частоты APB равен 1, частота остается неизменной, а выходная частота APB представляет собой частоту часов ниже APB.
Коэффициент деления частоты APB не равен 1, частота X2, выходная частота APB, умноженная на 2, представляет собой тактовую частоту ниже APB.
Ниже мы анализируем часы APB1 из функции SetSysClock в system_stm32f2xx.c следующим образом
/* HCLK = SYSCLK / 1*/
RCC->CFGR |= RCC_CFGR_HPRE_DIV1;
/* PCLK2 = HCLK/2*/
RCC->CFGR |=RCC_CFGR_PPRE2_DIV2;
/* PCLK1 = HCLK/4*/
RCC->CFGR|= RCC_CFGR_PPRE1_DIV4;
Видно, что коэффициент частотного деления AHB равен 1, а коэффициент частотного деления APB1 равен 4.
Часы таймера 3: 120M/1/4*2=60MHZ.
Здесь есть вопрос. Почему комментарий system_stm32f2xx.c, предоставленный ST, это HCLK, PCLK2, PCLK1, но нет APB, AHB, упомянутых выше. Подробности смотрите в статье «STM32F207 Clock System Analysis», которую я писал ранее.
На самом деле мы опубликовали код анализа, а заголовок файла system_stm32f2xx.c также аннотирован для удобства просмотра.
Конечно, для этого требуется, чтобы наш внешний кварцевый генератор был 25M и system_stm32f2xx.c не претерпел изменений. Если вам нужно изменить этот файл для разгона MCU, рекомендуется изменить комментарии в заголовке файла, чтобы выработать хорошую привычку.
Модуль управления программируемым расширенным таймером в основном представляет собой 16-битный счетчик с соответствующей автоматической перезагрузкой. Этот счетчик может считать вверх, вниз или попеременно считать вверх и вниз. Часы счетчика можно разделить делителем частоты.
Регистр автоматической перезагрузки и регистр предварительного делителя счетчика могут быть прочитаны и записаны программным обеспечением.Его можно читать и записывать, даже когда счетчик работает.
Базовая единица времени включает
-
Регистр счетчика (TIMx_CNT)
-
Регистр предделителя (TIMx_PSC)
-
Регистр автоматической перезагрузки (TIMx_ARR)
-
Регистр счетчика повторов (TIMx_RCR)
Регистр автоматической перезагрузки предварительно загружен. Запись или чтение из регистра автоматической перезагрузки приведет к доступу к регистру предварительной загрузки.Содержимое регистра предварительной загрузки может быть передано непосредственно в теневой регистр, либо оно может передаваться в теневой регистр каждый раз, когда происходит событие обновления (UEV), в зависимости от бита разрешения предварительной загрузки автоматической перезагрузки (ARPE) в регистре TIMx_CR1. Когда счетчик достигает значения переполнения (или достигает значения потери значимости при обратном счете) и бит UDIS в регистре TIMx_CR1 равен 0, будет отправлено событие обновления. Событие обновления также может генерироваться программным обеспечением.
Счетчик тактируется выходом предделителя CK_CNT, и счетчик запускается только тогда, когда бит разрешения счетчика (CEN) в регистре TIMx_CR1 установлен в 1.
Описание предварительного делителя
Предделитель может делить тактовую частоту счетчика с коэффициентом деления от 1 до 65536. Предварительный делитель основан на 16-разрядном счетчике, управляемом 16-разрядным регистром в регистре TIMx_PSC. Поскольку управляющий регистр выполняет буферную функцию, предварительный делитель можно изменять в режиме реального времени. Новый коэффициент предварительного масштабирования будет принят, когда произойдет следующее событие обновления.
На следующем рисунке показано поведение счетчика при изменении коэффициента предварительного делителя в реальном времени на некоторых примерах.
Временная диаграмма счетчика при делении прескалера от 1 до 2
Временная диаграмма счетчика при делении прескалера от 1 до 4
4.1, прямой счет
В режиме прямого счета счетчик увеличивается с 0 до значения автоперезагрузки (значение регистра TIMx_ARR), а затем перезапускается с 0 и генерирует событие переполнения счетчика.
Если используется счетчик повторений, когда количество повторений счетчика приращений достигает числа, запрограммированного в регистре счетчика повторений, плюс один (TIMx_RCR+1), будет сгенерировано событие обновления (UEV).В противном случае при каждом переполнении счетчика будет генерироваться событие обновления.
При установке бита UG регистра TIMx_EGR в 1 с помощью программного обеспечения или с помощью контроллера ведомого режима также будет сгенерировано событие обновления.
Событие UEV можно отключить, установив бит UDIS в регистре TIMx_CR1 в 1. Это позволяет избежать обновления теневого регистра, когда новое значение записывается в регистр предварительной загрузки. Событие обновления не будет генерироваться до тех пор, пока бит UDIS не будет установлен в 0.Однако и счетчик, и счетчик предварительного делителя перезапустят счет с 0 (в то время как коэффициент предварительного делителя останется неизменным). Кроме того, если бит URS (выбор запроса на обновление) в регистре TIMx_CR1 установлен в 1, установка бита UG в 1 будет генерировать событие обновления UEV, но не будет устанавливать флаг UIF (таким образом, прерывание или запрос DMA не будут выполняться). быть отправлены). Таким образом, если счетчик очищается при возникновении события захвата, прерывание обновления и прерывание захвата не будут генерироваться одновременно.
При возникновении события обновления все регистры будут обновлены, а флаг обновления (бит UIF в регистре TIMx_SR) будет установлен в 1, в зависимости от бита URS)
-
Содержимое регистра TIMx_RCR будет перезагружено в счетчик повторений
-
Теневой регистр автоматической перезагрузки будет обновлен значением предварительной загрузки (TIMx_ARR)
-
Значение предварительной загрузки (содержимое регистра TIMx_PSC) будет перезагружено в буфер прескалера
Временная диаграмма счетчика, разделенная на 1 внутренний такт
Временная диаграмма счетчика, разделенная на 2 внутренних тактовых импульса
Из двух приведенных выше рисунков видно, что флаг прерывания должен быть очищен программным обеспечением.
Временная диаграмма счетчика, событие обновления, когда ARPE=0 (TIMx_ARR предварительно не загружен)
Из двух приведенных выше рисунков видно, что при счете вверх, до достижения 0x36, модифицировать регистр автоперезагрузки на 0x36, и действие произойдет, когда счет достигнет 0x36.
Временная диаграмма счетчика, событие обновления, когда ARPE=1 (TIMx_ARR предварительно загружен)
Из двух вышеприведенных рисунков видно, что при счете вверх, до достижения 0x36, модифицируйте регистр предзагрузки автообновления на 0x36, и никаких действий не будет, когда счет достигнет 0x36, и при этом предзагрузка будет автоматически перезагружена time Значение регистра присваивается теневому регистру автоматической перезагрузки.
4.2, режим прямого счета
В режиме прямого счета счетчик ведет обратный отсчет от значения автоперезагрузки (значение регистра TIMx_ARR) до 0, а затем от значения автоперезагрузки (перезапускается и генерирует событие переполнения счетчика.
Если используется счетчик повторений, когда количество повторений обратного отсчета достигает числа, запрограммированного в регистре счетчика повторений, плюс один (TIMx_RCR+1), будет сгенерировано событие обновления (UEV). В противном случае событие обновления будет генерироваться каждый раз, когда значение счетчика становится недостаточным.
Когда бит UG регистра TIMx_EGR установлен в 1 (программно или с помощью контроллера ведомого режима), также будет сгенерировано событие обновления.
Событие обновления UEV можно отключить, установив программно бит UDIS в регистре TIMx_CR1 в 1.Это позволяет избежать обновления теневого регистра, когда новое значение записывается в регистр предварительной загрузки. Событие обновления не будет сгенерировано до тех пор, пока бит UDIS не будет записан в 0. Однако счетчик перезапустится с текущего значения автоматической перезагрузки, а счетчик предварительного делителя начнет считать с 0 (но коэффициент предварительного делителя останется неизменным).
Кроме того, если бит URS (выбор запроса на обновление) в регистре TIMx_CR1 был установлен в 1, установка бита UG в 1 будет генерировать событие обновления UEV, но не будет устанавливать флаг UIF (таким образом, не будет прерывания или DMA). запрос будет отправлен).Таким образом, если счетчик очищается при возникновении события захвата, прерывание обновления и прерывание захвата не будут генерироваться одновременно.
При возникновении события обновления все регистры будут обновлены, а флаг обновления (бит UIF в регистре TIMx_SR) будет установлен в 1 (в зависимости от бита URS):
-
Содержимое регистра TIMx_RCR будет перезагружено в счетчик повторений
-
Буфер предварительного делителя будет перезагружен значением предварительной загрузки (содержимое регистра TIMx_PSC)
-
Регистр активности автоматической перезагрузки будет обновлен значением предварительной загрузки (содержимое регистра TIMx_ARR).Обратите внимание, что регистр автоматической перезагрузки будет обновлен до перезагрузки счетчика, поэтому следующий цикл счета — это новая длина цикла, которую мы хотим
.
На следующих рисунках показано поведение счетчика при различных тактовых частотах с некоторыми примерами, когда TIMx_ARR=0x36
Временная диаграмма счетчика, разделенная на 1 внутренний такт
Временная диаграмма счетчика, разделенная на 2 внутренних тактовых импульса
Временная диаграмма счетчика, событие обновления, когда счетчик повторов не используется
4.3, выравнивание по центру ( вверх / режим обратного счета )
В режиме выравнивания по центру счетчик начинает отсчет с 0 до значения автоматической перезагрузки (содержимое регистра TIMx_ARR) -1 и генерирует событие переполнения счетчика; затем начинает обратный отсчет от значения автоматической перезагрузки до 1 и генерирует событие опустошения счетчика. Затем снова начните считать с 0.
Если бит CMS в регистре TIMx_CR1 не равен «00», режим с выравниванием по центру действителен.Когда канал сконфигурирован в режиме вывода, его флаг прерывания сравнения вывода будет установлен в 1 в следующих режимах, а именно: обратный отсчет счетчика (режим выравнивания по центру 1, CMS = «01»), обратный отсчет счетчика (выровненный по центру режим 2, CMS = «10») и прямой/обратный счет счетчика (режим выравнивания по центру 3, CMS = «11»).
В этом режиме бит направления DIR регистра TIMx_CR1 не может быть записан со значением, но обновляется аппаратно и указывает текущее направление счетчика.
Событие обновления генерируется каждый раз, когда происходит переполнение и потеря значения счетчика, или событие обновления может быть сгенерировано установкой бита UG в регистре TIMx_EGR в 1 (с помощью программного обеспечения или с помощью контроллера ведомого режима).В этом случае счетчик и счетчик предварительного делителя снова начнут считать с 0.
Событие обновления UEV можно отключить, установив программно бит UDIS в регистре TIMx_CR1 в 1. Это позволяет избежать обновления теневого регистра, когда новое значение записывается в регистр предварительной загрузки. Событие обновления не будет сгенерировано до тех пор, пока бит UDIS не будет записан в 0. Однако счетчик по-прежнему будет считать вверх и вниз в соответствии с текущим значением автоматической перезагрузки.
Кроме того, если был установлен бит URS (выбор запроса на обновление) в регистре TIMx_CR1, установка бита UG в 1 приведет к генерации события обновления UEV, но не установит флаг UIF (таким образом, прерывание или запрос DMA не будут быть отправлены).Таким образом, если счетчик очищается при возникновении события захвата, прерывание обновления и прерывание захвата не будут генерироваться одновременно.
При возникновении события обновления все регистры будут обновлены, а флаг обновления (бит UIF в регистре TIMx_SR) будет установлен в 1 (в зависимости от бита URS):
-
Содержимое регистра TIMx_RCR будет перезагружено в счетчик повторений
-
Буфер предварительного делителя будет перезагружен значением предварительной загрузки (содержимое регистра TIMx_PSC)
-
Регистр активности автоматической перезагрузки будет обновлен значением предварительной загрузки (содержимое регистра TIMx_ARR).Обратите внимание, что если операция обновления инициируется переполнением счетчика, регистр автоматической перезагрузки обновляется до перезагрузки счетчика. Следовательно, следующий цикл счета — это новая длина цикла, которую мы хотим (счетчик перезагружается с новым значением).
Следующие рисунки иллюстрируют поведение счетчика при различных тактовых частотах с некоторыми примерами
Временная диаграмма счетчика, разделенная на 1 внутренний такт, TIMx_ARR = 0x6
Временная диаграмма счетчика, разделенная на 2 внутренних тактовых импульса
Временная диаграмма счетчика, событие обновления при ARPE=1 (опустошение счетчика)
Временная диаграмма счетчика, событие обновления при ARPE=1 (переполнение счетчика)
Код конфигурации прерывания 10 мс
О настройке значения деления
TIM3CLK = 2 * PCLK1 = 2 * HCLK / 4 = HCLK / 2 = SystemCoreClock /2 = 60 МГц
Таким образом, красный прямоугольник на рисунке ниже — это TIM3CLK
.
Значение здесь представляет собой коэффициент деления частоты = TIM3CLK/фактическая частота таймера, поэтому частота таймера равна 10000, что означает, что делитель представляет собой частоту таймера.Clk равен 1/10000 с. Время = 1/10000*значение перезагрузки таймера. В соответствии с приведенной выше конфигурацией значение перезагрузки таймера равно 100, то есть период прерывания таймера составляет = 1/10000 * 100 = 0,01 с = 10 мс, что составляет 100 Гц.
Если светодиод включается на таймере, частота мигания светодиода составляет 50 Гц.
Конечно, приведенное выше значение делителя частоты может быть напрямую назначено 5999. Если вы хотите изменить частоту таймера на 1000, вам необходимо пересчитать ее. Если вы будете следовать описанному выше методу записи, вы можете напрямую изменить делитель на 1000.
Когда вы это увидите, у всех возникнут вопросы. Заданное значение перегрузки, очевидно, равно 99, и значение частоты деления также вычитается на 1. Ниже будет объяснена причина, по которой и значение деления частоты, и значение периода автоматической перезагрузки необходимо вычесть на 1.
Значение автоматической перезагрузки: Поскольку расчет начинается с 0, значение присваивается 10, а счет от 0 до 10 составляет 11 раз.
Значение делителя: В регистре TIMx_PSC есть следующие описания.
Особое примечание
Коэффициент деления часов
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2;
На самом деле, внимательно прочитав техническое руководство, я обнаружил, что это предложение не имеет ничего общего с экспериментом с выходом ШИМ. Это предложение представляет собой деление между частотой таймера (CK_INT) и частотой дискретизации, используемой цифровым фильтром (ETR, TIx). Пропорционально (относится к захвату входа), 0 означает, что частота фильтра такая же, как и частота дискретизации. частота таймера.
Во-первых, коэффициент деления часов colck_division не делит тактовую частоту таймера. Все мы знаем, что в режиме захвата ввода есть цифровой фильтр. Этот цифровой фильтр может изменить свою частоту дискретизации через регистр конфигурации, чтобы отфильтровать некоторые частоты.
Конкретные детали объясняются во входном захвате.
Мы также можем использовать метод запроса счетчика для достижения точной задержки в соответствии с характеристиками счетчика таймера.Подробнее см. в разделе «Четыре метода функции задержки STM32».
Код таймера с открытым исходным кодом:
https://github.com/strongercjd/STM32F207VCT6
Нажмите, чтобы просмотреть альбом, в котором находится эта статья, Учебное пособие по STM32F207
Обратите внимание на официальный аккаунт, и получайте обновления статей как можно скорее . Область комментариев не может быть просмотрена вовремя, вы можете перейти на официальный аккаунт, чтобы связаться, если вам нужно связаться
%PDF-1.3 % 1 0 объект >поток конечный поток эндообъект 2 0 объект > эндообъект 6 0 объект >/Прямо[67.26 738,92 527,94 752,6]>> эндообъект 7 0 объект >/прямо [123,96 719,78 527,94 732,02]>> эндообъект 8 0 объект >/прямо[123,96 700,76 527,94 713]>> эндообъект 9 0 объект >/прямо[123,96 683,6 527,94 694,76]>> эндообъект 10 0 объект >/прямо[123,96 666,62 527,94 677,78]>> эндообъект 11 0 объект >/прямо[123,96 649,58 527,94 660,74]>> эндообъект 12 0 объект >/прямо[123,96 632,6 527,94 643,76]>> эндообъект 13 0 объект >/прямо[123,96 613,76 527,94 626]>> эндообъект 14 0 объект >/Rect[123,96 596,6 527.94 607,76]>> эндообъект 15 0 объект >/прямо[123,96 579,62 527,94 590,78]>> эндообъект 16 0 объект >/прямо[123,96 562,58 527,94 573,74]>> эндообъект 17 0 объект >/прямо[123,96 543,74 527,94 555,98]>> эндообъект 18 0 объект >/прямо[123,96 526,58 527,94 537,74]>> эндообъект 19 0 объект >/прямо[123,96 509,6 527,94 520,76]>> эндообъект 20 0 объект >/прямо[67,26 477,92 527,94 491,6]>> эндообъект 21 0 объект >/прямо [123,96 458,78 527,94 471,02]>> эндообъект 22 0 объект >/Rect[123,96 439,76 527.94 452]>> эндообъект 23 0 объект >/прямо[123,96 420,74 527,94 432,98]>> эндообъект 24 0 объект >/прямо[123,96 401,78 527,94 414,02]>> эндообъект 25 0 объект >/прямо[123,96 382,76 527,94 395]>> эндообъект 26 0 объект >/прямо[123,96 350,72 527,94 375,98]>> эндообъект 27 0 объект >/прямо[123,96 331,76 527,94 344]>> эндообъект 28 0 объект >/прямо [67,26 299,9 527,94 313,58]>> эндообъект 29 0 объект >/прямо[123,96 280,76 527,94 293]>> эндообъект 30 0 объект >/прямо[123,96 261,74 527,94 273,98]>> эндообъект 31 0 объект >/Прямо[123.96 242,72 527,94 254,96]>> эндообъект 32 0 объект >/прямо[67,26 210,92 527,94 224,6]>> эндообъект 33 0 объект >/прямо[123,96 191,72 527,94 203,96]>> эндообъект 34 0 объект >/прямо[123,96 172,76 527,94 185]>> эндообъект 35 0 объект >/прямо[123,96 153,74 527,94 165,98]>> эндообъект 36 0 объект >/прямо[123,96 134,72 527,94 146,96]>> эндообъект 37 0 объект >/прямо[74,76 87,44 84,78 98,66]>> эндообъект 5 0 объект >/ProcSet[/PDF/Text]/ColorSpace>/Font>/Properties>>> эндообъект 4 0 объект >поток hZnG}WCO
» TK – частотомер » JeeLabs
Добро пожаловать в серию Четверг Инструментарий об инструментах для создания проектов физических вычислений.
Еще один пост о частотах — на этот раз я собрал DFD4A от почти всей цифровой электроники:
Это недорогой частотомер, работающий в диапазоне до 3 ГГц. Здесь он измеряет сигнал 10 МГц от моего генератора частоты, синхронизированный со стандартом частоты Rubidium.
Как видите, все верно — последняя цифра время от времени переключается между 0 и 1, вот и все.
Как и в случае с измерителем емкости, который я недавно собрал, этот комплект поставляется с подробными инструкциями по сборке.За исключением того, что на этот раз я не очень хотел его собирать, поэтому вместо этого я получил готовую версию, включая разъемы и (полностью) пластиковый корпус. На лицевой панели уже есть все нужные вырезы, а на лицевую сторону приклеена распечатанная бумажка (!). Работает нормально, но подозреваю, что со временем загрязнится.
Устройство пришло со всеми деталями, мне просто нужно было припаять несколько компонентов и проводов после установки всех переключателей и разъемов BNC.
Одной вещью не хватало, так это зажима для батарейки на 9 В, но не волнуйтесь, у меня в любом случае завалялась парочка таких.
Причиной приобретения именно этого устройства был его высокочастотный диапазон, намного превышающий частоты 868 МГц и 2,4 ГГц, которые я, возможно, захочу измерить здесь, в JeeLabs. Основное отличие от профессионального устройства, вероятно, заключается в том, что у него не так много вариантов входного сигнала:
- ВЧ-измерения в диапазоне от 0 до 30 МГц с макс. 5 В пик-пик на высокоимпедансный вход
- UHF измеряет от 10 до 3000 МГц на входе 50 Ом (макс. 15 дБм)
Я подозреваю, что невозможно напрямую измерить выходную частоту 868 МГц от RFM12B – т.е.е. он, вероятно, не будет достаточно чувствительным, чтобы измерить 0 дБм.
Медленный режим измерения непрерывно собирает данные в течение одной секунды, поэтому вы получаете разрешение 1 Гц на ВЧ-диапазоне и разрешение 100 Гц на УВЧ-диапазоне (поскольку это, по сути, просто предварительный делитель ÷ 100).
Режим быстрого измерения запускается 10 раз в секунду, т. е. время стробирования 0,1 с, что дает разрешение 10 Гц на ВЧ и разрешение 1000 Гц (1 кГц) на УВЧ.
Немного странно, что на дисплее отображается больше значащих цифр, чем измеряется во всех режимах, кроме FAST + HF, но ничего страшного — текущий режим хорошо виден из настроек переключателя.
Зная, что счетчик очень точен (пока что, без сомнения, он будет постепенно немного дрейфовать), пришло время выяснить, насколько точна частота AWG TG2511, когда , а не синхронизированы со стандартом Rubidium:
Отличие всего 0,4 промилле и вполне соответствует спецификации — отлично!
Eh5900ETTS-66.000MTR,Eh5900ETTS-66.000MTR
Эх5900ЭТЦ-66.000М т.р.
Эх59 00 ЭТ
Серия
Соответствует RoHS (без свинца) 1,8 В 4 площадки 2,5 мм x 3,2 мм
Керамический осциллятор SMD LVCMOS
Допуск по частоте/стабильность
±100ppm максимум
Диапазон рабочих температур
от -40°C до +85°C
Рабочий цикл
50 ±10(%)
RoHS
Пб
Варианты упаковки
Лента и катушка
ТС-66.000М ТР
Номинальная частота
66.000 МГц
Контакт 1 Соединение
Три состояния (высокий импеданс)
ЭЛЕКТРИЧЕСКИЕ ХАРАКТЕРИСТИКИ
Номинальная частота
Допуск по частоте/стабильность
66 000 МГц
Максимум ±100ppm (включая все условия: допуск калибровки при 25°C, стабильность частоты выше
Диапазон рабочих температур, изменение напряжения питания, изменение выходной нагрузки, старение в первый год при 25°,
Оплавление при 260°C, удары и вибрация)
Максимум ±5 частей на миллион в год
от -40°C до +85°C
1.8В постоянного тока ±5%
Максимум 4 мА (без нагрузки)
90 % от минимума Vdd (IOH = -8 мА)
10 % от максимума Vdd (IOL = +8 мА)
Максимум 4 нсек (измерено при 20–80 % формы сигнала)
50 ±10(%) (измерено при 50% сигнала)
Максимум 15 пФ
КМОП
Три состояния (высокий импеданс)
90 % от минимального значения Vdd или отсутствие подключения для включения выхода, 10 % от максимального значения Vdd для отключения вывода (высокий уровень
Импеданс)
Максимум 10 мкА (Контакт 1 = Земля)
±125 пс Максимум
Максимум 10 мс
от -55°C до +125°C
Старение при 25°C
Диапазон рабочих температур
Напряжение питания
Входной ток
Высокий логический уровень выходного напряжения (Voh)
Низкий логический уровень выходного напряжения (Vol)
Время нарастания/спада
Рабочий цикл
Загрузка возможностей привода
Тип логики выхода
Контакт 1 Соединение
Входное напряжение с тремя состояниями (Vih и Vil)
Ток в режиме ожидания
Абсолютный джиттер тактовой частоты
Время запуска
Диапазон температур хранения
ЭКОЛОГИЧЕСКИЕ И МЕХАНИЧЕСКИЕ ХАРАКТЕРИСТИКИ
Чувствительность к электростатическим разрядам
Тонкий тест на герметичность
Воспламеняемость
Испытание на грубую утечку
Механический удар
Влагостойкость
Чувствительность к влаге
Стойкость к нагреву при пайке
Устойчивость к растворителям
Возможность пайки
Циклическое изменение температуры
Вибрация
MIL-STD-883, метод 3015, класс 1, HBM: 1500 В пост. тока
MIL-STD-883, метод 1014, условие A
УЛ94-В0
MIL-STD-883, метод 1014, условие C
MIL-STD-883, метод 2002, условие B
MIL-STD-883, метод 1004
J-STD-020, MSL 1
MIL-STD-202, метод 210, условие K
MIL-STD-202, Метод 215
MIL-STD-883, Метод 2003
MIL-STD-883, метод 1010, условие B
MIL-STD-883, метод 2007, условие A
www.ecliptek.com | Технические характеристики могут быть изменены без предварительного уведомления | Версия B 14.08.2010 | Страница 1 из 6
Эх5900ЭТЦ-66.000М ТР
МЕХАНИЧЕСКИЕ РАЗМЕРЫ (все размеры в миллиметрах)
PIN-код
1
СОЕДИНЕНИЕ
Три штата
Заземление корпуса
Выход
Напряжение питания
2,50
±0,15
МАРКИРОВКА
ОРИЕНТАЦИЯ
1,05
±0,15
2
1.20
±0,10
1
1,00
±0,10
0,75 ±0,10 (Х4)
3
1,00
±0,10
4
2
3
4
МАРКИРОВКА ЛИНИИ
1
2
ЕПО
ХХХХХ
ХХХХХ=Эклиптек
Производственный идентификатор
3,20
±0,15
Рекомендуемая компоновка паяльной площадки
Все размеры в миллиметрах
0.95 (Х4)
1,20 (Х4)
1,00
Припой
(Х4)
0,80
Все допуски составляют ±0,1
www.ecliptek.com | Технические характеристики могут быть изменены без предварительного уведомления | Версия B 14.08.2010 | Страница 2 из 6
Эх5900ЭТЦ-66.000М ТР
ФОРМА ВЫХОДНОГО СИГНАЛА И ВРЕМЕННАЯ ДИАГРАММА
ВХОД ТРЕХ СОСТОЯНИЙ
В
ИХ
В
Ил
ВЫХОД ЧАСОВ
В
ОХ
80% формы волны
50% формы волны
20% формы волны
В
ОЛ
ВЫХОД ОТКЛЮЧЕН
(ВЫСОКОИМПЕДАНСНОЕ
ГОСУДАРСТВО)
т
ПЛЗ
Осень
Время
Подъем
Время
Т
Вт
Т
Рабочий цикл (%) = T
Вт
/т х 100
т
ПЗЛ
Тестовая схема для выхода CMOS
Осциллограф
Частота
Счетчик
+
+
Мощность
Поставка
_
+
Напряжение
Счетчик
_
Текущий
Счетчик
_
Поставка
Напряжение
(В
ДД
)
Зонд
(Примечание 2)
Выход
0.01 мкФ
(Примечание 1)
0,1 мкФ
(Примечание 1)
Земля
С
л
(Примечание 3)
Три штата
Примечание 1. Внешний керамический блокировочный конденсатор 0,01 мкФ, подключенный параллельно высокочастотному конденсатору 0,1 мкФ
.керамический шунтирующий конденсатор близко (менее 2 мм) к заземлению корпуса и напряжению питания
Требуется пин.
Примечание 2. Низкая емкость (<12 пФ), 10-кратный коэффициент затухания, высокий импеданс (>10 МОм) и широкая полоса пропускания
Рекомендуется использовать пассивный пробник(>300 МГц).
Примечание 3: Значение емкости C
л
включает в себя сумму всех емкостей пробников и приспособлений.
www.ecliptek.com | Технические характеристики могут быть изменены без предварительного уведомления | Версия B 14.08.2010 | Страница 3 из 6
Эх5900ЭТЦ-66.000М ТР
Размеры ленты и катушки
Количество на катушке: 1000 шт.
4,00 ±0,10
2,00 ±0,05
1,5 +0,1/-0,0
0,60 МАКС
5,5 ±0,10
12,00 ±0.30
4,75 ±0,10
В0*
4,00 ±0,10
*Соответствует EIA 481A
А0*
К0*
1,5 мин
ДИАМ. 40 МИН
Отверстие доступа на
Расположение слота
18,4 МАКС.
180 МАКС.
ДИАМ. 50 МИН
ДИАМ. 20,2 МИН
2,5 МИН Ширина
10,0 МИН Глубина
Слот для ленты в Core
для запуска ленты
12,4 +2,0/-0,0
ДИАМ 13.0 ±0,2
www.ecliptek.com | Технические характеристики могут быть изменены без предварительного уведомления | Версия B 14.08.2010 | Страница 4 из 6
Эх5900ЭТЦ-66.000М ТР
Рекомендуемые методы оплавления припоя
Т
Р
Критическая зона
Т
л
отдо Т
Р
Разгон
Замедление
Температура (Т)
Т
л
Т
С
Максимум
Т
С
Мин.
т
С
Предварительный нагрев
t 25°C до пика
т
л
т
Р
Время (т)
Высокотемпературный инфракрасный/конвекционный
Т
С
МАКС до Т
л
(скорость нарастания)
Предварительный нагрев
— Минимальная температура (T
С
МИН)
— Типичная температура (T
С
ТИП)
— Максимальная температура (T
С
МАКС)
— Время (т
С
МИН)
Скорость разгона (T
л
отдо Т
Р
)
Поддерживаемое время выше:
— Температура (T
л
)
— Время (т
л
)
Пиковая температура (T
Р
)
Целевая пиковая температура (T
Р
Цель)
Время в пределах 5°C от фактического пика (t
р
)
Скорость замедления
Время от 25°C до пиковой температуры (t)
Уровень чувствительности к влаге
3°C/сек Максимум
150°С
175°С
200°С
60–180 секунд
3°C/сек Максимум
217°С
60–150 секунд
260°C Максимум в течение 10 секунд Максимум
250°С +0/-5°С
20–40 секунд
6°C/сек Максимум
8 минут Максимум
Уровень 1
www.ecliptek.com | Specification Subject to Change Without Notice | Rev B 8/14/2010 | Page 5 of 6
EC5945ETTS-29.4912M TR,EC5945ETTS-29.4912M TR pdf中文资料,EC5945ETTS-29.4912M TR引脚图,EC5945ETTS-29.4912M TR电路-Datasheet-电子工程世界
EC5945ETTS-29.4912M TR
REGULATORY COMPLIANCE
2011/65 +
2015/863
(Data Sheet downloaded on May 21, 2018)
174 SVHC
ITEM DESCRIPTION
Quartz Crystal Clock Oscillators XO (SPXO) LVCMOS (CMOS) 1.8 В пост. тока, 4 площадки 2,0 мм x 2,5 мм, керамический поверхностный монтаж (SMD)
29,4912 МГц ±50ppm от -40°C до +85°C
ЭЛЕКТРИЧЕСКИЕ ХАРАКТЕРИСТИКИ
Номинальная частота
Допуск по частоте/стабильность
Диапазон рабочих температур
Напряжение питания
Входной ток
Высокий логический уровень выходного напряжения (Voh)
Низкий логический уровень выходного напряжения (Vol)
Время нарастания/спада
Рабочий цикл
Загрузка возможностей привода
Тип логики выхода
Контакт 1 Соединение
Входное напряжение с тремя состояниями (Vih и Vil)
Ток в режиме ожидания
Дрожание фазы среднеквадратичного значения
Время запуска
Диапазон температур хранения
29.4912 МГц
Максимум ±50 ppm (включая все условия: допуск калибровки при 25°C, стабильность частоты при эксплуатации
Температурный диапазон, изменение напряжения питания, изменение выходной нагрузки, старение в первый год при 25°C, удары и вибрация)
от -40°C до +85°C
1,8 В постоянного тока ±5 %
Максимум 2,5 мА
90 % от минимума Vdd (IOH = -4 мА)
10 % от максимума Vdd (IOL = +4 мА)
Максимум 10 нсек (измерено при 20–80 % формы волны)
50 ±10(%) (измерено при 50% сигнала)
Максимум 15 пФ
КМОП
Три состояния (высокий импеданс)
90 % от минимума Vdd или отсутствие подключения для включения выхода, 10 % от максимума Vdd для отключения выхода (высокий импеданс)
Максимум 10 мкА (отключенный выход; высокое сопротивление)
Максимум 1 пс (частота смещения от 12 кГц до 20 МГц)
Максимум 10 мс
от -55°C до +125°C
ЭКОЛОГИЧЕСКИЕ И МЕХАНИЧЕСКИЕ ХАРАКТЕРИСТИКИ
Чувствительность к электростатическим разрядам
Тонкий тест на герметичность
Воспламеняемость
Испытание на грубую утечку
Механический удар
Влагостойкость
Чувствительность к влаге
Стойкость к нагреву при пайке
Устойчивость к растворителям
Возможность пайки
Циклическое изменение температуры
Вибрация
MIL-STD-883, метод 3015, класс 1, HBM: 1500 В
MIL-STD-883, метод 1014, условие A
УЛ94-В0
MIL-STD-883, метод 1014, условие C
MIL-STD-883, метод 2002, условие B
MIL-STD-883, метод 1004
J-STD-020, MSL 1
MIL-STD-202, метод 210, условие K
MIL-STD-202, Метод 215
MIL-STD-883, Метод 2003
MIL-STD-883, метод 1010, условие B
MIL-STD-883, метод 2007, условие A
www.ecliptek.com | Технические характеристики могут быть изменены без предварительного уведомления | Редакция G 02.04.2015 | Страница 1 из 5
Эклиптек, ООО
5458 Луи Лейн, Рино, Невада 89511
1-800-ЭКЛИПТЕК или 714.433.1200
EC5945ETTS-29.4912M ТР
МЕХАНИЧЕСКИЕ РАЗМЕРЫ (все размеры в миллиметрах)
PIN-код
СОЕДИНЕНИЕ
Три штата
Футляр/Заземление
Выход
Напряжение питания
2,00
±0.10
1,00
МАКС
2
0,95
±0,10
1
0,65 ±0,10
0,675 ±0,100 (x4)
1
2
3
МАРКИРОВКА
ОРИЕНТАЦИЯ
3
4
МАРКИРОВКА ЛИНИИ
1
2
Е29.4
E=Обозначение Эклиптек
ХХХХХ
ХХХХХ=Эклиптек
Производственный идентификатор
2.50
±0,10
4
0,775
±0,100 (x4)
Рекомендуемая компоновка паяльной площадки
Все размеры в миллиметрах
1,0 (х4)
1,2 (х4)
0,5
Припой
(Х4)
0,3
Все допуски составляют ±0,1
www.ecliptek.com | Технические характеристики могут быть изменены без предварительного уведомления | Редакция G 02.04.2015 | Страница 2 из 5
Эклиптек, ООО
5458 Луи Лейн, Рино, Невада 89511
1-800-ЭКЛИПТЕК или 714.433.1200
EC5945ETTS-29.4912M ТР
ФОРМА ВЫХОДНОГО СИГНАЛА И ВРЕМЕННАЯ ДИАГРАММА
ВХОД ТРЕХ СОСТОЯНИЙ
В
ИХ
В
Ил
ВЫХОД ЧАСОВ
В
ОХ
80% формы волны
50% формы волны
20% формы волны
В
ОЛ
ВЫХОД ОТКЛЮЧЕН
(ВЫСОКОИМПЕДАНСНОЕ
ГОСУДАРСТВО)
т
ПЛЗ
Осень
Время
Подъем
Время
Т
Вт
Т
Рабочий цикл (%) = T
Вт
/т х 100
т
ПЗЛ
www.ecliptek.com | Технические характеристики могут быть изменены без предварительного уведомления | Редакция G 02.04.2015 | Страница 3 из 5
Эклиптек, ООО
5458 Луи Лейн, Рино, Невада 89511
1-800-ЭКЛИПТЕК или 714.433.1200
EC5945ETTS-29.4912M ТР
Тестовая схема для выхода CMOS
Осциллограф
Частота
Счетчик
+
+
Мощность
Поставка
_
+
Напряжение
Счетчик
_
Текущий
Счетчик
_
Поставка
Напряжение
(В
ДД
)
Зонд
(Примечание 2)
Выход
0.01 мкФ
(Примечание 1)
0,1 мкФ
(Примечание 1)
Земля
С
л
(Примечание 3)
Три штата
Примечание 1. Внешний керамический шунтирующий конденсатор емкостью 0,01 мкФ, подключенный параллельно высокочастотному керамическому шунтирующему конденсатору 0,1 мкФ
. Конденсаторрасположен близко (менее 2 мм) к корпусу корпуса, и требуется вывод напряжения питания.
Примечание 2. Низкая емкость (<12 пФ), 10-кратный коэффициент затухания, высокий импеданс (>10 МОм) и широкая полоса пропускания
Рекомендуется использовать пассивный пробник(>300 МГц).
Примечание 3: Значение емкости C
л
включает в себя сумму всех емкостей пробников и приспособлений.
www.ecliptek.com | Технические характеристики могут быть изменены без предварительного уведомления | Редакция G 02.04.2015 | Страница 4 из 5
Эклиптек, ООО
5458 Луи Лейн, Рино, Невада 89511
1-800-ЭКЛИПТЕК или 714.433.1200
НОМЕР ДЕТАЛИ СПЕЦИФИКАЦИЯ
EC5945ETTS-29.4912M ТР
Размеры ленты и катушки
Количество на катушке: 1000 шт.
Все размеры в миллиметрах
Соответствует EIA-481
4.00 ±0,10
2,00 ±0,10
1,55 ±0,05
0,25 ±0,05
0,10 МАКС.
3,50 ±0,10
МАРКИРОВКА
ОРИЕНТАЦИЯ
1,75 ±0,10
8,00 ±0,20
А0*
2,75 ±0,10
4,00 ±0,10
В0*
К0*
Направление разматывания
1,50 мин
ДИАМ. 40 МИН
Отверстие доступа на
Расположение слота
14,4 МАКС.