Vraag:
Nauwkeurigheid van de Arduino-tijdklok
KK6FSL
2014-02-16 05:54:06 UTC
view on stackexchange narkive permalink

Ik probeer momenteel een Arduino-tijdklok te maken met behulp van de PJRC Time-bibliotheek ( http://www.pjrc.com/teensy/td_libs_Time.html). Ik weet dat, aangezien de meeste Arduino-kaarten werken met een 16 MHz-klok en een enkele resonator, de tijd na een bepaalde tijd "niet synchroon" kan raken.

Ik vroeg me echter af of iemand een idee heeft over de nauwkeurigheid van de tijdbibliotheek bij gebruik op de Arduino DUE met een 84 MHz-klok. Ik heb het uitgeprobeerd en tot nu toe is de klok een paar uur gesynchroniseerd. Bedankt!

De beperkingen van de nauwkeurigheid van de bibliotheek zijn afhankelijk van de nauwkeurigheid van het kristal. Laten we zeggen dat je een kristal hebt dat elk uur 0,5 seconde afwijkt, ideaal voor de korte termijn, maar als je dat over een jaar uitbreidt, is het tegen die tijd meer dan 1 uur vrij. Als je iets wilt dat een nauwkeurige tijd over een lange periode bijhoudt, raad ik een realtime klok aan (ze hebben nog steeds onnauwkeurigheden), een GPS-module of een internetverbinding om mee te synchroniseren.
@jamolnng Bedankt voor uw antwoord. Kent u de nauwkeurigheid van het kristal op de Arduino DUE of waar ik het zou kunnen vinden?
De beste nauwkeurigheid die je krijgt is 84 MHz, wanneer ze het kristal maken of koken, kunnen ze het maar tot op zekere hoogte nauwkeurig maken, ook de omgeving van het kristal (temperatuur, vochtigheid, etc.) speelt een rol in de nauwkeurigheid ervan.
@jamolnng Dus kan ik een hogere nauwkeurigheid verwachten met het 84MHz-kristal in plaats van het 16MHz-kristal op de meeste andere Arduino's?
Niet noodzakelijk omdat als de 84 MHz en de 16 MHz beide dezelfde hoeveelheid onnauwkeurigheid per klokcyclus hebben, de 16 MHz-klok aan het einde een kleinere onnauwkeurigheid zou hebben omdat deze minder cycli deed. De frequentie van het kristal is meer voor hoe snel de processor is
"De beste nauwkeurigheid die u krijgt is 84 MHz" - dat slaat me niet zo op!
Hij was op zoek naar de exacte frequentie van het klokkristal inclusief de defecten. Blijkt dat het te laat is om te bewerken ...
De Due heeft een [RTC] (http://forum.arduino.cc/index.php?topic=141233.msg1061157#msg1061157 "RTC") maar geen pinnen om een ​​externe batterij toe te voegen om hem aan de gang te houden.
Vier antwoorden:
#1
+10
Jesse Laning
2014-02-16 06:30:47 UTC
view on stackexchange narkive permalink

De beperkingen van de nauwkeurigheid van de bibliotheek zijn afhankelijk van de nauwkeurigheid van het kristal. Wanneer ze het kristal maken of koken, kunnen ze het slechts tot op zekere hoogte nauwkeurig maken, ook de omgeving van het kristal (temperatuur, vochtigheid, etc.) speelt een rol bij de nauwkeurigheid ervan. Laten we zeggen dat je een kristal hebt dat elk uur 0,5 seconde afwijkt, ideaal voor de korte termijn, maar als je dat over een jaar uitbreidt, is het tegen die tijd meer dan 1 uur vrij. Als je iets wilt dat een nauwkeurige tijd over een lange periode bijhoudt, raad ik een realtime klok aan (ze hebben nog steeds onnauwkeurigheden), een GPS-module of een internetverbinding om mee te synchroniseren.

Voor meer informatie, kijk op het Wikipedia-artikel over kwartskristallen

Het gebruik van een 84MHz-kristal versus een 16MHz-kristal zal niet noodzakelijk de nauwkeurigheid van de Arduino-klok verbeteren, aangezien de frequentie van het kristal meer een indicator is van processorsnelheid dan nauwkeurigheid. De nauwkeurigheid van de Arduino-klok is voornamelijk afhankelijk van de nauwkeurigheid van de kristaloscillator.

EDIT: ik ben geen expert op het gebied van kristaloscillatoren, dus laat het me weten als je hier iets mis ziet.

#2
+5
Edgar Bonet
2016-09-02 21:08:13 UTC
view on stackexchange narkive permalink

Een oude vraag opnieuw bezoeken ... want ik vond een zeer informatieve blogpost die er nieuw licht op werpt. Maar laat me eerst wat context geven voordat ik de link geef.

Bij het beoordelen van de kwaliteit van een tijdbasis, of het nu gaat om een ​​kristal, een keramische resonator of een frequentiestandaard van laboratoriumkwaliteit, zijn er twee begrippen die moeten worden onderscheiden:

  • nauwkeurigheid : hoe dicht is de frequentie van de tijdbasis bij zijn nominale waarde
  • stabiliteit : in hoeverre drift die frequentie in de tijd

Nauwkeurigheid is belangrijk als u wilt dat uw klok de juiste tijd "out of the box" geeft. Als u echter bereid bent enige tijd te besteden aan het kalibreren van uw klok, maakt het u niet zoveel uit, want u gaat elke onnauwkeurigheid die u meet, kalibreren. Het antwoord van jfpoilpret geeft een voorbeeld van een "handmatig" kalibratieprotocol, dat noodzakelijkerwijs behoorlijk lang duurt. Als je een GPS-module met een 1PPS-output kunt lenen, kan de kalibratie binnen enkele seconden worden uitgevoerd.

Stabiliteit is een serieuzere kwestie. Als de frequentie van de tijdbasis willekeurig afwijkt, zal dit uw kalibratie-inspanningen tenietdoen. In wezen zal de kalibratie u vertellen hoe snel of langzaam uw klok nu loopt, maar u kunt niet voorspellen hoe snel of langzaam deze in de toekomst zal lopen.

Hier is de beloofde link: Arduino klokfrequentie-nauwkeurigheid, door Joris van Rantwijk.

Wat Joris deed, is de nauwkeurigheid en stabiliteit meten van een Arduino ProMini ( geklokt van een keramische resonator) en een oude Duemilianove (kwartskristal). Vanuit mijn perspectief zijn de belangrijkste afhaalrestaurants:

  • beide klokken zijn schromelijk onnauwkeurig, dus beide zouden door de gebruiker moeten worden gekalibreerd om als uurwerken te worden gebruikt.
  • het kwartskristal van de Duemilianove heeft een behoorlijke stabiliteit, beter dan 1,5e-8 bij een gemiddelde tijd van 6 uur
  • de stabiliteit van de keramische resonator van de Pro Mini is zielig, meer dan twee ordes van grootte slechter dan het kristal, waardoor het in wezen onbruikbaar is als een uurwerk.

Hier is zijn Allan deviatie plot, die de klokinstabiliteit meet als een functie van de observatietijd:

Allan deviation of Arduino Clock Frequency
(bron: jorisvr.nl) sub >

Hoewel deze studie enkele beperkingen heeft (er zijn slechts twee borden getest, en de observatietijd is te kort), is het goed doordacht en zeer informatief. Ik moedig je aan om het in zijn geheel te lezen.

De frequentie van kwartskristallen verandert lichtjes met de temperatuur. Als u de temperatuur kunt regelen, helpt dit de frequentie stabiel te houden.
#3
+3
jfpoilpret
2014-02-16 14:20:36 UTC
view on stackexchange narkive permalink

De beste manier om de nauwkeurigheid van de resonator van uw bord te weten, is door deze zelf te meten.

Om dit te doen, kunt u de Arduino millis () -functie van je bord en schrijf een kleine schets die:

  1. je in staat stelt om de begintijd in te stellen voor het meten van tijdverloop (bv. met een simpele drukknop); je activeert de knop op basis van een nauwkeurige tijdbasis.
  2. roep vervolgens herhaaldelijk millis () aan tot minstens 120 uur ("arduino-uren", dat zou ongeveer 5 dagen zijn) verstreken
  3. toon een signaal wanneer die 120 uur zijn verstreken (je sketch zou je waarschijnlijk moeten "waarschuwen" voordat de exacte tijd is bereikt, zodat je klaar bent om te meten)
  4. wanneer de 120 uur zijn verstreken, controleer op basis van uw referentietijd (gebruikt in stap 1.) en controleer hoeveel tijd is verstreken (zou 120 uur +/- epsilon moeten zijn)
  5. zodra u weet hoe uw klok drijft, en uw bord heeft verstrekt zal draaien in dezelfde omgevingsomstandigheden (voornamelijk temperatuur) van uw meting, u kunt het in uw schetsen gebruiken om de millis () waarde elk uur of zo aan te passen.

Natuurlijk is deze benadering verre van perfect aangezien er menselijke tussenkomst vereist is en dus extra tijdafwijkingen tijdens metingen zal creëren, daarom moet u uw kloktijdafwijkingen metengedurende een lange periode.

Een verbeterde benadering zou zijn om een ​​zeer nauwkeurige RTC-klok (de nauwkeurigheid moet worden gekozen op basis van de nauwkeurigheid die u nodig heeft voor uw toepassing) op uw bord aan te sluiten en de schets aan te passen zodat deze berekent automatisch de drift. Als je eenmaal het tijdsverloop hebt gekregen, kun je hetzelfde doen als stap 5 hierboven in je sketches, en de RTC-klok loskoppelen van je bord.

Belangrijke punten :

  • meet het tijdsverloop op het bord dat later moet worden aangepast (als je meerdere borden hebt, moet je één afwijking per bord meten).
  • zorg voor de stabiliteit van de omgeving waarin je bord wordt gebruikt

Tot slot, als je echt een hoge nauwkeurigheid nodig hebt, sluit dan zeker een externe klokbron (bijv. RTC-klok, GPS, NTP) aan op je bord en gebruik deze als een SyncProvider voor de PJRC-bibliotheek.

#4
+2
jippie
2014-02-16 13:50:26 UTC
view on stackexchange narkive permalink

Uw gemiddelde systeemklokkristal zal enkele tientallen ppm afwijken (delen per miljoen. Ze zijn geweldig voor een stabiele en nauwkeurige timing van signalen, maar dramatisch om de tijd nauwkeurig te houden. Zonder speciale voorzieningen kan het systeemkristal enkele seconden uit zijn. per dag.

De oplossing is om een ​​echte Real Time Clock te gebruiken, aangedreven door wat algemeen bekend staat als een 32768Hz horlogekristal. Deze kristallen zijn gemakkelijk een factor 10 beter in nauwkeurigheid. U kunt ofwel uw eigen oscillator die de hoofdprocessor onderbreekt en de telling bijhoudt in je Arduino-sketch of je vindt een RTC-breakout-bord.

Twee willekeurige voorbeelden die in Google opduiken met zoektermen "RTC breakout":



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...