プルアップ/プルダウン抵抗 計算ツール

電源電圧・ICしきい値・シンク電流・バス容量を入力するだけで、プルアップ抵抗の許容範囲とE24推奨値を即座に算出。I2C/SPI/GPIO各モード対応。

電源電圧・ICしきい値・シンク電流・バス容量を入力するだけで、プルアップ抵抗の許容範囲とE24推奨値を即座に算出。I2C/SPI/GPIO各モード対応。

回路設定

I2Cはオープンドレインのためプルアップ固定

電圧・電流パラメータ

プリセットを選ぶとVCC/VIH/VIL/IOLが自動入力される

ICがHighと認識する最低電圧

ICがLowと認識する最高電圧

I2Cバス設定

配線+IC入力容量の合計。不明なら100pFで概算

Standard (100kHz): 最大立ち上がり時間 1000 ns / 最大バス容量 400 pF

計算結果

総合判定

966.7 Ω 〜 11.80 kΩ

適正

推奨値で安全に動作します

最小抵抗値 (Rmin)
966.7 Ω

(VCC - VOL) / IOL = (3.3 - 0.4) / 3mA

最大抵抗値 (Rmax)
11.80 kΩ

tr_max / (0.8473 × Cb) = 1000ns / (0.8473 × 100pF)

推奨値 (E24)
3.30 kΩ
立ち上がり時間
280 ns

規格上限: 1000 ns

静的消費電流
1.000 mA

VCC / Rp = 3.3V / 3.30 kΩ

範囲内のE24候補 (26個)

1.00 kΩ1.10 kΩ1.20 kΩ1.30 kΩ1.50 kΩ1.60 kΩ1.80 kΩ2.00 kΩ2.20 kΩ2.40 kΩ2.70 kΩ3.00 kΩ3.30 kΩ3.60 kΩ3.90 kΩ4.30 kΩ4.70 kΩ5.10 kΩ5.60 kΩ6.20 kΩ6.80 kΩ7.50 kΩ8.20 kΩ9.10 kΩ10.00 kΩ11.00 kΩ

本ツールはI2C仕様書(NXP UM10204)および一般的なCMOS/TTLロジックの電気特性に基づく概算です。実設計ではICのデータシートを必ず確認し、実機での動作検証を行ってください。

不具合・ご要望はお気軽に@MahiroMemoまで

PR

📘 電子回路設計の参考書籍・パーツ

I2Cセンサがたまに応答しない——その犯人、プルアップ抵抗かも

ArduinoやラズパイにI2Cセンサをつないで、最初はうまく動いていたのに、配線を伸ばしたら突然データが化ける。ブレッドボードでは動くのに、ユニバーサル基板にハンダ付けしたらNACKが返ってくる。こういう経験、電子工作をやっていると一度はあるよね。

原因の多くは「プルアップ抵抗の値が合っていない」こと。このツールは、電源電圧・ICのしきい値・バス容量を入力するだけで、抵抗値の許容範囲とE24系列の推奨値を一発で算出する。I2C・SPI・GPIO汎用の3モードに対応しているから、プルアップが必要なあらゆる場面で使える。

なぜプルアップ抵抗計算ツールを作ったのか

開発のきっかけ

I2Cで温湿度センサ(SHT31)を5台バス接続するプロジェクトで、4.7kΩのプルアップ抵抗を付けたのに通信が不安定になった。原因を調べると、センサ5台分の入力容量とケーブル容量が合計300pFを超えており、立ち上がり時間がFastモードの規格ギリギリだった。

データシートのVIH/VOL表を見ても「結局何kΩにすればいいのか」がパッとわからない。NXPのI2C仕様書(UM10204)にはRmin/Rmaxの計算式が載っているが、毎回手計算するのは面倒だし、SPI/GPIOでは別の考え方が必要になる。

こだわった設計判断

E24系列の自動選定: 抵抗範囲を計算しても、実際に買える値(E24系列)を選ばないと意味がない。範囲内のE24値をすべてリストアップし、幾何平均に最も近い値を推奨する設計にした。

I2Cスピードモード対応: Standard/Fast/Fast+/High-speedの4モードで立ち上がり時間の規格値が異なる。モードを切り替えるだけでRmaxが自動更新されるので、「Fastモードに変えたら抵抗値も変えなきゃ」という見落としを防げる。

プリセット+カスタム入力: 3.3V CMOS/5V CMOS/5V TTL/1.8V CMOSの4プリセットをワンタップで切り替えられるが、ICのデータシートで正確な値がわかればカスタム入力も可能。

プルアップ抵抗とは何か——オープンドレインの仕組みから理解する

オープンドレイン出力とプルアップ抵抗の関係

プルアップ抵抗を理解するには、まず「オープンドレイン(オープンコレクタ)」という出力方式を知る必要がある。

通常のデジタル出力(プッシュプル)は、IC内部にHighを出すトランジスタとLowを出すトランジスタの両方がある。スイッチを上に倒せば電源につながり、下に倒せばGNDにつながるイメージだ。

一方、オープンドレイン出力にはLow側のトランジスタしかない。つまり「GNDに引っ張ることはできるが、電源に押し上げる力がない」。水道でたとえるなら、排水バルブはあるけど給水ポンプがない状態。水(電圧)を補うために、外部から蛇口(抵抗)を通じて水道管(電源)につなぐ——これがプルアップ抵抗の役割だ。

I2Cバスがオープンドレインを採用しているのは、複数のデバイスが同じ信号線を共有するため。どのデバイスもLowに引っ張ることができ、誰も引っ張らなければプルアップ抵抗がHighに戻す。この仕組みのおかげで、ワイヤードAND(論理積)が自然に実現される。

プルアップ抵抗 計算の基本式

プルアップ抵抗値Rpの許容範囲は、2つの条件から決まる:

Rmin = (VCC - VOL) / IOL
Rmax = tr_max / (0.8473 × Cb)   ← I2Cの場合
  • Rmin(最小値): Low出力時にVOL以下を保証するための下限。抵抗が小さすぎるとシンク電流が過大になり、ICが壊れる可能性がある
  • Rmax(最大値): バス容量Cbを充電してHigh電圧まで立ち上がるのに十分な時間を確保するための上限。抵抗が大きすぎると信号の立ち上がりが遅くなり、通信エラーが発生する

定数0.8473はRC回路で電圧が0.3VCC(VILの目安)から0.7VCC(VIHの目安)まで変化する時間の係数で、-ln(0.3/0.7)から導出される。

参考: NXP I2C-bus specification (UM10204)

プルダウン抵抗との違い

プルダウン抵抗は信号線をGNDに引っ張る抵抗。SPIのCS(チップセレクト)線やGPIO入力のデフォルト状態をLowにしたい場合に使う。計算の考え方はプルアップと対称的で、High/Lowの条件が入れ替わる。

なぜプルアップ抵抗値が重要なのか——小さすぎても大きすぎてもダメ

抵抗値が小さすぎる場合の問題

プルアップ抵抗が小さすぎると、ICがLowを出力しているときに流れるシンク電流が大きくなる。たとえば3.3V電源で470Ωのプルアップを付けると、Low出力時に約7mAの電流が流れる。一般的なCMOS ICのIOL定格は3mA程度なので、ICの絶対最大定格を超える危険性がある。

最悪の場合、ICの出力トランジスタが熱破壊を起こす。そこまでいかなくても、VOLが規定値(I2Cでは0.4V)を超えてしまい、受信側がLowと認識できなくなる。

抵抗値が大きすぎる場合の問題

抵抗が大きいと、信号線の寄生容量を充電するのに時間がかかり、立ち上がり波形が鈍る。I2C Fastモード(400kHz)では立ち上がり時間の規格上限が300ns。バス容量200pFで10kΩのプルアップだと、立ち上がり時間は約1694nsとなり、規格を大幅に超過する。

結果として、クロックやデータの波形がなまり、受信側のサンプリングタイミングでHigh/Lowが確定せず、通信エラーやデータ化けが発生する。

消費電流とのトレードオフ

バッテリー駆動の機器では、プルアップ抵抗を通じた静的消費電流も無視できない。3.3V/4.7kΩのプルアップは約0.7mAの定常電流を消費する。I2Cバスが2本(SDA/SCL)あれば合計1.4mA。コイン電池(CR2032、容量約220mAh)なら、プルアップだけで約6.5日で電池切れになる計算だ。

参考: I2C-bus specification Rev.7 — NXP Semiconductors

プルアップ抵抗計算が活躍する場面

Arduino/ラズパイのI2Cセンサ接続

BME280やMPU-6050などのI2Cセンサをブレッドボードに挿して「とりあえず4.7kΩ」——これはStandardモードなら大体うまくいく。だが、Fastモードに切り替えたり、センサを3台以上バス接続したりすると途端に不安定になる。バス容量を概算して適切な抵抗値を求めるのが安全だ。

SPI通信のCS線プルアップ

SPIのチップセレクト(CS)は通常Active Low。マイコンの起動直後、GPIOが初期化されるまでの間にCSがフローティングになると、意図しないデバイスが応答してバスが衝突する。CS線に10kΩ程度のプルアップを入れるのが定石だが、高速SPIでは立ち上がり時間も考慮が必要になる。

GPIO入力のチャタリング対策

タクトスイッチやロータリーエンコーダの入力にプルアップ/プルダウン抵抗を付けるのは基本中の基本。マイコン内蔵のプルアップ(20〜50kΩ程度)では弱すぎてノイズを拾う場合、外付けで1〜10kΩの抵抗を追加する。

基本の使い方

3ステップでプルアップ抵抗の推奨値が求まる。

Step 1: 回路モードを選ぶ

I2C・SPI・GPIO汎用から使用する回路を選択。I2Cを選ぶとバス容量やスピードモードの入力欄が追加表示される。

Step 2: 電圧・電流パラメータを入力する

プリセット(3.3V CMOS、5V TTLなど)を選べばVCC/VIH/VIL/IOLが自動入力される。ICのデータシートに正確な値が載っていれば、カスタムで個別に入力してみて。

Step 3: 結果を確認する

許容範囲(Rmin〜Rmax)、E24推奨値、立ち上がり時間、静的消費電流が一覧表示される。範囲内のE24候補が複数ある場合はすべてリストアップされるので、手持ちの抵抗から選ぶこともできる。

具体的な使用例(検証データ)

ケース1: 3.3V I2C Standardモード(基本的な構成)

Arduino UnoとBME280センサ1台をI2C接続する典型例。

入力値:

  • 回路モード: I2C / プリセット: 3.3V CMOS
  • VCC: 3.3V / VIH: 2.0V / VIL: 0.8V / IOL: 3mA
  • I2Cスピード: Standard (100kHz) / バス容量: 50pF

計算結果:

  • Rmin: 967 Ω / Rmax: 23.6 kΩ
  • 推奨値 (E24): 4.7 kΩ
  • 立ち上がり時間: 199 ns(規格上限1000ns)

解釈: 定番の4.7kΩで問題ない。範囲が広いのでStandardモードは余裕がある。

ケース2: 5V TTL I2C Fastモード

5Vの旧世代ICでFastモード通信を行うケース。

入力値:

  • 回路モード: I2C / プリセット: 5V TTL
  • VCC: 5.0V / VIH: 2.0V / VIL: 0.8V / IOL: 8mA
  • I2Cスピード: Fast (400kHz) / バス容量: 200pF

計算結果:

  • Rmin: 575 Ω / Rmax: 1.77 kΩ
  • 推奨値 (E24): 1.0 kΩ
  • 立ち上がり時間: 169 ns(規格上限300ns)

解釈: IOLが8mAと大きいのでRminが低い。Fastモード+大容量バスでRmaxが絞られる。1kΩが妥当。

ケース3: 1.8V低電圧I2C

最新の低電圧ICでの構成。

入力値:

  • 回路モード: I2C / プリセット: 1.8V CMOS
  • VCC: 1.8V / VIH: 1.17V / VIL: 0.63V / IOL: 2mA
  • I2Cスピード: Standard (100kHz) / バス容量: 80pF

計算結果:

  • Rmin: 700 Ω / Rmax: 14.8 kΩ
  • 推奨値 (E24): 3.3 kΩ
  • 立ち上がり時間: 224 ns(規格上限1000ns)

解釈: 低電圧でもStandardモードなら選択肢は多い。ただし静的電流が0.55mAとバッテリー駆動では気になる値。

ケース4: I2C Fast+モード(大容量バス)

複数センサをバス接続する産業用途。

入力値:

  • 回路モード: I2C / プリセット: 3.3V CMOS
  • VCC: 3.3V / VIH: 2.0V / VIL: 0.8V / IOL: 3mA
  • I2Cスピード: Fast+ (1MHz) / バス容量: 400pF

計算結果:

  • Rmin: 967 Ω / Rmax: 354 Ω
  • 推奨値 (E24): 該当なし(範囲外)

解釈: Rmin > Rmaxで許容範囲が存在しない。バス容量400pFはFast+モードでは多すぎる。バッファICを入れるか、バスを分割する必要がある。

ケース5: SPI CS線プルアップ

SPIデバイスのCS線にプルアップを入れるケース。

入力値:

  • 回路モード: SPI / プリセット: 3.3V CMOS
  • VCC: 3.3V / VIH: 2.0V / VIL: 0.8V / IOL: 3mA

計算結果:

  • Rmin: 833 Ω / Rmax: 8.33 kΩ
  • 推奨値 (E24): 2.7 kΩ

解釈: CS線は通信速度に直接影響しないので、範囲内の中間値で十分。消費電流を抑えたければ大きめの値を選ぶ。

ケース6: GPIO入力プルダウン

タクトスイッチの入力にプルダウン抵抗を接続するケース。

入力値:

  • 回路モード: GPIO汎用 / プリセット: 5V CMOS
  • VCC: 5.0V / VIH: 3.5V / VIL: 1.5V / IOL: 3mA

計算結果:

  • Rmin: 1.17 kΩ / Rmax: 11.7 kΩ
  • 推奨値 (E24): 3.3 kΩ

解釈: スイッチ入力は速度が不要なので、範囲内の好きな値でよい。ノイズ環境が厳しければ小さめ(1.5kΩ〜2.2kΩ)を選ぶ。

仕組み・アルゴリズム

採用した計算方式: I2C仕様準拠 vs 簡易経験則

プルアップ抵抗の計算には大きく2つのアプローチがある:

方式1: I2C仕様書準拠(本ツールのI2Cモード) NXP UM10204に記載された電気特性から厳密にRmin/Rmaxを算出する。バス容量と立ち上がり時間の制約を正確に反映できるが、パラメータ(Cb, IOL, VOL等)を正しく入力する必要がある。

方式2: 経験則ベース(「とりあえず4.7kΩ」) 多くのアプリケーションノートや入門書で紹介される方法。3.3V/5VのI2C Standardモードなら4.7kΩ〜10kΩでたいてい動く。だが、Fastモード以上やバス容量が大きい場合には根拠のない値になる。

本ツールのSPI/GPIOモードでは方式1と方式2の中間——VIH/VIL保証からRminを求め、実用上限としてRmin×10をRmaxとする簡易方式を採用している。

計算フロー

1. 入力パラメータの検証
   - VCC > 0, IOL > 0, VIL < VIH < VCC

2. Rmin算出
   I2C:  Rmin = (VCC - 0.4V) / IOL
   GPIO: Rmin = (VCC - VIL) / IOL

3. Rmax算出
   I2C:  Rmax = tr_max / (0.8473 × Cb)
   GPIO: Rmax = Rmin × 10

4. E24系列から推奨値を選定
   - 範囲内のE24値をすべて列挙
   - 幾何平均 √(Rmin × Rmax) に最も近い値を推奨

5. 付帯情報の算出
   - 立ち上がり時間: tr = 0.8473 × Rp × Cb
   - 静的消費電流: I = VCC / Rp

E24系列の丸めロジック

E24系列は1ディケード(10倍)あたり24個の値が等比級数的に配置されている。具体的には10^(n/24)の近似値で、1.0, 1.1, 1.2, ... 9.1の24値を10のべき乗倍して使う。

推奨値の選定では、単純な算術平均ではなく幾何平均(√(Rmin × Rmax))を中心に最も近いE24値を選ぶ。対数スケールで均等に分布する抵抗値に対して、対数スケールの中央を取るのが合理的だからだ。

参考: E系列 — Wikipedia

Excel計算やオンラインツールとの違い

入力の手軽さ

DigiKeyやTexas Instrumentsが提供するオンライン計算ツールは高機能だが、入力パラメータが多く、初心者には敷居が高い。本ツールはプリセット選択で主要パラメータが自動入力されるので、I2CやCMOSの基礎知識がなくてもすぐに使える。

結果の実用性

多くの計算ツールはRmin/Rmaxの数値を出すだけで、「で、何Ωの抵抗を買えばいいの?」に答えてくれない。本ツールはE24系列から即座に推奨値を選定し、範囲内の候補をすべてリストアップする。手持ちの抵抗から選ぶときにも便利。

マルチモード対応

I2C専用の計算ツールは多いが、SPI/GPIOのプルアップにも対応しているものは少ない。回路モードを切り替えるだけで計算式が自動的に切り替わるので、用途に応じた使い分けが簡単。

プルアップ抵抗にまつわる豆知識

E24系列の由来

抵抗値のE系列は国際電気標準会議(IEC)が定めた標準数列で、E24は許容差±5%の抵抗に対応する。隣り合う値の比率は約10^(1/24) ≈ 1.101で、±5%の誤差範囲で隣の値とちょうど重なるように設計されている。

E12(±10%)、E48(±2%)、E96(±1%)と精度が上がるほど値の数が増える。プルアップ抵抗は通常±5%で十分なので、E24で選ぶのが一般的。

参考: IEC 60063 — 抵抗器およびコンデンサの標準数列

なぜI2CのVOLは0.4V固定なのか

I2C仕様でVOL最大値が0.4Vに固定されているのは、TTLロジックとの互換性に由来する。1980年代にPhilips(現NXP)がI2Cを策定したとき、当時主流だったTTLのVIL(0.8V)に対して十分なノイズマージン(0.4V)を確保するために、VOL ≤ 0.4Vと規定した。この値は40年以上変わっていない。

プルアップ抵抗選定のTips

Tip 1: 迷ったら4.7kΩから始める

3.3V/5VのI2C Standardモードでバス容量が小さい(100pF以下)なら、4.7kΩはほぼ安全圏。まずこれで動作確認し、問題があれば計算で追い込む。

Tip 2: バス容量の見積もり方

ICの入力容量(データシートのCin、通常5〜15pF)× デバイス数 + 配線容量(1pF/cm目安)で概算できる。不明なら100pFで計算しておけば安全側。

Tip 3: I2Cの2本線は同じ抵抗値でよい

SDAとSCLは同じバス条件なので、通常は同じ抵抗値でOK。ただし、クロックストレッチを使うデバイスがある場合、SCLのプルアップをやや小さくすると安定することがある。

Tip 4: マイコン内蔵プルアップは補助的に使う

多くのマイコンにはGPIO内蔵のプルアップ(20〜50kΩ)があるが、I2C通信には弱すぎることが多い。外付け抵抗を基本とし、内蔵は使わないか補助程度に。

よくある質問

Q: プルアップ抵抗は1本でいい?SCLとSDAそれぞれに必要?

I2CではSCLとSDAの両方にプルアップ抵抗が必要。どちらもオープンドレインなので、それぞれに1本ずつ、合計2本を接続する。抵抗値は同じで問題ない。

Q: ブレークアウトボード(モジュール)に抵抗が載っている場合はどうする?

多くのI2Cブレークアウトボードには10kΩや4.7kΩのプルアップが実装済み。複数のモジュールを接続すると並列合成で抵抗値が下がりすぎることがある。モジュールが2枚なら4.7kΩ並列で2.35kΩ、3枚なら1.57kΩ。合成値がRmin以上であることを確認しよう。

Q: 3.3Vと5Vのデバイスを混在させる場合は?

電圧が異なるデバイスを直接I2C接続するのは危険。3.3Vデバイスの入力に5Vがかかると破損する。レベルシフター(BSS138ベースやPCA9306等)を使い、それぞれの電圧側に適切なプルアップを入れる。本ツールで各側の抵抗値を個別に計算するとよい。

Q: 計算結果はデータシートの値と一致する?

本ツールはI2C仕様書(NXP UM10204)の電気特性に基づく概算値を出力する。実際のICは仕様書の値と異なるIOLやVOLを持つことがあるため、精密な設計ではICのデータシートの値をカスタム入力して計算することを推奨する。

Q: プルアップ抵抗の消費電力は気にしなくてよい?

通常の信号線プルアップでは消費電力は微小(数mW以下)なので、1/8W〜1/4Wの一般的なチップ抵抗で十分。ただし、低抵抗(数百Ω)で高電圧の場合は P = V²/R で確認しておくと安心。

まとめ

プルアップ抵抗の値は「とりあえず4.7kΩ」で済むこともあるが、Fastモード以上やバス容量が大きい構成では計算による裏付けが不可欠。このツールなら、プリセット選択とパラメータ入力だけでRmin〜RmaxとE24推奨値が即座に求まる。

回路設計で抵抗値の選定に迷ったら、まずこのツールで安全な範囲を確認してみて。抵抗のカラーコードが読めない場合は抵抗カラーコード計算ツール、LED回路の抵抗計算にはLED回路設計ツールも試してみて。


不具合や要望があれば、X (@MahiroMemo)から気軽に教えて。

M

Mahiro

Mahiro Appの開発者。I2Cセンサを5台バス接続して通信エラーに悩まされた経験から、プルアップ抵抗の計算を自動化するツールを開発。

運営者情報を見る

© 2026 プルアップ/プルダウン抵抗 計算ツール