隠居エンジニアのものづくり

自転車 電子工作 ラジコン ロボカップジュニア CAD レーザー加工機

I2Cのノイズ対策 その6(オシロスコープを用いた静電容量推定)

はじめに

界隈ではオシロスコープで波形観測できる環境が整っている様なので、静電容量を推定して、Rpを決定する方法について解説します。

これにより、より正確なRp選定ができます。
その5にて”I2Cバスに繋げる配線のトータルの長さを測り、配線長300mm当たり100pFと想定してバスの負荷容量を計算する。”と値はオーバー目の”見なし”となっていますのでオシロスコープを使える方は、この記事を参考にして下さい。

ファースト・モード:ビット・レート400kbit/s( 最大 ) にて設計計算を行います。

I2Cの波形は矩形波にはなりません

I2Cバスの静電容量を5Vに充電するのはRp、0Vに放電するのはマイコンやセンサ内のFETオン抵抗ですので、桁違いです。

当然立ち上がりと立下りの波形は全く異なりますので、矩形にはなりません。
どちらかと言えば”のこぎり”に近い波形です。

以下の様に仕様書でも立ち上がりが遅い事は明示されています。

f:id:Blackbox_crusher:20211015150756j:plain

信号波形 ( I2Cバス仕様書 Ver2.1  2000年1月版より抜粋 )


矩形波に近づける事に執着してプルアップ側を強化すると、”Low Level”のマージンが無くなって通信障害を起こします。

静電容量推定方法

Rpの値が既知であることが前提になっています。

ここではRp=1kΩにします。

300mmの配線にセンサを付けて、オシロスコープにて立ち上がり波形を観測します。

時定数を測定しますので、トリガ電圧は3.16V( 1τ )に設定しました(Lowレベルのオフセットの影響は少ないので無視していますが、気になる方はオフセット分足したトリガ電圧を設定して下さい)。

立ち上がり-トリガの時間を測定します。

f:id:Blackbox_crusher:20211015104332j:plain

時定数測定

測定結果は73.40nsとなりました。

以下の式で静電容量が算出できます。

時定数 ÷ Rp = 静電容量

73.4×10^-9(秒) ÷ 1×10^3(Ω) = 73.4×10^-12(F)

静電容量は73.4pFです。

f:id:Blackbox_crusher:20211015125944j:plain

I2C × 2 イネーブル付I2C ×3 Atmega328マイコンボード

このマイコンボードを測定に使ってます。I2Cセンサを5個接続可能ですので、写真の300mmの配線を追加で接続します。

f:id:Blackbox_crusher:20211015130428j:plain

300mm配線追加

300mmの配線追加で静電容量は95pF( 時定数95.00nsより )になりました。

差分より追加した300mm配線の静電容量が21.6pとなります。

300mm配線無しで基板のみの場合、計算上51.8pFとなりますが、実はSDS1104添付のプローブの静電容量30pFが含まれますので、実態は21.8pFです。

( SDS1104についてはこちら ↓ を参照下さい )

〇 300mm配線の静電容量 = 21.6pF

〇 基板の静電容量 = 21.8pF

〇 I2Cバスの静電容量は43.4pF

となります。

後述の設計計算に、この値を用います。

 

pFを問題にする場合のプローブの使い方

プローブとI2Cバスの間に配線を繋ぐと静電容量が増えますので注意が必要です。

グランドリードも静電容量を不定にする要因です。

pFオーダーの測定を行う場合はグランドリードを外して、スプリンググランドを使用します。

f:id:Blackbox_crusher:20211015145520j:plain

スプリンググランドを用いた波形観測

設計計算

設計計算を行う為に必要なものは以下の4点です。

〇 安全率(I2Cバス仕様にはありません! VIL = 1.5Vに対して0.375Vを安全率4倍と定義)

〇 I2Cバスの電源電圧

〇 センサやマイコンのLow側へのドライブ能力

〇 I2Cバスの静電容量

安全率はマージンをどの程度に設定するか?ですので、自分が納得できる値を決めれば良いのですが、ここでは4倍(1倍はマージン無しなのでNGです)とします。

電源電圧は5Vとします。

ドライブ能力は4mAとします(ご使用のセンサやマイコンのデータシートで調べて下さい)。

I2Cバスの静電容量は前出の測定・計算結果 43.4pFを用います。

 

プルアップされた信号線をGNDに引っ張ることでLowにする方式ですので"Low Level"が守られている事が重要となります。
各接続デバイスのノイズ・マージン(ヒステリシスを含む)はHigh側0.2VDD、Low側0.1VDD ( I2Cバス仕様Ver2.1より引用 ) とLow側が厳しいことが分かります。
VIL(Low level Input Voltage) = 0.3×VDD
ですのでVDD = 5.0Vの場合1.5Vです。

各デバイスは1.5V以下ならLowと判断してくれます。

安全率4より、1.5V ÷ 4 = 0.375V をLowレベルに設定します。

ドライブ能力4mAにて0.375VとなるRpは

Rp =( 5V - 0.375V ) ÷ 4mA = 1156.25Ω

E24系列で選択するとRp = 1.2kΩとなります。

 

VIH(High level Input Voltage) = 0.7×VDD
ですのでVcc = 5.0Vの場合3.5Vです。
これを守るにはI2Cバスの静電容量とRp( プルアップ抵抗 )からなる時定数による”立ち上がりのなまり”に注意が必要です。

このなまり具合は、S D AおよびS C L信号の立ち上がり時間300ns以内と仕様にありますので、安全率4倍より300ns ÷ 4 = 75ns とします。

75ns以内に3.5Vを超えると言う意味ですが、Lowレベルが完全に0Vにならず、少しオフセットしている事と計算が楽なので3.16V( 1τ )に丸めを行います。

この丸めにより時定数を算出すると、そのまま立ち上がり時間になります。

Rp = 1.2kΩ・I2Cバスの静電容量 = 52.08pFより

1.2×10^3(Ω) × 52.08×10^-12(F) =   52.08(ns)

と75nsに対して余裕があります。

RpはI2Cバス全体のプルアップ抵抗ですので、複数センサを繋げる時は合成抵抗になりますので注意が必要です。

 

出典: I2Cバス仕様書 Ver2.1 2000年1月版