Atualmente, estou tentando criar um relógio de ponto do Arduino usando a biblioteca de horário do PJRC ( http://www.pjrc.com/teensy/td_libs_Time.html ). Eu sei que, como a maioria das placas Arduino está funcionando com um relógio de 16 MHz e um único ressonador, o tempo pode ficar "fora de sincronia" após um certo período de tempo.
No entanto, eu queria saber se alguém tem uma idéia sobre a precisão da biblioteca Time quando usado no Arduino DUE com um relógio de 84MHz. Eu tenho testado e até agora, o relógio foi mantido em sincronia por algumas horas. Obrigado!
time
arduino-due
KK6FSL
fonte
fonte
Respostas:
As limitações de precisão da biblioteca dependem da precisão do cristal. Quando eles produzem ou cozinham o cristal, eles só podem torná-lo preciso em um certo grau, também o ambiente do cristal (temperatura, umidade etc.) desempenha um papel na precisão do mesmo. Digamos que você tenha um cristal que sai de 0,5 segundo a cada hora, ótimo para curto prazo, mas se você expandir isso ao longo de um ano, terá mais de uma hora de folga nesse período. Se você deseja que algo mantenha um tempo preciso por um longo período, sugiro um relógio em tempo real (eles ainda têm imprecisões), um módulo GPS ou uma conexão à Internet para sincronizar.
Para mais informações, consulte o artigo da wikipedia sobre cristais de quartzo
O uso de um cristal de 84MHz versus um de 16MHz não necessariamente melhora a precisão do relógio Arduino, pois a frequência do cristal é mais um indicador da velocidade do processador do que da precisão. A precisão do relógio Arduino depende principalmente da precisão do oscilador de cristal.
Edição: Eu não sou especialista em osciladores de cristal, por isso, se você ver alguma coisa errada aqui, por favor me avise
fonte
Revisitando uma pergunta antiga ... como encontrei um post muito informativo que lança uma nova luz sobre ela. Mas deixe-me primeiro fornecer um contexto antes de fornecer o link.
Ao avaliar a qualidade de uma base de tempo, seja um cristal, um ressonador de cerâmica ou um padrão de frequência de laboratório, existem duas noções que devem ser distinguidas:
A precisão é importante se você deseja que seu relógio dê a hora correta "fora da caixa". No entanto, se você estiver disposto a gastar algum tempo calibrando seu relógio, não se importará porque irá calibrar qualquer imprecisão que medir. A resposta de jfpoilpret fornece um exemplo de um protocolo de calibração “manual”, que é necessariamente bastante longo. Se você puder emprestar um módulo GPS com uma saída de 1PPS, a calibração poderá ser feita em alguns segundos.
A estabilidade é uma questão mais séria. Se a frequência da base de tempo mudar aleatoriamente, isso anulará seus esforços de calibração. Essencialmente, a calibração indicará o quão rápido ou lento o seu relógio está funcionando no momento , mas não permitirá que você preveja o quão rápido ou lento ele será executado no futuro .
Aqui está o link prometido: precisão da frequência do relógio Arduino , de Joris van Rantwijk.
O que Joris fez foi medir a precisão e a estabilidade de um Arduino Pro Mini (com clock de um ressonador de cerâmica) e de um antigo Duemilianove (cristal de quartzo). Do meu ponto de vista, os principais tópicos são:
Aqui está seu gráfico de desvio de Allan , que mede a instabilidade do relógio em função do tempo de observação:
(fonte: jorisvr.nl )
Embora este estudo tenha algumas limitações (apenas duas placas foram testadas e o tempo de observação é muito curto), é bem pensado e muito informativo. Convido você a ler na íntegra.
fonte
A melhor maneira de conhecer a precisão do ressonador da sua placa é medi-la você mesmo.
Para fazer isso, você pode usar a
millis()
função Arduino do seu quadro e escrever um pequeno esboço que:millis()
valor a cada hora.Obviamente, essa abordagem está longe de ser perfeita , pois requer intervenção humana e, portanto, criará desvios de tempo adicionais durante as medições, é por isso que você precisa medir os desvios de tempo do relógio por um longo período.
Uma abordagem aprimorada seria conectar um relógio RTC de alta precisão (a precisão deve ser escolhida com base na precisão necessária para sua aplicação) à sua placa e adaptar o esboço para que calcule automaticamente a deriva. Depois de obter o desvio de tempo, você pode fazer o mesmo da etapa 5 acima em seus esboços e desconectar o relógio RTC da sua placa.
Pontos importantes :
Finalmente, se você realmente precisar de alta precisão, conecte definitivamente uma fonte de relógio externa (por exemplo, relógio RTC, GPS, NTP) à sua placa e use-a como um SyncProvider para a biblioteca PJRC.
fonte
Seu cristal médio de relógio do sistema será desligado em várias dezenas de ppm (partes por milhão. Eles são ótimos para sincronização estável e precisa dos sinais, mas são dramáticos para manter o tempo preciso. Sem disposições especiais, o cristal do sistema pode ser desligado vários segundos por dia.
A solução é usar um relógio de tempo real adequado, acionado pelo que é comumente conhecido como cristal de relógio de 32768Hz. Esses cristais são facilmente um fator 10 melhor em precisão. Você pode configurar seu próprio oscilador que interrompe o processador principal e manter a contagem em seu esboço do Arduino ou você encontra uma placa do RTC.
Dois exemplos aleatórios que aparecem no Google com os termos de pesquisa "RTC breakout":
fonte