Olá.
Estou usando um arduino para medir Potência de forma indireta. No resultado final preciso de algarismos significativos e incerteza calculada por propagação de erros.
Neste caso, o tempo é uma das variáveis e é medido pela função millis.
Já tenho os algarismos significativos, porém, qual é o erro ou incerteza do tempo medido pelo arduino nano?
Preciso imprimir um resultado como por exemplo: (12.156 +- 0.001) segundos
Tags:
Bom dia CA.
O oscilador do arduino (UNO/MEGA/NANO) é de 16 MHz, ou seja um pulso a cada 0,650 nanosegundos.
A função millis() e a função micros(), utilizam um dos timers do arduino e usam como referencia os pulsos
oriundos deste oscilador.
O que realmente define a precisão destes contadores ( miilis() e micros() ), é a precisão dos pulsos gerados por este
oscilador.
Agora a precisão do oscilador depende de alguns fatores, entre eles, a qualdidade do cristal, a qualidade
dos capacitores, a estabilidade térmica do cristal e do chip (atmegaxxx).
RV
Então 1 pulso = 1 /16M = 62,5ns, certo?
Como eu não conheço fatores intrínsecos do cristal, eu poderia usar por exemplo numa leitura de 15.1241 microsegundos: (15.1241 +- 0,0625) us?
CA,
para usar os pulsos do oscilador diretamente, seria necessário um bom conhecimento
do hardware do atmega e de programação low level.
Mas se usar a função micros(), que incrementa por um a cada microssegundo,
você já terá um bom resultado.
Com o cristal original de fabrica nos boards arduirno, a diferença devem estar na ordem de +-30ppm,
isto significa uma variação de 0,003%.
Mas veja, isto não é uma variação e sim uma diferença entre vários arduinos.
Significa que o cristal irá oscilar com uma diferença fixa, em relação ao valor nominal de 16MHz
Se você comparar vários arduinos, eles podem estar entre +- 0,003% entre cada um.
Veja que no seu caso esta diferença (Não é variação) estará entre
15.1241 +- 4,5 uSeg. Mas será sempre constante, uma vez que não é variação, e
sim diferença entre vários arduinos.
No arduino, isto você pode compensar dentro do seu sketck com algum recurso de software.
Os fator de variação mais comum é a variação térmica do seu sistema.
Eu não encontrei mais informações sobre o percentual desta variação, mas acredito
que se você fizer um sistema de ventilação adequado para seu arduino,
esta variação será minima.
RV
0,003% |
CA,
Deve levar em consideração também o tempo de execução das instruções e ciclo se quiser realizar tudo ao pé da letra, como o RV mencionou, precisara de um bom conhecimento com programação de baixo nível, e devido a dificuldade de acessar os registradores e periféricos internos do ATMega na IDE do Arduíno (Motivo qual muitos engenheiros desvalorizam o Arduíno ) terá mais dificuldades ainda, mas já precisei trabalhar com precisões no Arduíno e graças a alguns colegas que mediram tempos de várias instruções no Arduíno, facilita o processo.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por