PIC16C711 を応用した
１線式遠隔制御システム
金野

目次
１．はじめに２．設計及び制作
３．プログラム
４．動作特性５．改良及び応用案
６．終わりに-1-茂男

１．はじめに模型の飛行機やヘリコプターの遠隔操縦に、プロポーショナル・ラジオコントロールシ
ステムが用いられている。手元にある送信機のレバーの変位量に比例させて、或いはスイッチの切り替えに応じて、機体側の方向舵などの変位量を操作したり、脚部の出し入れをすることができる。リアルタイムに制御を行うことができるので、遠隔制御ながら極めて正確に姿勢制御を行うことができる。
このコントロールシステムを、ワンチップマイコンＰＩＣを応用して構築することを本研究の課題とした。送信及び受信側にともにＰＩＣ１６Ｃ７１１を用い、その間の信号の送受信は電波ではなく、当面１線ケーブルで結線することにした。
とういうのは、電波（通常のラジコンでは周波数数十ＭＨｚ帯でＦＭ方式を採用している）の送受信回路まで自作するとなると、それはそれとして一つの大きな仕事となってしまうからである。本研究では、送信側から１線ケーブルに出力される信号は、シリアルのデジタルデータ列とした。従って、最近市場に出回っている安価なデジタル送受信通信キットを用いれば、容易に無線化することができる。それ故、特に無線回路まで自作する必要がないと考えた。ついでながらであるが、効率の良いＦＭ無線回路、特に受信機を作する

自のは結構手間と時間がかかる。

完成したシステムは、プロポーショナルなアナログチャンネルが４つ、スイッチのオン・オフチャンネルが４つの、合計８チャンネルの自由度を有するものとなった。送信側と受信側の間には１線のケーブルのみ。使用したＩＣは送信側、受信側とも１個のワンチップマイコンのみである。

-2-２．設計及び制作システムの機能概要は、プロポシステムのそれを踏襲することにした。送信側にはアナログ可変量を決定するレバー、即ち可変抵抗は４個用いる。これで自由度は４となる。これだけで並のプロポシステムの自由度となる。これ以外に、オンオフ・スイッチを４つ用いることとする。受信側で何らかの機能をオン・オフすることができる機能が４つ備わることになる。合計で自由度は８なので、８チャンネル（アナログ４＋デジタル４）コントロールシステムとなる。
受信側には、４チャンネルのアナログ動作に対応して、４個のサーボモータを用いる。
このサーボモータは既製品とする。送信側の可変抵抗の回転量に同期して、受信側のサーボモータが回転する。回転量はニュートラル位置から左右に±９０°程度とした。オンオ
フ・スイッチの状態のモニター用としてＬＥＤを４つ使用し、送信側のスイッチのオン・オフに対応して、このＬＥＤを点灯・消灯させる。１線の通信ケーブル間で送受信されるデータのコードはＲＳ−２３２Ｃ規格に準拠させることにした。
図１に、本システムの基本構成図を示しておく。

８自由度のシステム
４個の各可変抵抗の回転に同期して、各サーボモータが独立に回転する。
回転範囲

ともに約−９０° 〜＋９０°

４個の各スイッチに同期して、モニター用ＬＥＤを点灯・消灯させる。
可変 抵抗

サ ーボ モー タ
位 置電 圧

送信受信入力サーボパルス
出力

同上

同上
PIC

同上
同上

１線

PI C

RS-232C規格 準 拠

スイッチ

同上同上
ＬＥＤ

（オン／オフ）
同上（点灯／消灯）
同上

同上同上

同上同上

図１

本システムの基本構成図

使用するサーボモータについて説明をしよう。
使用するサーボモータはＦｕｔａｂａ（双葉）社製のラジコン用サーボモータＳ３００３である。写真１にそれを、表１にその諸元を示しておく。同じような規格で他機種がたくさんこの会社から提供されているので、使用するサーボモータとしてＳ３００３に固執することはない。Ｆｕｔａｂａ社のラジコンパンフレットから適当なものを見繕うことができる。

-3-

寸法

40. 4×19.8×36mm

重量37. 2g

動作スピード

0.23sec/60° (4. 8V 時)
0. 19sec/60°(6.0V 時 )出力トルク3.2kg ・ cm(4. 8V 時 )4. 1kg ・cm(6.0V 時 )写真１Ｆｕｔａｂａ社製

表１

Ｓ３００３の諸元

サーボモータＳ３００３
このサーボモータには入力端子が３本（黒線−アース、赤線−電源線、白線−パルス信号入力線）ある。通常はこの３線をＦｕｔａｂａ社製の専用の受信機に接続して用いる。
受信機からはこの３線を経由して、サーボモータ中に内蔵している直流モータ用の電源と、その駆動パルス信号が供給される。定時毎にパルスが入力され、そのパルス幅の変化でモータを正・逆回転させるＰＷＭ方式を用いている。パルス幅が狭くなれば、その量に比例して右に回転するとすれば、パルス幅が広くなればその量に比例して左に回転する。その回転量をギアで減速し、サーボモータの外部に出ている、回転心棒を回転させている。
従って、専用の受信機を用いないで、このサーボモータを制御しようとするならば、入力されるべきパルスの規格に知見がなければならない。図２と表２にそれを示す。

約 ２ ０ｍ ｓ

twtw

CMOS/TTLの論理レベル

tw は約1.5ms±0.5ms

図２

サーボモータの入力信号（ １ ）メーカー

ニュートラル可変範囲信号レベル

双葉電子工業（株）

1520 μ s±500 μs

CM OS/TTL（ 付 ）日 本 遠 隔 制 御 （ 株 ）1500 μ s±600 μs

CM OS/TTL（ 付 ）近 藤 科 学 （ 株 ）1500 μs±500 μs

CM OS/TT L（ 付 ）三 和 電 子 機 器 （ 株 ）1500 μ s±500 μs

CM OS/TTL

表２

サーボモータの入力信号パルス幅（ １ ）-4-

定格では、約２０ｍｓ毎にサーボモータに入力パルスが送られる。この入力パルスは
CMOS/TTL 論理レベル互換である。使用するマイクロチップ社のＰＩＣワンッチプマイ
コンシリーズも入出力は CMOS/TTL 互換であるので、ＰＩＣの出力で直接サーボモータを制御できる利点がある。。パルス幅ｔｗが常時１．５ｍｓ幅ならば、サーボモータの回転位置はニュートラル（中央）に位置し続ける。このパルス幅が狭くなるか、或いは広くなると、サーボモータは左か或いは右に回転する。かつ、その回転変位量はパルス幅に比例する。表２からは、このパルス幅の可変範囲は±０．５ｍｓである。従って、ｔｗを、約１．０ｍｓ〜２．０ｍｓの間で必要に応じて変化させれば、サーボモータを必要な量だけ回転させることができることになる。
表１に示しているＳ３００３の諸元から、サーボモータの外部に出ている回転軸が左右に何度だけ回転するのかは書かれていない。が、動作スピードとして６０°回転させるに要する時間は０．２３秒或いは０．１９秒であると書いてある。これから類推すると、回転軸は左右に±６０°は回転できそうである。
実際に、サーボモータの動作試験をし、入力パルス幅と回転量の関係を調べてみた。入力パルス幅を１．５ｍｓから±０．５ｍｓにして動作させると、予想通りニュートラル位置から左右におおよそ±６０°ほどの回転をした。ところが、±０．５ｍｓ以上にパルス幅を設定しても、サーボモータは正常に動作することがわかった。左右±９０°当たりまで回転するのである。本システムでは、サーボモータの回転角度は大きいほど利用価値があると思われるので、左右±９０°になるようにパルスを形成することにした。図３に、送信側の可変抵抗の回転角度量、そのＡＤ変換した値、形成するサーボモータ駆動用パルス幅、そしてサーボモータの回転量の対応グラフを示している。
可変抵抗の中間タップの電圧はＰＩＣの８ビットＡＤ変換器により、０〜２５５（１０進数で）の数値に変換される。Ｂ型可変抵抗の回転角度は約２７０°である。中間タップが可変範囲の中間に位置したときを０°として、左右に±９０°回転させるとすれば、−９０°は４３，０°は１２７，＋９０°は２１２の数値に対応する。

+135°

2550°

-90°

212
８ビ ッ ト 変 換 値

可変 抵 抗 の 回 転 角 度+90°12743-135°
0-90°

1.0ms

1.5ms

2.0ms

-60°

0°

+60°

パルス幅+90°

サーボモータの回転角度

図３

可変抵抗とサーボモータの回転角度対応グラフ-5-受信機側はこれらの値を受信して、必要な幅のパルスを形成し、サーボモータに出力することで、可変抵抗の回転角度に同期させてサーボモータを回転させることになる。
入力信号パルス間隔は定格では約２０ｍｓであるが、これも推奨値であり、２０ｍｓより長くても短くても正常に動作する。ただし、長すぎると応答が遅くなり、かつ不安定動作を起こすようになる。一方、短ければ応答速度は向上する。本システムではパルス間隔値として１０ｍｓを採用することにした。パルス幅は１．５ｍｓを中心値として、サーボモータが左右に９０°程度振れるまでのパルス幅とした。おおざっぱで１．５ｍｓ±０．
９ｍｓとなった。
サーボモータのモータ駆動電圧については、やはり電圧が高ければ高いほど応答性に優れ、トルクも大きくなる。乾電池（単三）４本の６ｖに設定した。同時に、この電源はＰＩＣの電源と共用させることにした。
図４に、図１に示したシステムの概要図に従って書き出したシステムの回路図を示す。
使用するワンチップマイコンはＡＤ変換器を内蔵しているＰＩＣ１６Ｃ７１１とした。この素子にはアナログ入力端子は４つある。可変抵抗の中間タップの電圧値をこれらの端子に接続する。他に多数のＩ／Ｏポートがあり、その内の４個をスイッチに接続する。ＲＢポートの一つを通信用のデータ出力端子としている。

操 作及 び 送信 側

受信 及 びサ ー ボ側
Ｖ ｄ(+3V 〜+6 V)

Ｖｄ

Ｖｄ5k
5 kVR
可 変 抵抗 群414

ト リ ガ出 力

MCLR
A N017RB 06

デ ータ 出 力(RS-232C)

A N1

1VR42

モ ニ タ ー用 7

Ｖｄ

黒赤18

白Servo2

RA 21

白Servo38

赤R A3 2

モ ニ タ ー用RB 7

白Servo4

VdRB7

RB 6RB65k300 Ω12300Ω

RB 5RB 5RB4RB4G5G O SC 2 OSC 15 151610MH z

図４O SC 2 O SC 1151610 MHz

本システムの回路図-6-黒13115k

スイ ッ チ群

Ｖｄ300Ω

300Ω

5k10

黒RB21311Ｖｄ

A N35k12Ｖｄ

黒赤RB 1

ト リ ガ 出力

受 信 デ ータ

Sw 4

Servo1

RB 0/INT
RA 1

AN 2

P IC 16C711

Ｖｄ

Sw3

白P IC 16C711

V R3Sw 2

赤618

Sw 1

Fut aba S3003

R A0

Ｖｄ

Vd

14
Vd

17

VR2

Vd

4
MCLR

7RB1

Ｖｄ

Vd

サ ー ボモ ー タ 群

モ ニ ター 用Ｖｄ
VR15k10300Ω

Ｌ ＥＤ 群４チャンネルアナログデータ、４つのオンオフ・スイッチのデータの計８つのデータをプログラムにより、１０ｍｓ間隔で繰り返し取り込む。その際、４つのオンオフ・スイッチのデータは、各スイッチの状態認識のための１ビットだけの使用で済むので、１バイト中に取り込む。各８ビットデータで合計５バイトのデータをシリアルデータ列に変換し、ＲＳ−２３２Ｃ規格に準拠したシリアルデータコードでＲＢ０ポートから出力する。スタートビット１つ、データビット８つ、ストップビット１つの合計１０ビットで送受信用の１バイトのデータとしている。即ち、４チャンネルのアナログデータ分で４バイト、４つのオンオフ・スイッチ分で１バイトを使用するので、１サイクル毎に５バイトのデータが送受信されることになる。
受信側でも、同じＰＩＣ１６Ｃ７１１を使用する。受信側ではＡＤ変換を必要とはしていない。従って、ＡＤ変換機能のないＰＩＣとしても良いのであるが、送信側との対応性、開発の簡便さから、受信側でも同じＰＩＣを使用することにした。送信側のＰＩＣの使用している端子に対応させて、サーボモータ及びモニター用ＬＥＤを接続する 。送信側から、１０ｍｓ間隔で５バイトのデータが送信されてくる。受信側のＰＩＣのＲＢ０／ＩＮＴ端子でそれを受信する。データ列の先頭のスタートビットの立ち上がり信号により、受信側では割り込みが発生し、この瞬間割り込みを禁止した状態として、受信側のＰＩＣは割り込み処理ルーチンとして、受信したデータの復元、整理を行い、対応するサーボモータのための駆動パルスの形成、及びその出力、送信側の各スイッチに対応するＬＥＤの点灯或いは消灯を行う。一連の処理が完了したら、割り込みを解除し、割り込み許可状態とし、次の立ち上がりパルスがくるまで待機させる。以下、同じ動作の繰り返しである。
可変抵抗からの電圧は０から２５５の数値に変換されて受信される。受信側では１２７の値を中央値とし、サーボモータのニュートラル値とみなす。そのとき１．５ｍｓ幅のパルスをサーボモータに出力する。１２７より小ならば、１．５ｍｓより狭いパルスを、１２７より大きければ、１．５ｍｓより広いパルスをサーボモータに送り出せばよい。
このパルス幅の程度は実際にシステムを動作させながら、プログラム中のパルス幅設定用定数を調節する方法が簡単である。
出来上がった本システムの外観を写真２，３に示しておく。写真２が送信側である。基台の下側には４つのツマミがあり、これで４つの可変抵抗を回転する。上部左側に４つのオンオフ・スイッチがある。本体の主回路は右側上部にあり、使用部品数は極めて少ない。
１線のシールド線が送受信線として受信側と接続している。
写真３が受信側である。送信側の可変抵抗と対応させて、４つのサーボモータが取り付けてある。上部の左側から４つのＬＥＤが送信側のスイッチと対応している。受信側の素子数も極めてわずかである。送信及び受信側ともに基台は２段構造となっており、下段にはともに単３乾電池４本が電源として収まっている。

-7-写真２

送信側

写真３

-8-

受信側

３．プログラム
送信及び受信側のＰＩＣ１６Ｃ７１１に書き込んだアセンブラ・プログラムリストは後半に添付しておいた。プログラム中で注釈を極力多用し、理解の便宜を図っているので、プログラムの詳細については、プログラムリストに譲る。ここではおおざっぱな概要を述べるにとどめる。なを、ＰＩＣへのプログラムの書き込みに使用したライターは、Ｍｉｃｒｏｃｈｉｐ社製の純正のライターである「ＰＩＣｓｔａｒｔｐｌｕｓ」である。使用したアセンブラも同社のアセンブラであるＭＡＳＭを用いた。
送信側のプログラムの流れは以下の通りである。ＲＡ０／ＡＮＯ〜ＲＡ３／ＡＮ３ポートをアナログ入力端子に設定。ＲＢ７〜ＲＢ４ポートをデジタル入力端子に設定。ＲＢ０とＲＢ１ポートは出力端子として設定し、ＲＢ０ポートはデータ出力端子に、ＲＢ１ポートはオシロスコープでの検査のためにトリガーの出力端子として設定している。間隔１０ｍｓ毎に、４つの端子のＡＤ変換を行い、続いて４つのＲＢ入力ポートのレベルを走査させる。この後の４つの端子の論理レベルを１バイトのデータ変数に代入する。
これら５組のデータは得られた時点でシリアルデータに変換し、ＲＳ−２３２Ｃ規格に準拠したシリアルデータ列として、ＲＢ０ポートから出力される。１周期中に同じ処理が５回行われることになる。
受信側のプログラムの流れは以下の通りである。ＲＢ０／ＩＮＴ端子をデータ受信端子に設定。この端子は割り込み機能があるので受信端子として設定している。送信側から１０ｍｓ毎に５バイトのデータが送信されてくる。ＲＢ０／ＩＮ T 端子のレベルがＬからＨに変化した（スタートビットが到着した）時点で、プログラムに割り込みを発生させ、割り込みを一時停止させ、受信データから５バイト分の８ビットデータの復元を一気に行わせる。その後、受信した数値に対応させ、必要な長さのパルスを同時に形成し、サーボモータの同時駆動、及びＬＥＤの点滅の一連の処理を行わせる。その処理が終わったら、割り込みを許可し、次のデータ列が入力するまで待機させている。

-9-

４．動作特性
図５に送受信されるデータ列の概略図を示している。１０ｍｓを１周期として、５バイトのデータが送受信される。５バイト分の時間長は約０．５４ｍｓである。バイト間の時間長は約１３０ μ秒。１バイト分の時間長は約５０μ秒となっている。バイト間には８０μ秒の時間の空きがあるが、これは主としてＡＤ変換のための必要とされている時間である（実際には、もう少し小さくもできるであろう）。
送受信する１バイトデータ列は、スタートビットが１ビット 、データビットが８ビット、ストップビットが１ビット、を持ったＲＳ−２３２Ｃ規格に準拠している。１ビット当たりの時間は５μｓとなっている。
サーボモータの駆動には逐次方式と同時方式が考えられる。一つのサーボモータを駆動するためのパルスを出力した後、次のサーボモータを駆動するパルスを出力する。これを繰り返すのが逐次駆動方式である。それに対して、全てのサーボモータを同時刻に駆動を開始するのが同時方式である。逐次方式では１つのサーボモータを駆動するために必要な時間として２．５ｍ秒以上を保証しておかなければならないので、４つのサーボモータならば１０ｍ秒以上の時間を要する。制御するサーボモータの数が増えればそれだけ総制御時間が長くなる。それに対して同時方式では全てのサーボモータ制御パルスは同時刻に出力されるので、何個のサーボモータを駆動させるとしても、必要な時間長は２．５ｍ秒を大きく越えることはない。本システムでは同時方式を採用している。この点からサーボモータの制御パルスの出力方式は同時方式が優れているようであるが、同時にモーターを駆動するので、必要とされる瞬間電流が充分に供給できるような電源としておく必要がある。
電源として単３電池４本の＋６Ｖとして、システムの動作状況を試験したが、問題なくシステムは駆動した。モーターを駆動するので、消費電流は結構大きくなるので、電池の消耗は激しい。電池の電圧低下は受信側での動作の不調をもたらす。従って、安定した動作を保証させるためには、常に新品の単３電池にするか、蓄電池式のニッカド電池を使用することを勧める。
10 ms
１ サイ クル

0. 54m s

0.5 4m s

拡大
1 30 μ ｓ
５ バイ ト
拡大
5 μs

50 μs

１バ イト
Start bit 0bit 1 bit 2 bit3bit4bit5bit

bit6bit7

Sto pbit

図５

送受信されるデータ列の概略図- 10-

５．改良及び応用案（１）現時点ではアナログ４チャンネル＋デジタル４チャンネルであるが、これを簡単に拡張できる。
図５からわかるように、５バイトのデータの必要な時間は０．５４ｍｓである。最後の１バイトは４つのスイッチのデータ用である。アナログデータの１バイト分だけでは約０．
１３ｍｓの時間幅である。サーボモータ駆動用のパルス幅の最大幅を２．５ｍｓとすれば、アナログデータ分として７．５ｍｓの余裕があることになる。簡単な計算から、この方式のままで５０チャンネル以上のアナログデータを送受信することができることになる。１
サイクル１０ｍｓとしているので、これを定格の２０ｍｓとすれば、１００チャンネルのプロポーショナルサーボコントローラとすることができる。
（２）現時点ではＰＩＣのクロックは１０ＭＨｚであるが、２０ＭＨＺとしても良い。
ＰＩＣ１６Ｃ７１１のテクニカルノートによれば、２０ＭＨｚのクロック動作まで保証している。とは言っても装置の試作段階から、通常は最高周波数での動作を要求はしないものである。余計な動作不良状態になるのを避ける意味もあり、少し下げた１０ＭＨｚのクロックで回路の開発を行った。現状ではこれで充分である。
２０ＭＨｚクロックにすることもハード的には単純である。使用している１０ＭＨｚセ
ラミックオシレータを２０ＭＨｚのものに変更するだけである。が、ソフトではＡＤ変換に必要な時間長、その他のタイミング、サーボモータの駆動パルス幅に関係するところを注意を払いながら変更していく必要がある。オシロスコープを使用しながら行えば、それほど難しい仕事ではないであろう。

- 11-

６．終わりに既製品のサーボモータを使用することにより、極めて素子数の少ないプロポーショナルシステムを構築することができた。
ここで用いたサーボモータの同時駆動方式を用いれば、いとも簡単に駆動できるサーボモータ数を幾らでも増やすことができる。
送受信には、１線のケーブルを用いている。無線方式でないことが心残りであるが、１線方式となっているので、既製品のＦＭデータ送受信機を転用することにより、容易に無線化をすることができよう。
今後はこのシステムを応用した装置の開発を課題としていきたい。
２０００年４月１０日

参考文献（１）「トランジスタ技術」２０００年２月号、ｐ１８５〜ｐ１８７，ＣＱ出版 。」- 12-