Bagaimana saya memilih frekuensi kristal saya?

8

Saya telah melihat pertanyaan seperti ini yang berbicara tentang memilih kristal untuk UART dan saya telah melihat pertanyaan seperti ini yang menyebutkan 32,768 kHz untuk RTC. Tetapi bagaimana saya memutuskan kristal yang tepat untuk aplikasi saya.

Pada titik ini saya tidak yakin apa yang akan saya gunakan, tetapi itu akan menjadi salah satu yang standar. Akan menyenangkan untuk bisa mendapatkan waktu semi-akurat dalam milidetik, tetapi bukan keharusan. Secara intuitif saya pikir menggunakan kristal tercepat yang dapat digunakan mikro saya akan memberikan saya fleksibilitas paling banyak, tetapi apakah ada sesuatu yang saya lewatkan? Apakah ada frekuensi "tujuan umum" yang digunakan orang?

Kellenjb
sumber
dengan sangat hati-hati ... :)
vicatcu

Jawaban:

11

Jujur saya bisa menghabiskan berjam-jam untuk menggambarkan frekuensi yang berbeda dan mengapa menggunakannya, tetapi seseorang sudah memilikinya!

http://en.wikipedia.org/wiki/Crystal_oscillator_frequencies

Tabel ini memiliki kolom UART untuk memberi tahu Anda berapa frekuensi UART yang dibagi dengan baik.

Ini juga memberi tahu Anda ketika frekuensi adalah kristal standar untuk sistem comm tertentu.

Kortuk
sumber
Bukankah lebih baik jika ada frekuensi kristal yang bagus yang digunakan semua orang.
Kellenjb
1
Bukankah lebih baik jika setiap bagian dunia memiliki outlet listrik yang sama di gedung-gedung, kehidupan akan terus berlanjut, kecuali jika Anda mencampur outlet-outletnya.
Kortuk
2

Secara intuitif, saya akan menggunakan kristal SLOWEST yang berfungsi untuk aplikasi saya. Anda akan mendapatkan lebih sedikit penyimpangan jam dan jejak sirkuit umumnya berperilaku lebih baik pada frekuensi yang lebih rendah.

Sebagai tambahan, jika Anda ingin melakukan hal-hal setiap beberapa milidetik, Anda dapat melakukan sesuatu seperti:

Fosc = 25MHz. 
T=1/Fosc = 40ns; 
1ms/40ns = 25000 cycles/ms;
0xFFFF-25000=0x9E57;

on overflow TMR1:  //assuming TMR1 is 16 bit and counts every clock cycle
doEveryMillisecond;
incrementMillisecondTimer;
TMR1 = 0x9E57;

Tidak yakin mikro apa yang Anda gunakan tetapi MPLAB memiliki utilitas untuk menentukan berapa lama waktu yang dibutuhkan, sehingga Anda dapat menggunakannya untuk menyesuaikan nilai reset TMR1 untuk menangani overhead dan / atau jam yang tidak akurat. Kristal mungkin cukup bervariasi sehingga tidak layak di lingkungan produksi ... tidak yakin.

Ishak
sumber
Sebagai perpanjangan dari ini, jika seseorang tidak tahu XTAL apa yang harus digunakan dalam widget mereka, jangan pilih satu pun. Biarkan saja tempat PCB tidak berpenghuni dan tunggu sampai Anda memerlukan stabilitas (kalibrasi osilator RC internal tidak cukup baik pada kecepatan baud yang diinginkan, misalnya) atau kecepatan. Jangan memperbaiki apa yang tidak rusak!
tyblu
Setuju - jika MCU Anda memiliki osilator internal, coba dan gunakan itu terlebih dahulu. Pastikan untuk mengatur kata config / sekering dengan benar. Juga, Anda harus mempertimbangkan menggunakan soket pada PCB Anda sehingga Anda tidak harus berurusan dengan kristal solder / pematrian ... bonusnya adalah Anda dapat menukar dengan mudah.
Isaac
1
@isaac, kristal adalah salah satu sumber EMI terbesar di papan, itu harus sedekat mungkin dengan bidang tanah, tidak melalui konektor, dan memiliki jejak perisai di sekitarnya.
Kortuk
@isaac, juga, jika Anda memiliki drift clock 10ppm, tidak masalah kecepatan kristal yang Anda miliki. Mereka semua akan membagi ke potensi kesalahan yang sama, karena jam kecepatan yang lebih tinggi harus memiliki kesenjangan yang lebih besar. Kristal yang lebih lambat berarti resolusi yang lebih buruk pada hal-hal lain.
Kortuk
@isaac Saya tidak pernah mengalami masalah dengan kristal 40MHz sebelumnya. Saya hanya menempelkannya sedekat mungkin dengan mikro. dan respon @kortuk adalah alasan yang sama mengapa saya tidak berpikir bahwa penyimpangan jam adalah masalah. Saya pikir kecepatan clock yang lebih tinggi akan membuat saya bisa mendekati 1 ms dengan tepat.
Kellenjb