Küsimus:
Arduino ajakella täpsus
KK6FSL
2014-02-16 05:54:06 UTC
view on stackexchange narkive permalink

Püüan praegu luua Arduino ajakella, kasutades PJRC aja teeki ( http://www.pjrc.com/teensy/td_libs_Time.html). Ma tean, et kuna enamik Arduino plaate töötab 16MHz kella ja ühe resonaatoriga, võib aeg teatud aja möödudes muutuda "sünkrooniväliseks".

Mõtlesin siiski, kas kellelgi on ettekujutust ajakogu täpsusest, kui seda kasutatakse Arduino DUE-s 84MHz kellaga. Olen seda katsetanud ja siiani on kella paar tundi sünkroonis hoitud. Aitäh!

Raamatukogu täpsuse piirangud sõltuvad kristalli täpsusest. Oletame, et teil on kristall, mis on välja lülitatud 0,5 sekundit iga tunni tagant, mis sobib suurepäraselt lühiajaliselt, kuid kui seda laiendada aasta jooksul, on selleks ajaks üle 1 tunni vaba. Kui soovite, et pika aja jooksul oleks täpne aeg, soovitan sünkroonimiseks reaalajas kella (neil on endiselt ebatäpsusi), GPS-moodulit või Interneti-ühendust.
@jamolnng Täname vastuse eest. Kas teate Arduino DUE kristalli täpsust või kust saaksin selle leida?
Parim täpsus, mille te kavatsete saada, on 84 MHz, kui nad valmistavad või küpsetavad kristalli, mida nad suudavad ainult teatud määral täpseks muuta, samuti mängib rolli kristalli keskkond (temperatuur, niiskus jne). selle täpsus.
@jamolnng Nii et kas ma võin enamikul teistel Arduinos oodata suuremat täpsust 84MHz kristalliga kui 16MHz kristalliga?
Mitte tingimata seetõttu, et kui nii 84MHz kui ka 16MHz on ühesugused ebatäpsused taktsükli kohta, siis oleks 16MHz taktis lõpuks väiksem ebatäpsus, kuna see tegi vähem tsükleid. Kristalli sagedus on pigem see, kui kiire protsessor on
"Parim täpsus, mille kavatsete saada, on 84 MHz" - see pole minu jaoks eriti mõistlik!
Ta otsis kellakristalli täpset sagedust, sealhulgas selle defekte. Tundub, et redigeerida on hilja ...
Maksetähtpäeval on [RTC] (http://forum.arduino.cc/index.php?topic=141233.msg1061157#msg1061157 "RTC"), kuid selle töötamiseks välise aku lisamiseks pole tihvte.
Neli vastused:
#1
+10
Jesse Laning
2014-02-16 06:30:47 UTC
view on stackexchange narkive permalink

Teegi täpsuse piirangud sõltuvad kristalli täpsusest. Kui nad valmistavad või küpsetavad kristalli, saavad nad seda teha ainult teatud määral täpseks, samuti mängib selle täpsuses rolli kristalli keskkond (temperatuur, niiskus jne). Oletame, et teil on kristall, mis on iga tunni järel välja lülitatud. Kui soovite, et pika aja jooksul oleks täpne aeg, soovitan sünkroonimiseks reaalajas kella (neil on endiselt ebatäpsusi), GPS-moodulit või Interneti-ühendust.

Lisateabe saamiseks vaadake vikipeedia artikkel kvartskristallide kohta

84MHz ja 16MHz kristallide kasutamine ei paranda tingimata Arduino kella täpsust, kuna kristalli sagedus on pigem indikaator protsessori kiirusest kui täpsusest. Arduino kella täpsus sõltub peamiselt kristalli ostsillaatori täpsusest.

EDIT: Ma ei ole kristalli ostsillaatorite ekspert, nii et kui näete siin midagi valesti, andke mulle sellest teada

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

Vana küsimuse uuesti külastamine ... kui leidsin väga informatiivse ajaveebipostituse, mis heidab sellele uut valgust. Kuid lubage mul enne lingi andmist kõigepealt veidi konteksti pakkuda.

Ajalise baasi kvaliteedi hindamisel, olgu see siis kristall, keraamiline resonaator või laboratoorsed sagedusstandardid, tuleb eristada kahte mõistet:

  • täpsus : kui lähedal on ajabaasi sagedus nominaalsele väärtusele
  • stabiilsus : kui palju see sagedus aja jooksul triivib

Täpsus on oluline, kui soovite, et teie kell annaks korrektse aja "kastist väljas". Kui olete siiski nõus oma aega kalibreerima oma kella kalkuleerimiseks, siis see teid tegelikult ei huvita, kuna kalibreerite kõik mõõdetud ebatäpsused. jfpoilpret vastus annab näite “käsitsi” kalibreerimisprotokollist, mis on tingimata üsna pikk. Kui saate laenata 1PPS väljundiga GPS-mooduli, saab kalibreerimise teha mõne sekundiga.

Stabiilsus on tõsisem probleem. Kui ajapõhise sageduse määramine toimub juhuslikult, võidab see teie kalibreerimispüüdlused. Sisuliselt annab kalibreerimine teada, kui kiiresti või aeglaselt teie kell töötab praegu , kuid see ei võimalda teil ennustada, kui kiiresti või aeglaselt see töötab tulevikus .

Siin on lubatud link: Arduino kella sageduse täpsus, autor Joris van Rantwijk.

Mida Joris tegi, oli Arduino ProMini täpsuse ja stabiilsuse mõõtmine ( keraamilise resonaatori) ja vana Duemilianove (kvartskristall). Minu vaatenurgast on peamised väljavõtted järgmised:

  • mõlemad kellad on jämedalt ebatäpsed, seega vajaksid mõlemad ajamõõtmetena kasutamiseks usercalibratsiooni
  • Duemilianove'i kvartskristallil on korralik stabiilsus, parem kui 1,5e-8 6 tunni keskmisena
  • Pro Mini keraamilise resonaatori stabiilsus on haletsusväärne, rohkem kui kaks suurusjärku halvem kui kristall, mis muudab selle ajajupina sisuliselt kasutuks

Siin on tema Allani hälbe graafik, mis mõõdab kella ebastabiilsust vaatlusaja funktsioonina:

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

Kuigi sellel uuringul on mõned piirangud (testiti ainult kahte tahvlit ja vaatlusaeg on liiga lühike), on see hästi läbimõeldud ja väga informatiivne. Soovitan teil seda tervikuna lugeda.

Kvartskristallide sagedus muutub temperatuuri järgi veidi. Kui saate temperatuuri kontrollida, aitab see sagedust stabiilsena hoida.
#3
+3
jfpoilpret
2014-02-16 14:20:36 UTC
view on stackexchange narkive permalink

Parim viis oma tahvli resonaatori täpsuse teadmiseks on seda ise mõõta.

Selleks võite kasutada funktsiooni Arduino millis () oma laud ja kirjutage väike visand, mis:

  1. võimaldab teil määrata aja triivi mõõtmise algusaega (nt lihtsa nupu abil); käivitate nupu täpse ajabaasi põhjal.
  2. seejärel helistage korduvalt millistele (), kuni vähemalt 120 tundi ("arduino tundi", see oleks umbes 5 päeva) on möödunud
  3. kuvatakse signaal, kui need 120 tundi on möödas (teie visand peaks tõenäoliselt "hoiatama" teid enne täpse aja saabumist, et saaksite mõõtmiseks valmis olla)
  4. kui 120 tundi on möödas möödunud, kontrollige oma võrdlusaega (kasutatakse 1. etapis) ja kontrollige, kui palju aega on kulunud (peaks olema 120h +/- epsilon)
  5. kui teate oma kella triivi ja esitate oma tahvli töötab teie mõõduga samades keskkonnatingimustes (peamiselt temperatuuril), saate seda oma visandites kasutada umbes iga tunni tagant väärtuse millis () reguleerimiseks.

Muidugi pole see lähenemine kaugeltki täiuslik kuna see nõuab inimese sekkumist ja loob seeläbi mõõtmiste ajal täiendavaid ajaheiteid, sellepärast peate mõõtma oma kellaaja triivimistpika aja jooksul.

Parem lähenemisviis oleks suure täpsusega RTC-kella ühendamine (täpsus tuleb valida rakenduse jaoks vajaliku täpsuse põhjal) oma tahvliga ja sketši kohandamine nii, et see arvutab triivi automaatselt. Kui olete aja triivinud, saate teha sama, nagu ülaltoodud 5. etapp skeemides, ja ühendada RTC kell laualt lahti.

Olulised punktid :

  • mõõta aja triivi tahvlil, mis vajab hiljem kella reguleerimist (kui teil on mitu lauda, ​​peate mõõtma ühe triivi laua kohta)
  • tagage selle keskkonna stabiilsus, kus teie laud on kasutatakse tahvlit

Lõpuks, kui vajate tõesti suurt täpsust, siis kindlasti ühendage oma tahvliga väline kella allikas (nt RTC kell, GPS, NTP) ja kasutage seda PJRC teegi SyncProviderina.

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

Teie keskmine süsteemi kellakristall lülitub välja mitukümmend ppm (miljoni kohta. Need sobivad suurepäraselt signaalide stabiilseks ja täpseks ajastamiseks, kuid dramaatilised täpse aja hoidmiseks. Ilma erisäteteta võib süsteemi kristall mitu sekundit välja lülituda päevas.

Lahenduseks on kasutada korralikku reaalajas kella, mida juhib üldtuntud nimega 32768Hz kellakristall. Need kristallid on täpsusega 10 korda paremad. Võite kas seadistada oma oma ostsillaator, mis katkestab peaprotsessori ja hoiab Arduino visandil loendit, või leiate RTC-väljalaua.

Kaks juhuslikku näidet, mis ilmuvad Google'isse otsingusõnadega "RTC breakout":



See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 3.0-litsentsi eest, mille all seda levitatakse.
Loading...