TOP > 開発環境構築 > STM32 > 水晶振動子の設定

STM32水晶振動子の設定

(2018.4.15 作成) 

 このページではSTM32マイコンを搭載する基盤を設計するに際して水晶振動子を用いる場合に気にすべき点を紹介したいと思います。

 なお内容としては主にSTマイクロさんのアプリケーションノート(AN2867: Oscillator design guide for STM8AF/AL/S and STM32 microcontrollers)の内容に多少のコメントをつけてみたものになります。

 また本記事執筆時点では上記アプリケーションノートを読んで設計した基板を発注中であり、動作の確認を行っていません。もし問題があったら随時改訂してゆきたいと思っています。

設定すべき項目

 左が一般的な振動子周辺の回路です。このページでは左図の各受動部品の定数をどうやって決めるのかという点について書いています。

 また最後に簡単に基板設計についても触れています。

 

では順番に見ていきましょう。

帰還抵抗(RF)

 振動子の発振を継続させるためのアンプに接続されている帰還抵抗です。アプリノートではSTM32のHSEとしてよく使用されている8MHzの場合、帰還抵抗として5MΩ前後が推奨されています。

 ところでSTマイクロさん謹製のNucleo基板やDiscovery基板でST-Linkとして使用されているマイコン(STM32F103Cx)のデータシートを見るとフィードバック抵抗は200kΩですが、外付け抵抗が用いられていません。

 また別のSTM32F103C8T6 (Black Pill)基板では10MΩの外付け抵抗がRF

に並列に取り付けられています。

 おそらくフィードバック抵抗なので値が小さいと消費電力が大きくなり、大きいとノイズに弱くなるだけであまり気にすることではないのでしょう。

負荷容量

 負荷容量(CL)で振動子の発振条件が決まります。具体的には購入してきた振動子の負荷容量CLにマッチングするように以下の式でコンデンサ(CL1, CL2)を決定します。

\[C_{L}=\frac{C_{L1}\times C_{L2}}{C_{L1}+C_{L2}}+C_{S}\]

 ここでCSは寄生容量で、だいたい3~10pFぐらいになるようです。まずは5pFぐらいでよいと思います。

 厳密に発信周波数を調整したいのでなければCL1 = CL2 とするのが楽だと思いますので以下の式でコンデンサ容量を決定することができます。

\[C_{L1}=C_{L2}=2\left(C_{L}-C_{S} \right)\]

発振余裕度

 負荷が大きいと起動時間が長くなり、発振が始まらないことがあるので十分マージンがある状態にしておく必要があります。アプリノートでは以下の式の条件を満たしていることが推奨されています。

\[gain_{margin}=\frac{g_{m}}{g_{mcrit}}>5\]

 ここでgmはSTM32のデータシートに記載されている値(F103Cx8の場合25mA/V)です。一方gmcirtは以下の式で計算されます

\[g_{mcrit}=4\times ESR\times \left ( 2\pi F \right )^2\times \left ( C_{0}+C_{L} \right )^2\]

各パラメータは

  • ESR: 購入した振動子の等価直列抵抗です。振動子のデータシートに記載されています。
  • F: 振動子の発振周波数
  • C0: 振動子の等価並列容量。通常の場合は無視できる値らしいです。アプリノートを参考に1pFぐらいでいいと思います。
  • CL: 負荷容量

です。よほどのことがない限り5以下にはならないと思うのですが、どうでしょう?

励振レベル

 発振時の消費電力が振動子のデータシートの最大値を超えないことを確認します。電流プローブなどを使って測定するようです。超えている場合は外部抵抗REXTを設置してCL2と合わせてLPFを構成することで電流を制限するようです。

 ただしNucleo基板, Discovery基板ともに外部抵抗は設置されていないので、基本はなくてよいものだと思います。

基板設計

 STマイクロさんのアプリノートには右図のような推奨パターンとともに解説がありますが、ちょっとわかりにくいです。

 村田製作所さんのサイトの説明が日本人にとってはわかりやすいのではないでしょうか?

 要点をまとめると

  • パターン長はなるべく短く
  • 多層基板の場合、中間層に信号線を通さない
  • 振動子の周辺はGNDガードする
  • パターン中にviaを置かない。マイコンと同一面に実装する

だと思います。

 どうでしょう?すべての動作の基本となる重要なパーツなので、なるべくここで問題を起こさない設計をしたいところですね。