Oscillatore interno o esterno


22

Uso sempre l'oscillatore interno delle immagini poiché non ho mai trovato la necessità di eseguire qualsiasi cosa a una frequenza superiore a 8 MHz (che è la più veloce che le immagini che utilizzo tendono ad essere in grado di andare). Ci sono delle ragioni, oltre a superare gli 8 MHz, che significa che dovrei usare un oscillatore esterno? Mi sembra che ci sia un'altra cosa che non va, ma sarei interessato a sentire cosa fanno gli altri.


" Perché a volte è necessario un cristallo esterno, anche se l'MCU ha una CPU interna? " Il fatto che l'MCU abbia una CPU interna non ha quasi nulla a che fare con il motivo per cui viene utilizzato un clock interno o esterno. Stai confondendo / confondendo due diversi problemi?
Bagliore

Risposte:


33

Come altri hanno già detto, la precisione della frequenza e la stabilità della frequenza sono ragioni per utilizzare un risonatore o un cristallo esterno in ceramica. Un risonatore è molte volte più preciso dell'oscillatore RC interno e abbastanza buono per la comunicazione UART. Un cristallo è molto più preciso e necessario se si eseguono altri tipi di comunicazione come CAN, USB o Ethernet.

Un altro motivo per un cristallo esterno è la scelta della frequenza. I cristalli sono disponibili in una vasta gamma di frequenze mentre l'oscillatore interno è di solito una frequenza con forse una scelta di 4x PLL abilitato. Alcuni PIC più recenti con core a 24 bit hanno sia un moltiplicatore che un divisore nella catena del clock in modo da poter colpire un'ampia gamma di frequenze dalla singola frequenza dell'oscillatore interno.

Esistono ovviamente varie applicazioni che richiedono intrinsecamente frequenza o tempismo accurati diversi dalle comunicazioni. Il tempo è la proprietà dell'elettronica che possiamo misurare con la massima precisione in modo economico, quindi a volte il problema si trasforma in uno di misurazione del tempo o nella produzione di impulsi con tempismo accurato.

Quindi ci sono applicazioni che richiedono una sincronizzazione a lungo termine con altri blocchi. Un oscillatore dell'1% si spegne di oltre 14 minuti al giorno se utilizzato come base per un orologio in tempo reale. Potrebbe anche essere necessario un tempo a lungo termine accurato senza dover conoscere il tempo reale. Ad esempio, supponiamo di voler svegliare un gruppo di dispositivi a bassa potenza una volta ogni ora per scambiare dati per alcuni secondi e poi tornare a dormire. Un cristallo da 50 ppm (molto facile da ottenere) sarà spento non più di 180 ms in un'ora. Tuttavia, un oscillatore RC all'1% potrebbe spegnersi di 36 secondi. Ciò significherebbe aggiungere ai dispositivi significativi puntualità e quindi requisiti di alimentazione che dovevano comunicare solo per un paio di secondi ogni ora.


1
Fuori tema, ma ho pensato che CANbus fosse progettato per essere abbastanza robusto da gestire le variazioni delle frequenze di clock tra i nodi. Sto fraintendendo?
Stephen Collings,

1
@Remiel: CAN ha disposizioni per i nodi che rimangono sincronizzati nonostante qualche differenza di frequenza di clock. I nodi devono ancora essere ragionevolmente vicini. Nella maggior parte dei casi, in pratica è necessario almeno un risonatore ceramico in ciascun nodo.
Olin Lathrop,

24
  1. Precisione. Gli orologi interni non sono precisi, possono essere influenzati dal rumore.

  2. Precisione indipendente dalla temperatura. Gli oscillatori tipici possono variare notevolmente. Oscillatori di compensazione della temperatura speciali possono essere necessari in applicazioni a bassa o alta temperatura o se la temperatura varia in modo selvaggio.

  3. Velocità. Gli oscillatori interni potrebbero non raggiungere la massima velocità dell'IC. Per questo possono essere necessari quelli esterni.

  4. Voltaggio. La velocità di un timer interno può dipendere dalla tensione alla quale viene eseguito.

  5. Sono necessari più orologi. Alcune applicazioni vogliono condividere un oscillatore.

  6. Applicazioni speciali in cui l'orologio interno potrebbe non essere facilmente utilizzabile. Dividere l'orologio interno potrebbe essere più difficile che lanciarlo contro un cristallo da 31 kHz economico, per applicazioni che richiedono tempo.

Dalla parte superiore della mia testa, l'ATMEGA 328 che Arduino utilizza richiede un cristallo esterno a 5 V per la sua massima velocità. La versione del lily pad funziona a 8 MHz, sull'oscillatore interno perché è limitata a quella a 3.3v. Il launchpad MSP430 Value Line è limitato a 10 MHZ a 3V, 8 a 2,5V.


10
Un esempio di precisione: USB richiede un orologio preciso. I microchip PIC18F2550 possono generare internamente qualsiasi velocità di clock, ma la precisione è troppo bassa per l'USB. Quando l'ho provato, c'era una disconnessione ogni 10-20 secondi. Ciò non è accaduto con un oscillatore esterno. Nel frattempo hanno il PIC18F25k50, che può sincronizzare il suo orologio con il segnale USB e non richiede più un oscillatore esterno per USB.
dolce

1
Solo per essere pedanti, l'orologio interno da 8 MHz è un oscillatore RC, non un cristallo, quindi la sua scarsa precisione.
Austin,

@austin commento fisso.
Passante dal

13

La stabilità della frequenza sarà maggiore con una esterna. Quindi, se si dispone di un'applicazione che dipende davvero dal mcu freq, potrebbe essere necessario utilizzarne uno esterno.

Ma la maggior parte dei moderni mcu: s ha un osc interno abbastanza stabile, quindi penso che questa fosse una domanda più grande un paio di anni fa. Inoltre ci sono sempre più modi per tagliare quello interno e compensare la deriva della temperatura (ecc. Ecc.).

D'altra parte ci sono altri modi per assicurarti di essere sincronizzato, in alcuni paesi la stabilità del freq nella rete elettrica è di 50Hz ± 0,01Hz e altri posti come la Svezia in realtà hanno ± 0,001Hz e ho visto progetti che usano questo per mantenere cose sincronizzate. E poi non sei più dipendente da mcu freq e puoi usare quello interno. Ma questo è un po 'di argomento :)


3
Si noti che tali valori di frequenza di rete sono stabilità a lungo termine . Va bene mantenere il tempo con precisione per settimane o mesi, ma in un breve periodo (ore) si possono verificare deviazioni gravi. Tuttavia, non dovrai quasi mai regolare l'ora su un orologio digitale el cheapo.
Stevenvh,

@stevenvh buon punto, nota anche che ci sono altre fonti che potrebbero essere utilizzate per verificare anche la stabilità a lungo termine. Entrambi i sistemi gps e gsm hanno orologi molto belli ma è più complicato usarli.
Johan,

3
sebbene ci siano molte altre applicazioni che lo richiederebbero, ce n'è una che causa in modo specifico molti problemi senza una base dei tempi precisa: le comunicazioni seriali.
JustJeff,

Non conosco alcuna stabilità di frequenza che non sarebbe superiore con un cristallo di quarzo esterno. Non otterrai una precisione inferiore allo 0,1% con un oscillatore al silicio.
Jason S,

1
@Johan - DCF77 / WWVB è preciso come GPS o GSM, e molto più facile da lavorare con (battito cardiaco 1Hz)
stevenvh

2

La stabilità della frequenza è la principale, in particolare per le comunicazioni seriali ad alta velocità. Ma ciò porta anche alla necessità occasionale di un cristallo a una frequenza apparentemente dispari per ottenere una baud rate esatta, a causa delle opzioni limitate che ti danno i divisori di clock.


1

In realtà mi sono imbattuto in uno scenario in cui l'1% non era abbastanza buono per UART.

Se qualcuno di voi ragazzi ha sentito parlare della scheda di sviluppo del microcontrollore Teensy ++ v1.0, ha un UART terribilmente sensibile. Avevo impostato il baud host su 115200, impostato su 115200 e per il tempo più lungo non sono riuscito a capire perché non leggesse correttamente i dati. Si scopre che il mio host stava inviando più vicino a 114300 baud. (115200 - 114300) / 115200 = ~ 0,9% di errore. L'ho provato con due diversi MCU e hanno funzionato bene.

Il punto è: indipendentemente dalla tua applicazione, se una maggiore precisione della frequenza di clock è un vantaggio, dovresti usare un risonatore esterno, un cristallo o persino un oscillatore se il tuo chip non ha i circuiti di guida necessari.

PS Mi chiedo se qualcuno ha qualche idea su quale scelta di design di basso livello abbiano fatto sull'hardware UART che lo rende così sensibile?


Il requisito fondamentale per un UART è che il ricevitore campiona ogni bit mentre è valido. Idealmente, il ricevitore noterebbe il momento esatto in cui è arrivato il bit di inizio e campionerebbe i dati esattamente 1,5 un bit più tardi, quindi 2,5, 3,5, ecc. Fino a 8,5 bit più tardi. In pratica, di solito c'è un po 'di slop quando il ricevitore rileva l'impulso di start, e dopo potrebbe esserci più slop. Ad esempio, si potrebbe provare a ricevere 2400 baud utilizzando un processore che esegue 8.192 istruzioni al secondo ....
supercat

Una cosa del genere può essere fatta se il tempo di trasmissione è perfettamente pulito, ma il campionamento non avverrà a intervalli di 417usec precisi. Invece accadrà ad alcuni intervalli di 366us e alcuni di 488us. Quando un ricevitore è "esigente", ciò significa spesso che sta campionando i dati molto prima o dopo rispetto a quando dovrebbe, ma in un momento in cui un trasmettitore ideale emetterebbe il bit di dati previsto.
supercat,

@supercat Perché mai lo progetterebbero per campionare prima che dopo? Sembra che campionare agli .5 come hai descritto sarebbe sempre meglio. È così che ho implementato il mio software UART un paio di anni fa ... non mi è nemmeno venuto in mente di farlo in nessun altro modo. Ciò consente semplicemente il maggior margine di errore sul trasmettitore.
NickHalden,

@JGord: se il campionamento è controllato da un clock molto più veloce del baud rate, le cose sono meravigliose, ma non è sempre così. Supponiamo, ad esempio, che si stia provando a ricevere 115.200 baud usando un 6502 a 1,0 MHz e senza UART. Un loop in attesa del bit di avvio richiederà 7us e le opportunità di polling sono programmate a intervalli di 1us. C'è un'incertezza di 8us su quando il 6502 eseguirà il polling di un po ', ma poiché i bit sono lunghi 8,6us, si potrebbero ricevere dati con successo se ...
supercat

... la velocità di trasmissione era precisa, i tempi di salita e discesa erano uniformi e simmetrici e non c'era altro jitter. Non conosco la scheda Teensy, ma non sarei sorpreso se stesse usando un software UART per spingere il controller oltre le sue normali capacità.
supercat,

1

Gli oscillatori di cristalli di cristallo esterni sono più precisi degli orologi interni e dovrebbero essere utilizzati quando è necessario un tempismo accurato. A volte per risparmiare denaro, i progettisti usano quelli interni.


2
Questo non sembra aggiungere nulla alle risposte esistenti.
Adam Haun,
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.