おしゃべり時計withUSBは、(株)秋月電子通商で売っている VT-200-Fクリスタルを RTCC用の発振子として使っています。 許容偏差±20ppm(±1.7秒/1日)の誤差で¥30-(20201028)のリーズナブルなクリスタルなのですが、PICで使っているとたまに壊れる事があります。
VT-200-Fの仕様を確認すると、水晶励振レベル(DL)が0.1μW、最大1μWと非常に低いドライブレベルです。その為PICに直接接続するとドライブレベル(DL)が大きすぎて壊れてしまうようです。
このドライブレベルを下げるためには、SOSCOピンに直列に抵抗(Rd)を入れて調整する必要があります。 この直列抵抗の値の選定については、
PIC32MXのセカンダリオシレータ (SOSC) 水晶振動子回路の設計における注意点(AN2351)に詳しく書かれています。 この資料に記載がありますがPIC32MXのSOSCを確実に発信させる為には、A点の電圧が400mV必要です。 AN2351の資料では、調整時のRdのポテンションメータとオシロスコーププローブの影響を考慮して600~900mVのレンジ内になるよう、直列抵抗Rdの値を調整するように記載されています。 また残念ながらこの方法で求めた直列抵抗Rdの値が、VT-200-Fの仕様を満たす最大励振レベルとなるかどうかは分かりません。
またAN2351の資料に、C1,C2の求め方も記載されていますが、コンデンサの値をいくつか試して最も安定している値にするよう記載されています。 実際の所C1,C2の値が小さくなれると周波数が高くなり、C1,C2の値が大きくなると周波数が低くなります。 またC1,C2の値が小さいと発信が不安定になり、C1,C2の値が大きいと発信が安定します。
手持ちのVT-200-Fとコンデンサで調べたところ、15pFで+10ppmほど周波数が高くなり、33pFで-10ppmほど周波数が低くなるようです。その為おしゃべり時計withUSBではC1,C2を22pFとしました。 これについても水晶振動子やコンデンサの個々の状態によって変動するものであり目安でしかありません。
さて直列抵抗の値についてですが、PIC32MX250F128B,VT-200-F,C1/C2=22pf,気温20°C,電源電圧3.3Vでいくつか試した所、以下ようになりました。
- 2.6MΩ - 100mV
- 1.6MΩ - 200mV
- 1.0MΩ - 300mV
- 620KΩ - 400mV
- 510KΩ - 480mV
2.6MΩ - 100mV
1.6MΩ - 200mV
1.0MΩ - 300mV
620KΩ - 400mV
510KΩ - 480mV
注意点としては、A点の電圧が下がると水晶発振が始まるまでの時間が延びます。計測では300mVで約2秒、200mVで約8秒かかり、100mV以下では数十秒たっても起動しなくなりました。
1.0MΩ - 300mV
1.6MΩ - 200mV
以上を踏まえ、おしゃべり時計withUSBでは、C1,C2=22pF Rd=510KΩ としました。
水晶のドライブレベルを確認するため水晶振動子に流れるドライブ電流を計るには、トランジスタ技術2020年11月号に表面実装typeの水晶振動子を使った発信回路の設計&測定技術の記事に詳しく書かれています。 しかしながら自分は電流プローブもスペクトラムアナライザも持っていない為、記事の方法では残念ながらドライブ電流を計る事ができませんでした。
※20210723追記
新しいPICでは、RTCCの設定がLow Power Modeがデフォルトとなっており、この場合上記の設定ではRTCCが動かない現象に遭遇しました。RTCCがLow Power Modeの場合は、C1,C2=15pF Rd=0Ωとしています。
⇒https://planetxgear.blogspot.com/2021/05/vfdld8035eclock-15.html
参考文献