はじめに
前編(I2C・SPI・UART の違い)の UART の節で、こう書きました。UART は 1 対 1 で、TTL レベルのままなら数 m が限界。距離が欲しいなら RS-485 や RS-232 のトランシーバを挟む——。
前編で比べた 3 つは、どれも「同じ基板の上」か「机の上のモジュールまで」の規格です。ところが電子工作が少し大きくなると、線は基板の外へ出ていきます。
- 100 m 離れた小屋の電力計や温度調節器から、Modbus で値を読みたい
- モーターやインバータの横を通る配線で、何台ものノードに指令を出したい
- 天井裏や水槽の中に、温度センサを何個もぶら下げたい
この記事は、前編の弱点だった「距離」と「台数」を埋める回です。RS-485・CAN・1-Wire の 3 つを、前編と同じ土俵(線の本数・速度・台数・距離)に並べ、さらに 差動か・調停・エラー検出・電源の兼用 の 4 軸を足して比べます。読み終えたときに、「この配線距離とこの台数、このノイズ環境ならこれ」と自分で選べることがゴールです。
📝 この記事で学べること:
- RS-485・CAN・1-Wire の構造的な違い(差動とシングルエンド、誰が話す順番を決めるのか)
- RS-485 の終端・フェイルセーフ・方向切替と、その上で動く Modbus RTU のフレーム
- CAN のドミナント/リセッシブ、ID による非破壊調停、エラーカウンタ、CAN FD
- 1-Wire のリセット/プレゼンスとタイムスロット、DS18B20 の 64 bit ID
- LIN・RS-232 がどこに位置づくか
- オシロスコープで差動信号を見るときの設定(Math で CH1−CH2)
前編 で UART のフレーム(スタートビット・データ・ストップビット)と、I2C のオープンドレイン+プルアップを読んだ方を想定しています。この記事でも、RS-485 は「UART の信号を差動に変えたもの」、1-Wire は「I2C と同じオープンドレインを 1 本でやるもの」として説明します。
🔍 3つの規格をひと目で比較
まず前編と同じ 4 軸で並べます。数値は記事末尾の参考に挙げたデータシート・規格書・アプリケーションノートから取っています。一次資料に数値が無いものは「目安」と書いています。
| 項目 | RS-485 | CAN | 1-Wire |
|---|---|---|---|
| 信号線の本数 | A/B の 2 本(+GND) | CAN_H/CAN_L の 2 本(+GND) | データ 1 本+GND |
| 速度 | 100 kbps で約 1,200 m、短い線なら最大 10 Mbps | 最大 1 Mbps(CAN FD はデータ部をさらに速くできる) | 1 ビット 60〜120 µs のスロットで送るため、1 万数千 bps が上限(目安) |
| 接続台数 | 32 単位負荷(1/8 単位負荷の IC なら 256 台) | ISO 11898 の規定で 30 ノード(設計次第で増やせる) | 64 bit の固有 ID で呼び分け(データシートの表現は「事実上無制限」) |
| 配線距離 | 約 1,200 m(100 kbps 時) | 40 m(1 Mbps 時)、速度を下げれば延ばせる | 数 m 程度(目安) |
次に、前編には無かった 4 軸です。基板の外へ出る規格を選ぶときは、むしろこちらの差が効いてきます。
| 項目 | RS-485 | CAN | 1-Wire |
|---|---|---|---|
| 差動か | 差動 | 差動 | シングルエンド(GND 基準) |
| 調停(同時に話したら) | 規格には無い。マスタが順に呼ぶなど上位で決める | ID によるビット単位の非破壊調停 | マスタ 1 台がすべてのタイミングを作る |
| エラー検出 | 物理層には無い(Modbus RTU なら CRC-16) | CRC-15・ACK・スタッフ検査・エラーカウンタ | CRC8(ROM コードとスクラッチパッド) |
| 電源の兼用 | しない | しない | パラサイトパワーで信号線から給電できる |
最後に、それぞれが「どこで、なぜ」使われているかを並べます。詳しい理由は各規格の節の冒頭に書いています。
| 規格 | 生まれた背景 | 効く性質 | 典型的な用途 |
|---|---|---|---|
| RS-485 | 1983 年に EIA が承認した差動の電気規格 | 差動・1 対多・長距離 | 電力計、インバータ、空調などの Modbus 機器 |
| CAN | 1983 年に Bosch が車載用に開発を開始 | 中央の調停役なし・優先度・故障ノードの自動離脱 | 車の ECU、産業機器(CANopen)、ドローン |
| 1-Wire | ピン 1 本で多数のデバイスをつなぐバス | 固有 ID・信号線からの給電 | 建物や装置の中の温度監視 |
3行でまとめると
- 遠くの機器と 1 対多でやり取りしたい・相手が Modbus 機器 → RS-485
- ノイズの多い場所で、どのノードも自分から送りたい・車載機器 → CAN
- センサを 1 本の線にたくさんぶら下げたい・速度は要らない → 1-Wire
📡 RS-485 ― 2 本の差で 1 km 先まで届ける
RS-485(正式には TIA/EIA-485)は、電気的な信号の形だけを決めた規格です。どんなデータを、どんな順番で送るかは決めていません。マイコンから見ると、UART の TX/RX を、トランシーバ IC で差動信号に変換したもの と考えるのが一番分かりやすい捉え方です。
なぜ工場やビルの機器は RS-485 なのか
TI の RS-485 設計ガイドは、RS-485 を 1983 年に EIA が承認した平衡(差動)伝送の規格と紹介し、産業・医療・民生の各分野で広く使われているとしています。規格の特徴として挙げているのは、5 V 単電源で動くマルチポイント(1 本のバスに送信機も受信機も複数)、32 単位負荷、100 kbps で 4,000 ft(約 1,200 m)です。工場の床やビルのフロアに散らばった機器を、より線 1 組で数珠つなぎにできる、という条件がそろっています。
もう一つの事情は、RS-485 が電気の形しか決めていないことです。設計ガイドは、RS-485 は上位の規格から参照されることを想定している、と書き、その例として中国の電力量計の通信規格 DL/T645 が物理層に RS-485 を指定していることを挙げています。この記事で使うトランシーバ THVD1500 のデータシートも、用途の筆頭に電力量計・インバータ・空調システムを並べています。
現場の使い方も半二重に合っています。計測器や電力計を集めるシステムでは、親機(PLC や監視装置)が子機を 1 台ずつ呼んで値を読むのが普通で、同時に 2 台が話す必要がありません。だから線は 1 組で足り、交通整理は後述の Modbus RTU の「マスタが順に呼ぶ」決まりに任せられます。メーカーが違う計器でも、どちらも Modbus RTU を話すなら、同じ線に並べて同じ手順で読めます。
| 現場の事情 | RS-485 のどの性質で応えるか | 詳しくは |
|---|---|---|
| 機器が数百 m の範囲に散らばっている | 差動伝送で 100 kbps なら約 1,200 m | 差動だと、なぜ遠くまで届くのか |
| 1 本の線に何十台もつなぎたい | 32 単位負荷(1/8 UL 品なら 256 台) | 何台つなげて、何 m 延ばせるか |
| 親機が子機を順に読めば足りる | 半二重 1 組+DE で方向を切り替える | 半二重と方向切替(DE/RE) |
| メーカーの違う機器を混ぜたい | 上位の規格(Modbus RTU など)に物理層として使われる | Modbus RTU |
裏返すと、子機が自分から話し始めたい用途は RS-485 の苦手分野です。規格に調停の仕組みが無いので、それが必要なら次の CAN の出番になります。
差動だと、なぜ遠くまで届くのか
UART(TTL レベル)は、GND を基準にした 1 本の線の電圧で 0 と 1 を表します。線が長くなると、途中で拾ったノイズがそのまま信号の電圧に乗り、受信側は 0 と 1 を取り違えます。
RS-485 は、A と B の 2 本に 逆向きの信号 を流し、受信側は 2 本の電圧の差(A−B) だけを見ます。外から飛び込んだノイズは、より合わせた 2 本の線に同じように乗るので、差を取ると打ち消されます。これが差動伝送です。
模式図:差動伝送でノイズが打ち消される様子。赤枠の中で A と B は同じ形に持ち上がっているが、受信側が見る A−B(緑枠)は元の形のまま
数字で見ると余裕の大きさが分かります。TI の RS-485 設計ガイドによれば、規格に沿ったドライバは 54 Ω の負荷に対して最低 1.5 V の差動電圧を出し、レシーバは 200 mV の差があれば読み取れます。7 倍以上の余裕があるので、長い線で信号が弱ったりノイズが乗ったりしても読み取れる、というわけです。A と B と A−B がどう動くかは、後の「波形で理解する」で図にしています。
半二重と方向切替(DE/RE)
RS-485 で一番よく使われるのは、A/B の 1 組だけで送受信する 半二重 の配線です。1 組の線を全員で共有するので、同時に送信してよいのは 1 台だけ です。2 台が同時にドライバを動かすと衝突(バス競合)が起き、データが壊れます。誰がいつ送るかは、ソフトウェアで決める必要があります。
そのため RS-485 トランシーバ IC には、送信と受信を切り替えるピンがあります。TI の THVD1500 を例に取ると次のとおりです。
| ピン | 役割 | マイコン側の接続 |
|---|---|---|
| DI(D) | 送信データの入力 | UART の TX |
| RO(R) | 受信データの出力 | UART の RX |
| DE | H でドライバ有効(送信)、L で A/B を手放す | GPIO(送信中だけ H) |
| RE(反転) | L でレシーバ有効 | 多くは DE とつないで 1 本の GPIO で切り替える |
送信するときは DE を H にしてから UART で送り、最後のストップビットが出きってから DE を L に戻します。
早く戻しすぎると最後の 1 バイトの後ろが切れる、というのが RS-485 で一番多いつまずきです。Arduino なら Serial.flush() で送信が終わるのを待ってから DE を戻すのが基本ですが、flush() がどこまで待つかはボードのコアによって違います。
最後のストップビットまで線に出ているかは、後述の波形で確かめるのが確実です。
何台つなげて、何 m 延ばせるか
RS-485 の台数は「単位負荷(Unit Load, UL)」で数えます。1 UL はおよそ 12 kΩ の負荷に相当し、規格に沿ったドライバは 32 UL を駆動できる必要があります。最近のトランシーバは 1/8 UL のものが多く、その場合は 32 ÷ 1/8 = 256 台までつなげます(THVD1500 のデータシートも「1/8 単位負荷品で最大 256 ノード」)。
ただし、後述のフェイルセーフ用バイアス抵抗を入れると、それ自体が最大 20 UL ぶんの負荷になります。TI の設計ガイドの計算では、1/8 UL 品でバイアスありの場合の上限は 96 台です。
距離と速度はトレードオフです。設計ガイドが挙げる代表値は 100 kbps で 4,000 ft(約 1,200 m)、10 Mbps なら 40 ft(約 12 m) です。TI の別のアプリケーションノートには、次のような目安も載っています。
\text{速度 [bps]} \times \text{ケーブル長 [m]} \le 10^{8}500 m なら 200 kbps、1,000 m なら 100 kbps が上限の目安です。
終端抵抗とフェイルセーフ
模式図:RS-485 の半二重バス。各ノードは UART とトランシーバの組で、短いスタブで幹線(A/B のより線と GND)にぶら下がる。終端 120 Ω は幹線の両端だけ、バイアス抵抗(A→VCC・B→GND)はバス全体で 1 か所だけ
図で見てほしいのは抵抗の数と場所です。赤の終端は両端に 2 本、緑のバイアスは 1 か所で、途中のノードには入りません。
長い線の端で信号が反射しないように、バスの両端に 1 本ずつ 終端抵抗を入れます。RS-485 用のツイストペアケーブルは特性インピーダンスが 120 Ω のものが一般的なので、終端も 120 Ω です。途中のノードには入れません。また、幹線から各ノードへ分岐する線(スタブ)は短くします。
終端を入れると、もう一つ問題が出ます。誰も送信していないとき、A と B は 120 Ω でつながって同じ電位になる ので、差が 0 V になります。レシーバは ±200 mV の間を判定できないため、出力が不定になり、ノイズを拾ってゴミのバイトを受信します。
これを防ぐのが フェイルセーフ です。2 つのやり方があります。
- トランシーバ内蔵のフェイルセーフ:THVD1500 などは、バスが開放・短絡・アイドル(終端済みで誰も駆動していない)のどれでも、受信出力を H(=UART のアイドルと同じ)に固定します
- 外付けのバイアス抵抗:A を電源へ、B を GND へ抵抗で引いて、アイドル中も A−B を +200 mV より上に保ちます。TI の設計ガイドの例(5 V 電源・ノイズ余裕込みで 250 mV)では 523 Ω を 2 本使います。バイアス抵抗は バス全体で 1 か所だけ に入れます
GND は要る
「差動だから GND は不要」と書かれた配線図をよく見かけますが、TI のアプリケーションノートは、別に GND 線を引かない構成図でも 確実な GND 接続は物理的に必要 だと書いています。
理由はコモンモード電圧です。レシーバが正しく読めるのは、A・B それぞれの電圧が −7 V〜+12 V の範囲に入っている間だけです。離れた 2 台の GND の電位が数 V ずれていると、この範囲から外れます。
GND の扱い方はいくつかあります。Modbus の仕様書は、信号の GND(Common)をバス全体で 1 点だけ保護接地へつなぐよう求めています。TI の設計ガイドは、建物をまたぐような長い配線では、トランシーバを絶縁してグラウンドループそのものを断つ方法を勧めています。
Modbus RTU ― RS-485 の上で話す「言葉」
RS-485 が決めているのは電気の形だけです。工場の計測器、電力計、温度調節器、インバータなどで、その上の「言葉」として最もよく使われているのが Modbus RTU です。
Modbus はマスタ/スレーブ型です(仕様書の用語)。マスタだけが要求を出し、指名されたスレーブだけが応答します。RS-485 の半二重で衝突が起きないのは、この「マスタが順に呼ぶ」決まりがあるからです。
| 項目 | 内容 |
|---|---|
| スレーブアドレス | 1〜247(0 は全員宛てのブロードキャスト。応答は返らない) |
| 1 フレーム | アドレス 1 バイト → ファンクションコード 1 バイト → データ N バイト → CRC 2 バイト(最大 256 バイト) |
| 1 文字 | 11 ビット。既定は 8 データビット・偶数パリティ・ストップ 1(パリティなしならストップ 2) |
| フレームの区切り | 3.5 文字ぶん以上の無通信 |
| 文字の間 | 1.5 文字ぶんを超えて空いたら、そのフレームは不完全として捨てる |
| 誤り検出 | CRC-16(下位バイトを先に送る) |
たとえば、アドレス 1 のスレーブに「保持レジスタ 0 番から 2 個読んで」と頼むフレームは、次の 8 バイトです。
01 03 00 00 00 02 C4 0B
│ │ └─┬─┘ └─┬─┘ └─┬─┘
│ │ │ │ CRC-16(下位 C4 → 上位 0B の順)
│ │ │ 読む個数 = 2
│ │ 開始アドレス = 0x0000
│ ファンクションコード 03(保持レジスタの読み出し)
スレーブアドレス = 1
Modbus RTU にはスタートやエンドを示す特別な文字がありません。時間の空白でフレームを区切る のが最大の特徴です。9,600 bps・1 文字 11 ビットなら、1 文字の時間と 3.5 文字ぶんの空白は次のようになります。
T_{char} = \frac{11}{9600} \approx 1.15\ \text{ms}, \qquad 3.5\,T_{char} \approx 4.0\ \text{ms}19,200 bps を超える速度では、文字の間の制限を 750 µs、フレームの区切りを 1.75 ms の固定値にするよう仕様書が推奨しています。
Modbus の仕様書(MODBUS over Serial Line V1.02)には、RS-485 の配線についての具体的な数値もあります。
- リピータなしで 32 台までは常に接続してよい
- 9,600 bps 以下・AWG26 以上の太さなら、幹線は最大 1,000 m。分岐線は 20 m 以下
- 終端は幹線の両端に 1 本ずつ。150 Ω(0.5 W)か、1 nF と 120 Ω の直列
- バイアス(仕様書では Polarization)は 450〜650 Ω を、バス全体で 1 か所だけ
信号線の名前は D0/D1 で、D1 が D0 より高いときが 1 と定義されています。
対比:RS-232 ― 1 対 1 で、正負の電圧を使う
前編で RS-485 と並べて名前を出した RS-232(TIA/EIA-232)は、パソコンの COM ポートや古い計測器でおなじみの規格です。RS-485 と同じく「UART の信号をトランシーバで変換して距離を延ばす」仲間ですが、方式はまったく違います。
| 項目 | RS-232 | RS-485 |
|---|---|---|
| 信号の形 | シングルエンド(GND 基準)。正負の電圧で 1 と 0 を表す | 差動(A−B) |
| 接続 | 1 対 1(TX と RX をクロス) | 1 対多(同じ 2 本を共有) |
| 速度 | MAX232 は 120 kbit/s まで | 100 kbps で約 1,200 m、短ければ 10 Mbps |
| 距離 | 15 m 程度(目安) | 約 1,200 m |
| 全二重/半二重 | 全二重 | 半二重が基本(4 線式なら全二重) |
RS-232 は GND 基準のシングルエンドなので、RS-485 のようにノイズを打ち消せません。その代わり大きな電圧振幅で余裕を取っています(MAX232 の受信側は ±30 V まで受けられます)。5 V 単電源のマイコンとつなぐには、MAX232 のようにチャージポンプで正負の電圧を作る変換 IC が必要です。
今から新しく作るなら、1 対 1 で数 m なら USB シリアル、遠くや複数台なら RS-485 というのが現実的な選び方です。RS-232 は「相手がすでに RS-232 の機器だから合わせる」場面で使う規格と考えてよいでしょう。
それでも RS-232 が残っているのは、1 対 1 なら設定が単純だからです。アドレスも、方向切替も、終端も、フェイルセーフも要らず、速度とデータ形式を合わせて TX と RX をクロスすればつながります。計測器や産業機器の設定・保守用のポートとして長く使われてきた機器が現役である限り、それに合わせる場面は残ります。
🚗 CAN ― 誰が話すかを ID で決める
CAN(Controller Area Network)は、Bosch が自動車向けに作ったバスです。RS-485 と同じく 2 本の差動線(CAN_H と CAN_L)を使いますが、どのノードも自分から送信を始めてよい という点が根本的に違います。RS-485 で必要だった「誰が話すかの交通整理」を、CAN はプロトコル自身が持っています。
なぜ車は CAN なのか
CAN in Automation(CiA)がまとめた CAN の歴史によれば、1980 年代の初め、Bosch の技術者は既存のシリアルバスを乗用車に使えるか評価しましたが、自動車の技術者の要求を満たすものはありませんでした。CiA は、新しいバスの開発の主な狙いは新しい機能を車に足すことで、配線(ワイヤハーネス)を減らせたのは副産物だった、と書いています。
| 年 | 出来事 | 出典 |
|---|---|---|
| 1983 年 | Bosch で新しいバスの開発が始まる | CiA |
| 1986 年 2 月 | デトロイトの SAE 会議で発表 | CiA |
| 1991 年 | 量産車で Mercedes-Benz の上級車が、まずエンジン制御の ECU どうしを CAN で結ぶ | CiA |
| 1993 年 11 月 | 国際規格 ISO 11898 の発行 | CiA |
| 2008 年モデルから | 米国 EPA の規則が、乗用車と小型トラックの車外との診断通信に ISO 15765-4(CAN 上の診断)を求める | eCFR(40 CFR 86.1806-05 の (h)(1)(i)) |
整備工場の診断機を OBD のコネクタに挿したとき、その先で話しているのは CAN です。
車の中では、エンジン、変速機、ブレーキまわりなど多くの ECU が、それぞれの都合で値を送りたがります。マスタが順に聞いて回る方式では、急ぎのメッセージも順番待ちです。CiA によれば、1986 年の発表時点の CAN はすでに中央の調停役を持たず、非破壊調停で最も優先度の高いフレームを遅れなく通す方式でした(ID が宛先ではなく中身と優先度を表すのも、この時から)。
線は点火系、モーター、リレーのそばを通り、1 台の ECU の故障で車全体の通信が止まっては困ります。CiA によれば、最初の CAN には複数の誤り検出の仕組みと、故障したノードを自動で切り離す仕組み(後述のエラーカウンタとバスオフ)が入っていました。
| 車の困りごと | CAN のどの性質で解くか | 詳しくは |
|---|---|---|
| 多くの ECU が、それぞれの都合で送りたい | マスタなし。同時に送り始めても ID で決着 | ID による非破壊調停 |
| 急ぐメッセージを先に通したい | ID の値が小さいほど優先され、待たずに通る | ID による非破壊調停 |
| 点火系やモーターのノイズ | 差動 2 線+ツイストペア | ドミナントとリセッシブ |
| 1 台の故障で全体を止めたくない | エラーカウンタで、壊れたノードが自分から降りる | エラーカウンタ |
| 壊れたデータを使いたくない | CRC・ACK・スタッフ検査 | フレームの中身 |
| 整備工場の診断機とつなぎたい | ISO 11898、診断は ISO 15765-4 | この小節 |
同じ性質は、車の外でも効きます。
- 産業:工場向けには DeviceNet(1994 年に仕様が ODVA へ移管)、欧州では CANopen(1995 年に改訂版を公開)が生まれ、印刷機・船舶・医療システムなどの分野が CANopen を採用している
- 先例:CiA の歴史によれば、CAN の最初の応用は乗用車より先に、フィンランドのエレベーターや織機などの機械の中で始まった
- ドローン:ArduPilot と PX4 が周辺機器との通信に使う主な CAN プロトコルとして DroneCAN がある
どれも、たくさんのノードが優先度つきで話し、1 台の故障が全体を止めてはいけない、という点で車と同じ困りごとを抱えています。
ドミナントとリセッシブ
CAN のバスには、2 つの状態しかありません。
| 状態 | 論理 | CAN_H と CAN_L |
|---|---|---|
| ドミナント(優勢) | 0 | トランシーバが 2 本を引き離す(差がある) |
| リセッシブ(劣勢) | 1 | 誰も駆動しない。2 本は同じ電位(差がほぼ 0) |
ポイントは、ドミナントとリセッシブが同時に出たら、バスはドミナントになる ことです(Bosch の仕様書では wired-AND と表現)。前編で扱った I2C のオープンドレインと同じ発想で、「0 を出す人が 1 人でもいれば 0」です。これが次の調停の仕組みを支えています。
ID による非破壊調停
CAN のフレームには、宛先アドレスがありません。代わりに ID(識別子) が「このメッセージの中身は何か」を表し、同時に 優先度 も表します。ID は標準フォーマットで 11 ビット、拡張フォーマットで 29 ビットです。
2 つのノードが同時に送信を始めると、各ノードは ID を 1 ビットずつ送りながら、自分が出したビットとバスの実際の値を比べます。自分は 1(リセッシブ)を出したのにバスが 0(ドミナント)だったら、「もっと優先度の高いノードがいる」と知って送信をやめ、受信側に回ります。
理想化したタイミングチャート:ID 0x123 と 0x125 のノードが同時に送信を始めた場合。ID2 のビットで B は 1 を出したがバスは 0 になり、B が送信をやめる。A のフレームは何事もなかったように続く
負けた側のフレームも、勝った側のフレームも壊れません。これが 非破壊調停 です。ID の数値が小さいほど 0 が先に出るので、優先度が高くなります。負けたノードは、バスが空いたら自動で再送します。
フレームの中身
標準フォーマットのデータフレームは、次のフィールドでできています(Bosch CAN Specification 2.0)。
| フィールド | ビット数 | 役割 |
|---|---|---|
| SOF | 1 | フレームの開始(ドミナント) |
| ID | 11 | メッセージの種類と優先度 |
| RTR | 1 | データフレームならドミナント |
| IDE・r0 | 2 | 標準フォーマットの印と予約ビット |
| DLC | 4 | データのバイト数(0〜8) |
| データ | 0〜64 | 0〜8 バイト |
| CRC | 15+1 | CRC と区切り(リセッシブ) |
| ACK | 1+1 | 受信側が ACK スロットにドミナントを書く、と区切り |
| EOF | 7 | リセッシブが 7 個でフレーム終了 |
ACK スロットでは、送信側はリセッシブを出し、正しく受け取ったノードがドミナントを上書き します。前編で「受信確認(ACK)を持つのは I2C だけ」と書きましたが、CAN も ACK を持っています。ただし I2C と違い、ACK は「誰か 1 台でも受け取った」という意味で、特定の相手からの返事ではありません。
ビットスタッフィング
CAN は UART と同じくクロック線を持たず、受信側は信号の変化(エッジ)でタイミングを合わせ直します。同じ値が長く続くとエッジが無くなり、ずれていきます。
そこで送信側は、同じ値が 5 ビット続いたら、反対の値を 1 ビット自動で挿入 します(スタッフビット)。受信側はそれを取り除いて読みます。逆に、同じ値が 6 ビット続いたら「スタッフ違反」としてエラーにします。後の波形の節に載せたフレーム例では、RTR から DLC にかけて 0 が 5 個続いたところに 1 が入っています。
エラーカウンタ ― 壊れたノードは自分で黙る
CAN の各ノードは、送信エラーカウンタ(TEC)と受信エラーカウンタ(REC)を持っています。エラーを見つけるとカウンタが増え、正常にやり取りできると減ります。値によってノードの状態が変わります。
| 状態 | 条件 | ふるまい |
|---|---|---|
| エラーアクティブ | TEC・REC とも 127 以下 | 通常どおり。エラーを見つけたらエラーフラグで全員に知らせる |
| エラーパッシブ | どちらかが 128 以上 | 通信には参加するが、エラーを強く知らせない。送信後に少し待つ |
| バスオフ | TEC が 256 以上 | バスへの出力を一切やめる |
バスオフのノードは、リセッシブ 11 ビットの並びを 128 回見届けると復帰できます。故障したノードがバス全体を巻き込まないよう、自分で身を引く 仕組みです。車の中で 1 つの ECU が壊れても、ほかの通信が止まらないのはこのおかげです。
終端と距離
CAN も両端に終端を入れます。ISO 11898 は特性インピーダンス 120 Ω のツイストペアを指定しており、終端も 120 Ω を両端に 1 本ずつ(合計 2 本)です。
TI の SN65HVD230 のデータシートによれば、ISO 11898 の規定は 1 Mbps・バス長 40 m・分岐線 0.3 m・30 ノード です。速度を下げれば延ばせます。1 ビットの時間内に、バスの端から端までの往復(調停のため、相手のビットを同じビット時間内に見る必要がある)が収まらなければならないからです。
CAN FD ― データ部だけ速くする
従来の CAN(いまは CAN CC=Classical CAN と呼ばれます)には、「最大 1 Mbit/s」「データ 8 バイトまで」という 2 つの壁があります。CAN FD はこれを越えるための拡張です。
CAN in Automation(CiA)の解説によれば、考え方は単純です。調停の間は全ノードが同時に送る可能性があるので速くできませんが、調停に勝って 1 台だけが送っている間は速くしてよい。そこで CAN FD は、フレームの途中にある BRS ビットで速度を切り替え、データ部だけを速い速度で送ります。
| 項目 | CAN(CAN CC) | CAN FD |
|---|---|---|
| 調停部の速度 | 最大 1 Mbit/s | 最大 1 Mbit/s(同じ) |
| データ部の速度 | 調停部と同じ | 1 Mbit/s を超えてよい(上限はトランシーバ次第) |
| データ長 | 0〜8 バイト | 最大 64 バイト |
| CRC | 15 ビット | 17 ビット(16 バイト以下)/21 ビット |
CiA は、調停部とデータ部の速度比を 1:8 にすると、ヘッダや CRC が長くなるぶんを差し引いても、実効で約 6 倍のスループットになると説明しています。
マイコン側は「コントローラ+トランシーバ」の 2 段
CAN をマイコンにつなぐには、2 つの部品が要ります。
- CAN コントローラ:フレームの組み立て・調停・CRC・エラーカウンタなど、プロトコルを担当する。マイコン側から見ると TX/RX の 2 本(ロジックレベル)
- CAN トランシーバ:ロジックレベルの TX/RX と、CAN_H/CAN_L の差動信号を変換する
最近のマイコンはコントローラを内蔵しているものが多く、その場合はトランシーバだけを外付けします。
模式図:CAN のノード構成とバス。どのノードも「CAN コントローラ → CAN トランシーバ → バス」の順につながる。UNO R4 と ESP32 はコントローラをマイコンに内蔵し、AVR の UNO は MCP2515 を SPI で外付けする。終端 120 Ω はバスの両端に 1 本ずつ
図の 3 台で違うのはコントローラの場所だけで、トランシーバから先(CAN_H/CAN_L と終端)は同じです。
| マイコン | CAN コントローラ | 外付けするもの |
|---|---|---|
| Arduino UNO R4(RA4M1) | 内蔵(D4=CANTX0、D5=CANRX0) | トランシーバ(公式チュートリアルは SN65HVD230) |
| ESP32 | 内蔵(TWAI と呼ぶ。ESP32 は 1 系統・CAN FD 非対応) | トランシーバ(公式ドキュメントの例は TJA105x) |
| Arduino UNO R3 など AVR | なし | MCP2515(SPI 接続のコントローラ)とトランシーバ(TJA1050 などと組んだモジュールが多い) |
- UNO R4:ボードパッケージに Arduino_CAN ライブラリが入っており、
CAN.begin(CanBitRate::BR_250k)のように速度を選ぶだけで使えます(125k/250k/500k/1000k) - ESP32:ESP-IDF の TWAI ドライバで扱います
- AVR の UNO:CAN コントローラを持たないので、MCP2515 を SPI でつなぎます。MCP2515 は CAN 2.0B(拡張 ID を含む)に 1 Mb/s まで対応し、SPI は 10 MHz までです
SN65HVD230 は 3.3 V 単電源で動くトランシーバで、UNO R4 の公式チュートリアルも VCC を 3.3 V につないでいます。ESP32 のような 3.3 V マイコンと組むときも、トランシーバ側の電源と入出力の電圧がマイコンに合っているかをデータシートで確認してください。前編の「電圧レベルの違いに注意」と同じ話です。
対比:LIN ― CAN の下で働く 1 本線のバス
車の中には、CAN ほどの速度も信頼性も要らない部品がたくさんあります。ドアミラー、パワーウィンドウのスイッチ、シートの調整など。こうした部品のために作られたのが LIN(Local Interconnect Network) です。
| 項目 | LIN | CAN |
|---|---|---|
| 線 | 1 本(シングルエンド) | 2 本(差動) |
| 速度 | 最大 20 kbps | 最大 1 Mbps |
| 誰が話すか | コマンダ(マスタ)が順に呼び、レスポンダ(スレーブ)が答える | 全ノードが自分から送れる(ID で調停) |
| マイコン側 | UART(SCI)+LIN トランシーバ | CAN コントローラ+CAN トランシーバ |
LIN は、マイコンの UART をそのまま使えるのが大きな特徴です。TI の LIN トランシーバ TLIN1029-Q1 のデータシートも、TXD/RXD をマイコンの「LIN プロトコルコントローラ、または SCI/UART」につなぐと書いています。CAN のような専用コントローラが要らないぶん安く作れるので、CAN が幹線、LIN がその先の枝 という役割分担になっています。
CAN がこれだけ広まっても LIN が残っているのは、末端の部品ではコストが効くからです。TLIN1029-Q1 のデータシートが用途に挙げるのは「ボディエレクトロニクスと照明」で、ウィンドウやミラーのスイッチ、シートのモーターへの指令のように、量が少なく速度も要らない通信です。ここに CAN コントローラと 2 本の差動線を入れるより、マイコンの UART と 1 本の線で済ませるほうが、部品も配線も少なく済むという事情があります。
LIN の仕様は LIN コンソーシアムが策定し、2010 年の LIN 2.2A が広く実装されています。現在は ISO 17987 シリーズとして国際標準化されており、2025 年版からは用語がマスタ/スレーブからコマンダ/レスポンダに変わっています。
🌡️ 1-Wire ― 1 本の線で電源も通信も
1-Wire は、Dallas Semiconductor(現在は Analog Devices)が作ったバスです。名前のとおり、データ線 1 本と GND だけ で通信します。電子工作では、防水タイプの温度センサ DS18B20 でおなじみです。
なぜ温度センサは 1-Wire なのか
DS18B20 のデータシートは、1 個ずつ違う 64 bit のシリアルコードがあるので、複数の DS18B20 を同じ 1-Wire バスで動かせ、広い範囲に散らばった多数のセンサを 1 個のマイコンで扱える、と説明しています。用途の例に挙げているのは、空調の環境制御、建物・装置・機械の中の温度監視、プロセスの監視と制御です。センサごとにアドレスを設定する手間が無く、同じ型番を何個並べても衝突しないので、「部屋ごと」「棚ごと」に温度を測る配線にそのまま合います。
配線を減らせるのも理由です。データシートは、信号線から給電するパラサイトパワーを、離れた場所の温度を測る用途や、場所の余裕が無い用途で特に役立つとしています。天井裏や配電盤の中、水槽のように線を何本も引き回したくない場所では、データと GND の 2 本で済むことが効いてきます。
弱みもはっきりしています。
- 遅い:1 ビットに 60 µs 以上かかるので、速度は 1 万数千 bps が上限。µs 単位のタイミングはすべてマスタが作るので、マイコンはその間、L の幅を正確に作り続ける必要もある
- 短い:距離は数 m 程度(目安)
- ノイズに弱い:差動ではないので、RS-485 や CAN のようにノイズを打ち消せない
それでも温度センサに向いているのは、温度がゆっくりしか変わらず、DS18B20 自身も 12 bit の変換に最大 750 ms かけるからです。測る対象が遅いので、バスが遅くても困りません。
I2C と同じオープンドレインを、1 本でやる
1-Wire の出力段はオープンドレインで、線は 4.7 kΩ 程度の抵抗で電源にプルアップしておきます(DS18B20 のデータシートの回路図も 4.7 kΩ)。誰も引っ張っていなければ H、誰かが引けば L。前編の I2C とまったく同じ構造です。
違うのはクロック線が無いことです。代わりに、マスタが線を L に引いている時間の長さ で 0 と 1 を区別します。すべての通信はマスタ(マイコン)が L に引くところから始まり、スレーブ(センサ)は自分から話し始めません。
リセットとプレゼンス
通信の最初に、マスタは線を 480 µs 以上 L に引きます(リセットパルス)。線を離すと、つながっている DS18B20 は 15〜60 µs 待ってから、60〜240 µs の間 L を返します(プレゼンスパルス)。マスタはこれを見て「誰かいる」と分かります。前編の I2C の ACK に近い役割です。
タイムスロット ― L の長さで 0 と 1 を表す
1 ビットのやり取りは「タイムスロット」と呼ぶ 60〜120 µs の枠で行います。スロットの間には 1 µs 以上の回復時間を挟みます。
| スロット | マスタがすること | DS18B20 がすること |
|---|---|---|
| Write 1 | L に引いて、15 µs 以内に離す | 線を読む |
| Write 0 | L に引いて、スロットの間(60 µs 以上)L のまま | 線を読む |
| Read | L に 1 µs 以上引いてすぐ離し、開始から 15 µs 以内に線を読む | 0 を返すときだけ L に引いておく |
1 ビットに最低 60 µs かかるので、速度は 1 万数千 bps が上限です。UART の 9,600 bps と同じくらいの遅さだと考えておけば、感覚としては外れません。
64 bit の ROM コードと CRC8
DS18B20 には、工場で書き込まれた 64 bit の固有コード があります。下位 8 bit がファミリコード(DS18B20 は 0x28)、次の 48 bit がシリアル番号、上位 8 bit がそれまでの 56 bit から計算した CRC です。
マスタはこのコードで相手を指名するので、I2C のような アドレスの衝突が起きません。同じ型番のセンサを何個つないでも区別できます。データシートの言い方では、1 本のバスにつなげる台数は「事実上無制限」です。ROM コードと測定値(スクラッチパッド)には 8 bit の CRC(多項式 X^8 + X^5 + X^4 + 1 )が付いているので、マスタは受け取った値が壊れていないかを確かめられます。
パラサイトパワー ― 信号線から電源をもらう
模式図:DS18B20 の配線 2 通り。左は VDD に電源をつなぐ 3 線式、右は VDD ピンを GND につなぐパラサイトパワー。どちらも DQ は 4.7 kΩ でプルアップし、パラサイトパワーでは温度変換中だけ強いプルアップで DQ を電源につなぐ
左右で違うのは、センサの VDD ピンの行き先と、DQ を電源へ直結するスイッチの有無です。
DS18B20 は、VDD ピンを GND につなぐと、データ線が H の間に内部のコンデンサへ電気をため、それで動く ことができます。これがパラサイトパワーで、配線は本当に 2 本(データと GND)だけになります。ただし、温度変換の間だけは配線に一工夫が要ります。
- 温度変換の間は電流が多く要るので、マスタはその間ずっと線を強く H に引き上げる必要があります(データシートの図ではトランジスタで電源に直結)。12 bit 分解能の変換には最大 750 ms かかります
- +100°C を超える温度でのパラサイトパワー使用は推奨されていません
- 迷ったら VDD に電源をつなぐ 3 線式 にしておくのが無難です
85°C は DS18B20 の電源投入時の初期値です。変換が終わる前に読んでいるか、パラサイトパワーの給電が足りていません。変換時間(12 bit で最大 750 ms)を待つか、VDD に電源をつなぎます。
1-Wire の位置づけ
1-Wire は、台数は増やせるが、速度は遅く、距離は短い 規格です。差動ではないのでノイズに強いわけでもありません。その代わり、ピン 1 本で何個ものセンサを区別して読めるという、ほかの規格に無い強みがあります。
「部屋の中や装置の中に温度センサを何個も並べたい」という用途にはぴったりで、「100 m 先の機器と通信したい」という用途には向きません。後者は RS-485 の出番です。
📊 波形で理解する
ここからは、3 つの規格の信号がどう並ぶかを 理想化したタイミングチャート で見ていきます。前編と同じく、実機の波形には立ち上がりの鈍りやノイズ、反射が乗ります。まず「どこを見ればよいか」を図で押さえ、そのあと自分のオシロスコープで実物と見比べる、という順番を想定しています。
自分で測るときの設定
差動の規格(RS-485・CAN)は、2 本の線をそれぞれ GND 基準で測り、オシロの演算機能(Math)で CH1−CH2 を表示する のが、2ch のオシロでできる一番手軽な方法です。
| 項目 | RS-485 | CAN | 1-Wire |
|---|---|---|---|
| CH1 | A | CAN_H | データ線 |
| CH2 | B | CAN_L | (不要) |
| 演算 | Math で CH1−CH2 | Math で CH1−CH2 | なし |
| トリガ | CH1 の立ち下がり・シングル | CH1 の立ち上がり(SOF)・シングル | 立ち下がり・シングル |
| 時間軸の目安 | 9,600 bps なら 1 ms/div | 500 kbps なら 5 µs/div | リセットは 100 µs/div、スロットは 20 µs/div |
プローブは前編と同じく ×10 で使います。
コンセントから電源を取る据え置き型のオシロでは、プローブの GND クリップは本体を通じて大地(アース)につながっています。GND クリップを B や CAN_L につないではいけません。 その線がアースに短絡され、通信が止まるだけでなく、条件によってはトランシーバやオシロを傷めます。
2 本のプローブの GND クリップは、どちらも 測る機器の GND につなぎます。差は Math で取ります。離れた機器どうしの GND 電位がずれているときは、測る側の機器の GND に合わせます。電源の GND とアースの関係が分からない装置(AC 電源で動く機器の内部など)を測るときは、差動プローブか絶縁型のオシロを使ってください。
2 本を別々に測って引き算する方法は、2 本のチャンネルの誤差(オフセットや遅れ)がそのまま差に乗ります。数百 kbps 程度までの波形の形を見るには十分ですが、数 Mbps 以上の速い信号の細部を見たいときは差動プローブの出番です。
RS-485:A と B が鏡写しになっているか
理想化したタイミングチャート:UART 8N1 の 0x55 を RS-485 で送ったときの A・B と A−B。A と B は逆向きに動き、受信側は差が +200 mV より上なら 1、−200 mV より下なら 0 と読む(±200 mV の線は見やすく誇張して描いている)
見るべきポイントは 3 つです。
- A と B が鏡写しに動いているか:片方しか動いていなければ、その線が切れているかトランシーバが壊れている
- A−B の振幅:規格のドライバは 54 Ω 負荷に 1.5 V 以上を出す。終端を入れすぎる(3 本以上)と負荷が重くなって振幅が下がる
- 送信の前後(DE が切り替わる場所):最後のストップビットの途中で波形が終わっていたら、DE を L に戻すのが早すぎる。アイドル中の A−B が 0 V 付近をふらついていたら、フェイルセーフが効いていない
UART の 1 ビットの幅で速度が分かるのは前編と同じです。Modbus RTU なら、フレームとフレームの間に 3.5 文字ぶん以上の空白があるかも、同じ画面で確かめられます。
CAN:CAN_H と CAN_L が開くところが 0
理想化したタイミングチャート:標準 ID 0x123・データ 1 バイト(0xA5)の CAN フレーム。CAN_H と CAN_L が開いているところがドミナント(0)、重なっているところがリセッシブ(1)。RTR から DLC で 0 が 5 個続いたため、送信側が 1 のスタッフビットを挟んでいる。CRC の 15 ビットは省略
読み取るポイントは次のとおりです。
- アイドル中は 2 本が重なっている(リセッシブ)。SOF でいきなり開くので、CAN_H の立ち上がりでトリガをかける
- 最短のパルス幅が 1 ビット:500 kbps なら 2 µs。これが設定したビットレートと合っているか
- ACK スロット:フレームの終わり近くで 1 ビットだけ開いていれば、どこかのノードが受け取っている。開いていなければ、相手がいないかビットレートが合っていない
CAN の波形を目で読み下すのは、スタッフビットがあるので大変です。中身まで追いたいときは、ロジックアナライザのデコード機能に任せるのが現実的です。オシロで見るべきは、信号の形(振幅、反射、2 本の対称性) のほうです。
1-Wire:L の長さを数える
理想化したタイミングチャート:上段はリセットパルス(480 µs 以上)とプレゼンスパルス(60〜240 µs)、下段は Write 1・Write 0・Read のタイムスロット。青がマスタ、オレンジが DS18B20 が線を L に引いている区間。上段と下段で時間軸の縮尺は違う
1-Wire は 1ch で十分です。
- リセットの後にプレゼンスが返っているか:返っていなければ、センサが線につながっていないか、電源が来ていない
- L の幅がデータシートの範囲に入っているか:リセットは 480 µs 以上、Write 0 は 60〜120 µs、Write 1 は 1〜15 µs。マイコン側のライブラリが作る幅を、カーソルで読める
- H に戻るときの立ち上がり:I2C と同じく、プルアップ抵抗と線の容量で鈍る。線が長いほど寝ていく
🧭 結局どれを選べばいいのか
ステップ1:相手が決まっていないか確認する
前編と同じく、多くの場合、選択の余地はありません。
| つなぎたい相手 | 選ぶもの |
|---|---|
| Modbus 対応の計測器・電力計・温度調節器・インバータ | RS-485+Modbus RTU |
| 車の ECU、CAN 対応のモーター・ドライバ | CAN(ビットレートは相手に合わせる) |
| DS18B20 などの 1-Wire センサ | 1-Wire |
| RS-232 しか持たない古い機器 | RS-232(MAX232 などで変換) |
ステップ2:自分で選ぶなら、距離と「誰が話すか」で分ける
自分で両端を作れる場合は、次の順で考えます。
超える?"} -- いいえ --> A1["1-Wire
または I2C(前編)"] Q1 -- はい --> Q2{"どのノードも
自分から送る?"} Q2 -- はい --> A2["CAN"] Q2 -- いいえ
(親機が順に呼ぶ) --> A3["RS-485
(+Modbus RTU)"]
ステップ3:残った条件で確かめる
| 質問 | Yes なら |
|---|---|
| 100 m を超える? | RS-485(CAN は 1 Mbps で 40 m。速度を大きく下げる必要がある) |
| モーター・インバータ・屋外など、ノイズの多い場所を通る? | RS-485 か CAN(どちらも差動)。1-Wire は避ける |
| どこかのノードが故障しても、ほかの通信を止めたくない? | CAN(エラーカウンタでバスオフする) |
| 線を 1 本でも減らしたい・センサに電源線を引けない? | 1-Wire(パラサイトパワー) |
| マイコンに UART はあるが CAN コントローラが無い? | RS-485(AVR の UNO でも MCP2515 を足せば CAN は使える) |
RS-485 と CAN は、どちらも差動 2 本で、ノイズに強く、複数台をつなげます。決定的な違いは 送信の順番を誰が決めるか です。
親機が子機を順に呼んで答えさせる(センサの値を集める、計測器を読む)なら、RS-485+Modbus RTU で十分で、マイコン側も UART とトランシーバだけで済みます。どのノードも好きなときに送りたい(ボタンが押されたら即座に知らせる、複数のコントローラが協調する)なら、衝突をハードウェアで解決してくれる CAN が向いています。
🛠️ トラブルシューティング
| 症状 | 規格 | 主な原因 | 対処 |
|---|---|---|---|
| 何も受信できない/全部ゴミになる | RS-485 | A と B の逆接 | A/B を入れ替えて試す。メーカーによって表記の向きが違う(Modbus の D0/D1 も同様) |
| 1 対 1 では動くが、線を延ばすと化ける | RS-485・CAN | 終端抵抗が無い・3 本以上入っている | バスの両端に 120 Ω を 1 本ずつ。途中のノードの終端ジャンパを外す |
| 誰も送っていないのに受信が起きる | RS-485 | アイドル中の A−B が 0 V 付近(フェイルセーフなし) | フェイルセーフ内蔵のトランシーバにするか、バイアス抵抗を 1 か所に入れる |
| フレームの最後の 1 バイトが欠ける | RS-485 | DE を L に戻すのが早い | 送信完了を待ってから DE を L に。最後のストップビットまで出ているかを波形で確かめる |
| 近くでは動くが、別電源の機器だと化ける | RS-485・CAN | GND を引いていない(コモンモード電圧が範囲外) | GND(Common)も配線する。建物をまたぐなら絶縁型トランシーバ |
| 値が桁違いに大きい/おかしい | Modbus | 32 bit 値のワード順(2 つのレジスタの並び)が機器と逆 | 機器のマニュアルでワード順を確認し、2 レジスタを入れ替えて組み立てる |
| 送信が成功しない・すぐエラーパッシブになる | CAN | ビットレートが相手と違う/相手がいない(ACK が返らない) | 全ノードのビットレートを揃える。CAN は 2 台以上いないと ACK が返らない |
| しばらく動いた後、送信が止まる | CAN | エラーが積み重なってバスオフ | 終端・配線・ビットレートを見直す。バスオフからの復帰処理をソフトに入れる |
| センサが 1 個も見つからない | 1-Wire | プルアップ抵抗が無い・データ線と VDD の取り違え | データ線を 4.7 kΩ で電源へ。ピン配置をデータシートで確認 |
| 線を延ばすと見つからなくなる・CRC エラーが増える | 1-Wire | 線の容量で立ち上がりが鈍っている | 線を短く、プルアップを小さめに、センサの数を減らす |
| 温度が 85°C のまま変わらない | 1-Wire(DS18B20) | 変換が終わる前に読んでいる(85°C は電源投入時の初期値)。パラサイトパワーの給電不足 | 変換時間(12 bit で最大 750 ms)を待つ。VDD に電源をつなぐ |
Modbus の仕様書(Application Protocol V1.1b)は、レジスタを 16 bit とし、上位バイトを先に送る(ビッグエンディアン)と決めています。一方、フレームの最後の CRC だけは 下位バイトが先 です。ここは混同しやすいので注意してください。
32 bit の整数や浮動小数点数を 2 つのレジスタに分けて入れるときの順番は、仕様書の範囲外です。機器ごとにマニュアルで確認する必要があります。
✅ まとめ
- RS-485 は UART の信号を差動に変えたもの。100 kbps で約 1,200 m、1/8 UL 品なら 256 台。終端は両端に 120 Ω、アイドル中のためのフェイルセーフ、送信のための DE 切替、そして GND が要る。上で動く言葉の代表が Modbus RTU(時間の空白でフレームを区切り、CRC-16 で検査)
- CAN は、ドミナントが勝つ性質を使った ID による非破壊調停 で、どのノードも自分から送れる。CRC・ACK・スタッフ検査・エラーカウンタで、故障したノードは自分でバスから降りる。1 Mbps で 40 m。CAN FD はデータ部だけを速くし、64 バイトまで送れる
- 1-Wire は、1 本の線で通信し、電源も兼ねられる。L の長さで 0 と 1 を表し、64 bit の固有 ID で何個でも呼び分けられる。そのぶん遅く、距離も短い
- LIN は UART で作れる 1 本線の低速バス(20 kbps)で、CAN の先の枝を担う。RS-232 は 1 対 1 の正負電圧の規格で、相手が RS-232 のときに合わせて使う
- 選び方は「相手が決まっているか」→「数 m を超えるか」→「誰が話す順番を決めるか」
それぞれの強みを、現場の言葉で言い直すとこうなります。
- RS-485:安いトランシーバ 1 個と 1 組の線で、遠くに散らばった計器を親機が順に読める
- CAN:中央の調停役なしに急ぐメッセージが先に通り、壊れたノードは自分で黙る
- 1-Wire:ピン 1 本、アドレス設定なしで、ゆっくり変わる温度を何か所でも測れる
前編の I2C・SPI・UART が「基板の上の会話」なら、今回の 3 つは「基板の外へ出ていく会話」です。距離と台数とノイズという、基板の上では意識しなかった条件が、規格の形そのものを決めています。
よくある質問(FAQ)
Q. RS-485 と RS-422 は何が違いますか?
A. どちらも差動伝送ですが、RS-422 は送信側(ドライバ)が 1 台だけで、受信側を最大 10 台までつなぐ一方向の規格です。RS-485 は複数のドライバが同じ線を共有できるので、半二重で双方向のやり取りができます。RS-485 は RS-422 と電気的に互換になるように作られています。
Q. なぜ車は CAN で、工場は RS-485 なのですか?
A. 求められる話し方が違うからです。車では多くの ECU がそれぞれの都合で送り、急ぐメッセージを先に通し、1 台が壊れても全体を止めない必要があります。CAN は中央の調停役なしに ID で優先度を決め、故障したノードが自分からバスを降りる仕組みを、1986 年の発表時から持っていました。
工場やビルの計測では、親機が離れた計器を順に読めば足りることが多く、100 kbps で約 1,200 m 届く RS-485 と、マスタが順に呼ぶ Modbus RTU の組み合わせで十分です。どちらも差動 2 線なのでノイズに強い点は共通です。
Q. RS-485 の終端抵抗は、短い配線でも必要ですか?
A. 線の長さに対して信号の変化が十分ゆっくりなら、線は伝送路としてふるまわないので、終端なしでも動きます。TI のアプリケーションノート(SLLA070)は RS-422 の説明のなかで、データ速度が 200 kbps 未満、または受信端での立ち上がり・立ち下がり時間がケーブル片道の遅延の 4 倍より長ければ終端は不要、という目安を挙げています。
ブレッドボードの上で数十 cm、9,600 bps で試すくらいなら無くても通ることが多いですが、線を延ばす予定があるなら最初から両端に入れておくほうが確実です。
Q. CAN は 2 台でも動きますか? 1 台だけで送信テストはできますか?
A. 2 台あれば動きます。1 台だけだと、ACK を返してくれる相手がいないので、送信側はエラーを繰り返します。1 台で試したいときは、CAN コントローラが持つテスト用のモード(自分の送信を自分で受けるループバックなど)が使えるかを、マイコンのドキュメントで確認してください。ESP-IDF のドキュメントには、トランシーバを省いて TX と RX を直結し、1 ノードで試す方法が載っています。
Q. ESP32 で CAN FD は使えますか?
A. ESP-IDF のドキュメントによれば、ESP32 の TWAI コントローラは CAN FD フォーマットに対応していません。CAN FD が必要な場合は、CAN FD 対応のコントローラを持つマイコンか、外付けの CAN FD コントローラを使います。
Q. DS18B20 を何個までつなげますか?
A. 64 bit の固有 ID で呼び分けるので、アドレスの面での上限は事実上ありません。実際に効いてくるのは線の長さと容量、プルアップ抵抗の値、そして読み出しにかかる時間(12 bit 分解能では 1 回の変換に最大 750 ms)です。センサを増やして読めなくなったら、線を短くするか、バスを分けてください。
Q. RS-485 を USB で PC から使えますか?
A. 使えます。USB-RS485 変換アダプタを使えば、PC からは COM ポート(UART)として見えます。方向切替(DE)を変換器の側で自動的に行う製品もあり、PC の Modbus ソフトから機器を読むのに便利です。マイコン側の RS-485 回路のデバッグにも役立ちます。
関連記事
前編・通信規格の基礎:
- I2C・SPI・UART の違い|比較表と4つの質問で選べるマイコン通信規格 — この記事の前編。UART のフレーム、I2C のオープンドレインとプルアップ、オシロでの波形の見方
- ESP32 シリーズの選び方|S3・C3・C6・H2・P4 の違いと使い分け — どのチップにどの周辺機能があるかを用途から引ける
波形を見る道具:
- 電子工作に使っているオシロスコープ(OWON VDS3102L) — 2ch と演算(CH1−CH2)を備えた USB オシロ
- 自作ロジアナ #3:SPI・UART・サーボの信号を読む — 通信の中身をデコードして読む道具
別の階層の有線通信(Ethernet):
- W55RP20-EVB-Pico の基本|RP2040 と W5500 が 1 チップに入った有線 LAN ボード — RS-485 や CAN の代わりに、LAN と TCP/IP で機器をつなぐ選択肢
- W6300-EVB-Pico2 の基本|IPv4 と IPv6 の両方で LAN につなぐ
センサの値を集める仕組み:
- 自宅MQTTサーバーをDockerで構築【自宅センサー基盤 #3】 — 無線(Wi-Fi)と MQTT でセンサの値を集める例
参考
取得日はいずれも 2026-11-01 です。
RS-485・RS-232
- Texas Instruments SLLA272D「The RS-485 Design Guide」(2008 年 2 月初版・2021 年 5 月改訂)
- Texas Instruments SLLA070D「RS-422 and RS-485 Standards Overview and System Configurations」(2002 年 6 月初版・2010 年 5 月改訂)
- Texas Instruments THVD1500 データシート(SLLSEY4A・2018 年 11 月改訂)
- Texas Instruments MAX232 データシート(SLLS047N・2024 年 2 月改訂)
Modbus
- MODBUS over Serial Line Specification and Implementation Guide V1.02(Modbus-IDA・2006 年 12 月 20 日)。modbus.org の配布 URL が取得できなかったため、University of Chicago CARS に掲載の写し で内容を確認
- MODBUS Application Protocol Specification V1.1b(Modbus-IDA・2006 年 12 月 28 日)。同じく University of Chicago CARS に掲載の写し で確認
CAN・CAN FD・LIN
- CAN in Automation「History of CAN technology」
- eCFR「40 CFR 86.1806-05 Onboard diagnostics」((h)(1)(i):2008 年モデルからの ISO 15765-4)
- DroneCAN(dronecan.github.io)
- Robert Bosch GmbH「CAN Specification Version 2.0」(1991 年 9 月)。UC Riverside 掲載の写し で確認
- CAN in Automation「CAN FD – The basic idea」
- Texas Instruments SN65HVD230 データシート(SLOS346O・2018 年 4 月改訂)
- Microchip MCP2515 データシート(DS20001801J)
- Espressif ESP-IDF Programming Guide v6.1「Two-Wire Automotive Interface (TWAI)」(ESP32)
- Arduino Docs「Arduino UNO R4 Minima CAN Bus」
- CAN in Automation「LIN standards and specifications」
- Texas Instruments TLIN1029-Q1 データシート(SLLSEY5F・2022 年 5 月改訂)
1-Wire
- Maxim Integrated(現 Analog Devices)DS18B20 データシート(REV 042208)。analog.com の配布 URL が取得できなかったため、Adafruit 掲載の写し で確認