レーシングドローンのフライトコントローラー(FC)と周辺機器を接続して、データのやり取りを行うには、UARTと呼ばれるデジタル専用のポートを使用します。しかし、FCの種類によってはUARTポートの数が少なく、周辺機器の接続に困ることがあります。そんな時に裏技的に使用するのがソフトシリアルと呼ばれるポートです。
ここではソフトシリアルを使用できるように設定する方法を解説します。
実際に行ったスクリーンショットを見ながら簡単に設定できます。
Betaflight のソフトシリアルとは
解説はスキップして今すぐ設定方法を見るにはこちら
FCのポートが足りない時はどうする?
FCと周辺機器を接続するにはどうしても物理的・電気的に接続するための端子が必要です。FCの場合はハンダパットであったり、コネクターだったりします。接続する周辺機器が決まっていない汎用の端子がUARTです。それ以外に、モーターを回すためにESCに信号を送る端子、LEDをコントロールするための端子などがあります。また、デジタルではなくアナログですが、ビデオ信号を入出力するための端子があります。
ある FC に Betaflight Configurator で接続してみました。(下図)
ポートタブを見ると、UART1とUART2がありますが二つとも使用済みです。ここにもう一つ周辺機器を接続するポートはありません。
例として、このFCにテレメトリー対応のレシーバーを接続した場合を想定して説明します。
この場合、FCからレシーバーへテレメトリデーターを渡すためのポートが必要になります。しかしポートは既にふさがっていて空きがありません。こんな時に裏技的に使用できるのがソフトシリアルです。
他にポートの代わりになりそうなものはないの?
物理的に接続するポートは他に無いでしょうか?先ほど述べたようにESCやLEDに接続するポートで使用しない物があれば、これをテレメトリーデーターの受け渡し用に使用できないでしょうか?
FCに5個目と6個目のモーター用の接続パッドがある時があります。使用するのがクワッド(プロペラ4つ)なら5・6個目のパッドは使用しません。これがソフトシリアルに使用できます。
LEDパッドは当然LEDを点灯するために使用します。しかし、必ずしもLEDが必要でないならこのパッドも使用できます。なお、ブザーパッドはほとんどの場合使用できません。ブザーは比較的大きめの電流が必要なのでそれに対応する回路が組み込まれていることがあるからです。
この例ではLEDパッドを使用することにしましょう。
ソフトシリアルとして周辺機器を接続するポートをつくる
LEDパッドはLED回路をコントロールして点灯させるためのものです。ここにレシーバーを接続してテレメトリーデーターを渡すにはそのままでは実現できません。
このLEDパッドを、LEDをコントロールするためのパッドから、他のデータをやり取りするためのパッドに変更します。
FCにはあらかじめある物理的な端子は、LEDをコントロールするための端子だと設定されています。この設定を変えてやることでソフトシリアルとして、新たに周辺機器を接続するためのポートを作ることができます。
もちろんLED用としては使用できなくなります。
なお、Betaflight ではソフトシリアルによって二つまでポートを追加できます。
ソフトシリアルを設定する
現在の設定をしらべる
この例ではLEDパッドをレシーバーに接続してテレメトリーデータを送信する用に設定します。
FCに搭載されているCPUには多数のムカデのようなピンで接続されており、そのうちのいくつかは用途が変更可能です。
そこで現在使用されている設定(リソース)をこれから調べていきます。
FCをUSBケーブルでパソコンと接続します。Betaflight Configurator を立ち上げて接続します。
CLIタブを開き、以下のコマンドを入力してEnterキー。
resource
すると現在使用されているリソースの割り当て状況が表示されます。念のために保存しておいてください。
リソース一覧(上図)を見ると resource LED_STRIP 1 A08 の行があります。このA08が CPUのピンの番号になります。言い換えるとピン番号A08を通してLEDのデータを出力していたのです。
そこでこのA08のピンにどのデータをやり取りするのか変更します。このような変更作業を一般にリソースの書き換えと言っています。
FCのリソースを書き換える
まずこのA08からはLEDのデータを出さないようにします。以下のコマンドを入力します。
resource LED_STRIP none
これでA08のピンには何も割り当てが無くなりフリーになりました。もう一度リソース一覧を表示してみると LED_STRIP も A08 もありません。
A08 が空きになったのでそこにソフトシリアルを設定します。
以下のコマンドを入力します。
resource SERIAL_TX 11 A08
このコマンドの意味ですが、今回はFCからレシーバーへデータを送るので、SERIAL_RX ではなく SERIAL_TX を選択し、数字の 11 を入れます。この数字の 11 と 12 がソフトシリアルになります。11 と12 の二つ使用できることになります。最後に 先ほど空きにしたピン番号の A08 を指定します。
そうすると下図のようになります。
SERIAL_TX 11 A08 が追加されました。
なお、SERIAL_TX と SERIAL_RX の各二つは UART1 と UART2 として使用していたポートです。
以上の設定変更を記録するため忘れずに save してください。
save
ソフトシリアルを有効にする
FCが再起動したら接続します。「ポート」タブを見ても、まだ以前と変わりません。「基本設定」タブを開き、「その他の機能」でSOFTSERIALを有効にします。「保存して再起動」します。
FCが再起動したら接続します。「ポート」タブを見ると SOFTSERIAL1 が追加されています。
SOFTSERIAL1にテレメトリーのデータを出力するので、「テレメトリー出力」の項目を使用するレシーバーに合わせます。今回は FrSky を選択しました。その右は転送速度ですが AUTO のままで問題ないでしょう。
以上でソフトシリアルの設定は完了です。従来のUART1、UART2の他にSOFTSERIAL1を加えた三つのポートが使用できるようになりました。
ソフトシリアルで使用しない方がいい周辺機器
ソフトシリアルはCPUが制御するのでスピードが遅くなります。したがって、スピードが要求されるものには使用しない方がいいでしょう。具体的には、レシーバーの入力(RC信号)です。手元の送信機から送られ受信したRC信号は、遅延なくFCへ送信されなければ正確な機体制御ができなくなりますよね。レシーバーは必ずUARTに接続してください。