通常インドアエアプレーンではスロットルのコントロールとラダーのコントロールができれば飛行機を飛ばすことができる。エレベータのコントロールがあればなおいい。この PIC をモータコントロールとマグネットアクチュエータドライバを内蔵した自前の PIC に取り替えて、外付けのマグネットアクチュエータドライバを不要とし、軽量化を図ろうという魂胆だ。
受信機単体で 2.6g と手持ちの受信機の中では一番軽い。現在 A-1 はこの受信機のコネクタにスピードコントローラとマグネットアクチュエータドライバを接続している。この外付けのマグネットアクチュエータドライバを受信機に組み込んでしまえばわずかだが軽くなる。今回 PIC の勉強も兼ね、搭載されている PIC を外して、自らプログラミングした PIC に載せかえてみる。
今まで勉強しながら作ってきた物はすべて単機能のものばかりだった。電子シャッタ、マグネットアクチュエータドライバ、スピードコントローラのすべてがそうだ。その最大の理由はまだまだプログラミングのレベルが低いからにほかならない。今回は今までと違って複合された機能を一つの PIC で実現しなければならない。
A-1 インドアエアプレーンへの搭載を考え、必要なチャンネルはスロットルとラダー(エルロンに割り当て)とする。
受信機に搭載されている PIC を外す前に受信機の検波信号を調べてみた。 PIC の 4 番ピンに負論理のシリアルパルスが入っていた。勉強をはじめた赤外線受信機に使う赤外受光素子の出力信号と同じだ。
PIC の役割は三つ。まずシリアルパルスの中から必要なチャンネルのパルス幅を取得しなければならない。次に取得したスロットルチャンネルを出力する。三つ目はラダーをコントロールするための PWM 制御を実装する。
最初に悩んだのが 8 チャンネル分あるシリアルパルスの最初のパルスをどうやって捕らえるかだ。一般にデコーダ IC を搭載した受信機は積分回路を使っている。今回改造する受信機はすでに PIC だけでデコーダを実現している。
Futaba の送信機ではエルロン、エレベータ、スロットル、ラダー・・・・といった順にパルスが送り出されている。それぞれの取り得るパルス幅は 1msec から 2msec である。パルス列の繰り返し周期は約 23msec 。 8 チャンネル分のパルスすべてが 2msec になったとしてもパルス列の後ろには少なくとも 5msec の無信号部分ができる。また、それぞれのパルス幅が 2.5msec になることはあり得ない。そこで、 2.5msec の無信号を検出したあとに入力されたパルスがパルス列の先頭パルスと認識するようにプログラムを考えた。
次にそれぞれのパルス幅のカウントだ。ここでもかなり悩んでしまった。負論理なのでパルスの立下りでカウントを開始し、次のパルスの立下りでカウントをストップすればいい。言葉では簡単である。ストップしたパルスの立下りは次のチャンネルのパルスの開始でもある。
必要なチャンネルは 2 つ。つまり最初のパルスと 2 番目のパルスの間隔がラダーになる。 2 番目のパルスと 3 番目のパルスの間隔はエレベータなので今回は使わない。 3 番目のパルスと 4 番目のパルスの間隔をスロットルで使う。
とりあえず 2 つのカウンタを用意してそれぞれのパルス幅をカウントできるようにした。カウントが完了したら最初にカウンタの値の分スロットル出力をするようにプログラムを組み、その次に周期の終わりまでマグネットアクチュエータ出力を続けるようなプログラムを組んだ。
先頭から 3 チャンネル分のパルス読み込み + スロットル出力 + アクチュエータ出力を 23msec 周期の中に組み込む。しばらくはこの方法で PIC12C509A/JW にプログラムを組んでは実験を繰り返した。