きっかけ
Maker Faire Tokyo 2018には”自作ゲーミングデバイス”をメインに出展する予定だったので、一品物コントローラー以外にもこのお題で何か有料頒布できるものが欲しい、という訳であまり手が掛からず作れる物を探していました。
そこで昔は幾つかありましたが、近年のクルマゲー不振に伴いカー用プロポタイプのPC用コントローラーが最近まともな物が出てない。ということでラジコンプロポをPCに繋ぐアダプタを作ってみる事にしました。ソーラーボート用のプロポをラジコンカー用にしておけばデバッグ機材の出費も最小で済みますし。
あとソーラーボート用の設定ソフト、MissionPannerにPC上で挙動をシミュレーションするモードがあるのですが、仮想機体の操作にPCコントローラーを別途アサインする必要があります、「実機用のプロポ使わせてよ」というのも動機の一つです。ラジコンはゲームと違ってステートスイッチ、トグルスイッチが欲しいのです。
今時のラジコンプロポ事情
世界的にもフタバが寡占している、というのは既に昔の話で中国メーカーが台頭しています、FrSkyとかiRangeXなどが目につきますね。安価高機能で魅力的ですが技適を取っているモデルが非常に少ないので横目で見つつターゲットをフタバに絞ります。
今時のプロポ受信機はおなじみのサーボ信号以外にUARTで受信データを垂れ流しするのが普通らしく、各メーカーで差異はあるのですがこいつをUSB-HIDになれるマイコンで読めば簡単に実現できそうです。
Futaba S-BUS
フタバの場合はこのデジタル信号を”S-BUS”と呼ぶようです、解析している方は多いのですがネット上に転がっているデータは往々にして不正確なので、R314SB-Eの吐き出す信号をオシロとロジアナで実際に調べてみました。結果はこのようになりました。
- 3.3V 負論理
- 100000bps
- data:8bit
- stopbit:1.5
- parity:even
ジャスト100kbpsというのが難点です、UARTはその名の通り非同期でbpsが僅かでもずれるとエラーレートが跳ね上がります。良く使われる115.2kbpsでは不安ですね、ネットで拾える作例では115.2kbpsで読んでパリティは無視している物が多いですが本格的な実用には耐えないでしょう。
NXP SC16IS762
レートが独特であれば外部クロックのUARTブリッジをマイコンに繋げば良い、という事で選んだのがNXPのSC16IS762です。FIFOも64バイトあるので十分でしょう、シングルチャネルのSC16IS750でも良いですが値段も大して変わらず、負論理に変換するゲートも2chなら丁度RX/TXで4つ使いきれるのでデュアルチャンネルの762にしてみました。
はじめてのリフロー
このプロジェクトを始めたもう一つの動機が自作リフローの導入です。ソーラーボートのパワーコントローラーを制作するのにSMDをどうしても使いたいのですが、最初から大型基板は無謀なので小型安価な頒布基板を沢山焼くついでにリフローの調整をしてしまおうという姑息なアイディアです。ヒーター本体は定番のNT-W50-Sを使います、中古で3000円です。
スイッチサイエンスさんのリフローキットはずっと品切れなのでArduinoUNOとMAX6675を使って制御部を作ります。SSRは昔自作した4chの物を流用です。
熱電対は最初このようにシース型を使ってみたのですが、応答が非常に遅く60秒以上遅延するのでこの用途には厳しいという判断になりました。
何パターンか試して基板に裸熱電対をカプトンテープで貼る方法に落ち着きました。
これなら応答時間は数秒といった所で制御は非常に楽です。スケッチはこちらを参考に新規で起こしてみたのですが、これプレヒートと本加熱の待機時間逆じゃないですかねぇ??
そんなこんながあり上手く焼けるようになってきました。
ターゲットマイコン
個人的な嗜好で頒布物は改造を前提とした物であるべき、というポリシーがあります。量産市販品と比べるとコストは圧倒的に悪いですし入手性信頼性etcetc…という訳で「回路もソースも公開されていて簡単に改造して遊べる」という点を推したいからです。これを踏まえてUSB-HIDにお手軽にコーディングできて入手性が良いということで選んだのがこちら、STM32F103Cボードです。BluePillが安価で有名ですが評判がよろしく無いのでRobotDynの通称BlackPillを選んでみました。BluePill程で無いにせよ$3と非常に安価なので頒布物に含める事にしてしまい、まとめて購入です。
アートワークと試作
フルSMDは初めてでしたが部品点数も少ないのでアートワークはスムーズに進みました。
ステンシルが要るのでelecrowに製造をお願いします。
出来てきました。
焼きました。
シルクでWII_CNとなっているのはWiiのコントローラーです。信号はI2Cである事は以前から知っていましたが、AliExpressでコネクタを発見したので載せてみました。
S-BUSブリッジコードの制作…そして
そしてS-BUSから流れて来るデータを処理するコードを書いてみたのですが…45バイト15mSec周期、ロジアナで見てみるとこれI2Cでデータ受けてUSBで再送信すると1chでも間に合わなくない?収まらくない?というか全然足りないですねはい、ええ。
そんなこんなの事前調査不足でこの企画は見直しとなりました、さらに良く調べるとSTM32F10xのUARTは非常に高機能で実はUARTブリッジ要らないんじゃない?という疑惑が発生してしまいました。
BlackPill売ります
宙に浮いてしまったBlackPillを有償で引き取って頂ける方を募集します、Maker Faire会場で。
SC16IS762の方が高価ですが流石に居ないですよねぇ、小さいので一応持っていきますけど。