内部または外部発振器


22

8 MHzより高い周波数で実行する必要性を発見したことがないため、写真にある内部オシレーターを常に使用します(これは、使用する写真が最も速い傾向にあります)。8 MHzを超えること以外に、外部発振器を使用する必要があるという理由はありますか?私に間違ったことがもう一つあるように思えますが、私は他の人が何をしているのか聞きたいです。


MCUに内部CPUがあるのに、なぜ外部水晶振動子が必要なのですか?」MCUに内部CPUがあるという事実は、内部または外部クロックが使用される理由とほとんど関係がありません。2つの異なる問題を混同/混同していますか?
gbulmer

回答:


33

他の人が言ったように、正確な周波数と周波数安定性は、外部セラミック共振器または水晶を使用する理由です。共振器は、内部RC発振器よりも数倍正確であり、UART通信に十分です。クリスタルははるかに正確で、CAN、USB、またはイーサネットなどの他の種類の通信を行う場合に必要です。

外部水晶のもう1つの理由は、周波数の選択です。水晶は広範囲の周波数に対応していますが、内部発振器は通常1つの周波数であり、4x PLLの選択が有効になっている可能性があります。一部の新しい24ビットコアPICには、クロックチェーンに乗算器と分周器の両方があるため、単一の内部発振器周波数から幅広い周波数を選択できます。

もちろん、通信以外に正確な周波数またはタイミングを本質的に必要とするさまざまなアプリケーションがあります。時間は最も正確に安価に測定できる電子機器の特性であるため、問題は時間の測定または正確なタイミングのパルスの生成に変換されることがあります。

次に、他のブロックとの長期的な同期を必要とするアプリケーションがあります。リアルタイムクロックのベースとして使用すると、1%の発振器は1日あたり14分以上オフになります。リアルタイムを知らなくても、正確な長期時間が必要になる場合があります。たとえば、低電力デバイスの束が1時間に1回起動して数秒間データを交換し、その後スリープ状態に戻ると仮定します。50ppmの水晶(入手が非常に簡単)は、1時間で180ms以内になります。ただし、1%RCオシレーターは36秒オフになる可能性があります。これにより、1時間に数秒しか通信する必要のないデバイスに、オンタイムが大幅に増加し、したがって電力要件が追加されます。


1
トピックは異なりますが、CANbusはノード間のクロック周波数の変動を処理するのに十分堅牢であるように設計されていると思いました。誤解していますか?
スティーブンコリングズ

1
@Remiel:CANには、クロック周波数に多少の違いがあるにも関わらず、ノードが同期した状態を維持する機能があります。ノードはまだ適度に近い必要があります。ほとんどの場合、基本的に各ノードに少なくともセラミック共振器が必要です。
オリンラスロップ

24
  1. 精度。内部クロックは正確ではなく、ノイズの影響を受ける可能性があります。

  2. 温度に依存しない精度。典型的なオシレーターは大きく異なります。低温または高温のアプリケーション、または温度が大幅に変化する場合、特殊な温度補償発振器が必要になる場合があります。

  3. 速度。内部発振器がICの最高速度に到達しない場合があります。そのために外部のものが必要になる場合があります。

  4. 電圧。内部タイマーの速度は、実行中の電圧に依存する場合があります。

  5. 複数のクロックが必要です。一部のアプリケーションでは、発振器を共有する必要があります。

  6. 内部クロックを簡単に使用できない特殊なアプリケーション。内部時計を分周することは、時間管理アプリケーションのために安価な31 kHzの時計用クリスタルを投げるよりも難しいかもしれません。

私の頭の上では、arduinoが使用するATMEGA 328は、最大速度のために5Vの外部水晶を必要とします。リリーパッドバージョンは、3.3vに制限されているため、内部発振器で8 MHzで動作します。MSP430 Value Lineラウンチパッドは、3Vで10 MHZ、2.5Vで8 MHZに制限されています。


10
精度の例:USBには正確なクロックが必要です。マイクロチップ社のPIC18F2550は内部でかなりのクロック速度を生成できますが、USBの精度はあまりにも悪いです。試したところ、10〜20秒ごとに切断されました。これは外部オシレーターでは発生しませんでした。一方、PIC18F25k50を使用すると、クロックをUSB信号に同期させることができ、USB用の外部発振器は不要になります。
sweber

1
念のために言えば、内部8MHzクロックは水晶振動子ではなくRC発振器であるため、精度が低くなります。
オースティン

@austinはコメントを修正しました。
通行人

13

周波数安定性は、外部の方が高くなります。したがって、mcu freqに実際に依存するアプリケーションがある場合は、外部のアプリケーションを使用する必要があります。

しかし、ほとんどの最新のmcu:sには非常に安定した内部oscがあります。したがって、これは数年前には大きな問題であったと思います。また、内部のものをトリミングし、温度ドリフト(など)を補正する方法が増えています。

一方、あなたが同期することを確実にする他の方法があります、いくつかの国ではパワーネットの周波数安定性は50Hz±0.01Hzであり、スウェーデンのような他の場所は実際に±0.001Hzであり、私はこれを使用して維持するプロジェクトを見てきました同期するもの。そして、あなたはもはやmcu freqに依存しなくなり、内部のものを使用できます。しかし、これは少しトピックです:)


3
これらの主周波数の数値は長期安定性であることに注意してください。数週間または数か月間、正確に時間を維持することはできますが、短期間(数時間)で重大な逸脱が発生する場合があります。ただし、el cheapoデジタル時計で時刻を調整する必要はほとんどありません。
-stevenvh

@stevenvhの良い点は、長期安定性の検証にも使用できる他のソースがあることにも注意してください。gpsシステムとgsmシステムの両方に非常に優れたクロックがありますが、それらを使用するのはより複雑です。
ヨハン

3
それを必要とする他の多くのアプリケーションがありますが、特に正確なタイムベースなしで多くの問題を引き起こすものがあります-シリアル通信。
ジャストジェフ

外付けの水晶振動子ではそれほど高くない周波数安定性はわかりません。シリコン発振器では、0.1%未満の精度は得られません。
ジェイソンS

1
@Johan-DCF77 / WWVBはGPSまたはGSMと同じくらい正確であり、作業がずっと簡単です(1Hzハートビート)
-stevenvh

2

特に高速のシリアル通信では、周波数安定性が主な要因です。しかし、クロック分周器が提供するオプションが限られているため、正確なボーレートを得るために、奇妙な周波数の水晶が時々必要になることもあります。


1

実際、1%ではUARTに十分ではないシナリオに遭遇しました。

Teensy ++ v1.0マイクロコントローラ開発ボードについて聞いたことがある人は、ひどく敏感なUARTを持っています。ホストボーを115200に設定しましたが、115200に設定しましたが、長い間データを正しく読み取れなかった理由を把握できませんでした。ホストが114300ボーに近い速度で送信していたことがわかりました。(115200-114300)/ 115200 =〜0.9%のエラー。2つの異なるMCUで試してみましたが、うまくいきました。

ポイントは、アプリケーションに関係なく、クロック周波数の精度を高めることが利点である場合、チップに必要な駆動回路がない場合は、外部共振器、水晶、または発振器を使用する必要があることです。

PS UARTハードウェア上でどのような低レベルの設計選択を行ったのか、それを非常に敏感にしている人がいるのでしょうか?


UARTの基本的な要件は、レシーバーが有効な間に各ビットをサンプリングすることです。理想的には、受信機は開始​​ビットが到着した正確な瞬間に気づき、1ビット時間後に正確に1.5、次に最大8.5ビット時間後に2.5、3.5などを正確にサンプリングします。実際には、受信機がスタートパルスを検出すると、通常は多少の傾きがあり、その後にさらに傾きが生じる場合があります。たとえば、1秒あたり8,192命令を実行するプロセッサを使用して2400ボーを受信しようとする場合があります
。...-supercat

このようなことは、送信タイミングが完全にクリーンな場合に実行できますが、サンプリングは正確な417usec間隔では発生しません。代わりに、366usと488usのいくつかの間隔で発生します。レシーバーが「ピッキー」である場合、それはしばしば、データをサンプリングする必要があるときよりもはるかに早くまたは遅く、しかし理想的なトランスミッターが期待されるデータビットを出力しているときに意味します。
-supercat

@supercatなぜ彼らはそれよりも早い段階でサンプリングするように設計するのでしょうか?あなたが説明したような.5でのサンプリングが常に最良のようです。それが私が数年前にソフトウェアUARTを実装した方法です...他の方法でそれを行うことさえ私には思いもしませんでした。これにより、トランスミッターで最大のエラーマージンが可能になります。
ニックハルデン

@JGord:サンプリングがボーレートよりもはるかに速いクロックで制御されている場合、物事は素晴らしいですが、常にそうとは限りません。たとえば、UARTなしで1.0MHzで動作する6502を使用して115,200ボーを受信しようとしたとします。開始ビットを待つループは7usかかり、ポーリングの機会は1us間隔でスケジュールされます。...そこは6502ビットをポーリングだろうというときになど8US不確定だが、ビット長8.6usであるため、1が正常であれば、データを受け取ることができる
supercat

...伝送速度は正確で、立ち上がり時間と立ち下がり時間は均一で対称的であり、他のジッターはありませんでした。Teensyボードについては知りませんが、ソフトウェアUARTを使用してコントローラーを通常の能力を超えてプッシュしても驚かないでしょう。
-supercat

1

外部水晶振動子は、内部クロックよりも正確であり、正確なタイミングが必要な場合に使用する必要があります。時々お金を節約するために、デザイナーは内部のものを使用します。


2
これは、既存の回答に何も追加しないようです。
アダムハウ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.