Come devo selezionare la mia frequenza dei cristalli?


8

Ho visto domande come questa che parlano della selezione di un cristallo per UART e ho visto domande come questa che menzionano 32.768 kHz per RTC. Ma come faccio a decidere il cristallo giusto per la mia applicazione.

A questo punto non sono sicuro di quale baud UART userò, ma sarà uno di quelli standard. Sarebbe bello poter ottenere un tempo semi-preciso in millisecondi, ma non un requisito. Intuitivamente penso che andare con il cristallo più veloce che il mio micro possa usare mi darà la massima flessibilità, ma c'è qualcosa che mi manca? Esiste una frequenza "generica" ​​che le persone usano?


con grande cura ... :)
vicatcu il

Risposte:


11

Onestamente potrei passare ore a descrivere le diverse frequenze e perché usarle, ma qualcuno l'ha già fatto!

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

Questa tabella ha una colonna UART per dirti a quali frequenze UART si divide bene.

Ti dice anche quando una frequenza è un cristallo standard per un sistema di comunicazione specifico.


Non sarebbe bello se ci fosse una buona frequenza di cristallo che tutti usavano.
Kellenjb,

1
Non sarebbe bello se ogni parte del mondo avesse le stesse prese di corrente negli edifici, la vita continuerà, a meno che non si mescoli le prese.
Kortuk,

2

Intuitivamente, io userei il cristallo più lento che funziona per la mia applicazione. Otterrai meno deriva dell'orologio e le tracce del circuito si comportano generalmente meglio alle frequenze più basse.

A parte questo, se vuoi fare le cose ogni pochi millisecondi, puoi fare qualcosa in linea con quanto segue:

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;

Non sei sicuro di quale micro stai usando, ma MPLAB ha utilità per calcolare il tempo impiegato dagli eventi, quindi puoi usarlo per regolare il valore di reset di TMR1 in modo da gestire qualsiasi overhead e / o un clock impreciso. I cristalli potrebbero variare abbastanza da renderlo impossibile in un ambiente di produzione ... non ne sono sicuro.


Come estensione a questo, se uno non sa quale XTAL utilizzare nel proprio widget, non selezionarlo affatto. Basta lasciare il punto PCB non popolato e attendere fino a quando non è necessaria la stabilità (la calibrazione dell'oscillatore RC interno non è abbastanza buona alla velocità di trasmissione desiderata, ad esempio) o della velocità. Non aggiustare ciò che non è rotto!
tyblu,

Concordato: se la tua MCU ha un oscillatore interno, prova prima a usarlo. Assicurarsi di impostare correttamente le parole / i fusibili di configurazione. Inoltre, dovresti considerare di utilizzare una presa sul tuo PCB in modo da non dover affrontare i cristalli di saldatura / dissaldatura ... il vantaggio è che puoi scambiarli facilmente.
Isaac,

1
@isaac, un cristallo è una delle maggiori fonti di EMI su una scheda, dovrebbe essere il più vicino possibile al piano di massa, non passare attraverso i connettori e avere tracce di schermatura attorno ad esso.
Kortuk,

@isaac, inoltre, se hai una deriva di 10 ppm non importa quale velocità del cristallo hai. Si divideranno tutti per lo stesso potenziale errore, poiché un clock a velocità più elevata deve avere una divisione maggiore. Un cristallo più lento significa una risoluzione peggiore su altre cose.
Kortuk,

@isaac Non ho mai avuto problemi con i cristalli a 40 MHz prima. Li metto il più vicino possibile al micro. e la risposta di @kortuk è la stessa ragione per cui non pensavo che la deriva dell'orologio fosse un problema. Ho pensato che velocità di clock più elevate mi avrebbero permesso di avvicinarmi esattamente a 1 ms.
Kellenjb,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.