Comment choisir ma fréquence cristalline?

8

J'ai vu des questions comme celle-ci qui parlent de la sélection d'un cristal pour UART et j'ai vu des questions comme celle-ci qui mentionnent 32,768 kHz pour RTC. Mais comment choisir le bon cristal pour mon application.

À ce stade, je ne sais pas quel baud UART j'utiliserai, mais ce sera l'un des bauds standard. Ce serait bien de pouvoir obtenir un temps semi-précis en millisecondes, mais pas une exigence. Intuitivement, je pense que l'utilisation du cristal le plus rapide que mon micro puisse utiliser me donnera le plus de flexibilité, mais y a-t-il quelque chose qui me manque? Y a-t-il une fréquence «à usage général» que les gens utilisent?

Kellenjb
la source
avec beaucoup de soin ... :)
vicatcu

Réponses:

11

Honnêtement, je pourrais passer des heures à décrire les différentes fréquences et pourquoi les utiliser, mais quelqu'un l'a déjà!

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

Ce tableau a une colonne UART pour vous dire quelles fréquences UART il divise bien.

Il vous indique également quand une fréquence est un cristal standard pour un système de communication spécifique.

Kortuk
la source
Ce ne serait pas bien s'il y avait une belle fréquence de cristal que tout le monde utilisait.
Kellenjb
1
Ce ne serait pas bien si chaque partie du monde avait les mêmes prises de courant dans les bâtiments, la vie devrait continuer, sauf si vous mélangez les prises.
Kortuk
2

Intuitivement, je voudrais utiliser le cristal LENT qui fonctionne pour mon application. Vous obtiendrez moins de dérive d'horloge et les traces de circuit se comporteront généralement mieux aux basses fréquences.

Soit dit en passant, si vous voulez faire des choses toutes les quelques millisecondes, vous pouvez faire quelque chose comme suit:

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;

Vous ne savez pas quel micro vous utilisez, mais MPLAB dispose d'utilitaires pour chronométrer la durée des événements, vous pouvez donc l'utiliser pour ajuster la valeur de réinitialisation de TMR1 pour faire face à toute surcharge et / ou à une horloge inexacte. Les cristaux peuvent varier suffisamment pour que cela soit impossible dans un environnement de production ... pas sûr.

Isaac
la source
En tant qu'extension à cela, si l'on ne sait pas quel XTAL utiliser dans son widget, n'en sélectionnez pas du tout. Laissez simplement le spot PCB vide et attendez jusqu'à ce que vous ayez besoin de la stabilité (l'étalonnage de l'oscillateur RC interne n'est pas assez bon à la vitesse de transmission souhaitée, par exemple) ou de la vitesse. Ne réparez pas ce qui n'est pas cassé!
tyblu
D'accord - si votre MCU a un oscillateur interne, essayez-le d'abord. Assurez-vous de définir correctement les mots de configuration / fusibles. En outre, vous devriez envisager d'utiliser une prise sur votre PCB afin de ne pas avoir à gérer les cristaux de soudure / dessoudage ... le bonus est que vous pouvez les échanger facilement.
Isaac
1
@isaac, un cristal est l'une des plus grandes sources d'EMI sur une carte, il doit être aussi proche que possible du plan de masse, ne pas passer par des connecteurs et avoir des traces de blindage autour.
Kortuk
@isaac, également, si vous avez une dérive d'horloge de 10 ppm, peu importe la vitesse du cristal que vous avez. Ils se diviseront tous vers la même erreur potentielle, car une horloge à vitesse plus élevée doit avoir une division plus grande. Un cristal plus lent signifie une résolution pire sur d'autres choses.
Kortuk
@isaac Je n'ai jamais eu de problèmes avec les cristaux 40 MHz auparavant. Je les colle le plus près possible du micro. et la réponse @kortuk est la même raison pour laquelle je ne pensais pas que la dérive de l'horloge était un problème. Je pensais que des vitesses d'horloge plus élevées me permettraient de me rapprocher de 1 ms exactement.
Kellenjb