google-site-verification: google3bd66dd162ef54c7.html
fc2ブログ

リアルタイムクロック (RTC) DS3231の温度特性の測定

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

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

▼ペルチェ素子と被測定物(DS3231)
RTCをペルチェに押し当て
ペルチェの温度出力プレートに測定対象の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倍でリアルな時間)
モジュール-Aの誤差の変化
横軸は時間、縦軸はRTCの誤差。これはGPSを基準にした時のRTCの1PPS信号の位相差の変化量を ppm 単位でを表しています。この値が正の時は位相差が増えている、つまりRTCの歩度に遅れがあることになります。

温度変化があるとスパイク状に誤差が急増し、それを素子が自分で温度補正するため誤差が少なくなるということを繰り返しています。温度を測定して誤差の補正を行う動作は64秒間隔で実行されているので、こういうグラフになるのだと思います。なお、現実にはこんなに速く温度が変化することは無いので、スパイクの部分は気にしなくても良いと思います。

平均値はゼロより上にシフトしていますが、10℃から50℃の範囲で変動幅は1ppmくらいになっている感じです。このあたりは後でもう一度整理します。

▼モジュールB
モジュール-Bの誤差の変化
温度によって誤差が大きく変化しています(モジュールAのグラフとは縦軸のスケールが変わっているので注意)。スパイク状の変化があるのは、温度が平衡状態になるまでの期間で、これは仕方ないでしょう。ちなみにこの素子は温度測定を1秒間隔で行っています。

平坦部の値を見ると、-6ppm(@10℃) から 8ppm(@50℃) まで変化しています。もし本物の DS3231M なら誤差はオーバーオールで±5ppm 以内のはずなので、これは偽物の可能性が高いです。

▼モジュールC
モジュール-Cの誤差の変化
これもモジュールBと同じ傾向です。

以上が測定の生データです。

ここまでの結果ではちょっと判り難いので、温度に対する誤差のグラフに整理してみます。以下は各温度での誤差の値をグラフから読み取ってプロットしたものです。グラフは左から赤矢印の経路で進み、(ほぼ)元の位置に戻っています。

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

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

▼モジュールC
モジュール-Cの特性まとめ
モジュールBと同じ傾向です。

◆まとめ
ペルチェ温度コントローラーを作ったので早速デバイスの温度特性の測定に使ってみました。これまでは、温度の話が出ると資料から推定するばかりで、定量的なことが言えませんでした。しかし、これがあるとその壁をちょっとだけ突破出来そうです。役に立つ道具が一つ増えて嬉しいです。

ところで、ペルチェ温度コントローラーを作るきっかけになったのは、ダイソーの3.4A出力の充電器を買ったことです。それ以外にGPSのNEO-8Mや Arduino Nano を最近買っているのですが、これらを全部活用して新しいことが出来るようになりました。これぞ自作の醍醐味という感じです。

今回ペルチェコントローラーのソフトを改良して、温度パターンの自動プログラム運転が出来るようにしました。このあたりは、もう少し機能をレベルアップしてから、また記事で紹介予定です。

リアルタイムクロック(RTC) の DS3231 と DS3231M は別物

リアルタイムクロックのDS3231の使い方や精度についていろいろ調べてきました。
 関連記事→RTC3231のカテゴリはこちら

流石にTCXOだけあって、本物(?)のDS3231なら、エージングレジスタを調整することで月差1秒以内の精度まで追い込むことが出来ました。しかし、世の中で手に入るDS3231には精度の悪いもの(偽物?)が混ざっていて、そういうデバイスでは月差10秒くらいまでしか追い込めないようです。

ここまでがこれまでの私の認識だったのですが、今回新たな情報を入手しました。どうも名前が同じ、つまりDS3231でも仕様の違うものが売られているようです。この記事ではその内容を説明していきたいと思います。

▼DS3231を使ったRTCモジュール
DS3231を使ったRTCモジュール(ZS-042)
左のモジュール(A)は月差1秒以内に調整出来ました。しかし、中央(B)と右(C)のモジュールはそんな高精度に調整することは出来ませんでした。

こんなに精度の悪い物が出回っていたら、誰かが問題にしても良さそうなものです。そんなことを思いながら調べてみると、そのものずばりの記事がありました。

それは、HeyPete.com Blog さんの、Major differences between the DS3231 and DS3231M RTC chipsという記事です。

詳しくはその記事を読んでいただくのが一番ですが、ポイントを整理すると、

1) DS3231 と DS3231M では内部の部品や回路構成が全く異なっている。データーシートも別で、DS3231 の精度は 2ppm だが、DS3231M の精度は 5ppm。DS3231 は水晶振動子を使っているが、DS3231M はMEMS振動子。但し I2C インターフェイスからは同じに見える。

【データーシートへのリンク】
DS3231のデーターシート :https://datasheets.maximintegrated.com/en/ds/DS3231.pdf
DS3231Mのデーターシート:https://datasheets.maximintegrated.com/en/ds/DS3231M.pdf

2) DS3231 は水晶振動子の負荷容量を調整することで周波数を調整している(TCXO)。したがって、出力されている32.768kHzの周波数の精度はRTCの時計の精度と同じ。

3) DS3231M はMEMS振動子の出力を回路(+ソフト?)で補正して時間基準の1秒パルスを生成。この時、同時に温度補正も実施。なお、32K信号が出力されているが、これはMEMSオシレータ出力を分周しただけのものなので、精度は±2.5%とかなり悪い。また1秒パルスとの位相差は不定。

4) DS3231 は64秒間隔で温度補正を実施。DS3231Mは、電源供給時は1秒間隔、バッテリーバックアップ時は10秒間隔で温度補正。

これほど仕様に違いがあるのなら、型番の番号を変えれば良いと思うのですが、なぜか同じになっているのが話をややこしくしています。DS3231はベストセラーなので、その名前を踏襲して売り易くしたい、というビジネス側の判断があったような気がします。

ともかく、こんなふうに仕様に大きな違いがあるのにもかかわらず、AliExpressから購入すると、どちらが届くか判らないのは困ったものです。もちろん国内の信頼のおけるサプライヤーから買えば大丈夫なんでしょうが、貧乏なアマチュアにはお付き合いは無理です。

私の持っているチップのマーキングをよく見ると、

▼モジュールAは、DS3231N
A DS3231N
これ、精度が高かったものです。

▼モジュールBは、DS3231M
B DS3231M

▼モジュールCは、DS3231M
C DS3231M
モジュールBとCは DS3231M のようです。どうりで精度が悪かった訳です。書くのが後になりましたが、型番末尾のMはMEMSのMを表しているのではないかと思います。

◆まとめ
冒頭に書いたように、DS3231 を使ったRTCモジュールには精度の悪いものがあるので、中華マーケットでよくある偽物だと思っていました。実際に過去の記事の中にそういうことを書いたことがあります。

ところが、精度の悪い物はDS3231M だったようで、仕様書を見ると精度が悪くても当然だなーと思える方式になっていました。なお、精度が良くても悪くてもそのデバイスが本物だとは限らない、つまり両方偽物の可能性もあるので闇は深いです。

ちなみに、上の写真のモジュールAのマーキングは DS3231N となっていますが、正規のマーキングなら DS3231S# (0~70℃) あるいは DS3231SN# (-10~85℃) となっているはずです。ということで、これは偽物である可能性が高いです。

Amazon でもこのRTCを使ったモジュールが売られていますが、そのユーザーの評価はばらついています。「すばらしい精度」と高く評価をする人がいる一方で、「機械式の時計の精度のほうがマシ」とまで言う人がいたりします。たぶん本物/偽物、水晶/MEMSバージョンなどが玉石混交で売られているような気がします。

DS3231Mのパッケージには300ミルの16ピンSOP以外に 8ピンSOPの物もあります。DS3231Mの本来の使われ方は8ピンパッケージの方のような気がします。これならフットプリントが小さく、MEMS振動子なのでショックにも強くて使い易いと思います。

RTC (DS3231) の誤差変動の測定

このところPCの入れ替え作業をやっているので電子工作の方は進展がありません。そんな中で、あまり手間を掛けずに出来ること、ということで、RTC(DS3231)の誤差の時間変化を測定してみました。

以前の記事で DS3231 の偽物は時間精度が悪く、短時間でもふらふらとタイミングが変化しているという話を書きました。これが実際にどれくらいの変化なのか、定量的に比較してみましょう、というのが今回の記事の目的です。

▼測定方法
RTCの誤差変化を記録

左のArduino UNO で作った DS3231を使ったデジタル時計から出ている1秒パルスと、窓際に置いたGPSモジュール (neo-8m) から引っ張ってきた1PPSパルスとの位相差を中央の Arduino UNOで測定し、右側のタブレットで記録しました。
RCTモジュールはコネクタで差し替えが可能なので、簡単にモジュールの違いによる特性の差を比較することが出来ます。

以下は測定結果で、1200秒(20分間)の位相の変化と、位相の変化率です。

位相の変化率は1秒値当たりの位相の変化量で求めていて、これはRTCの絶対誤差と考えることが出来ます。なお、この変化率は、60回(60秒)の位相データーを使って最小二乗法で求めた近似直線の傾きの値です。なお、この値は Arduino で計算してシリアルに出力しています。

◆モジュールA (本物、と思われるもの)
・位相変化
モジュールAの位相変化
位相差は4μsステップの値でしか出力されないので、階段状のグラフになっています。

・誤差変化
モジュールAの誤差変化
位相の測定結果は4μsステップの離散値しか得られません。でも最小二乗法で求めた直線近似直線の傾きには、見えなかったた傾向が見えてきているようです。

時々大きな揺らぎがありますが、それを除くと変動は±0.02ppm 程度に収まっているようです。あと、少し右上がり傾向なのは温度変化の影響なのかも知れません。

◆モジュールB(偽物と思われるもの)
・位相変化
モジュールBの位相変化
エージングレジスタの値が十分調整出来ていないようで、右上がりの位相変化があります。ちなみに、位相差が増えているので、RTCのオシレーターの周波数が低いことになります。

・誤差変化
モジュールBの誤差変化
右上がりの位相変化があるので、グラフの中心が 0.3ppm くらいゼロから上にシフトしています。変動幅は、±0.2ppm くらいあって、Aのモジュールの約10倍もあります。こういうデーターを取ると、偽物の化けの皮が剥がれてきます。

◆モジュールC(偽物と思われるもの)

・位相変化
モジュールCの位相変化
4μs の階段状に値が変化していますが、Aのモジュールより振れ幅が大きくなっています。エージングレジスタが適切に調整されていたようで、中心値はほぼ一定になっています。

・誤差変化
モジュールCの誤差変化
変動は±0.4ppm くらいはありそうです。やはりこれも偽物です。

◆まとめ
本物(と思える物)と偽物の DS3231 の誤差変動を詳しく測定してみました。偽物の変動範囲は本物の10倍程度あることが判りました。そうは言っても 1ppm 以下の話なので、細かいこと言わなければOKなレベルではあります。

こういう測定を簡単に出来るのは、GPSモジュールから出ている正確な1PPSパルスのおかげです。これが7ドルちょっとで手に入るのだから、良い時代になったものです。残念なのは、このモジュール(u-block neo-8)が日本製では無いことです。

最小二乗法による傾向の抽出は思ってたよりうまくいっている感じです。Arduino UNO のCPU (ATmega328P) で計算した場合の1回の処理時間は50ms程度でした。これ以外に過去データーを蓄積しないといけないのでレスポンスが悪化します。そんなことで、タイミング的に厳しい場合は無理ですが、そうでなければこのテクニックはけっこう使えると思います。なお、計算精度が32ビット浮動小数点なので、桁落ちには注意が必要です。

今回調べたのは20分程度の短期変動です。もっと長時間では傾向が変わってくるかも知れません。多分それ以上に、温度変化の影響の方がずっと大きいと思います。
カレンダー
05 | 2023/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。
記事の内容のご利用は読者の自己責任でお願いします。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード