この記事でわかること
・RS-232C通信の特徴
・RS-232Cの使い方(ストレート&クロスケーブル、フロー制御など)
・定番IC MAX232を用いたシリアル通信回路
RS-232CはUSB登場前のPCに標準装備されていたシリアル通信方式で、
シンプルで扱いやすいことから、短距離で高速性を必要としない用途では、
現在でも産業装置や測定機器間の通信用に用いられています。
本記事では、RS-232C通信を利用する上での基礎知識として、
特徴や用途、接続方法などの使い方を解説し、
定番インターフェースICのMAX232を用いた通信回路について解説します。
USB通信については下記記事で解説しています。

<注意点>
本記事はRS-232C通信を使用する際の基礎知識を説明することが目的であり、
解説する製品の機能や回路の動作を保証するものではありません。
ここで紹介する設計方法が適切で無い場合がある為、
使用の際は、デバイスのデータシートを必ず確認の上、
回路への利用については自己責任でお願いします。
RS-232C規格について
ここで紹介するRS-232Cをはじめ、RS-422、RS-485などの通信規格では、
通信信号の電圧レベルや、通信速度、伝送距離などの電気的特性(物理層 ※1)を規定したもので、
通信データの形式や通信手順などは定められていません。

※1:国際標準化機構(ISO)が通信機能を規定したOSI参照モデルにおいて、
7つの階層のうちの最初の第1層に該当し、物理的な接続ルールを定義している。
OSI(Open Systems Interconnection:開放型システム間接続)
どの通信規格でも、通信データの形式はUART(※2)(ユーアート)と呼ばれる
非同期式シリアル通信方式が多く使われていますが、
通信手順は装置によって独自に定義されているのが一般的です。

※2:Universal Asynchronous Receiver Transmitter(汎用 非同期式 送受信機)
UARTについては下記記事で解説しています。

規格名の先頭にあるRSはRecommended Standard(推奨規格)を意味していますが、
これらの規格は米国のANSIが認定し、TIAやEIA(※3)によって策定されたものなので、
正式には先頭にANSI/TIA/EIAがついた規格名になります。
※3:ANSI(American National Standard Institute:米国規格協会)
TIA(Telecommunications Industry Association:米電気通信工業会)
EIA(Electronic Industry Association:米電子工業会 現在は解散してTIAが引継いでいる)
このため、RS-232Cの正式名称はANSI/TIA/EIA-232-Fで、
最新バージョンはFとなっていますが、バージョンCの期間が長かったため、
現在でも一般的にはRS-232Cと呼ばれています。
RS-232Cの特徴
伝送距離と転送速度
この規格は、インターネットを電話回線によるダイヤルアップ接続(※4)で行っていた時代に、
PCーモデム間の通信方式として作られたことから、伝送距離は15m以内と短く、
転送速度も低速で、最大転送速度は規格上では20kbpsですが、
この後紹介するMAX232等のインターフェースICでは100kbps以上の性能を有しています。

※4:PCとモデム間はRS-232Cによるシリアル通信信号で、
モデムから通信相手のモデムまでの電話回線は音声帯域の変調信号によって通信を行う。
しかし、安価なシールド無しケーブルでもノイズの影響を受けることなく通信ができるように
低速で用いられていることが多いです。
代表的な転送速度である9600bpsは、機器に接続した操作パネル等との通信において、
ボタンやレバーを押したり、コマンド入力で設定する程度の操作であれば十分な速度であり、
マイコンを使う際も、専用のシリアル通信端子でなく、通常のI/O端子を用いたソフト制御でも
シリアル通信を行うことが可能です。
信号電圧レベル
RS-232Cの信号電圧レベルは、下図に示す様に、GNDに対して正電圧側がHレベル、
負電圧側がLレベルとなっています。

レシーバ(入力)よりもドライバ(出力)の方が電圧が高く(±3V→±5V)なっているのは、
出力後の伝送中に多少の電圧降下があっても誤入力を回避するためです。
ドライバの出力電圧範囲は±5V~±15Vと広く規定されていますが、
実際のインターフェースICでは±6~±10V程度で通信しています。
RS-232Cの各種信号については後述しますが、
データ信号(RxD,TxD)がHレベル側で論理0なのは、負論理で動作するためで、
論理0となるHレベル側をスペース、論理1となるLレベル側をマークと呼びます。
但し、RTSやCTS等のデータ信号以外の制御信号については、
HレベルでON(有効)、LレベルでOFF(無効)になります。

RS-232C通信信号と、一般的なデジタル信号であるTTL/CMOS信号との関係ですが、
上図に示す様にインターフェースICのドライバ出力をレシーバ入力にループバックした場合の
各波形を以下に示します。

RS-232C信号はインターフェースICでTTL/CMOS信号に変換した場合、H/Lの関係が逆転し、
データ信号はHレベルが論理1で、Lレベルが論理0となり、
制御信号はHレベルがOFF(無効)で、LレベルがON(有効)となります。
(ドライバの入力がTTLレベルで、出力がCMOSレベルになっている理由は後述)
各信号線
信号線の説明をするにあたり、通信方向を示すのに必要な送受信機器の呼び方は以下になります。
(前述の図「電話回線を用いたインターネット接続」を参照)
DTE(Data Terminal Equipment):データ端末装置
データ処理を主体的に行う側の機器(PC等のメインとなる装置)
DCE(Data Circuit Terminating Equipment):回線終端装置
データを受動的に扱う側の機器(モデムやターミナルアダプタ(TA)等の周辺機器)
以下の説明ではDTEとDCEだと分かりにくいため、DTEをPC、DCEをモデムと称することにします。

全部で8種類ある信号のうち、データ信号であるRxDとTxD以外はモデム制御用の信号で、
通信の際には、図に示すような手順で各制御信号が入出力されます。

これらの制御信号はモデム以外では使われずに、
データ信号(RxD,TxD)だけで通信が行われることが多いですが、
フロー制御を用いる場合はRTSとCTS(又はDTRとDSR)を利用します。
フロー制御とは、受信準備が完了する前にデータが送信されてくることを防ぐため、
相手に送信を待たせるように制御することで、制御信号を用いたハードウェア・フロー制御と、
制御信号を使わずにソフトウェアを用いるソフトウェア・フロー制御(※5)があります。
※5:データ信号を使い、データ中の2文字(XON/XOFF)を送信中断と再開に使う。
ハードウェア・フロー制御では、RTS(又はDTR)で送信相手に送信許可を送り、
この信号が送信相手のCTS(又はDSR)に入力されることで、送信相手は送信が可能となります。
このため、自分のRTS(又はDTR)が相手のCTS(又はDSR)に接続されるように、
コネクタのピン配置を変えるか、ケーブル内で配線をクロスします。
フロー制御は、送受信機器共に処理速度が十分速く、受信データの取りこぼしがないか、
取りこぼししても、他の方法で回避できる場合は不要であることから、
通信用コネクタにRxDとTxDの2信号のみが接続されている機器も多いです。
しかしながら、相手機器がフロー制御をしている場合に通信不可となることを回避するため
回路設計では使用しない信号ペア(RTSとCTS、DTRとDSR)は
図の様にコネクタ部分でショートさせておくことが望ましいです。

ショートさせることで、接続相手からの送信要求を、そのまま送信許可として返すので、
接続相手はすぐに送信が可能になります。
コネクタについて
規格ではD-Sub(ディーサブ)コネクタの25ピンですが、未使用のピンが多く、
当時、殆どのPCは省スペース化の為、9ピンが採用されていたことから、
RS-232Cコネクタと言えば、D-Sub 9ピンが一般的となっています(※6)。
※6:9ピンが多く使われる実態に合わせ、9ピン仕様の規格(ANSI/TIA/EIA-574)が後から制定されました。
D-Subコネクタの詳細は下記記事で解説しています。

このように、RS-232C = D-Subコネクタというイメージがありますが、
産業機器では、他の信号と一緒に多極コネクタに接続して用いられるものを見かけます。

ストレートケーブルとクロスケーブル
各信号の入出力方向ですが、上表はDTE(PC側)の場合であり、
DCE(モデム側)では反対方向になります。
例えば、D-Sub9ピン コネクタの2ピンはRxDなので、PC側では入力(受信データ)ですが、
通信相手であるモデム側にとっては出力(送信データ)になります。
しかし、モデムはPCとストレートケーブルで接続されることを前提にしているため、
2ピン(RxD)にモデムからの送信データが接続され、3ピン(TxD)にモデムへの受信データが
接続されるようにモデム内で配線をクロスさせています。
同様の理由で、4ピン(DTR)と6ピン(DSR)、7ピン(RTS)と8ピン(CTS)が
クロスして内部接続されています。
しかし、モデム以外の装置では内部配線がクロスされていない場合もあるため、
その際はケーブル内で配線をクロスするクロスケーブルを使う必要があります。

また、コネクタのオス・メスどちらを用いるのかについては、
PC本体のコネクタがオスで、モデム本体のコネクタがメスだったことから、
ストレートケーブルのコネクタはメスーオスの構成が基本形でしたが、
メスーメスのストレートケーブルも多数存在します。

一方、内部配線がクロスされていない機器のコネクタはPCと同様にオスが多いことから、
クロスケーブルのコネクタは殆どがメスーメスの構成です。
RS-232Cケーブルを扱っているサンワサプライのHPを見ると、
D-Sub9ピン ケーブルはストレートケーブルが7種類、クロスケーブルが6種類ありますが、
ストレートケーブルは、そのうち4つがメスーメスで、3つがメスーオスとなっており、
クロスケーブルは全てがメスーメスです。
以上のことから、装置のコネクタがオス同士ならクロスケーブル、
オスとメスならストレートケーブルが用いられている傾向があります。
注意点として、クロスケーブルには上図に示す様に複数の種類が存在します。
これは前述したフロー制御処理にどのピンを使うかによって決まるので、
接続する機器の動作も確認した上で選定する必要があります。
この図にあるインターリンクとは、Winodows 98/95の時代にあったPC間のデータコピー機能で、
PC同士の接続に対応したケーブルであり、シンプルなクロス配線になっています。

また、装置のコネクタとケーブルのコネクタが同じオスやメス同士で接続できない場合は、
オスメス変換コネクタ(ジェンダーチェンジャー)を使用します。
RS-232C通信用IC MAX232
RS-232Cで送受信を行うためのインターフェースICの定番品であるMAX232を紹介します。

このICの内部回路を見ると、RS-232Cに必要な±10V電源を生成するチャージポンプ回路、
5V系ICからのTTL/CMOS信号をRS-232C信号に変換して送信を行うドライバ(※7)(送信)回路と、
RS-232C信号を受信し、5V系ICへのTTL/CMOS信号に変換するレシーバ(受信)回路で
構成されます。
※7:ドライバ回路はトランスミッタとも呼ばれ、本ICの信号名(T1IN,T1OUT等)に頭文字「T」がついています。
チャージポンプ回路は2種類内蔵されており、電源入力された+5VをC1を使用して倍増し、
C3が接続されたV+端子に+10Vを出力する倍電圧回路と、C2を使用して+10Vを反転し、
C4が接続されたV-端子に-10Vを出力する負電圧回路があります。
チャージポンプ回路の動作原理については下記記事で解説しています。

ここで使用するチャージポンプ用コンデンサC1~C4の容量は1uFで、
印加される電圧は10Vになるので、耐圧は16V以上のものを選定する必要があります。
C5は5V電源入力用のバイパスコンデンサなので、容量は0.1uF~1uF、
耐圧は10VあればOKですが、部品共通化でC1~C4と同一品を使うことが多いです。
ドライバ回路とレシーバ回路は各2個づつあるので、
RxD、TxD信号の他にフロー制御用にRTSとCTS(又はDTRとDSR)信号を割り当てられます。

多くの場合、この4つの信号線で事足りますが、規格通り8本全ての信号線を使う場合は、
更に多くのドライバとレシーバを持つMAX211等を使用します。
入出力判定レベルについては、ドライバ回路への入力(T1IN,T2IN)はTTLレベルで、
レシーバ回路からの出力(R1OUT,R2OUT)は5V CMOSレベル(※8)となっていることから、
5V系ICはTTL又はCMOSどちらのタイプでもMAX232への直接接続が可能です。

※8:入力レベルが、5V CMOS(H:3.5V以上、L:1.5V以下)より、TTL(H:2.0V以上、L:0.8V以下)が低いので、
入力判定がTTLレベルであれば、CMOSレベルが入力されても正しく判定できます。
また、出力レベルは、TTL(H:2.4V以上、L:0.4V以下)より、5V CMOS(H:3.8V以上、L:0.4V以下)が高いので、
出力電圧がCMOSレベルを満足していれば、TTLレベルも満足できます。
デジタルICのTTLレベルとCMOSレベルについては下記記事で解説しています。

RS-232C送受信信号の電圧については、ドライバ回路からの出力(D1OUT,D2OUT)は
無負荷(通信相手機器と未接続)時は約±10Vですが、
接続時は相手機器に入力電流が流れることで電圧が低下し、約±8V(負荷抵抗3kΩ時)となります。
前述の通り、RS-232C信号に対し、TTL/CMOS信号はH/Lが逆転するので、
ドライバ回路への入力はインバータで反転して出力されます。
また、入力は400kΩでプルアップされているので、
入力ピンが未接続でもHレベルが入力されるので、出力はLレベルとなります。
但し、設計ではノイズによる誤動作を回避するため、空きピン処理を行うのが望ましいです。
(後述する通信回路の様に、使用している入力ピンと同じ信号を未使用の入力ピンにも接続する等)
レシーバー回路への入力(R1IN,R2IN)の閾値については、
Hレベルが1.4V以上、Lレベルが0.8V以下のため、
RS-232C信号だけでなく、TTL信号レベルでも入力判定できるので、
5V系ICから直接入力することもできます。
レシーバの入力は内部で5kΩにプルダウンされており、未使用の入力はLレベルになるので、
出力はHレベルに固定されます。
(但し、ドライバと同様、誤動作防止のため、空きピン処理をするのが望ましい)

ドライバ/レシーバ回路の実際の動作波形の例として、
ループバック(ドライバ出力をレシーバ入力に戻す)試験回路で測定したものを示します。
(MAX232の実測波形が無かったため、マックスリニア製SP213EHの波形になります)

この波形より、RS-232C信号の電圧レベルが±8V程度であることがわかり、
ドライバ入力はTTLのHレベルとなる2V程度でも正しくHレベルが判別でき、
レシーバ出力はCMOSのHレベルとなる約5Vが出力されています。

MAX232の製造メーカだったMAXIM(マキシム)社はアナログ・デバイセズに吸収されており、
同型名のICはテキサス・インスツルメンツ等、セカンドベンダが数多く存在しますが、
3.3V動作が可能なものや、チャージポンプ用コンデンサが低容量化(※9)しているのもあるので、
選定の際は注意する必要があります。
※9:チャージポンプ回路のスイッチング速度の高速化により、容量を小さくできる。
MAX232を使った通信回路例
・フロー制御つきRS-232C通信回路
制御信号RTSとCTSを使ったハードウェアフロー制御が可能な基本回路です。
マイコン側のデータ信号はシリアル通信端子(TXD,RXD)を使い、
制御信号(RTS#,CTS#)は汎用I/O端子(GPIO)を利用します。
(信号名の後にある#は負論理(Lレベルで有効)を示す)

フロー制御無しの場合はRTSとCTSをショートし、空きピンとなった入力端子(T2IN,R2IN)は
もう一方の入力端子に繋げることで誤動作を防ぎます。
この回路図はマイコンをDTEとして使用する場合なので、コネクタはオスにしていますが、
DCEの場合はメスにしたり、コネクタのピン配置(RxDとTxD、RTSとCTS)を入替えるのが
一般的ですが、実際の機器や回路では様々なケースが存在しています。
・ストレート/クロス 両ケーブル対応可能なRS-232C通信回路
ジャンパーJP1のショートピンを設定することで、
データ信号(RxDとTxD)の配線を内部で切り替えられるため、
ストレート及びクロスケーブルどちらでも接続が可能となります。

この回路はフロー制御なしの場合で、相手側のフロー制御の種類に応じて
JP2のショートピンを設定し、相手の信号を折り返すことで、フロー制御を無効化できます。
但し、前述の通り、クロスケーブルには様々な内部配線のタイプがあるため、
対応できないケーブルもあります。
・絶縁型RS-232C通信回路
マイコンとMAX232の間にアイソレータを設けることで、
マイコン回路とRS-232C通信回路を絶縁(アイソレーション)することができます。

通信用5V電源は外部から供給することで、雷サージや相手機器の故障等による
高電圧の進入を防ぐことで、マイコン側回路を保護します。
テキサス・インスツルメンツ製アイソレータISO6421はパッケージ形状によって、
基礎絶縁タイプと強化絶縁タイプがあり、必要とする絶縁レベルに応じて選定しますが、
基板のパターンについても絶縁距離を確保した配線にする必要があります。
基礎絶縁or強化絶縁の選択や、絶縁距離を考慮したパターン設計については下記記事で解説しています。

・USBーRS-232C変換回路
USBインターフェースの定番ICであるFT232RNを用いて、
USBコネクタからの通信をRS-232C信号に変換してD-sub9ピンコネクタに接続する回路です。

USBコネクタはTYPE-Aコネクタを持つケーブルに接続できるTYPE-Bコネクタにしていますが、
現在、主流になりつつあるTYPE-Cコネクタの場合も掲載しています。
FT232RNの詳細については下記記事で解説しています。

