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

Exibições: 1057

Responder esta

Respostas a este tópico

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.

http://forum.arduino.cc/index.php?topic=41273.0

https://forum.arduino.cc/index.php?topic=6632.0

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço