GreenPAK(SLG46826)をI2C経由で触ってみる その11 遅延時間検証

概要

前回双方向のループする回路を調べたところ、プルダウンだと抵抗値によって電荷が抜けきらない問題がでることがわかりました。どれぐらいの遅延が起こるのかを確認していきたいと思います。

実験回路

ループすると結果がわかりにくいので、まずはループしない回路にしています。PIN3からの入力をPIN20に出力するだけの回路ですね。前回はPIN20側はなにも接続していなかったのですが、1MΩの内蔵プルダウン設定になっていました。今回はピンはフローティング(内蔵抵抗未接続)にしています。プルダウンは通常10kΩぐらいを使うことが多いので、安全値として20kΩをつけた場合の遅延が発生しても大丈夫な回路を最終的な目標とします。

結果の拡大です。一番上が抵抗の外側の電源部分、真ん中がPIN3で、下がPIN20になります。

PIN3(20kΩ)を見ると約1.2usぐらい電圧が落ちるのに時間かかっていますね。PIN20(10kΩ)だと0.3usぐらいです。そしてPIN2とPIN20の信号が変化するタイミングを見てみると0.55us内部で遅延していることがわかります。

バッファを入れてみる

間にバッファを入れて見ます。これでどれだけ信号が遅延するか確認します。

気持ち減っていますが0.55usが0.56usぐらいでほぼ変わりませんね。前回のバッファを間にいれるは効果があったように見えますが、信号がバタついていたようにちゃんとした対策ではなかったようです。

DLYを入れてみる

まずは遅延といえばDLYですので、初期設定のまま入れてみたいと思います。

0.5usの遅延から2.5usの遅延に伸びました。2usの遅延が追加されていますね。ちょっと遅延しすぎでしょうか。半分ぐらいに調整してみたいと思います。

プロパティを確認したところ、遅くするのはいろいろパラメータがありますが、早くするのはクロック源をOSC1からもっと早いOSC2にするのが良さそうですね。

変更してみました。上の方にあるDelay timeが976.563nsから80nsに減っていますね。ちょっと減りすぎなのでCounter dataを変更して調整してみます。

Counter dataを11にすると半分ぐらいの480usになりました。

1.2usぐらいの遅延になりました。しかしちょっと信号が0Vになる前に変化していますね。Counter dataを12にしたほうがいいかもですね。

双方向回路にしてみた

DLYはCounter dataを12にしてOSC2に接続しています。

立ち下がりです。あれ、、、まだ実は遅延が足りないかもしれませんね。まあこれぐらいのクロスであれば問題ないはずです。

立ち上がりです。こちらもこんなもんですね。

プルダウンを1Mにしてみた

HIGHから中間の1.65Vに落ちるのに5usかかっています。0Vには甘く見て25usぐらいかかっていますね。DLYはOSC1に接続してCounter dataを4(2.44us)で内部遅延0.55us+2.44×2=5.43usとギリギリの設定です。

周波数を確認する

周波数smsus
100,000Hz0.000010.0110
400,000Hz0.00000250.00252.5

とりあえずI2Cの標準周波数である100kHzと400kHzで計算してみます。100kHzの場合1サイクルが10usです。5usのHIGHと5usのLOWで1クロックですね。

プルダウン抵抗値3.3Vから0Vまでの時間
10KΩ0.3us
20KΩ1.2us
1MΩ25us

上記が今回かんたんに計測した遅延時間です。1MΩだとそもそも100kHzで動きませんね。20kΩでもちょっと遅いですね。

秋月さんで適当なI2Cのデータシートを見てみましょう。

100kHzは10kΩでいいけれど、400kHzは2kΩを推奨していますね。高速動作させるためには小さいプルアップ抵抗にする必要があるようです。

あれ、実験用に10kΩのプルアップ用ジャンパキャップ作りましたが、2kΩも準備したほうがいいのか、、、

知識では知っていましたが、実際の回路との関連付けが難しいですね。

まとめ

20kΩのプルダウンだと信号がLOWに落ちるのに3.3Vの場合1.5usかかります。内部遅延が0.5usぐらいあるので1usぐらいの遅延を内部で発生させないとダメそうです。

また、GreenPAKはデフォルトで入力時は1Mのプルダウンに接続されているので、設定により必要な遅延時間も変わると思います。安全率をどれぐらい入れるのかもまた難しいところです。今回は考慮していませんが、配線の静電容量とかも実際には関係してきそうです。

この辺は実際の回路設計をしている人からすると当たり前なのでしょうが、ソフトウエアメインで勉強をしていると意識することがないと思います。この辺を勉強するにはどんな本が適しているのだろう?

コメント