← На главную

Доработка апконвертера для QO-100: стабилизация частоты

Ранее изготовленный апконвертер на 2.4 ГГц имеет дефект в виде дрейфа частоты. Попробуем разобраться, чем вызван дефект, каковы возможные решения, и как они работают на практике.

Суть проблемы такова. В проекте использована плата на базе MAX2870. На плате находится опорный генератор 25 МГц. Генератор обладает некоторой температурной стабильностью. Точно мы ее не знаем. Допустим, что это хороший генератор со стабильностью 20 ppm (parts per million). Тогда на 2.4 ГГц частота может плавать на 2400 * 20 или ±48 кГц. На практике все менее ужасно, поскольку температура меняется не сильно. Но частота плывет, и корреспонденты это отмечают.

Существуют генераторы с температурной компенсацией, или TCXO (temperature compensated crystal oscillator). Хороший TCXO обладает стабильностью порядка 0.5 ppm. В нашем случае это все еще много, ±1200 Гц. К тому же, найти генератор на требуемую частоту, в нужном корпусе и с правильным напряжением питания может быть проблематично.

Что нам нужно – это термоcтатированный генератор, или OCXO (oven controlled crystal oscillator). Это кварцевый генератор, помещенный в корпус, где при помощи нагревательного элемента поддерживается постоянная температура. Распространенным и недорогим OCXO является OSC5A2B02. Он доступен как сам по себе, так и в виде плат с необходимой обвязкой.

Себе я взял плату:

Плата OCXO 10 МГц на базе OSC5A2B02

Согласно даташиту [PDF], температурная стабильность OSC5A2B02 составляет 0.01 ppm, или 10 ppb (parts per billion). На частоте 2.4 ГГц это означает ±24 Гц. Ни в телефоне, ни в телеграфе этого никто никогда не заметит.

Существуют еще более точные генераторы со стабилизацией по атомным часам на GPS-спутниках, или GPSDO (GPS disciplined oscillator). Они обеспечивают стабильность порядка 0.5 ppb. Такая точность избыточна, быть может, кроме случая работы в цифровых видах связи. В рамках статьи GPSDO мы использовать не будем.

OSC5A2B02 неудобен тем, что имеет частоту 10 МГц, тогда как плате с MAX2870 нужны 25 МГц. Бывают OCXO и на 25 МГц, но они дороги, редки или обладают недостаточной стабильностью. Как же быть?

В ходе экспериментов был найден ряд решений, которые не работают:

  • Не работает преобразование 10 МГц в 25 МГц при помощи ФАПЧ. Результирующий сигнал имеет побочные продукты. Они подавлены по крайней мере на 30 dB, но этого недостаточно. При работе на QO-100 сигнал передается как на желаемой частоте, так и 250 кГц выше;
  • Не работают специализированные микросхемы умножения частоты. Я опробовал ICS512 (даташит [PDF]). Результирующие 25 МГц имеют высокий уровень фазового шума. Сигнал на спутнике звучит, как неразборчивое, едва уловимое присутствие;
  • Не работает подать на MAX2870 опору 10 МГц и настроить генератор на частоту в 2.5 раза выше. В данном сценарии захвата не происходит вообще, ни на какой частое;

Рабочее решение подсказал Алексей, R2AJP. В целом, MAX2870 может работать от опоры 10 МГц. Нужно только модифицировать прошивку или написать новую. На плате генератора использован микроконтроллер STM32F103. Ранее я использовал его во многих проектах, так что написать прошивку – не проблема.

Вот что получилось в итоге:

Модификация генератора на MAX2870 под внешнюю опору 10 МГц

Генератор на 25 МГц выпаиваем. Вместо него подводим 10 МГц с OCXO. Места в корпусе не оставалось. Я просверлил отверстие под разъем SMA и разместил OCXO снаружи.

Дисплей не понадобится. Выпаиваем его для снижения потребления тока. Слева от дисплея разведен SWD. Подключаемся к нему STLink'ом.

Прошивка предсказуемо защищена от чтения. Ее можно сбросить, но нельзя записать. Обновить option bytes так, чтобы перейти с уровня защиты Level 1 на Level 0 не представляется возможным. Скорее всего, использован клон STM32F103, где защита flash-памяти реализовано неверно. Подробности можно почерпнуть из RM0394 Reference manual [PDF], раздела 3.5 Flash memory protection. Сдуваем и запаиваем нормальный STM32F103.

Код драйвера MAX2870 берем у Дмитрия, UA3REO. В его же блоге читаем про интерфейс между STM32 и MAX2870. Прозваниваем дорожки мультиметром. Узнаем, что соединение между МК и генератором следующее: CLK = PB15, DATA = PB14, LE = PB13, CE = PB12. Странная разводка. Она несовместима с аппаратным SPI. Ну что ж, будем дрыгать ногами программно. Исходный код прошивки, а также скомпилированные bin- и hex-файлы можно скачать здесь.

Подстройка частоты производится по WebSDR-приемнику после прогрева OCXO. На вход апконвертера подаем несущую. На плате OCXO крутим потенциометр так, чтобы сигнал попал на требуемую частоту.

С доработанным апконвертером я провел многие радиосвязи как телефоном, так и телеграфом. Частота стабильна. Дефект устранен.