ImpactSystems(インパクトシステム)

シリアル通信デコーダー/解析基板

プロポのS.BUS信号をデコードしてLCDディスプレイに表示する基板を作成しました。主には受信器から出力されるS.BUS信号の16CH分の値をus単位で表示します。更にボリューム抵抗の値をオフセットとして入力信号に加算し、結果をS.BUS信号として出力することができます。そのうちの1CHから4CHをPWMサーボ信号として出力もできます。またデコード結果はLCDとは別に230400bpsのASCII信号としても出力していますからターミナルソフトを使ってリアルタイムに確認もできます。
例としてFutaba社送信機T12K+受信器R3001SBのS.BUS信号、それのトレーナ出力信号、Radiolink社送信機T16D+受信器R16F、におけるターミナルソフト(TeraTerm)での表示例を本記事中で説明しています。
S.BUS(エスバス)はFutaba社(双葉電子工業株式会社)の登録商標です。またS.BUSに関してショベルカーのコントロール基板の製作ラジコン送信機でスロットカーでも記事にしていますのでそちらも参照してください。

解析基板

Analyzer基板LCD側

左の写真は製作した基板に電源のみ供給した状態です。表示は16文字2行のキャラクターLCDです。1行目の左がCH番号で1~16まで下側のプッシュスイッチで切替えて表示します。1行目の真ん中がS.BUSのそのCHの入力値です。11bit/CHなので0~2047までが表示範囲です。表示している値はこの他も含めて10進数としています。1行目右端のA欄はS.BUSにオフセットを加算するアナログ入力値(ボリュームの値)です。S.BUSに合わせて11bitに拡張していますので最大±1023ですが、この基板では実質±879になっています。2行目は'OUT'で出力値の行を示し、真ん中のS欄が出力のS.BUS値です。右端のP欄はサーボ信号のPWM出力値です。これは1500us中心のJR形式にしています。
プッシュスイッチは左が前CH、中が次CH、右端は使用していません。青色のトリムボリュームはCH1とCH2用のアナログ入力で左がCH2、右側がCH1用です。S.BUS入力が無ければ写真の状態の値となり、トリムボリュームの変更でサーボモータのテストができます。

Analyzer基板CPU側

実はLCDの搭載面はCAD上裏側で、左の写真がCPUが載っている表側です。LCD面を上下ひっくりかえした状態で文字が逆さになっています。接続が解らなくなったとき用の印刷シールです。このコネクタの名前とLCD面のコネクタ番号を合わせて説明をします。

  • CN3(SB IN): 受信器からのS.BUS信号を入力します
  • CN4(SB OUT): S.BUS入力±アナログ入力を出力します
  • CN12(Power): 現在未使用の入力コネクタ、電源入力用
  • CN13(Power): 現在未使用の入力コネクタ、電源入力用
  • CN17(ADIN3): CH4用外部ボリューム入力(123pin=VOL132pin)
  • CN18(ADIN2): CH3用外部ボリューム入力(123pin=VOL132pin)
  • CN8(PWM0): CH1のPWM信号出力
  • CN9(PWM1): CH2のPWM信号出力
  • CN10(PWM2): CH3のPWM信号出力
  • CN11(PWM3): CH4のPWM信号出力
  • CN14(SW3): CH9用スイッチ入力(1-3pinショートで)
  • CN15(SW4): CH10用スイッチ入力(1-3pinショートで)
  • CN16(SW5): CH11用スイッチ入力(1-3pinショートで)
  • CN7(UART1): テキスト形式S.BUSデコード結果
  • CN2(UART0): オシロ用S.BUS信号(normalRX,2pin)

回路図

main回路図

回路図を示します。先のコネクタの説明とこの回路図で正しく接続してください。

CN17とCN18の外部ボリューム入力は、ボリュームの3番ピンに接続する電源ラインを3.3Vにジャンパー処理しています。元のラジコン電源5Vですと、サーボモーター動作時の電源ドロップでアナログ値にノイズが乗ります。うっかりミスで5Vラインに配線していました。
CN4のS.BUS出力はQ4のエミッター抵抗をQ6のベース抵抗で代用していましたが、波形なまりがひどかったのでQ6を未実装にして1kΩ負荷としています。
C7~C12のアナログ入力フィルターコンデンサは取り除いて100kΩのPDN抵抗としていましたが、その抵抗の上に2段重ねで0.1uFを半田付けし直してフィルターを復活させています。抵抗によるPDNは、ボリュームの未接続を検出するためです。電源ON時に0Vであればボリュームが未接続と判断し、そのCHのオフセットを0としています。
CN8~CN11のPWM出力はBD2310Gによるプッシュプル回路で電流増強しています。CPU出力直接よりも多少ケーブルが長くても良くなっています。農薬散布ドローンの知見から採用しましたが、本基板の使用状況では過剰な機能かも知れません。
LCDライブラリの右側に3色LEDがありますが、これのプログラミングはしていません。実装していますが未使用です
CN1はオンボードプログラミングのコネクタです。E2liteを使用していますがこのコネクタは14pinで大きすぎるので、変換コネクタを自作し、MAC8のコンスルーで基板にその都度接続してプログラミングしています。

T12K+R3001SB_DG2ON

TeraTerm波形T12KR3001SB

S.BUSののTeraTerm表示です。送信機T12K,受信器R3001SB.DG2はON状態です。
CN3(S.BUS入力)のデコード結果をCN7へUARTで出力します。23400bps,8bit,none で3.3V_CPU直結信号です。CPUからは標準レ ベル(インバートしていない)の出力です。シリアル-USBコンバータを接続してTeraTermでモニターしています。
先頭の19(hex値)は総受信バイト数で25byteを示します。25byteでフィルタリングしているので常にこの固定値です。なお、表示している値は全てhex値(16進数)です。
':'に続く'0F'が受信した文字列の先頭byteでStart Codeと思われます。続く11bitHex値(bit10~bit0)x16個が16chのデータ列です。0x400が中央で最小値0x000,最大値0x7FFになります。Futaba T12KではDG1がch13,DG2がch14に出てきます。ch15,16は無いのでセンター値の0x400に固定されています。ch16値の次の1byteはデジタル値でDG1がbit0,DG2がbit1にも出てきます。ch13,ch14は2値のアナログ値です(0x070,0x790の2値)。
最後の1byteは0x04,0x14,0x24,0x34の繰り返しです。多分b3-b0がendcodeで、b7-b4がS.BUS2のスロットを表すものみたいです。本基板では最後の2byteは関知していません。0x0F検出後25カウントでS.BUS信号としています。
それとS.BUSに何も入力がないとこのシリアル信号は出力しません。

オシロ波形T12K

Yellow:CN3(S.BUS in),Cyan:CN4(S.BUS output)です。S.BUSの入力を一旦取り込んでから出力しています。S.BUS入力が無いときは20msでCN4からS.BUS信号を出力しますが、CN3から信号を検出するとデコード後にアナログ値を加算して出力するので、入力信号に同期した出力になります。Futabaは約15ms周期でした。
UARTのライン間の信号なので通常通り反転信号となっています。とは言ってもRS232Cとは異なり片極性なのでトランジスタ1個のインバートでバッファは十分です。

T12Kトレーナー出力_DG2ON

TeraTerm波形T12Kトレーナ

Futaba T12Kのトレーナ出力の解析値です。'システムメニュー' / 'トレーナー'の4/4ページで'CHモード'を'16CH'に設定するとトレーナ信号はS.BUS信号になります。トレーナー信号を出力するのは生徒側なので'ACT'は'INH'にします。この設定でトレーナ信号がS.BUSになります。このとき24byte目はDG1,DG2の影響を受けますが、ch13,ch14は0x400のままで変化していませんでした。

コネクタピン振り

Futaba送信機のトレーナコネクタはQQQ(サンキューテクノス株式会社)のE6-192J-100と思われます。その6ピンコネクタのピン番号は背面からみたときは写真のようになります。

クロスケーブルの解析結果は以下のとおりです。色はそのときのケーブル色です。

  • 1:NC
  • 2:白_GND
  • 3:赤_信号出力
  • 4:電源入力?(4-5ショートしてあるケーブルがあった)
  • 5:黒_電源出力(ほぼ電池電圧か? LCD6.7V表示時実測6.37V,DI電圧降下?)
  • 6:黄_信号入力
また、以下の条件があります。
  • トレーナーケーブルにおいて3,6番ピンはクロス接続
  • 先生は3番ピン出力--> 生徒6番ピン入力
  • 先生は6番ピン入力<-- 生徒3番ピン出力
  • トレーナCH数によって通信方式が異なる
    • 8ch: 従来の(JRも同じ)PPM方式 22mS周期
    • 12ch: 解析していない
    • 16ch: S.BUS UART,100kbps,8bit,1stop以上,even parity
  • 出力レベルはオシロスコープ観測で約3.3V
  • PUPしなくても信号は出てくるのでT.P.出力と思われる

Radilink T16D+R16F

TeraTerm波形T16DR16F

Radiolink製T16D+R16FのS.BUS信号です。最後の2バイトが0x00,0x00固定のようです。

オシロ波形T16D

Yellow:CN3(S.BUS in),Cyan:CN4(S.BUS output)ですが、Futabaと違ってUART信号周期が約6msです。時々同期が外れます。

ジャンパー処理

基板表

CPU面の写真です。印刷シールを外しています。

ユーチューブ動画

頒布

何枚か基板の余裕がありますので、興味のある方はBASEのSHOPから購入お願いします。なくなり次第終了します。

基板サイズは78x37mm、コネクタを含めた長さは85mmです。t1.6のガラエポ基板です。

URL、用語説明など

S.BUS(エスバス)はFutaba(双葉電子工業株式会社)の登録商標です。Futaba社がラジコンサーボ制御のために、シリアル通信のフォーマット(UART:調歩同期式通信、または非同期通信とも言う)を利用して、11bits/chのデータを工夫して送っている通信方式です。解析してみると特にスクランブルとかしていなくて、単純に8+3,5+6,2+8+1,,のように11bitのデータを8bit区切りにデータを分散して送信していました。UART機能は大抵のCPUに備わっているので各サーボは単純化でき、また受信機から各サーボに個別配線する必要がなくなる便利な通信方式です。Futabaホームページ及び取説によればS.BUSが正式呼称のようです。本記事中あるいはソースコードでは、Sbusと省略して記述することがあります。そのときはS.BUSと読替えてください。

免責

本記事の使用、不使用に関わらず、本記事の情報に基づく事件、事故等の利用者の不利益に関し筆者は一切関知しません。全ては個人責任においてご利用ください。