Оглавление:

GPSDO YT, опорная частота осциллятора 10 МГц. Бюджетный. Точно: 3 шага
GPSDO YT, опорная частота осциллятора 10 МГц. Бюджетный. Точно: 3 шага

Видео: GPSDO YT, опорная частота осциллятора 10 МГц. Бюджетный. Точно: 3 шага

Видео: GPSDO YT, опорная частота осциллятора 10 МГц. Бюджетный. Точно: 3 шага
Видео: Тактовые сигналы с низким джиттером: обзор фемтотактов 5x7 NG от IDT 2024, Июль
Anonim
GPSDO YT, опорная частота осциллятора 10 МГц. Бюджетный. Точный
GPSDO YT, опорная частота осциллятора 10 МГц. Бюджетный. Точный
GPSDO YT, опорная частота осциллятора 10 МГц. Бюджетный. Точный
GPSDO YT, опорная частота осциллятора 10 МГц. Бюджетный. Точный
GPSDO YT, опорная частота осциллятора 10 МГц. Бюджетный. Точный
GPSDO YT, опорная частота осциллятора 10 МГц. Бюджетный. Точный

*******************************************************************************

СТОП СТОП СТОП СТОП СТОП СТОП СТОП СТОП СТОП

Это устаревший проект.

Вместо этого проверьте мою новую версию с ЖК-дисплеем 2x16, доступную здесь:

www.instructables.com/id/GPSDO-YT-10-Mhz-L…

Я оставил старую версию здесь для документации.

*******************************************************************************

Привет, народ, Что такое GPSDO? GPSDO означает: Дисциплинированный осциллятор GPS. GPS для глобальной системы позиционирования. Все спутники GPS оснащены синхронизированными атомными часами. Модуль GPS принимает эти сигналы от нескольких спутников. И по триангуляции он знает свое местоположение. Но здесь нас интересует количество импульсов в секунду, которое обнаруживается на модуле. С помощью этого точного импульса (от атомных часов) мы можем создать очень и очень точный генератор. Зачем? Для справки, для калибровки частотомера или просто ради развлечения, чтобы иметь его в своей лаборатории.

Их много схематично в Интернете. Я пробовал. Некоторые хороши, один с tiny2313 был на 5 герц медленнее. Но мой самый простой, полезный и удобный. И я даю вам шестнадцатеричный код. В них нет ни ГУН, ни делителя. Схема с ГУН в порядке. Но он должен иметь импульсный сигнал 10 кГц или более непрерывно. Если антенна становится слишком слабой, отсутствует импульс или отсутствует импульс вообще, осциллятор (ocxo) работает сам по себе, и VFC (контроль частоты напряжения) больше не точен. Для обратной связи ГУН необходима опорная частота. Если нет, то оно варьируется от 1 до 2 Гц! Кроме того, в этой конфигурации не работает более дешевый модуль GPS. У нас должно быть не менее 10 кГц, чтобы сделать VCO. Я пробовал с 1000 герц. Разрыв был слишком большим, частота менялась. Таким образом, с ublox neo-6m вы не сможете сделать отличный vco gpsdo, потому что максимальная выходная частота составляет 1000 Гц. Вы должны купить neo-7m или верхнюю.

Так работает мой GPSDO YT. Контроллер нашел хорошую настройку для любого OCXO с vfc от 0 до 5v. Если мы потеряем сигнал GP, частота вообще не изменится. Когда сигнал появляется снова, контроллер берет свое последнее известное исправное значение и продолжает работу, как прежде. По прицелу, с опорным генератором. Мы не можем сказать, когда сигнал потерян или когда он вернулся. Сигнал такой же.

После калибровки вы можете использовать gpsdo без антенны, если хотите. Через несколько маунтов у вас будет очень небольшой дрейф. Но…. насколько больше? Пришло время для некоторых объяснений.

Вот немного математики … Простая математика, следуйте за мной, это легко. Пока что алгоритм состоит из 6 этапов. Каждая фаза занимает выборку от 1 до 1000 секунд, обнаруживается хорошая регулировка ШИМ и выполняется более длительная выборка для большей точности.

Точность = (((Количество секунд x 10E6) + 1) / количество секунд) - 10E6

Фаза 1, 1 секунда выборки для 10000000 отсчетов с точностью + - 1 Гц

фаза 2, 10-секундная выборка для 100, 000, 000 отсчетов для точности + -0,1 Гц

Фаза 3, 60-секундная выборка для 600 000 000 отсчетов с точностью + -0,01666 Гц

Фаза 4, 200 секунд Выборка для 2 000 000 000 отсчетов с точностью + -0,005 Гц

Фаза 5, 900 секунд выборки для 9 000 000 000 отсчетов с точностью + -0,001111 Гц

Фаза 6, выборка 1000 секунд для 10 миллиардов отсчетов с точностью + -0,001 Гц

Худший случай. Когда мы получаем фазу 6. Это число может немного меняться каждые 1000 секунд или нет. некоторое время это будет 10, 000, 000, 001 или 9, 999, 999, 999 Итак, + или - 0 000, 000.001 вариация для 1000. Теперь мы должны знать значение 1 секунды.

10 МГц = 1 секунда

Для 1 секунды = 10000, 000, 001 отсчет / 1000 с = 10000, 000,001 Гц (наихудший случай для 1 секунды)

10 000 000,001 - 10 000 000 = 0,001 Гц / с быстрее или медленнее

0,001 Гц X 60 X 60 X 24 X365 = 31536 Гц / лет

Итак, помните, 10 МГц - это 1 секунда, 31536 Гц X 1 / 10E6 = 0, 0031536 секунд в год.

Еще один более быстрый метод расчета. один промах для 10E9Mhz равен 1 / 10E9 = 1E-10

1E-10 x 60x60x24x365 = 0,0031536 секунд / год.

Это достаточно точно для вас?

однако у вас должен быть хороший OXCO. Я предпочитаю выход Double Oven 12v Sinus. Более стабильный, тихий и точный. Но у меня такой же результат с простыми 5В. Например, stp 2187 имеет короткое время стабильности (отклонение по шкале Аллана) 2x10-12 = 0,000, 000, 000, 002 Гц стабильности. В то же время, когда доступен GPS-импульс, Avr всегда корректирует pwm (частоту). UC всегда считает… всегда. Это означает, что на дисплее вы не увидите дату и время. Когда uC производит выборку 900 секунд, этот занят 900 секунд. Он должен считать все часы. Проблема в том, что uC работает на частоте 10 МГц. Каждые часы нужно считать. Он считает себя. Если отсутствует только один тактовый сигнал, сэмпл будет некорректным, и регулировка ШИМ будет неправильной. Я не могу обновлять отображение каждую секунду.

Когда начинается отбор проб. Uc начинает отсчет таймера0. Каждые 256 тактов генерируют прерывание. Регистр X увеличивается. когда он заполнен, регистр Y увеличивается, а X сбрасывается в 0 и так далее. В конце, по достижении последнего импульса GPS, счет останавливается. И сейчас и только теперь я могу обновить отображение и произвести некоторые вычисления для расчета pwm.

зная это, у меня есть только 25,6 мкс (256 часов до прерывания), чтобы читать и отображать время или другое. Это невозможно. Можно усилить одно прерывание, а не 2. Я мог бы обновить время после 1000 секунд… но будет непрактично видеть время с интервалом 15, 16 минут. У меня есть часы, часы, сотовый телефон, чтобы узнать время:) Я делаю ссылку на 10 МГц. Не часы.

Еще одна проблема, с которой я столкнулся, у некоторых инструкций avr есть 2 цикла. Включая инструкцию rjmp. Это означает, что если первый или последний GPS-импульс возник одновременно с двухцикловой инструкцией, микроконтроллер пропустит часы. Потому что uC завершит инструкцию до начала прерывания. Таким образом, счетчик запустится или остановится на один цикл позже. Так что я не могу сделать цикл ожидания по времени… Но на самом деле у меня нет другого выбора. Мне нужно было где-то зацикливаться !! Итак, я использую инструкции rjmp и nop (это ничего не делает). Nop - это инструкция с одним циклом. Я поставил 400 nop инструкций для одного rjmp на atmega48. 2000 на версии atmega88 и atmega328p. Таким образом, вероятность того, что первый или последний импульс придет по команде rjmp, меньше. Но да, это возможно, и если это произойдет, эта ошибка будет исправлена при следующей выборке.

Дисплей не является обязательным. Вы можете создать схему только с uC, OCXO и фильтром нижних частот (резисторный конденсатор), включить и подождать. Через 1 час у вас будет приемлемая частота. Но для достижения 6 фазы требуется пара часов.

Pwm - 16 бит. 65535 шаг. 5в / 65535 = 76, 295 мкВ

Вариация OCXO составляет 2 Гц на 1 В. 1v / 76, 295uV = 13107 шаг для 2 Гц. 2/13107 = 152,59uHz с шагом pwm

Фаза 5 изменяет ШИМ на 3, фаза 6 - 2. Шаг … Почему 3? потому что 3 меняет частоту на 0,000, 000, 000, 4 в масштабе 15 минут. и 4 - мое магическое число в моем алгоритме. Например, в первой фазе первая найденная частота равна 10.000, 003 МГц. Я опускаюсь вниз на 0, 000, 000,4 шага.

Слишком большой шаг может перейти от 10.000003 до 10.000001, а после 9 - 999998 Гц. Я упускаю цель.

С 0, 0000004. Это быстрее, чем 0, 1, и я уверен, что не обойду число. И так далее. Я делаю то же самое с 10 секундами, 60 секундами, фазой 200 и 900 секундами. 1000 с - это рабочий режим, используйте шаг ШИМ 2

Обратите внимание, что фаза 5 длится дольше. Разрыв между 4 и 5 больше. Но это помогает быстрее перейти с 5 на 6.

Когда фаза 6 насчитывает ровно 10 миллиардов, значения ШИМ сохраняются в EEPROM. Теперь пора перейти в режим бега. Этот отсчет 1000 секунд, но только с 2 шагами ШИМ. В рабочем режиме реальная частота отображается и обновляется с интервалом в 1000 секунд. Если сигнал потерян в рабочем режиме, он переходит в самостоятельный режим. В этом режиме нет смены ШИМ. Когда сигнал возвращается, он возвращается к фазе 5 для повторной синхронизации.

Если цепь отключена после сохранения EEPROM. Это начнется на этапе 5 при включении со значением pwm eeprom.

Для стирания значения EEPROM просто нажмите кнопку при запуске. Будет нагружен Pwm 50%, и калибровка начнется с фазы 1.

Я трачу много часов на то, чтобы пробовать разные вещи, конфигурацию схемы. Я провел много тестов с операционным усилителем, буфером и другим чипом. И в конце … лучший результат, который я получил, не нужен. Просто хороший стабильный блок питания и какой-то фильтрующий конденсатор. Так что я все просто.

Шаг 1. Купите запчасти

Купить запчасти
Купить запчасти
Купить запчасти
Купить запчасти
Купить запчасти
Купить запчасти

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

Модуль gps: пользуюсь ublox neo-6m. Купил на ebay. Сделайте поиск, это стоит от 7 до 10 долларов США.

По умолчанию в этом приемнике включен режим 1 импульс в секунду. Нам не нужно ничего делать.

Вы можете использовать любой модуль GPS с импульсным выходом 1 Гц. У тебя есть. Используйте это!

OCXO: Я пробовал 2 осциллятора. Двойная печь stp2187 с выходным синусоидальным напряжением 12 В. И ISOTEMP 131-100 5V, прямоугольный выход. Оба поставляются с Radioparts16 на ebay. У меня было очень хорошее обслуживание и цена была дешевле.

AVR: Код подходит немного на atmega48. Но я предлагаю купить atmega88 или atmega328p. Это почти такая же цена. Купите это на digikey или ebay. Использую дип-версию. Вы можете купить версию для поверхностного монтажа, но обратите внимание, контакты на схеме не совпадают.

ЖК-дисплей: подойдет любой дисплей, совместимый с HD44780 4x20. Угадайте, где я купил свою:) Да, пару лет назад на ebay. Сейчас дороже, чем раньше. Но доступно менее 20 долларов США.

Может в ближайшее время сделаю код для дисплея 2х16. Эти дисплеи всего 4 доллара. И между вами и мной будет достаточно двухстрочного дисплея.

У вас должен быть программист AVR ISP. Программирование AVR не похоже на Arduino. Arduino уже запрограммирован для связи через последовательный порт. Совершенно новый AVR должен быть запрограммирован с помощью ISP или параллельного программатора высокого напряжения. Здесь мы используем isp.

74hc04 или 74ac0, регулятор напряжения 7812 и 7805, резисторы, конденсатор…. digikey, ebay

Шаг 2: вот схема и Gpsdo_YT_v1_0.hex

Image
Image
Вот схема и Gpsdo_YT_v1_0.hex
Вот схема и Gpsdo_YT_v1_0.hex
Вот схема и Gpsdo_YT_v1_0.hex
Вот схема и Gpsdo_YT_v1_0.hex

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

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

Жду антенного удлинителя и разъема bnc, чтобы положить свой проект в коробку.

Вы должны выбрать правильный бит предохранителя. Убедитесь, что выбран внешний генератор. Если у вас проблемы с внешним осциллятором, попробуйте внешний кристалл. И часы low.ckdiv8 не отмечены. Смотрите картинку. Обратите внимание: когда внешние часы перегорают, вы должны предоставить внешние часы для программирования или запуска кода. Другими словами, подключите осциллятор к выводу xtal1.

Между прочим… вы можете использовать тот же код, чтобы сделать частотомер с 1-секундным гейтом. Просто введите часы для измерения на выводе xtal1, и у вас будет частотомер + -1 Гц.

Я буду обновлять проект, как только у меня появятся новые материалы.

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

Я загрузил 2 видео, вы можете увидеть первый и последний этапы.

Я готов ответить на любые вопросы или комментарии. Спасибо.

26 февраля 2017…. Доступна версия 1.1.

-atmega48 больше не поддерживается. Недостаточно пространства.

-Добавлен номер заблокированного спутника.

-Поддержка 2х16 ЖК. Если у вас 4х20, тоже будет работать. Но 2 последние строки ничего не отображают.

Шаг 3: Вход в EEPROM

Журналы в EEPROM
Журналы в EEPROM

Вот дамп eeprom через пару часов работы. Я объясню, как это читать. Опять же, это просто:)

По адресу 00, 01 хранится значение ШИМ. Как только фаза 5 насчитывает 9 миллиардов, значение pwm обновляется каждый раз, когда счетчик достигает ровно 10 миллиардов.

Как только мы находимся в фазе 5. Все подсчеты сохраняются в EEPROM после значения pwm. Начать с адреса 02, после 03 и так далее.

Этот образец пришел от моего 5-вольтового ocxo. Мы можем прочитать значение ШИМ 0x9A73 = 39539 в десятичной системе счисления на 65536. = 60, 33% или 3,0165 В.

Итак, адрес 00:01 - это 0x9A73.

Далее вы можете прочитать 03. Для 9 000 000 000 003 Pwm снижается на 3, потому что мы еще находимся в фазе 5.

00 для 10 000 000 000 pwm остается нетронутым и мы переходим в рабочий режим (фаза 6)

02 для 10000, 000.002 В этом случае значение pwm уменьшается с 2

01 для 10000, 000.001 значение pwm снижено с 2

01 для 10000, 000.001 значение pwm снова снижено с 2

00 для 10, 000, 000 000 pwm пребывания не трогается

00 для 10, 000, 000 000 pwm пребывания не трогается

00 для 10, 000, 000 000 pwm пребывания не трогается

Теперь вы знаете, как читать eeprom. Каждые 1000 секунд новое значение записывается в EEPROM. Когда EEPROM заполнен, он перезапускается с адреса 2.

Среднее значение FF 9, 999, 999,999

Вы можете с помощью этого дампа отслеживать точность без какого-либо ЖК-дисплея.

Вы можете сбросить файл eeprom с помощью программатора isp.

Надеюсь, что дал вам достаточно информации. Если нет, дайте мне знать. Совет, ошибка, что угодно.

Янник

Рекомендуемые: