マイコンの外部クロック【ARMコアSTM32】

マイコンを使用するうえで必要不可欠なクロックのうち、外部クロックについて解説しています。特に水晶振動子は単純な部品ではあるのですが、選定を謝るとクロックが最悪停止したりするトラブルを引き起こします。ここでは安定して外部クロックを与えるための実践に則した勘所を紹介しています。

クロックの詳細につきましてはシステムクロック【STM32のSYSCLK設定詳細 】で解説していますのでそちらを参考にしてください。

水晶振動子はマイコン周辺で使われる電子部品のうちでも抵抗器やコンデンサのようにつければ必ず機能するものではなく、安定して発振させるために振動子に適合した最適な容量のコンデンサを使ったり、マイコン自体との相性(マッチング特性)を確認する場合もあります。

水晶振動子がそれ自体でパルスを生成するものではなく、コンデンサとの組み合わせで電圧をかけると物理的な発振をつくりだすものなので、コンデンサ容量のパラメータなどとのバランスが大切であるからです。

水晶振動子による外部クロック

水晶振動子(メタルパッケージ)
水晶振動子(モールドパッケージ)
めかのとろ

最近のマイコンでは抵抗器RとコンデンサCで構成されるRC発振回路を内蔵していますので、マイコンの外部にわざわざ振動子を設けなくてもシステムクロック内部クロックとして発生させることができます。

めかのとろ

STM32マイコンでもシステムクロックに内部クロックを使用する設定にすると外付けの振動子を使用しなくても動作させることができ、部品点数を減らせることで、スペースやコストの節約が実現できる利点があります。

めかのとろ

ただし、内部クロックは水晶振動子によるクロックに比べて周波数精度が劣ることに加え、製品ごとのばらつきや温度、動作電圧など周辺環境により周波数が変化することもあるため、アプリケーションにより使い分ける判断が必要です。

めかのとろ

例えば、非同期式シリアル通信UARTなどは他の機器に同調させるために正確なクロックによるボーレートの設定が不可欠ですので精度の高い外部クロックを使用するのが無難です。

めかのとろ

水晶振動子には従来のメタルパッケージのものと樹脂モールドパッケージによるものがあります。一昔まえのものに比べるとずっと安定して発振するものですが、電源電圧が低いアプリや電圧変動があるようなアプリでは注意が必要です。

めかのとろ

一般的なメタルパッケージの標準的な水晶振動子であれば物理的なサイズの余裕もあるので比較的安定していますが、表面実装タイプ(SMD)でサイズの小さいものなどを使用する場合は十分な検証が必要かもしれません。

めかのとろ

振動子の選定は自分だけの判断だけではなく、類似した使用例を参考にしたり、マイコンとの相性もあるのでメーカーとの確認も必要な場合もあるかもしれません。慣れないうちは実績の多いタイプをそのまま採用するのが無難だと思います。

めかのとろ

振動子と組み合わせて使用するコンデンサの最適な容量は振動子のデータシートやマイコンのデータシートに記載されています。振動子周辺の部品としては他に制限抵抗REXTがありますがこれは振動子の特性により使用する場合があるものです。

めかのとろ

試作で振動子とマイコンの相性が悪い場合に対処できるようにするには振動子を別のタイプへ簡単に交換できるようソケットを設けておくのも手です。これはスルーホールのタイプでのみ可能です。

メーカー推奨の振動子例(STM32メーカー資料より)
めかのとろ

また、発振については理論的な解析なども多々見られますが、マイコンの使用者の立場からは目を通す程度でもよいと思います。

めかのとろ

水晶振動子を実装する際にはプリント基板のパターンも寄生容量やインダクタンスの影響を抑えるためにできるだけマイコンに近づけるなど注意事項がありますのでメーカーの仕様書などで確認する必要があります。

外部振動子接続( STM32データシートより)

セラミック振動子による外部クロック

めかのとろ

外部クロックには水晶振動子の他にセラミック振動子と呼ばれるものもあります。これは水晶振動子と同じく機械的な共振によるもので周辺温度などの影響を受けにくく水晶振動子に比べると多少精度は下がりますが内部クロックによるものよりも精度は高いものです。

めかのとろ

セラミック振動子によるクロックは水晶振動子によるものと内部発振回路によるものの中間的なもので、安価なうえに、発振回路に必要なコンデンサを内蔵している3端子タイプを使用すると気楽に選定できます。

めかのとろ

3端子タイプでは上図の点線で囲んだ部分を一つの部品に置き換えることができるので省スペースも図れます。

セラミック振動子

発振器による外部クロック

めかのとろ

水晶振動子やセラミック振動子は電圧を与えて機械的な共振を発生させるタイプですので、パラメータ選定に誤りがあったり、マイコンとの相性が良くない場合にはクロックが停止してしまうことがないとは言えません。

水晶発振器
めかのとろ

そこで、振動子ではなく発振回路が内蔵した発振器を振動子の代わりに接続する方法もあります。部品の単価は上がり、サイズも大きくなりますが電源入力だけでパルスを発生する確実な方法であるといえます。発振器出力をマイコンの外部クロックの入力側(STM32マイコンではOSC_IN)に接続するだけです。

外部クロック入力(STM32データシートより)
ポイント

■ 水晶振動子を初めて使う場合はメタルパッケージ(スルーホールタイプ)のサイズ大きめのものを採用するのが無難。
■ 不安な場合はできるだけ使用例のあるものをそのまま採用するのもあり。
■ 試作などでは振動子を別タイプに交換できるようにソケットにしておくのもあり。
■ 多少値はあがるが水晶振動子でなく水晶発振器を使うのも手。

外部クロック周波数設定

めかのとろ

STM32F1xxシリーズのファームウェアではデフォルトで8MHzの外部クロックを使用することになっています。そのため、Nucleoボードを始め、多くの評価基板では8MHzの水晶振動子を使用していることが多いです。

めかのとろ

例外的に、STM32F103VEを搭載したSTBeeボードでは12MHzの水晶振動子が搭載されていますので、設定し直さなければ例えば、シリアル通信などではボーレートが他の機器とは合わなくなってしまいます。そこで、外部クロックの周波数を変更する箇所を見ていきましょう。

外部クロック周波数設定
めかのとろ

外部クロック周波数はstm32f10x.h内でHSE_VALUEと定義されていますので、この値をデフォルトの80000000から使用する周波数、例えば12MHzの場合は12000000に変更すればよいだけです。

コラム

今回は外部クロックについて取り上げてみました。
精度の高いパルスを出力したり、外部の周波数に同調させる非同期UART通信では内部クロックではなく、精度の安定している外部クロックを使用するのが無難です。はじめて水晶振動子を扱う場合は、マイコンとの相性等が気になるものですが、できるだけ市販ボードなどで使用されているものを採用するのがよいと思います。慣れないうちにサイズの小さなSMDタイプを採用するのはリスクが大きいかもしれません。企業の製品などで大量生産する場合にはメーカーにマッチング試験などを依頼することもあると思います。