Мне нужно синхронизировать два микроконтроллера, чтобы они могли измерять скорость распространяющихся волн. Измерения временной задержки должны иметь точность микросекунды (погрешность менее 1/2 микросекунды).
У меня есть два микроконтроллера ( ATmega328 ), которые используют кристалл 12 МГц.
Они оба оснащены приемопередатчиками Bluetooth. Приемопередатчики Bluetooth отправляют и получают пакеты с дрожанием ~ 15 миллисекунд.
Я надеюсь синхронизировать микроконтроллеры, используя приемопередатчики Bluetooth или какой-либо другой творческий метод.
Я пытался синхронизировать их, касаясь их вместе, но мне нужно, чтобы они оставались синхронизированными в течение примерно 10 минут, и их часы дрейфовали слишком быстро. Возможно, если бы можно было точно предсказать смещение часов, этот метод сработал бы.
Как мне добиться этой синхронизации?
Ответы:
Я не хочу идти дождь на твоем беспроводном параде. Вы столкнулись с жестким, но неожиданным требованием. Нечто подобное требует переоценки всей конструкции системы.
Первое , что приходит на ум, - отключить оба блока от одного генератора. У вас есть связь Bluetooth, которая намекает на то, что дальность порядка 10м. Вы можете подключить свои устройства с помощью коаксиального кабеля RG174 или оптоволоконного кабеля, который будет нести часы.
Второй , существует прецизионные генераторы. В порядке увеличения точности и стоимости.
В-третьих , прецизионный генератор обучен с GPS. Каждый спутник GPS имеет несколько атомных часов на борту. Обычно в поле зрения есть множество спутников GPS. GPS используется для точного определения времени (менее известное использование по сравнению с спутниковой навигацией). Большинство приемников GPS имеют выход 1PPS (один импульс в секунду), который обеспечивает синхронизацию с точностью до 50 нс.
Чтобы иметь дрейф 0,5 мкс в течение 600 с (10 минут), ваши часы (12 МГц в вашей нынешней конструкции) должны иметь дрейф менее 0,0008 ppm. Но если вы можете исправить ошибку синхронизации время от внешнего источника с небольшим смещением, требования к смещению в часах могут быть более смягчены. Если вы можете исправить каждую секунду, то ваши часы могут иметь отклонение 0,5 стр / мин.
источник
Модули GPS с выходом 1pps легко доступны и недороги.
На самом деле нет необходимости привязывать генератор ЦП к GPS (например, с помощью ФАПЧ). До тех пор, пока вы можете «метить время» внешних событий относительно тактовой частоты ЦП, относительно просто интерполировать время передачи и приема вашей волны между любыми двумя событиями PPS.
Часто можно использовать комбинацию аппаратного таймера на микроконтроллере вместе с программным счетчиком для его событий переполнения, чтобы создать счетчик циклов ЦП произвольной ширины. Может быть сложно правильно обрабатывать события опрокидывания, как счетчика оборудования, так и счетчика программного обеспечения, но, в конце концов, у вас может быть, скажем, 32-разрядный счетчик, который рассчитывает с частотой тактовой частоты процессора (обеспечивая высокое разрешение ) и переворачивается с периодом, превышающим интервалы, которые вы пытаетесь измерить (например, 429 секунд при 10 МГц).
Вы можете использовать этот счетчик для отметки времени различных внешних событий. Если одно из этих событий представляет собой импульсы в 1 pps от приемника GPS, то базовая долговременная точность тактовой частоты процессора становится безразличной. Единственное, что имеет значение, это его краткосрочная стабильность. Вы можете сохранить метки времени GPS в буфере FIFO и сравнить метки времени других событий со значениями в этом буфере. Поскольку вы знаете, что GPS-импульсы находятся на расстоянии ровно одной секунды, вы можете узнать точное время любого другого события путем интерполяции.
Наконец, если у вас есть эта установка, работающая на двух отдельных системах, каждая с собственным GPS-приемником, вы можете сравнить время, рассчитанное для различных событий в двух системах, с высокой точностью (обычно порядка ± 100 нс), даже если Часы процессора двух систем не синхронизированы.
источник
Я уже реализовал беспроводную синхронизацию часов для микроконтроллеров, но только с точностью до миллисекунды, что было достаточно для приложения. Из моего прочтения эта статья довольно хорошо объясняет микросекундную синхронизацию: http://www.math.u-szeged.hu/tagok/mmaroti/okt/2010t/ftsp.pdf
По сути, если вы знаете о событии передачи и событии прибытия радиопакета на передатчике и приемнике соответственно, у вас есть общее наблюдаемое событие (предполагается, что вы игнорируете время распространения радиоволны) между двумя системами, которые могут быть используется в качестве ссылки. Другая важная особенность, упомянутая в статье, - это оценка перекоса часов с использованием линейной регрессии.
источник
Ознакомьтесь с протоколом синхронизации часов Bluetooth (CSP), который является необязательной частью профиля устройства работоспособности (HDP). Разделы в этом документе, относящиеся к CSP, составляют 2.1 и 8.
У меня еще не было возможности попробовать это самому, но, насколько я могу судить, BlueZ (официальный стек протоколов Bluetooth для Linux) только что добавил поддержку HDP , включая поддержку CSP. Таким образом, даже если это не похоже на то, что вы будете работать на платформе, поддерживающей стек BlueZ, но, возможно, код, по крайней мере, обеспечит хорошую эталонную реализацию.
источник