![]() |
![]() |
||||||||||||
Многофункциональный частотомер FC-71
Автор: Andrey_B В домикроконтроллерные времена самодельные частотомеры обычно представляли собой сложные устройства с множеством микросхем. Как правило функционал этих конструкций был относительно небогат. Тем не менее каждый уважающий себя радиолюбитель считал своим долгом собрать подобный прибор. Казалось бы, с широким распространением достаточно мощных микроконтроллеров и ПЛИС, должны были появляться любительские конструкции с более широкими возможностями. Но к сожалению вместо этого мы наблюдаем множество мелких однотипных конструкций, с всё тем же бедным функционалом, что и много лет назад. Исключением стала, разве что, конструкция частотомера FC-510 Леонида Ивановича Ридико, сильно отличающаяся от всего остального, которая кстати и послужила основным источником вдохновения при конструировании частотомера, описанного в этой статье. Мотивов разработки было несколько: проверить на сколько серьёзный прибор можно сделать именно на МК, без использования ПЛИС, без интерполятора, оставаясь в рамках самоделки. Восполнить таки некоторый пробел в многофункциональных любительских конструкциях частотомеров и создать "затравку" для появления других подобных конструкций. Ну и так сказать, оправление собственных радиолюбительских потребностей, куда ж без этого. Основные возможности. Измерение частоты по трём каналам (8 разрядов для 1кГц@1сек). Подробные ТТХ. Входы А и В: Вход С: Дополнительные входы и выходы (разъёмные клеммники): Конструкция: На дисплее отображение всей информации условно разбито на зоны: - статусная строка ({1} статус термостата ("Err" - {2} текущая температура более чем на ±0.1'C отличается от установленной), {3} время работы от момента включения, {4} версия ПО). - зона канала 1pps ({5} текущий логический уровень, {6} отклонение усреднённого интервала от 1сек, {7} индикатор включенного режима автоматической коррекции значения опорной частоты). - {8} значение канала 2 (входы В или С). {11} Режимы работы канала 1: {12} Режимы работы канала 2: {13} Режим работы канала 3: {14} Для каждого канала, значение после измерения или вычисления подвергается фильтрации или статистической обработке (Stat:): Каналы 1 и 2 имеют элементы: {20} Текущий уровень на входе С (PwrC:). {21} Размерность, порядок значения. {22} Признак включения в расчет коэффициента предделителя (/PR, *PR) или ПЧ (+IF, -IF). {23} Прогрессбар времени измерения 1с и более. {24} Тип запуска (Auto/Man/Ext:), состояние (Wait/Count/Stop). Меню установок (одновременное удерживание кнопок "Сброс А" и "Сброс В"): {1} значения коэффициента деления (/PR) прескалера, (*PR) если меньше единицы, для входов А, В, С (9999.9999). {2} значения промежуточной частоты в Гц для входов А, В, С, для прибавления (+IF) или вычитания (-IF) (+99 999 999 999 Гц). {3} температура термостата ("--" термостат отключен). {4} ручная коррекция константы опорной частоты (500 000 000.000 0 Гц). Эта константа используется для расчётов измеряемых величин, физически сама опорная частота тактового генератора не регулируется, она должна быть равна константе. {5} управление режимом автоматической коррекции константы опорной частоты, на основе непрерывных накоплений интервалов сигнала 1pps. Сохранение нового значения вычисленной константы опорной частоты в энергонезависимой памяти необходимо производить вручную. Отображаемая величина {6} отклонение интервала 1pps от 1 секунды. {7} текущий логический уровень на входе 1pps. {8} реальная частота и {9} фазовый сдвиг между сигналами на выходах SIN1 и SIN2. {10} реальная выходная частота на выходе F1. {12} сохранение текущих значений меню в энергонезависимой памяти. Особенности логики работы прибора: - режимы измерения частоты (fA, fB) и периода (PA, PB) алгоритмически полностью идентичны за исключением преобразования 1/x для периода. Кроме того в режиме измерения периода (PA, PB), при необходимости, после прихода стартового перепада входного сигнала, цикл измерения будет автоматически удлиняться шагами по 100мкс до тех пор, пока хотя бы один период входного сигнал не закончится. - в режиме измерения единичных длительностей (tA, tB, tAB, zAB), каждый следующий замер происходит через 100мкс после предыдущего. Для этих режимов настройка времени цикла измерения (Gate:) и режима запуска (Pack) не оказывают влияния на цикл измерения. - режим измерения длительности между импульсами на входах А и В (zAB) можно использовать для измерения фазового сдвига между сигналами (ф=360*t/T). В этом режиме измеряется интервал именно между серединами импульсов (учитываются передние и задние перепады). Это исключает влияние ширины импульсов и порогов входных компараторов на результат. - в режиме подсчёта импульсов (NA, NB) настройка времени цикла измерения (Gate:) и режима запуска (Pack) не оказывают влияния на измерение. Регистрация подсчитанных импульсов происходит каждые 200мс. - для режима измерения коэффициента заполнения (DA, DB) и длительности импульса в серии (sA, sB), дискретность измерения в 2 раза грубее системной (2*2=4нс), суммарное время нахождения входного сигнала в состоянии счёта за цикл измерения не должно превышать 16 секунд, а время цикла измерения должно превышать два периода входного сигнала. - в режиме измерения длительности импульса в серии (sA, sB), измеренное значение вычисляется как отношение суммарной длительности всех импульсов серии к их количеству на протяжении цикла измерения. - в ждущий режиме запуска измерения (Pack), старт интервала измерения откладывается до прихода первого стартового перепада входного сигнала. Это позволяет производить измерения сигнала в пачке, но нужно следить за тем, чтобы в один цикл измерения попадала только одна пачка. Для этого в ждущем режиме запуска (Pack) регулировка времени цикла (Gate:) измерения имеет более мелкий шаг. - при вычислении измеряемого значения частоты или периода, сначала производится деление на коэффициент (PR), а затем прибавляется ПЧ (IF). Установка значения коэффициента деления (PR) менее 1, делает возможным прямое отображение, например оборотов в минуту с датчиков разных типов. - после окончания каждого цикла измерения, значения каналов 1 и 2 сначала подвергаются статистической обработке и фильтрации, затем передаются в канал 3, выводятся на дисплей если разрешено. Далее в канале 3 производится математические операции, статистическая обработка и фильтрация, и вывод на дисплей. Если цикл измерения окончился без результата или с результатом более 1E100 или менее -1E100, то цикл пропускается, а это значение отбрасывается. - при математических операциях с двумя величинами, когда одна из величин поступает реже другой или вообще появляется единственный раз, каждый новый результат операции будет вычисляться с её старым значением начиная со второго. Т.е. при поочерёдном появлении величин в двух каналах, результат будет вычисляться один раз для каждой новой пары значений. - при логической взаимосвязи канала 3 с каналами 1 и 2, воздействие на них, вызовет воздействие и на канал 3. Например cброс канала 1, при выбранном режиме "А+В:" в канале 3, вызовет сброс не только канала 1, но и канала 3. - скорость обновления значений на дисплее - не более 5 раз в секунду. - для предотвращения преждевременного износа EEPROM, выбираемые режимы измерения запоминаются в энергонезависимой памяти c секундной задержкой. - включение прибора с зажатыми энкодером и кнопкой "Сброс А", восстанавливают настройки и режимы работы по умолчанию. - выход формирователя В в зависимости от режима работы, является ещё и выходом прескалера входа С. - при валидном сигнале на входе 1pps, происходит накопление точности интервала, и возможно включение режима автоматической коррекции значения опорной частоты. Сигнал 1pps считается валидным, если укладывается в диапазон 1с ±200мкс, в этом случае на индикаторе символ "1pps" отображается зелёным цветом, при неправильном сигнале - красным. Процедура калибровки по сигналу 1pps: ============================================================================= У входов А и В одинаковая структура. После входного делителя напряжения и цепей защиты, каждый вход имеет узел на дифференциальном усилителе AD8130. Кроме усиления в 2 раза, этот узел обеспечивает смещение по постоянному напряжению, необходимое для правильной работы быстродействующего компаратора MAX999. Вход С имеет предделитель на 256 и логарифмический детектор для измерения уровня входного сигнала. Для согласования динамического диапазона, перед детектором имеется П-образный аттенюатор. Для уменьшения наводок, зону печатной платы с входными усилителями и тумблерами желательно накрыть экраном из медной фольги. Крепится экран пайкой, для этого на плате предусмотрены специальные площадки. Сигнал с компаратора идёт на узел логики - синхронизатор (триггер Шмидта, D-триггер, элемент 2И-НЕ). В состоянии "стоп" через этот узел входные перепады со входа на МК не поступают. При переходе в состояние "счёт", узел синхронно начинает передавать входные перепады на два свои выходах (первый выбранный активным перепад на входе вызывает спад на выходе). На первый выход только первый спад, на второй выход все спады и фронты. Выходы этих узлов подключены к входам захвата таймеров HRTIMx, для захвата первого и последнего входного перепада за цикл измерения. Эти таймеры тактируются внутренней опорной частотой. Второй выход узла дополнительно подключен ещё к двум таймерам TIMx, один сконфигурирован на подсчёт входных перепадов, другой - для подсчёта входных перепадов с одновременным разрешением счета входным уровнем (Gate). В приборе для измерения частоты применён метод обратного счёта (Reciprocate counting). Для этого метода количество значащих разрядов и погрешность измерения примерно одинакова для всего диапазона измеряемых частот, и определяется временем измерения, а также величиной и стабильность опорной частоты. Например при измерении частоты 1000Гц за 1 секунду, разрешающая способность составляет 1с*(1кГц/500МГц)=±0.000002, т.е 5 знаков после запятой, всего 8.5 значащих разрядов. При таком методе измерения частоты, применение входных делителей частоты, как например по входу С, не приводит к потере разрядности результата. Алгоритм работы позволяет МК за цикл измерения получать точное число входных перепадов (N), число перепадов внутренней опорной частоты (M), а также число перепадов внутренней опорной частоты, подсчитанных в течении времени, которое входной сигнал имел определенный логический уровень (K). Причем время от первого до последнего входного перепада (N) вычисляется с точностью ±1 единица счета внутренней опорной частоты (М), т.е. ±2нс. Точность измерения (K) составляет ±4нс, т.к. соответствующие таймеры тактируются с частотой, в 2 раза меньше системной (250МГц). По этим данным вычисляются измеряемые величины: Значения отображаются на дисплее всегда с максимальной разрядностью, поэтому нужно понимать, каким разрядам можно верить, а каким - нет. В будущих прошивках планируется добавить гашение или затемнение разрядов, не несущих полезной информации. Правда в случаях накопления или фильтрации замеров не всегда это можно точно определить. Например измеряем частоту с временем измерения 100мкс без статистической обработки, на дисплее видим значение 50.0000000000МГц, погрешность вычисления составляет ±1 период внутренней опорной частоты (500МГц), значит реальная частота (без учёта неидеальности тракта и точности опорного генератора) может быть: При измерении единичных интервалов и длительностей по двум разным входам HRTIMx, МК производит единичные захваты стартового и финишного события. По этим захватам вычисляется реальная длительность. Дополнительно, при измерении интервалов по разным входам, задействуется логический элемент 2И-НЕ между узлами. С его помощью устанавливается правильная очерёдность поступления перепадов на МК. В этих режимах без статистической обработки, разрешающая способность будет составлять 2нс. В режимах измерения частоты и периода изначально планировалось применить конвейерный способ измерения, при котором входной сигнал обрабатывается непрерывно, без прерывания состоянием "стоп" входным узлом логики и без разрыва входного сигнала. При таком способе происходит одновременно несколько измерений, начала которых смещены друг относительно друга. Это позволяет получать новый результат измерения например каждые 200мс, независимо от продолжительности времени измерения. А также быстро отображать предварительный результат, постепенно уточняя его к окончанию интервала измерения. Например при запуске цикла с временем измерения 10с, запустятся 50 одновременных измерений со смещением 200мс друг относительно друга, при этом в течении первые 50 замеров будет постепенно набрана полная точность результата. Далее, с периодом 200мс, на дисплее с полной точностью, будут отображаться результаты замеров, запущенных со смещением от самого первого. Подробнее про данный способ измерения можно почитать тут. К большому сожалению ограничения, связанные с модулем HRTIM при данной схемотехнике, не позволили реализовать приемлемую точность при таком способе измерения. Этот способ измерения открывает интересные возможности, которые планируется реализовать позже в другом приборе. Вообще пришлось изрядно поломать голову над алгоритмом работы каждого режима измерения. Ведь алгоритм должен полностью исключать даже теоретическую возможность искажения результатов измерения сигналов каких-либо частот и соотношений интервалов. Был испробован (и он даже был как-то работоспособен) даже такой замысловатый вариант, когда одно и то же событие вызывало две пересылки по DMA с разным приоритетом, одной пересылкой читались флаги таймера HRTIM, другой - эти же флаги сбрасывались. Проблема, которая вызвала наибольшее затруднение в реализации, это когда ошибка приходящего фронта входного сигнала ± такт системной частоты, приходилась на момент переполнения таймера HRTIM. Это вызывало очень редкую ошибку в 100мкс. Аппаратных средств, учитывать такое переполнение нет. Пришлось организовать два параллельных процесса измерения, смещённых друг относительно друга, и при попадание измеренных значений в диапазон вероятной ошибки, брать значения из вспомогательного процесса. Так же пришлось принять меры для того, чтобы транзакции DMA гарантированно не накладывались друг на друга. В процессе отладки алгоритмов всплыл косяк МК, не описанный в errata: для таймеров A...E модуля HRTIM есть некоторые значения в счетчиках, для которых иногда при захвате, захваченное значение и флаги выставляются только после переполнения этих счетчиков, а не в момент захвата. Причём сам захват осуществляется корректно. Какие конкретно условия влияют на появление таких пораженных точек, достоверно установить не удалось. Пришлось вычислять эти значения и "подставлять" программные костыли. Это актуально только для режимов tA, tB и входа 1pps. Остался открытым вопрос, на сколько этот косяк одинаков для микроконтроллеров других партий и ревизий. Возможностью работы модуля HRTIM (ver1.1) в режиме захвата на частоте 500МГц, обладают только МК семейства stm32h7. Более продвинутый модуль HRTIM (ver2.0) в МК семейства stm32g4, имеющий PLL, тем не менее может захватывать только на частоте ядра МК, которая ниже чем в семействе H7. Существуют две ревизии кристалла МК stm32h750vbt, ревизия Y (400МГц) и ревизия V (480МГц). Для применения в данном приборе пригодна только вторая, которая работает с небольшим разгоном на 5% (до 500МГц). Так что при покупке, уточняйте у поставщика ревизию кристалла. Я брал тут. МК stm32h750vbt имеет всего одну станицу флэшпамяти, а значит в процессе работы её нельзя переписывать, поэтому для хранения настроек пришлось использовать внешнюю I2C EEPROM. Возможно применение любой памяти с однобайтовым адресом: 24c02 ... 24c16. Питание +3.3В формируется двумя стабилизаторами LM1117-3.3В, один питает МК, другой - всё остальное. Отрицательное напряжение -5В для питания входных усилителей формируется MC34063. С помощью недорогого блока с али-экспресс и Li-Ion аккумулятора большой ёмкости от планшета, можно легко обеспечить автономное питание прибора. На выходах F1 и F2 сигнал формируется встроенными делителями-мультиплексорами MCO. Сигналы на эти и другие выходы идут через отдельные инверторы. Большая часть частот имеет скважность близкую к меандру. Некоторые частоты образуются делением кварцевого генератора, минуя PLL МК, а значит теоретически имеют меньший джиттер. Такие частоты помечаются соответствующими символами "via PLL" или "w/o PLL" соответственно. Для оценки джиттера PLL, на выходе F1 для частоты 10МГц можно выбрать оба варианта. Для генерации частот 100кГц и ниже на выходе F2, используются таймер в режиме ШИМ. В этом случае, сигнал синхронизируется с синусоидальными сигналами SIN1,2. Эти сигналы, с помощью фильтров НЧ второго порядка на ОУ, формируется из поступающего с ЦАП треугольного сигнала. Формирование ЦАП сразу синусоидального сигнала не используется из-за достаточно интенсивного использования DMA, что при неблагоприятных условиях иногда вызывало сбои в процессе измерения. Кроме того, такой сигнал имел бы больший джиттер. Так как разрешающая способность измерения не превышает периода частоты тактирования таймеров, переходы между разными доменами тактирования и фазовые шумы PLL МК не оказывают влияния на точность измерения. Частотомер не имеет возможности подстройки опорного генератора, которая естественно будет не равна точно 10МГц. В принципе можно было бы использовать и классический подход с VCXO, но само наличие функции внешней подстройки у генератора, уже будет вносить определённый вклад в нестабильность частоты. Поэтому в частотомере реальное значение опорной частоты просто хранится в энергонезависимой памяти в числовом виде, и может быть скорректировано вручную или автоматически с помощью механизма привязки к сигналу 1pps. Вход 1pps, как и вход внешнего запуска, имеют цепи защиты. Как правило, у сигнала 1pps со спутникового приёмника, имеется достаточно большой джиттер, до нескольких сотен нс. Для исключения его влияния имеется режим бесконечного накопления приходящих интервалов. После накопления можно запомнить вычисленное значение константы внутренней опорной частоты, используя измеренный усреднённый интервал как эталон. В авторском варианте применялся отечественный приёмник фирмы Навиа ML8088. Антенна внешняя. В отдельном корпусе с приёмником находится мост USB-UART для удобного контроля и конфигурации приёмника. Управляющее напряжение нагревателем термостата формируется ШИМ МК и фильтром НЧ, преобразующем ШИМ-сигнал в постоянное напряжение. Температура кварцевого генератора с помощью АЦП измеряется интегральным датчиком температуры с аналоговым выходом. В алгоритме стабилизации температуры приняты меры для фильтрации шума. Конструктивно кварцевый генератор, нагреватель и датчик температуры выполнены на отдельной компактной печатной плате, размещённой в теплоизолированном объёме. Мощность нагревательного элемента около 350мВт. Теплоизолированный объём кварцевого генератора образуют два кусочка от ленты вспененного пенополиэтилена, между которыми в небольшой нише размещена печатная плата генератора. Пенопласт (вспененный полистирол) не подойдёт, так как деформируется при температурах более 45-50 градусов. Печатную плату генератора желательно сделать максимально тонкой (0.5мм). Соединение с основной платой должно быть выполнено тонким одножильным проводом. Выбором температуры стабилизации вблизи точки перегиба характеристики кварца, применённого в генераторе, можно добиться большей стабильности частоты, чем при использовании TCXO. При этом генератор значительно дешевле и доступней, чем готовый OCXO. Конструкция теплоизолирующего объема может быть и другой, более того, генератор можно собрать на дискретных компонентах и применить кварцевый резонатор, специально спроектированный для работы в условиях темостатирования на конкретной температуре. В случае изготовления термостата с большими потерями тепла и невозможности набрать требуемую температуру, потребуется уменьшить сопротивление нагревательных резисторов R1 и R2, и возможно применить VT1 (на плате генератора) большей мощности, так как этот транзистор является частью нагревательного элемента и тоже выделяет тепло. Дисплей LCD TFT Open-Smart 3.5d, 240X400, на контроллере ST7793, с 8-разрядным параллельным интерфейсом. Куплен тут. На некоторых экземплярах модулей дисплей наклеен неровно, их приходится переклеивать. Для удобства монтажа можно скусить сегмент текстолита у пары крепёжных отверстий модуля по углам. Разъём входа С - угловой SMA (female), припаянный по контуру. Конденсатор C27 желательно выводной. В качестве прескалера применяется синтезатор LMX2324. Логарифмический измеритель сигнала AD8313, аттенюатор перед ним на 20дБ. Перечень с указанием типов всех компонентов прилагается. В виду выбора компонентов и особенностей схемы, для этого проекта изначально предполагался заказ печатной платы на производстве, поэтому её сложность как и в RLC-71, не принималась во внимание. Для упрощения конструкции корпуса и обеспечения пристойного внешнего вида, так же как и в Амплипульс-Микро и mR-71, печатная плата прибора одновременно является и его передней панелью. Толщина 1.5мм, материал FR-4, чёрная маска, шелкография белая. Некоторые цепи частотомера достаточно критичны по скорости и шуму, кроме того требовалось обеспечить какую-никакую экранировку, поэтому печатная плата сделана 4х-слойной. Такой подход позволил обойти большую часть сложностей, избавиться от рутины, сосредоточившись на наиболее интересной стороне дела. Сейчас заказ платы на производстве не сложнее покупки МК или дисплея в интернет-магазине. Впрочем при повторении конструкции ни кто не мешает переразвести плату в двух слоях и выполнить корпус традиционным способом. Возможна прошивка МК без программатора, с использованием простого USB-кабеля. Подключаем USB через разъем XP4 (ICSP), контакты D+,D-,GND, согласно схеме. На время программирования ставим перемычку R71. С помощью утилиты "STSW-STM32080 DfuSe_Demo_V3" конвертируем файл прошивки .HEX в .DFU и загружаем его в МК. Подробнее о процессе прошивки можно посмотреть в статье о ГА-71 или тепловизоре. Печатная плата (rev0) была разработана с некоторой избыточностью для отладки разных вариантов реализации узлов схемы, поэтому требуется определённая доработка монтажа (до rev3): 1. Добавить защитный диод по питанию и разъём, например WH-2. В качестве нижней части корпуса применена верхняя крышка пластикового бокса G3113 или G2111C, (серый или белый, 200*120*90 мм), высотой 30мм. Изнутри крышка обклеена медной фольгой для экранировки. Фольга заходит на верхнюю грань борта крышки для обеспечения контакта с открытой медью по контуру печатной платы. Из метизов потребуются 4 винта М4х16(длина резьбы) с глухими гайками для крепления задней крышки, 4 винта М2х15 с гайками и втулками 5мм для крепления модуля дисплея. Планы на будущее: Фото и видео работы, будущие обновления прошивки и другой материал тут (яндекс-диск).
Файлы: Все вопросы в Форум.
Эти статьи вам тоже могут пригодиться: |
|
||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |