近頃頻繁に使うマイクロコントローラ STM32C092KCT は水晶による 48 MHz までの外部クロックを受け付けますが、実際に 48 MHz の水晶を取り付けるとどうもきちんと動かないことが多いです。手持ちのスルーホール水晶発振子では全滅です。全く動かないわけではなくなんかノロノロとは動くんですが、CAN 通信などは同期が合わず全くダメです。下の動画は 1 周期 1 秒の LED 点滅プログラムを走らせたところ。おっそいですね。周期を測ると 3 秒あります。何が起きてる?
クロックが妙に遅いと思ったら
上の動画で使っている水晶は秋月電子から購入したものですがデータシートを見ると発振モードに「3次オーバートーン」と書いてあります。3 次オーバートーンとは何か?水晶発振子は機械振動の共振により非常に鋭い Q を得るものです。固定端で振動する材料の定在波を利用するわけで、通常は振動の節がない基本モードを利用しますが、節が 2 箇所ある 3 次の振動モードも存在するわけです(もっと言うと 5 次7次…とあるわけです)。その3次の振動モードを利用する水晶発振子がありそれを「3次オーバートーン」と呼ぶようです。
そんなの振動が基本モードに引っ張られがちになるのは目に見えてますし、めんどくさいでないの、と思います。が、3 次オーバートーンを利用すると高周波の水晶発振子が安く作れるんだそうです。確かに安かった。データシートに 3 次オーバートーンと書いていないこともよくあるようですが、高周波の水晶発振子を使って動作が妙に緩慢だったらおそらくこれです。
水晶発振子を使った外部クロックというと下の図みたいに水晶発振子をポンと付けて後はクロックのことは忘れて過ごすのがいままでの人生でしたけれども3次オーバートーン水晶はこれだけでは済まないようです。この回路では基本周波数で発振してしまい、スピードが 1/3 になってしまいます。

解決法は?
この記事もまた長くなりそうな予感がするので、どうやったら解決したかをまず書いてしまうと、こんな風に水晶に付けた負荷容量 C1、C2 のどちらかと並列にインダクタを入れたところ 48 MHz で発振しました。

C3 は直流をカットするためのコンデンサで C1 に対して十分に大きければ値はおおざっぱで大丈夫です。C1 と L1 で共振回路が出来上がりますがその共振周波数を目標の周波数の 2/3 ぐらいに設定するとうまく行くようです。共進周波数の計算式は以下の通り。計算が面倒でオンライン計算機を使ってしまいました。
どういう理屈なの?
マイクロコントローラの水晶端子に水晶を繋ぐとクロックが得られるのは、中に発振回路が入っているからです。どんな回路かというとこんなです
これは Pierce 発振器と呼ばれていて、マイクロコントローラの水晶発振器にはみんなこれが使われているそうです。水晶発振子は共振周波数でインピーダンスが 0 になる特性があり、その周波数で帰還が成立して発振を起こします。こんな回路ですから、基本モードの振動を捕まえて発振してしまいがちです。どうすれば良いかというと、STMicro が推奨しているのは、下図のように入力側にインダクタを入れて共振回路を構成し、基本モードの振動をキャンセルしてしまうこと。これは直感的に理解できる気がします。共振回路はバンドパスフィルタとして振舞うので共振周波数を3次オーバートーン側に寄せれば基本モードの振動はフィルタにより除去されてしまい、より共振周波数に近い 3次オーバートーンの振動を拾いやすくなりそう、確かにうまく行きそうな気がします。
ところが、上の回路を実際に試してみたところ発振は止まってしまいました。よっく見てみるとインバータ Inv には帰還抵抗 Rf が繋がっているので入力のバイアス点はおそらく電源の中点になっているはず。入力側を Ll1 を介してグラウンドに落としたら入力のバイアス点はグラウンドに落ちてしまい、動作点が変わるのでそれは発振が止まるのではないの?と、Ll1 に直列に大きめのコンデンサを入れてみたらやはり、3 次オーバートーンで発振しました。それが前節の回路です。最初共振周波数が目標周波数近くになるように L の値を決めましたが、それでもいい感じで発振しましたが LC 回路の Q が水晶に干渉して不安定になったら嫌だなと考え、はっきりとオーバートーン寄りだけれども目標周波数からは外してある 2/3 の周波数になるように L 値を決めました。
ちなみに、Analog Devices は微妙に違う方法を推奨していて、並列インダクタを発振器出力側に取り付けるように勧めています。試してみたところ、この方法でもうまく行くようです。どちらが優れているのかは今僕が持っている知識ではわかりません。共振周波数を 2/3 に設定するという考えはこのドキュメントから頂きました。

以上、大半の場合水晶をポンとつけて後は忘れているクロック発生部の裏側はこんな風になっていたんだなあ、先人の知恵がぎゅっと詰まっていると思いました。なにより色んな製造元から来る水晶をつけた後、とりたててみる必要もないぐらい間違いなく無調整で発振を起こすって、何気にすごい回路ですね。
参考資料
Application Note AN2867 “Guidelines for oscillator design on STM8AF/AL/S
and STM32 MCUs/MPU” by STMicro
Engineer To Engineer Note EE-168 “Using Third Overtone Crystals with the ADSP-218x DSP” by Analog Devices
“Pierce Oscillator“ by Wikipedia
“100 MHz third overtone crystal oscillator” by DIYfan
水晶発振回路の豆知識 by なひたふ新聞
XTC Technical Terminologies by XTC






