CPUのクロックについて考えていると、
「CPUには内蔵発振器が入っていて精度が1-3%、水晶振動子を外につければ20ppm(0.002%)。もちろん、水晶振動子を使うほうが良いのは分かる。じゃあ、内蔵発振器でもいいのはどういうとき?」
という疑問にぶち当たります。
水晶振動子を使うのならまず問題ありませんが、内蔵発振器が入っているので可能ならそちらで済ませたいものです。
「誤差が大きくてダメだ!」
ということは簡単ですが、どの程度までの誤差が許されるのかきちんと認識していることは少ないのではないでしょうか。
◯精度を全く気にしなくていい場合
もし、その製品がスイッチを監視していて、スイッチが押されたらモータを回すだけというような……要は簡単な電子工作みたいなものだったら精度はまったく不要です。
なぜならここに時間的要素が一切ないからです。
(もし、モータを回す時間に1%のずれも許されないようであれば、駄目ですが)
基本的に、「何かを時間的にきっちり正確に動かす必要がなく、他のデバイスと非同期通信をしない」というのであればクロックの精度は不要になります。
◯精度は必要だが内蔵発振器でもいける可能性がある時
スイッチが押されたらモータを回す、という程度の機能であっても、他のデバイスと通信するとなるととたんに時間が大事になってきます。
SPIやI2Cのようなクロック信号がある同期信号では、お互いにクロックで同期をとるのでメインクロックのずれなど問題になりません。
しかし、UARTのようなクロック信号がない非同期信号では、一定の時間ごとにデータを送るので、メインクロックがずれているとデータを送るタイミング・受けるタイミングがずれて、ビットがずれたデータを送受信してしまいます。
そうすると、通信が確立しません。
なお、UARTでは2~3%のクロックのズレならば問題なく通信できる可能性が高いです。
しかし、送信と受信の両方で2%ずれたら合わせて最大4%ずれてしまいます。
片方が水晶振動子駆動で精度がよいという条件か、互いにズレが1%程度という条件でないと厳しくなります。
◯精度が必要すぎて水晶振動子が必須な場合
まず、時計です。
外付けのRTCなどを使用せずに、CPUが自分で時刻をカウントするという時点で水晶振動子は必須になります。
1%のずれがあったら、一日に14分もずれてしまうのでまったく実用になりません。
つぎに、無線内蔵CPUです。
無線通信(RF)では法律により、厳しく周波数の範囲を決められています。
たいてい50ppm程度しかずれてはいけません。
この時点で水晶振動子が必須です。
というようなところで、なんとなく感覚つかめたでしょうか。
以上、小田切でした。
コメント
Comments are closed.