Akurasi Jam Waktu Arduino

10

Saat ini saya sedang mencoba membuat jam waktu Arduino dengan menggunakan perpustakaan Waktu PJRC ( http://www.pjrc.com/teensy/td_libs_Time.html ). Saya tahu bahwa karena sebagian besar papan Arduino berjalan dengan clock 16MHz dan resonator tunggal, waktu dapat menjadi "tidak sinkron" setelah periode waktu tertentu.

Namun, saya bertanya-tanya apakah ada yang punya ide tentang keakuratan perpustakaan Waktu ketika digunakan pada Arduino DUE dengan jam 84MHz. Saya sudah mengujinya dan sejauh ini, jam telah disinkronkan selama beberapa jam. Terima kasih!

KK6FSL
sumber
Keterbatasan akurasi perpustakaan tergantung pada keakuratan kristal. Katakanlah Anda memiliki kristal yang mati dengan 0,5 detik setiap jam, bagus untuk jangka pendek, tetapi jika Anda mengembangkannya lebih dari setahun, itu lebih dari 1 jam pada saat itu. Jika Anda menginginkan sesuatu untuk menjaga waktu yang akurat dalam jangka waktu lama, saya sarankan jam waktu nyata (mereka masih memiliki ketidakakuratan), modul GPS, atau koneksi internet untuk disinkronkan.
Jesse Laning
@jamolnng Terima kasih atas jawaban Anda. Apakah Anda tahu keakuratan kristal pada Arduino DUE atau di mana saya dapat menemukannya?
KK6FSL
Akurasi terbaik yang akan Anda dapatkan adalah 84MHz, ketika mereka membuat, atau memasak, kristal yang hanya dapat mereka buat dengan tingkat tertentu yang akurat, juga lingkungan kristal (suhu, kelembaban, dll.) Berperan dalam akurasi itu.
Jesse Laning
@ jamolnng Jadi bisakah saya mengharapkan akurasi yang lebih tinggi dengan kristal 84MHz daripada kristal 16MHz pada kebanyakan Arduino lainnya?
KK6FSL
5
"Akurasi terbaik yang akan Anda dapatkan adalah 84MHz" - itu tidak masuk akal bagi saya!
Cybergibbons

Jawaban:

10

Keterbatasan akurasi perpustakaan tergantung pada keakuratan kristal. Ketika mereka membuat, atau memasak, kristal yang hanya dapat mereka buat dengan tingkat tertentu akurat, juga lingkungan kristal (suhu, kelembaban, dll.) Berperan dalam keakuratannya. Katakanlah Anda memiliki kristal yang mati dengan 0,5 detik setiap jam, bagus untuk jangka pendek, tetapi jika Anda mengembangkannya lebih dari setahun, itu lebih dari 1 jam pada saat itu. Jika Anda menginginkan sesuatu untuk menjaga waktu yang akurat dalam jangka waktu lama, saya sarankan jam waktu nyata (mereka masih memiliki ketidakakuratan), modul GPS, atau koneksi internet untuk disinkronkan.

Untuk informasi lebih lanjut, lihat artikel wikipedia tentang kristal kuarsa

Penggunaan kristal 84MHz versus kristal 16MHz belum tentu meningkatkan akurasi jam Arduino karena frekuensi kristal lebih merupakan indikator kecepatan prosesor daripada akurasi. Keakuratan jam Arduino terutama tergantung pada keakuratan osilator kristal.

EDIT: Saya bukan ahli osilator kristal jadi jika Anda melihat ada yang salah di sini, beri tahu saya

Jesse Laning
sumber
5

Mengunjungi kembali sebuah pertanyaan lama ... ketika saya menemukan posting blog yang sangat informatif yang memberi cahaya baru ke dalamnya. Tetapi pertama-tama saya berikan beberapa konteks sebelum memberikan tautan.

Saat menilai kualitas basis waktu, baik itu kristal, resonator keramik, atau standar frekuensi tingkat laboratorium, ada dua gagasan yang harus dibedakan:

  • akurasi : seberapa dekat frekuensi basis waktu ke nilai nominalnya
  • stabilitas : berapa frekuensi yang melayang dari waktu ke waktu

Akurasi penting jika Anda ingin jam Anda memberi waktu yang tepat "di luar kotak". Namun, jika Anda bersedia meluangkan waktu untuk mengkalibrasi jam Anda, maka Anda tidak terlalu peduli karena Anda akan mengkalibrasi setiap ketidakakuratan yang Anda ukur. Jawaban jfpoilpret memberikan contoh protokol kalibrasi “manual”, yang tentunya cukup panjang. Jika Anda dapat meminjam modul GPS dengan output 1PPS, kalibrasi dapat dilakukan dalam beberapa detik.

Stabilitas adalah masalah yang lebih serius. Jika frekuensi basis waktu melayang secara acak, ini akan mengalahkan upaya kalibrasi Anda. Pada dasarnya, kalibrasi akan memberi tahu Anda seberapa cepat atau lambat jam Anda sedang berjalan sekarang , tetapi itu tidak akan memungkinkan Anda untuk memprediksi seberapa cepat atau lambat itu akan berjalan di masa depan .

Inilah tautan yang dijanjikan: Akurasi frekuensi jam Arduino , oleh Joris van Rantwijk.

Apa yang Joris lakukan adalah mengukur akurasi dan stabilitas Arduino Pro Mini (clock resonator keramik) dan Duemilianove tua (kristal kuarsa). Dari perspektif saya, takeaways utama adalah:

  • kedua jam sangat tidak akurat, sehingga keduanya akan membutuhkan kalibrasi pengguna untuk digunakan sebagai arloji
  • kristal kuarsa Duemilianove memiliki stabilitas yang layak, lebih baik daripada 1,5e-8 pada waktu rata-rata 6 jam
  • stabilitas resonator keramik Pro Mini menyedihkan, lebih dari dua kali lipat lebih buruk dari kristal, yang membuatnya pada dasarnya tidak berguna sebagai waktu

Berikut ini adalah plot penyimpangan Allan- nya , yang mengukur ketidakstabilan jam sebagai fungsi dari waktu pengamatan:

Dean Allan dari Frekuensi Jam Arduino
(sumber: jorisvr.nl )

Meskipun penelitian ini memiliki beberapa keterbatasan (hanya dua papan yang diuji, dan waktu pengamatannya terlalu singkat), pemikirannya bagus dan sangat informatif. Saya mendorong Anda untuk membacanya secara keseluruhan.

Edgar Bonet
sumber
1
Frekuensi kristal kuarsa berubah sedikit dengan suhu. Jika Anda dapat mengontrol suhu, ini membantu menjaga frekuensi tetap stabil.
Duncan C
3

Cara terbaik untuk mengetahui akurasi resonator papan Anda adalah dengan mengukurnya sendiri.

Untuk melakukannya, Anda dapat menggunakan millis()fungsi Arduino papan Anda dan menulis sketsa kecil yang akan:

  1. memungkinkan Anda untuk mengatur waktu mulai untuk mengukur pergeseran waktu (misalnya dengan menekan tombol sederhana); Anda akan memicu tombol berdasarkan pada basis waktu yang akurat .
  2. kemudian berulang kali panggil millis () hingga setidaknya 120 jam ("arduino jam", yaitu sekitar 5 hari) telah berlalu
  3. tampilkan sinyal ketika 120 jam telah berlalu (sketsa Anda mungkin harus "memperingatkan" Anda sebelum waktu yang tepat telah tercapai sehingga Anda siap untuk mengukur)
  4. ketika 120 jam telah berlalu, periksa waktu referensi Anda berdasarkan (digunakan pada langkah 1.) dan periksa berapa banyak waktu telah berlalu (harus 120j +/- epsilon)
  5. begitu Anda mengetahui pergeseran jam Anda, dan asalkan papan Anda akan berjalan dalam kondisi lingkungan yang sama (terutama suhu) dari ukuran Anda, Anda dapat menggunakannya dalam sketsa Anda untuk menyesuaikan millis()nilainya setiap jam atau lebih.

Tentu saja, pendekatan ini masih jauh dari sempurna karena membutuhkan intervensi manusia dan dengan demikian akan membuat drift waktu tambahan selama pengukuran, itulah mengapa Anda perlu mengukur waktu jam Anda melayang dalam periode yang lama.

Pendekatan yang ditingkatkan akan menghubungkan jam RTC dengan akurasi tinggi (akurasi harus dipilih berdasarkan keakuratan yang Anda butuhkan untuk aplikasi Anda) ke board Anda dan mengadaptasi sketsa sehingga secara otomatis menghitung drift. Setelah Anda mendapatkan penyimpangan waktu, Anda dapat melakukan hal yang sama seperti langkah 5 di atas dalam sketsa Anda, dan lepaskan jam RTC dari papan Anda.

Poin-poin penting :

  • mengukur drift waktu di papan yang perlu penyesuaian jam di kemudian hari (jika Anda memiliki beberapa papan, Anda harus mengukur satu drift per papan)
  • memastikan stabilitas lingkungan di mana papan Anda akan digunakan

Terakhir, jika Anda benar-benar membutuhkan akurasi tinggi, maka hubungkan sumber jam eksternal (misalnya jam RTC, GPS, NTP) dengan pasti dan gunakan sebagai SyncProvider untuk pustaka PJRC.

jfpoilpret
sumber
2

Kristal jam sistem rata-rata Anda akan dimatikan beberapa puluhan ppm (bagian per juta. Mereka bagus untuk pengaturan waktu sinyal yang stabil dan akurat, tetapi dramatis untuk menjaga waktu yang akurat. Tanpa ketentuan khusus, kristal sistem dapat dimatikan beberapa detik per hari.

Solusinya adalah dengan menggunakan Real Time Clock yang tepat, didorong oleh apa yang umumnya dikenal sebagai kristal arloji 32768Hz. Kristal-kristal ini dengan mudah merupakan faktor 10 yang lebih baik dalam akurasi. Anda dapat mengatur osilator Anda sendiri yang mengganggu prosesor utama dan tetap menghitung dalam sketsa Arduino Anda atau Anda menemukan papan pelarian RTC.

Dua contoh acak yang muncul di Google dengan istilah pencarian "RTC breakout":

jippie
sumber