Como sincronizar dois microcontroladores com precisão de microssegundos?

37

Preciso sincronizar dois microcontroladores para que eles possam medir a velocidade das ondas de propagação. As medições de atraso de tempo precisam ter precisão de microssegundos (erro menor que 1/2 de microssegundo).

Eu tenho dois microcontroladores ( ATmega328 ) que usam um cristal de 12MHz.

Ambos estão equipados com transceptores Bluetooth. Os transceptores Bluetooth enviam e recebem pacotes com uma instabilidade de ~ 15 milissegundos.

Espero sincronizar os microcontroladores usando os transceptores Bluetooth ou algum outro método criativo.

Tentei sincronizá-los tocando-os juntos, mas preciso que eles permaneçam sincronizados por cerca de 10 minutos, e seus relógios flutuam rápido demais. Talvez se fosse possível prever com precisão o desvio do relógio, esse método funcionaria.

Como devo conseguir essa sincronização?

Kevin
fonte
2
Você poderia nos dizer o que está tentando fazer e por que as unidades precisam ser sincronizadas? Pode ser que as especificidades do seu aplicativo possam apontar uma solução. Como um problema geral, isso não é muito fácil, especialmente para pequenos dispositivos sem fio.
Nick Alexeev
2
É impossível conseguir a sincronização contando com o Bluetooth. O jitter de 15 ms é demais para obter uma sincronização de 0,5 eua. Você precisa de algo com instabilidade muito baixa e latência fixa que possa ser corrigida. Seria mais fácil se você pudesse obter um único relógio para os dois e armazenar o buffer no relógio para equilibrar os atrasos.
Travisartley
Desculpe pelo atraso. O objetivo do projeto é remover os fios de um design existente de ferramentas de medição digitais portáteis. O usuário queria um design sem fio, pois estava danificando os fios atuais. As unidades estão medindo a propagação de ondas em árvores em pé, que são rápidas o suficiente para precisar de uma sincronização de 0,5us entre os dois sensores.
Kevin
Wireless-o barato: infravermelho. Um pulso de infravermelho pode ser suficiente para sincronizar novamente os relógios quando eles se afastarem um pouco.
JimmyB
11
Este artigo propõe um sistema Bluetooth 4.0 com sincronização de ~ 10uS, com teste experimental.
user2943160

Respostas:

23

Não quero chover no seu desfile sem fio. Você encontrou um requisito difícil, mas inesperado. Algo assim merece uma reavaliação de todo o design do sistema.

A primeira coisa que vem à mente é registrar as duas unidades em um oscilador. Você possui comunicação Bluetooth, o que sugere que o alcance é da ordem de 10m. Você pode conectar suas unidades com um cabo coaxial RG174 ou uma fibra óptica, que carregaria o relógio.

Segundo , existem osciladores de precisão. Em ordem crescente de precisão e custo.

  • TCXO (oscilador de cristal com temperatura compensada). 1 a 3 ppm de desvio, normalmente.
  • OCXO (oscilador de cristal controlado por forno). Deriva na ordem de 0,02ppm. Alguns OCXO caíram para 0,0001 ppm.
  • Relógio atômico ( padrão Rubidium , por exemplo). Estou mencionando o relógio atômico principalmente para fornecer um quadro de referência. Mais sobre isso aqui .

Terceiro , oscilador de precisão treinado com GPS. Todo satélite GPS possui vários relógios atômicos a bordo. Geralmente, há muitos satélites de GPS à vista. O GPS é usado para cronometrar com precisão (uso menos conhecido em comparação com navegação por satélite). A maioria dos receptores GPS possui uma saída de 1PPS (um pulso por segundo), que fornece um tempo preciso de 50ns.
Para ter um desvio de 0,5μs acima de 600s (10min), seu relógio (o relógio de 12MHz em seu design atual) deve ter um desvio inferior a 0,0008ppm. Mas se você puder corrigir o erro de tempo de tempos em tempos a partir de uma fonte externa de baixa deriva, o requisito para a deriva no relógio poderá ser mais relaxado. Se você puder corrigir a cada segundo, seu relógio poderá ter um desvio de 0,5 ppm.

Nick Alexeev
fonte
Certa vez, trabalhei em um projeto em que precisávamos obter esse tipo de precisão em servidores executados em data centers em todo o mundo. A maneira mais fácil era usar o GPS. Verificou-se que nem todas as máquinas / centros de dados podiam acessar o GPS, portanto nossa solução no final foi um grande desafio. Fazer isso com microcontroladores será ainda mais difícil.
NomadAlien
4
+1 para "justifica reavaliação de todo o design do sistema".
11
Dependendo do seu orçamento, você pode comprar unidades de GPS que emitem uma frequência programável (0-10 Mhz) alinhada de fase com o sinal de GPS por aproximadamente US $ 150 ea. Veja o uBlox LEA-6T. Eles alegam saída de pulso de tempo de erro de 30 nS RMS, 99% <60 nS.
Connor Wolf
9

Módulos GPS com saídas de 1pps estão prontamente disponíveis e são baratos.

Não é realmente necessário disciplinar o oscilador da CPU em relação ao GPS (por exemplo, com um PLL). Desde que você possa "registrar o registro de data e hora" de eventos externos em relação ao relógio da CPU, é relativamente simples interpolar o tempo da transmissão de onda e receber eventos entre dois eventos do PPS.

Geralmente, você pode usar a combinação de um timer de hardware no microcontrolador, juntamente com um contador de software para seus eventos de estouro, para criar um contador de ciclo da CPU de largura arbitrária. Pode ser complicado lidar corretamente com eventos de rolagem, tanto no contador de hardware quanto no software, mas no final, você pode ter, por exemplo, um contador de 32 bits que conta com a taxa do relógio da CPU (dando alta resolução ) e passa por um período maior que os intervalos que você está tentando medir (por exemplo, 429 segundos a 10 MHz).

Você pode usar esse contador para marcar os diferentes eventos externos com data e hora. Se um desses eventos são pulsos de 1 pps de um receptor GPS, a precisão básica a longo prazo do relógio da CPU se torna um problema. A única coisa que importa é sua estabilidade a curto prazo. Você pode salvar os carimbos de hora do GPS em um buffer FIFO e comparar os carimbos de hora de outros eventos com os valores desse buffer. Como você sabe que os pulsos do GPS estão exatamente com um segundo de distância, é possível encontrar a hora exata de qualquer outro evento interpolando.

GPSnGPSn+1 1TEumenTEumen+1 1ExtGPSnGPSn+1 1

TEumen+Ext-GPSnGPSn+1 1-GPSn

Por fim, se você tiver essa configuração em execução em dois sistemas separados, cada um com seu próprio receptor GPS, poderá comparar os tempos calculados para vários eventos nos dois sistemas com alta precisão (normalmente da ordem de ± 100 ns), mesmo se o Os relógios da CPU dos dois sistemas não são sincronizados.

Dave Tweed
fonte
Você poderia ser um pouco mais explícito sobre como isso funcionaria? Estou tendo problemas para entender a explicação atual.
NickHalden
@ NickHalden: OK, pronto.
Dave Tweed
Hmmm ok, isso não depende da frequência do clock da CPU ser constante entre os dois pulsos de 1 segundo? Por exemplo, considere um circuito oscilador de cristal particularmente terrível, onde 99% dos pulsos acontecem entre 0,00 e 0,05 segundos e, em seguida, o 1% final acontece entre 0,05 e 1,00 s. Esse exemplo patologicamente construído não estragaria tudo ou ainda estou faltando alguma coisa?
NickHalden
Sim, é isso que significa "estabilidade a curto prazo".
Dave Tweed
Oh, caramba, estava lá quando eu comentei? Haha, isso é embaraçoso. De qualquer forma, obrigado pela explicação +1 de mim.
precisa saber é o seguinte
8

Eu implementei uma sincronização de relógio sem fio para microcontroladores antes, mas apenas com precisão de milissegundos, o que era bom o suficiente para o aplicativo. De minha leitura, este artigo explica muito bem a sincronização de microssegundos: http://www.math.u-szeged.hu/tagok/mmaroti/okt/2010t/ftsp.pdf

Essencialmente, se você tiver conhecimento do evento de transmissão e do evento de chegada de um pacote de rádio no transmissor e no receptor, respectivamente, você terá um evento observável comum (supondo que você ignore o tempo de propagação da onda de rádio) entre os 2 sistemas que podem ser usado como referência. A outra característica interessante mencionada no artigo é a estimativa de inclinação do relógio usando regressão linear.

Keene
fonte
A precisão de 1,5µs no cenário de salto único e a precisão média de 0,5µs por salto no caso de múltiplos saltos foram mostradas fornecendo resultados experimentais. Agradável.
Li-aung Yip
11
Isso também pode ser interessante: Protocolo de sincronização de tempo para redes de sensores
Nick Alexeev
3

Verifique o CSP (Bluetooth Clock Synchronization Protocol), que é uma parte opcional do Health Device Profile (HDP). As seções desse documento relevantes para o CSP são 2.1 e 8.

Ainda não tive a chance de experimentá-lo, mas, tanto quanto posso dizer, o BlueZ (a pilha oficial de protocolos Bluetooth do Linux) acabou de adicionar suporte ao HDP , incluindo suporte ao CSP. Portanto, mesmo que não pareça que você esteja executando em uma plataforma compatível com a pilha BlueZ, talvez o código forneça pelo menos uma boa implementação de referência.

nocnokneo
fonte