Мне нужно синхронизировать два микроконтроллера, чтобы они могли измерять скорость распространения волн. Измерения временной задержки должны иметь микросекундную точность (погрешность менее 1/2 микросекунды).
У меня есть два микроконтроллера ( ATmega328 ), которые используют кварц 12 МГц.
Оба они оснащены трансиверами Bluetooth. Приемопередатчики Bluetooth отправляют и получают пакеты с дрожанием ~ 15 миллисекунд.
Я надеюсь синхронизировать микроконтроллеры с помощью приемопередатчиков Bluetooth или каким-либо другим творческим методом.
Я попытался синхронизировать их, прикоснувшись друг к другу, но мне нужно, чтобы они оставались синхронизированными в течение примерно 10 минут, а их часы дрейфовали слишком быстро. Возможно, если бы можно было точно предсказать дрейф часов, этот метод сработал бы.
Как мне добиться этой синхронизации?
Я не хочу испортить ваш беспроводной парад. Вы столкнулись с трудным, но неожиданным требованием. Что-то подобное требует переоценки всей конструкции системы.
Первое , что приходит на ум, это синхронизировать оба устройства с одним генератором. У вас есть связь Bluetooth, что намекает на то, что диапазон составляет порядка 10 м. Вы можете соединить свои устройства коаксиальным кабелем RG174 или оптическим волокном, по которому будут передаваться часы.
Во -вторых , есть прецизионные генераторы. В порядке увеличения точности и стоимости.
3-й , прецизионный осциллятор, обученный с помощью GPS. Каждый спутник GPS имеет на борту несколько атомных часов. Обычно в поле зрения находится множество спутников GPS. GPS часто используется для точного хронометража (менее известное использование по сравнению со спутниковой навигацией). Большинство приемников GPS имеют выходной сигнал 1PPS (один импульс в секунду), что обеспечивает синхронизацию с точностью до 50 нс.
Чтобы иметь дрейф 0,5 мкс за 600 с (10 мин), ваши часы (тактовая частота 12 МГц в вашем нынешнем дизайне) должны иметь дрейф менее 0,0008 ppm. Но если вы можете время от времени исправлять ошибку синхронизации из внешнего источника с малым дрейфом, требования к дрейфу часов могут быть более мягкими. Если вы можете исправлять каждую секунду, то ваши часы могут иметь дрейф 0,5 промилле.
Модули GPS с выходом 1pps легко доступны и недороги.
На самом деле нет необходимости привязывать генератор процессора к GPS (например, с помощью PLL). Пока вы можете «отмечать время» внешних событий относительно часов ЦП, относительно просто интерполировать время передачи и получения волновых событий между любыми двумя событиями PPS.
Часто можно использовать комбинацию аппаратного таймера на микроконтроллере вместе с программным счетчиком событий переполнения для создания счетчика циклов ЦП произвольной длины. Может быть сложно правильно обрабатывать события прокрутки, как аппаратного, так и программного счетчика, но, в конце концов, у вас может быть, скажем, 32-битный счетчик, который считает с частотой ЦП (обеспечивая высокое разрешение). ) и перекатывается с периодом, превышающим интервалы, которые вы пытаетесь измерить (например, 429 секунд при 10 МГц).
Вы можете использовать этот счетчик для отметки времени различных внешних событий. Если одним из этих событий являются импульсы с частотой 1 импульс в секунду от приемника GPS, то базовая долговременная точность тактовой частоты ЦП становится безразличной. Единственное, что имеет значение, это его краткосрочная стабильность. Вы можете сохранять метки времени GPS в буфере FIFO и сравнивать метки времени других событий со значениями в этом буфере. Поскольку вы знаете, что импульсы GPS разнесены ровно на одну секунду, вы можете найти точное время любого другого события путем интерполяции.
Предполагать и являются временными метками процессора для двух последовательных импульсов GPS. Вы также знаете фактическое время (атомные часы), связанное с каждым из этих импульсов (из сообщений 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, код, по крайней мере, обеспечит хорошую эталонную реализацию.
Ник Алексеев
Трэвисбартли
Кевин
ДжиммиБи
пользователь 2943160
Творог
Лундин