リアルタイムクロック (RTC) DS3231の温度特性の測定
久しぶりにリアルタイムクロックの DS3231 の話です。ペルチェを使って、小さな部品なら温度を自在にコントロール出来る仕掛けが出来たので、リアルタイムクロックの温度特性を測定してみました。
▼全体の写真

画面中央の左がペルチェ素子とその温度コントローラー。右側がRTC を使った時計と、その精度を測定するための回路です。時刻の基準は窓際に置いた GPS から送られてくる 1PPS 信号を使っています。
▼ペルチェ素子と被測定物(DS3231)

ペルチェの温度出力プレートに測定対象のRTCを輪ゴムで押し付けました。なお部品と温度プレートの間には、TO-220 の部品を放熱板に取り付ける時に使う柔らかい伝熱シートをはさみました。
▼測定部

右側が位相差の測定部で、最近買った Arduino Nano で動かしています。ちなみに、I2C の OLED は安くて小さくて使い易いので、最近こればっかり使っています。なお、測定結果はシリアルにも送っているので、PC の TeraTerm で受信し、エクセルで結果のグラフ化などの整理を行っています。
測定結果の前に、使用した温度変化パターンをグラフで示します。
▼測定用の温度変化パターン

室温 (25℃) から開始し、10℃ から 50℃ まで 10℃ ステップで昇温し、その後 10℃ ステップで降温するパターンを、ペルチェの温度コントローラーに入れました。グラフの青線が設定温度で、オレンジ色が実測の温度です。PID 制御を行っているのでぴったり追従しています。ペルチェなので加熱と冷却を自在に切り替えることが出来るため、設定温度が室温の上でも下でもシームレスに温調が出来ています。
なおこの測定結果はフィードバックに使ったセンサの値なので、設定値とぴったり合っていて当然です。実際のデバイスの温度は、ここからの熱抵抗や熱流量で変わってきます。
それでは測定結果を順に見ていきます。なお、被測定物は、この記事に出てくる DS3231 の 3個。モジュールA は 型番がDS3231N で優秀な成績だった物。モジュールの BとC の型番は DS3231M で、こちらは DS3231 の廉価版(性能劣化バージョン)といったとところです。なお、3個とも偽物の可能性が高いと思っています。
▼モジュールA (DS3231M) (横軸は5倍でリアルな時間)

横軸は時間、縦軸はRTCの誤差。これはGPSを基準にした時のRTCの1PPS信号の位相差の変化量を ppm 単位でを表しています。この値が正の時は位相差が増えている、つまりRTCの歩度に遅れがあることになります。
温度変化があるとスパイク状に誤差が急増し、それを素子が自分で温度補正するため誤差が少なくなるということを繰り返しています。温度を測定して誤差の補正を行う動作は64秒間隔で実行されているので、こういうグラフになるのだと思います。なお、現実にはこんなに速く温度が変化することは無いので、スパイクの部分は気にしなくても良いと思います。
平均値はゼロより上にシフトしていますが、10℃から50℃の範囲で変動幅は1ppmくらいになっている感じです。このあたりは後でもう一度整理します。
▼モジュールB

温度によって誤差が大きく変化しています(モジュールAのグラフとは縦軸のスケールが変わっているので注意)。スパイク状の変化があるのは、温度が平衡状態になるまでの期間で、これは仕方ないでしょう。ちなみにこの素子は温度測定を1秒間隔で行っています。
平坦部の値を見ると、-6ppm(@10℃) から 8ppm(@50℃) まで変化しています。もし本物の DS3231M なら誤差はオーバーオールで±5ppm 以内のはずなので、これは偽物の可能性が高いです。
▼モジュールC

これもモジュールBと同じ傾向です。
以上が測定の生データです。
ここまでの結果ではちょっと判り難いので、温度に対する誤差のグラフに整理してみます。以下は各温度での誤差の値をグラフから読み取ってプロットしたものです。グラフは左から赤矢印の経路で進み、(ほぼ)元の位置に戻っています。
▼モジュールA

25℃付近を底にして誤差が上がる傾向になっています。普通に使用する温度範囲での誤差を小さくしようした、設計の意図が表れているような気がします。ちなみに変動幅で 2ppm、つまり±1ppm の誤差変化ということになりまが、スペックは±2ppm なので十分仕様範囲内だと思います。
▼モジュールB

温度によって誤差が大きく変動していて、大雑把には0.35ppm/℃の変化です。DS3231M の公称精度は±5ppm だったと思いますが、これでとてもスペックには入っていないと思います。
▼モジュールC

モジュールBと同じ傾向です。
◆まとめ
ペルチェ温度コントローラーを作ったので早速デバイスの温度特性の測定に使ってみました。これまでは、温度の話が出ると資料から推定するばかりで、定量的なことが言えませんでした。しかし、これがあるとその壁をちょっとだけ突破出来そうです。役に立つ道具が一つ増えて嬉しいです。
ところで、ペルチェ温度コントローラーを作るきっかけになったのは、ダイソーの3.4A出力の充電器を買ったことです。それ以外にGPSのNEO-8Mや Arduino Nano を最近買っているのですが、これらを全部活用して新しいことが出来るようになりました。これぞ自作の醍醐味という感じです。
今回ペルチェコントローラーのソフトを改良して、温度パターンの自動プログラム運転が出来るようにしました。このあたりは、もう少し機能をレベルアップしてから、また記事で紹介予定です。
▼全体の写真

画面中央の左がペルチェ素子とその温度コントローラー。右側がRTC を使った時計と、その精度を測定するための回路です。時刻の基準は窓際に置いた GPS から送られてくる 1PPS 信号を使っています。
▼ペルチェ素子と被測定物(DS3231)

ペルチェの温度出力プレートに測定対象のRTCを輪ゴムで押し付けました。なお部品と温度プレートの間には、TO-220 の部品を放熱板に取り付ける時に使う柔らかい伝熱シートをはさみました。
▼測定部

右側が位相差の測定部で、最近買った Arduino Nano で動かしています。ちなみに、I2C の OLED は安くて小さくて使い易いので、最近こればっかり使っています。なお、測定結果はシリアルにも送っているので、PC の TeraTerm で受信し、エクセルで結果のグラフ化などの整理を行っています。
測定結果の前に、使用した温度変化パターンをグラフで示します。
▼測定用の温度変化パターン

室温 (25℃) から開始し、10℃ から 50℃ まで 10℃ ステップで昇温し、その後 10℃ ステップで降温するパターンを、ペルチェの温度コントローラーに入れました。グラフの青線が設定温度で、オレンジ色が実測の温度です。PID 制御を行っているのでぴったり追従しています。ペルチェなので加熱と冷却を自在に切り替えることが出来るため、設定温度が室温の上でも下でもシームレスに温調が出来ています。
なおこの測定結果はフィードバックに使ったセンサの値なので、設定値とぴったり合っていて当然です。実際のデバイスの温度は、ここからの熱抵抗や熱流量で変わってきます。
それでは測定結果を順に見ていきます。なお、被測定物は、この記事に出てくる DS3231 の 3個。モジュールA は 型番がDS3231N で優秀な成績だった物。モジュールの BとC の型番は DS3231M で、こちらは DS3231 の廉価版(性能劣化バージョン)といったとところです。なお、3個とも偽物の可能性が高いと思っています。
▼モジュールA (DS3231M) (横軸は5倍でリアルな時間)

横軸は時間、縦軸はRTCの誤差。これはGPSを基準にした時のRTCの1PPS信号の位相差の変化量を ppm 単位でを表しています。この値が正の時は位相差が増えている、つまりRTCの歩度に遅れがあることになります。
温度変化があるとスパイク状に誤差が急増し、それを素子が自分で温度補正するため誤差が少なくなるということを繰り返しています。温度を測定して誤差の補正を行う動作は64秒間隔で実行されているので、こういうグラフになるのだと思います。なお、現実にはこんなに速く温度が変化することは無いので、スパイクの部分は気にしなくても良いと思います。
平均値はゼロより上にシフトしていますが、10℃から50℃の範囲で変動幅は1ppmくらいになっている感じです。このあたりは後でもう一度整理します。
▼モジュールB

温度によって誤差が大きく変化しています(モジュールAのグラフとは縦軸のスケールが変わっているので注意)。スパイク状の変化があるのは、温度が平衡状態になるまでの期間で、これは仕方ないでしょう。ちなみにこの素子は温度測定を1秒間隔で行っています。
平坦部の値を見ると、-6ppm(@10℃) から 8ppm(@50℃) まで変化しています。もし本物の DS3231M なら誤差はオーバーオールで±5ppm 以内のはずなので、これは偽物の可能性が高いです。
▼モジュールC

これもモジュールBと同じ傾向です。
以上が測定の生データです。
ここまでの結果ではちょっと判り難いので、温度に対する誤差のグラフに整理してみます。以下は各温度での誤差の値をグラフから読み取ってプロットしたものです。グラフは左から赤矢印の経路で進み、(ほぼ)元の位置に戻っています。
▼モジュールA

25℃付近を底にして誤差が上がる傾向になっています。普通に使用する温度範囲での誤差を小さくしようした、設計の意図が表れているような気がします。ちなみに変動幅で 2ppm、つまり±1ppm の誤差変化ということになりまが、スペックは±2ppm なので十分仕様範囲内だと思います。
▼モジュールB

温度によって誤差が大きく変動していて、大雑把には0.35ppm/℃の変化です。DS3231M の公称精度は±5ppm だったと思いますが、これでとてもスペックには入っていないと思います。
▼モジュールC

モジュールBと同じ傾向です。
◆まとめ
ペルチェ温度コントローラーを作ったので早速デバイスの温度特性の測定に使ってみました。これまでは、温度の話が出ると資料から推定するばかりで、定量的なことが言えませんでした。しかし、これがあるとその壁をちょっとだけ突破出来そうです。役に立つ道具が一つ増えて嬉しいです。
ところで、ペルチェ温度コントローラーを作るきっかけになったのは、ダイソーの3.4A出力の充電器を買ったことです。それ以外にGPSのNEO-8Mや Arduino Nano を最近買っているのですが、これらを全部活用して新しいことが出来るようになりました。これぞ自作の醍醐味という感じです。
今回ペルチェコントローラーのソフトを改良して、温度パターンの自動プログラム運転が出来るようにしました。このあたりは、もう少し機能をレベルアップしてから、また記事で紹介予定です。