📡

マイコン間(ロボット内部)通信方式のまとめ

2024/01/10に公開

イントロ

ロボット内部用の通信よくわからん.となったのでよく聞く方式をまとめてみました.
基本的に物理層とデータリンク層の話のつもりです.もっとも,OSI参照モデルがそもそもネットワーク通信の話なので,マイコン間通信に当てはめていいのか微妙ですけども.

基礎知識

いわゆるキーワードです.

  • パラレル通信:1byte(8bit)の情報を送るのに8本の信号線を同時に使う方式.8人がそれぞれ同時に旗を上げ下げするような感じ.
  • シリアル通信:1byte(8bit)の情報を送るのに1本の信号線をなんども使う方式.1人がリズムに合わせて旗を上げ下げするような感じ.
  • 同期式シリアル通信: 同期信号に合わせて通信する方式 (wiki).送り手と受け手が同じメトロノームの音に合わせて旗を上げ下げするような感じ
  • 非同期(調歩同期)式シリアル通信:あらかじめ通信のタイミングを決めて通信する方式.送り手と受け手がそれぞれ同じリズムの別々のメトロノームを見ながら旗を上げ下げするイメージ.
  • 差動式信号:1つの信号を2本の信号線に乗った2つの信号の差として出す方式.ノイズに強い.
  • 半二重通信:送信と受信のどちらかに切り替えながら行う通信.トランシーバーみたいなもの.
  • 全二重通信:送信と受信を同時に行える通信.電話みたいなもの.

I2C

1対多の通信を2本の信号線で行う同期式シリアル通信 (wiki).GroveやQwiic などのモジュールで採用されている人気の通信方式.ノイズに弱いので同一基板上のIC間の通信が基本的な使い方.

Slave IC側で通信中に問題が生じると,I2C通信全体が止まる恐れがある.

SPI

1対多(n)の通信を(3+n)本の信号線で行える同期式シリアル通信 (wiki).n本の信号線のSSを切り替えることでSlave ICを切り替えることができる.送信用(MOSI)と受信用(MISO)の専用線がある.ノイズに弱いので同一基板上のIC間の通信が基本的な使い方.I2Cよりも高速に通信できる傾向がある.

UART/USART

本来はシリアル信号をパラレル信号にしたり,同期式シリアル信号を非同期式シリアル信号に変換するICのこと(Universal Synchronous Asynchronous Receiver/Transmitter).

Arduino においては TX ピンと RX ピンからの信号をUARTを介してUSBに変換してPCと通信する(Serialクラスを使用).UART と Serial が本来の意味とはズレているので非常にややこしい.

USB2.0

D+とD-の2つの信号線を使った差動信号を用いた半二重非同期通信 (wiki).PCとの通信で非常によく使われている規格.マイコンから使う場合は基本的にUSB-シリアル変換器を使う.ハブをかませない場合は1対1通信になる.

USB 3.2 gen2

2連の全二重非同期通信.TX+, TX-, RX+, RX- のセットを2つ持った,パラレルにシリアル通信を行う方式.USBと名前がついているがUSB2.0とは物理的に別物.

Ethernet

いわゆるLANケーブルに使われている規格.ひとくちにEthernetといっても,実はさらに細かい仕様に分かれている(イーサネット仕様 ).8P8C(RJ-45)コネクタを使っているものが主流で,この場合は.TX+, TX-, RX+, RX- のセットを1つ持った全二重非同期通信となる.ハブをかませない場合は1対1通信になるが,大抵はハブ(ルーター)を入れることでN対Nの通信になる.

CAN

Controller Area Network という CANH と CANL の2つの信号線を使った差動信号を用いた半二重非同期通信.自動車用に設計された耐ノイズ性に優れた規格.通信速度に対して距離と接続数はトレードオフの関係にある.N対Nの通信ができる.マイコンから使う場合は基本的にCANトランシーバーを使う.

RS485

EIA-485とも呼ばれる,2つの信号線を使った差動信号を用いた半二重非同期通信.耐ノイズ性に優れた産業機器向けの規格.Dynamixel などで採用されている.N対Nの通信ができる.

Discussion