フライトコントローラーを自作してみる。~その11~ Rev2基板

ブログを遡って読むと、ほぼ1年前からフライトコントローラー(以下FC)を作り始めていました。当初はFCを何度も壊すので自作して安く済まそうという魂胆でしたが、だんだんとFCを作る事自体が目的になっている気がします。

前回はRev1基板を使って3インチ機でFPVしたところまで書きました。その後5インチ機でも問題なく飛行できる事を確認しています(まあ3インチで飛べりゃ5インチでも飛べますよね)。

HOIHOIFC-F411 Rev1
ツギハギだらけです。パターンも何か無駄に遠回りしているところがあるし

という事で、Rev1基板の不具合修正や改良を加えたRev2基板を作っていきます。

まずはRev1基板の不具合点を振り返ると・・・

・USB信号のプラスとマイナスが入れ替わっていた。
・ブザー駆動トランジスタのピン配置を間違っていた。
・ブザー駆動トランジスタのベース100KΩという大きな抵抗値になっていた。
・DCDCコンバータ周りの配線が長すぎて電圧が揺れていた。
・取付穴位置を30mm角ジャストにしていた(一般的なサイズは30mmジャストではなく30.5mmでした)

当然ながらこれらは修正します。

BEC(DCDCコンバータ)について

バッテリー電圧から5Vを作り出すDCDCコンバーターICについて、前回はMonolithicPower社MP2359を使っていました。これは出力1.2A、最大入力24Vでしたが6セルバッテリーにすると耐圧が足りないのでMP1584に変更します。これだと出力3A、最大入力28Vです。
実際にはショットキーダイオードの3A品はサイズが大きいので2A品を使う事にして定格2A(瞬間的には3Aいける)BECです。
事前にMP1584を試した話はこの辺りに書きました。

左がMP2359,右がMP1584。
MP1584にするとだいぶ大きくなるなぁ。

DFUモード安定化

前回DFUモードに入りにくい(不安定)という問題があり、BOOT0に加えてBOOT1端子もLに落としたりしてみましたが今ひとつすっきりしていませんでした。
でも今回原因が分かった気がします。
STM32マイコンはBOOT1端子=H状態で起動するとブートローダーが立上るのですが、この時USARTやCAN等、幾つかのシリアルポートに信号が来ているかどうかをチェックし、その後USBを見に行きます。 この時USART端子に信号が入っているとその端子からプログラム書き込み信号を待つ様になってしまいます。
STM32F411の場合、USART1と3がブートローダー端子として動作します。そしてRev1基板ではUSART1にSBUS受信機を接続していました。
恐らくこれが邪魔してUSBを受け付ける状態まで進めなかったのだと思います。なのでRev2基板ではSBUS受信をUSART6に変更します。
そういえば市販FCもUSART6にSBUSを入るのが多いと思ったら恐らくこの理由なんだと思います。

ジャイロ

前回InvenSenseMPU6500を使っていました。
どうやらこれだと感度が高すぎて振動対策をしっかりする必要があるらしく、市販FCは大抵MPU6000を使っています。
という事でRev2もMPU6000に変更します。
またMPU6500はリードが0.4mmピッチに対しMPU6000は0.5mmピッチなので実装し易くなる事も期待しています。

左がMPU6500、右がMPU6000。
これも見比べると差が大きい。

マイコン本体

これまで最初に入手した評価基板に合わせてSTM32F411を使ってきたので今回もこのマイコンで進めます。
でもよりクロック周波数が高いマイコンにSTM32F405があり、ピン配置を調べたら1か所だけ変更すれば載せ替え出来そうなので後で試せる様に作っておきます。更にSTM32F722にも同じパッケージの製品があり、これもピン配置がほぼ同じなので使えるかもしれません(でも値段が高いんですよね)。

モーターの数

Rev1では基本の4本に加え予備として2本のモーター出力端子を持っていました。これでヘキサコプターを作れる筈なのです。
そしてRev2では更に2本追加し計8本にするので、その内オクタコプターを試してみたいと思います。

その他

発振子を小型の物に変えたり部品の配置を変更したり、結局かなりの変更量となりました。

最終的な回路図はこれ

そして基板パターン設計(これが一番大変だった)。

部品配置を変更したのでちょっと余裕ができた。
やっぱり基板設計は最初の部品配置が大事ですねー。

基板発注

基板はPCBGOGOに発注します。約500円の格安基板で作る場合、FusionPCBだとソルダーレジストの最小値が0.4mmなのでマイコンやジャイロのピン間隔(0.5mm)に対しては無理があるのです。
これに対しPCBGOGOは0.1mmなので多分大丈夫。(ただし送料が若干高い気がするし、また面付けすると高くなるので用途によって使い分けてます)

つづく・・・

コンデンサーマイク大量

前回に続き、共立エレショップで購入したパーツの話です。
デジットが移転(で一時期閉める)という事で色々なパーツが放出されているのです(もうだいぶ終わった感じですが)。
そこでコンデンサーマイクが200個で¥200円というのがあり、先日の超音波振動子と一緒にポチっていました。
でも冷静に考えるとマイクを使った工作って殆どしないので、これで今後まず一生コンデンサーマイクを買う事は無いと思います。

そして実物。シリコン製のカバーみたいなのを被っています。
電極が3本出ているけどこれも導電ゴムっぽい柔らかい素材なのでハンダ付けはできそうにありません。

何はともあれ動作させ見たいと思いますが、あまり情報がないんですよね。
とりあえずカバーを外してみるとこんな感じ。同心円上に電極があり、外から見ると端子は3極に見えましたが実際には2極です。

ちょっと細かくてやりずらいですが何とかハンダ付けして・・・

とりあえず外側がGND,中心が信号および電源と予想して動作させてみました(もし壊してもあと199個もあるし)。

出力波形。
ちゃんと音を拾っています。

そのままPCのライン入力にいれるとちょっとレベルが低めですが動作しました。オペアンプで少しレベルを上げれば丁度良くなると思います。

もう一度ネットで調べると、どうもホシデン製のこれっぽいですね。
・・・という事で次にマイクを使う事があれば(あるのか?)活用しようと思います。

超音波振動子

みら太さん共立エレショップの超音波振動子(特価¥1000)の事をツィートされており、見てたら自分も欲しくなったのでポチりました。

ドライブ基板とはこんな感じで接続します。

ランジュバン型ボルト締め超音波振動子というもので、ググってみると圧電素子をボルトで締め付ける事で壊れにくくしているらしいです。なので大きなナットがついているネジは振動子を固定する為のものではなく、付属の説明書にも緩めてはいけないと書かれています。

ではどうやって固定するのでしょう?またまたググると超音波洗浄機の例では洗浄槽に接着しているとの記載を見つけました。方法は追々考えるとして、まずは実験的にやってみます。
振動子を上向きにするとぴったり合う穴をJw-cadで書いて・・・

MDFの端材をレーザーで切りました。

この穴に振動子をはめ込んで適当な梱包材の上に乗せてみます。

振動面には細かい金網がねじ止めされており、説明書によるとここに水を垂らせば霧が発生すると書かれています。
ではやってみます。

確かに霧が発生しますね。なおジリジリという音は金網が振動している様です。

金網を外すとジリジリ音はなくなり、あまり霧は出ません。

次に超音波洗浄を試してみます。
金網を外した面に両面テープを貼り・・・

洗浄槽としてタッパーを貼り付けます。
両面テープでいくらかは超音波が遮断されるかもしれませんが、まあやってみましょう。
ところで超音波洗浄としてまず思いつくのは眼鏡ですよね。入れてみました。

その他、ピンセットやネジや・・・

適当なものをぶち込んで・・・

綺麗になったのかというと良くわかりません。
振動でネジが移動していくのでそれなりに超音波が伝わっているのだと思いますが。

ところで説明書に周波数等は不明と書かれているので測ってみます。
両面テープに磁石をくっつけて適当なコイルで検出しようとしましたが何も現れません。コイルの巻き数が少ない気が・・・

そこでクリスタルイヤホンをマイク代わりにしてオシロにつなぐと・・・

こんな波形が出てきました。
周波数は33.5KHz。
なんか中途半端な気もしますが周波数精度にこだわる感じでもないのでこんなものなのでしょう。

という事で、もう少し色々と試してみようと思います。

テレビのリモコンから異音

テレビのリモコンを手に取ったら内部でカラカラという音がしました。
もし金属のネジが外れていてショートするとまずいので開けてみる事にします。

よくあるSHARPのリモコン
10年以上使っています。

異音の原因、電解コンデンサのリードが完全に断線して転がっていました。
リードをL字に曲げて取付けてあったため、長年の振動で金属疲労を起こしたのでしょう。

電源のデカップリング用っぽいコンデンサ。

パターン面側に極性が書いてありました。

パターン側


交換しても良いのですがそのままでも取り付けできそうなので・・・

折れて残ったリードにハンダ付けしました。

ただし、このままだとまた振動で外れる可能性大なのでグルーガンで固めておきます。

ケースに当たりそうなグルーはカッターで削り取ります。

以上で修理完了。というかコンデンサが外れていても動作してたんですけどね。

RotorHazard~その2~

先日作ったRotorHazardを屋外の練習で使ってみました。

庭でTiny機を使って試した時の感触から、シールドケースにこれくらいの窓を開ければいいかなと思ったのですが・・・

思ったより感度が低く、結局は蓋を全開にしてちょうど良い程度です。

こんな感じでデータが取れます。
ほぼ問題なく取れているし取込みミスしたところは後から修正できます。

という事でいい感じに使えているのですが、PCとの間のWi-Fi回線が時々切れます。一度機体をぶつけてから発生している気もしますが単に電波状態の問題かもしません。
RoterHazard(のラズパイ)とPCの間は先日リサイクルショップにて770円で購入したWi-Fiルーターが中継しています。小型なのが気に入ってこれにしたのですがあまり強力そうには見えません。
同じ店にアンテナが3本くらい生えている強力そうなのが約900円であったのでそっちが良かったのかも。。。

家に帰って確認するとケースにペラが思いっきり当たった傷がついていましたがそれ以外に問題はなく、やはりWi-Fiルーターとの距離の問題だと思います。

次回やる時はRotorHazardとPCのなるべく中間付近にWi-Fiルーターを置いて距離を短くしてみます。

MP1584,MP1854,MP8514???

自分で書いた記事を読み返したらスイッチングレギュレーターICのMP1584の事をMP1854と書いたりMP8514と書いたりメチャクチャになっていました。
この時なんかはタイトルからして間違ったまま最後までMP1854で通していて、あまりにヒドイので本日修正しました。

正しくはMP1584です(もう間違えない様自分に言い聞かせる)。
メーカーサイトはここ→https://www.monolithicpower.com/jp/mp1584.html

しかしブログをもっと読み返したらいろんなのが出てくるんだろうな。

RotorHazard

NonsayaDroneWorksにRotorHazardの記事が載っていました。

私はドローンレースを主催する事はありませんが、練習の時にはラップタイムを計測したくて、この記事と同じ様にARマーカーを試したりしましたがやっぱり時々読み取りミスが発生するんですよね。また、かつてこんな記事を書いたこともありましたがその後まったく手を付けていません。
そこでこのRotorHazardなるラップタイマーを試してみようと思います。

RotorHazardはRX5808レシーバーが受信したFPV信号強度をArduinoを経由してRasberry Pi(以下ラズパイ)に渡します。ラスパイはWebサーバーとして動作し、PCのブラウザーで接続して操作できます。
RX5808とArduinoは受信するチャンネル数だけ必要なので最終的には3セット欲しいところですが、取り合えず手元にある1セット分で、またラズパイ3がおすすめらしいですが無いので手持ちのラスパイ2でやってみます。

最初RotorHazardのリリース版(RotorHazard-2.2.0)だとエラーが出たのでRotorHazard-2.3.0-beta2で実行できました。ライブラリバージョンとのからみっぽいです。
まあ何はともあれ上手く動作している様なのでAliexpressにRX5808モジュールを追加注文して2チャンネルにしてみました。
なおシールドしておかないと離れていても電波を受信してしまうのでお菓子の空き缶に収めています。

そして庭でTinyレース。庭だとどうしても計測ゲート以外を飛んでいる時の電波を拾いやすくなるのでコース設定に工夫が必要です。

こうなると野外に出て3インチや5インチの機体で試したくなります。その為にはちゃんとした基板とケースに収めたいと思います。
基板はRotorHazardのサイトにガーバーデータが掲載されているのでこのまま作ればよいと思ったのですが・・・

どうやら最小のビアサイズが小さすぎて約500円の激安仕様では作れず、見積もり価格が3000円を超えてしまいます。また基板の元データが無くてガーバーのみなので簡単には修正できないのです。

ならば新たに基板パターンを作ってみようと思った訳です。
日本では大抵3チャンネルで足りるしArduinoNANOを載せるのも勿体ないので直接ATmega328のフラットパッケージ版を載せたらコンパクトにできそうです。
また屋外のインターネットがつながらない場所で使うならリアルタイムクロックも搭載すると便利です(ラズパイ標準ではリアルタイムクロックを持っていないので電源を切ると時計がリセットされるのです)。

そして10枚500円仕様で作った基板がこれ。 。

マイコンの上を跨いで受信モジュールを実装する立体構造。

今回メタルマスクは注文せず、紙をレーザーカットしたマスクでハンダペーストを塗ってみました。ちょっと塗り辛いけど何とかなります。もしかすると塗り辛いのはハンダペーストが乾き気味だったせいかもしれません。
ただ何枚も塗るだけの耐久性はありません。

メタルだとそうでもないのに紙だと何だか汚く見える。

そしてリフロー

やっぱりリフロー炉作って良かったですねー。
表面実装できると何かと便利です。

リフローの結果。
一か所抵抗が立ち上がっています。これがマンハッタン現象ってやつですかね。
ハンダペーストの塗りが薄かったのかも。ここはコテで修正しました。

そしてブートローダー書込み×3回。

基板の裏に書き込み用パッドを設けているのです。

次にファームウェア書き込み×3回。

一旦ファームを書き込めば以降のアップグレードはラスパイからできる仕様になっています。(試してませんが)

ここでミスに気づきます。RX5808のピン並びが逆になっていて裏返しでしか実装できません。ま、とりあえず裏返しに実装します。

ラスパイに載せて動作確認OK!
ラスパイはメルカリで格安だったラズパイ3にアップグレードしています。

ボタン電池が載っているモジュールがリアルタイムクロック。

先日のMP1854ENモジュールを取り付けてリポから電源を取れるようにしました。

ケースに使う空き缶を探しましたがちょうど良いのがなかったので、2.5mm厚のMDFをレーザーで切って箱を作り、ダイソーの0.3mm厚アルミ板(裏面テープ付き)を貼り付けてシールドしました。

ケースのアルミシールドは回路のGNDに接続。

電源の入り口

XT60コネクタで給電

蓋を一部切って電波を取り入れます。ここの開き具合で感度を調整する予定。

ここの空け具合は色々調整してみます。

なおWi-Fiのアクセスポイントがない屋外で使うときは 、ラスパイとPCとの間をアドホックモードでつなごうと思いましたが設定変更が面倒です。
結局リサイクルショップに行ったらWi-Fiルーターが¥770だったのでこれを使う事にしました。

Wi-Fiルーター。中古とはいえ安くなったもんです。

これで完成かな。今度練習する時に使ってみようと思います。

ところでいまRotorHazardのページを見たらこんな基板がリリースされています。Arduinoの代わりにSTM32を使い、マイコン1個でRX5808モジュール8枚(ドミノ倒しみたいに縦に実装!)を制御するという構造。進化してます。
しかし8台同時にレースできるんですね、海外って。

SBUS→PWM変換

ドローンをいじっていると色々とパーツが増えてきます。SBUS出力の受信機もそうなのですが、ふと思い立って固定翼の飛行機に普通のサーボを積もうと思うとPWM出力の受信機がないのです。
そこでSBUSからPWMに変換する基板を作ってみました。

まずシリアルポートが複数あってデバッグし易いArduinoMEGAを引っ張り出してきます。SBUSの受信は何度もやっているのでソースをコピペし、沢山定義したサーボ出力に値を渡せばファームは出来上がりです。
その後ArduinoUNOに移しても問題なく動作しました。

そして基板化。
私が作る飛行機は大抵スチレンペーパー製の小型のものなので基板もなるべく小型がよいです。そこで最近はリフロー炉も稼働した事だし、中華格安メーカーに表面実装の基板を発注しました。マイコンには0.5mmピッチQFNパッケージ(リードがないやつ)のATmega328MUを使います。

という事で面付けして全部で120枚分の基板ができてきたのですが・・・・・

約500円の格安基板

シルクデータを含めるのを忘れていました。
更に0.5mmピッチのところソルダーレジストが載っていません。一瞬基板メーカーにヤラれたか?と思いましたが仕様を見るとレジスト幅は最小0.4mmという仕様でした。0.5mmピッチでリード幅もあり、どう考えてもレジスト幅は0.4mmには収まりませんよね。
そういえばフライトコントローラーを作った時、わざわざレジスト幅が細かいメーカーを選んだのでした(でもそのメーカーは面付けすると価格が上がるのです)。

マイコン周りのソルダーレジストが崩れている

とりあえず比較的上手くレジストが載っている基板を選んで(120枚もあるので中には上手くいっているのもあるのです)部品を実装しました。

そしてArduinoUNOを使ってブートローダーを書き、FT232RLを使ってファームウェアを書きます。

ブートローダー書き込み中。
奥に見えているフリスクケースがFT232RL

ピンヘッダを付けて完成!
12chまで出せます。6chまでは3pinのピンヘッダで、残り6chは信号だけ出しています。

例によって1か所ミスっておりジャンパーで補修しています。
(どこかわかります?)

息子が製作していた機体に積んで飛ばしてもらいました。特に問題なく飛んでいます。

高校生の息子が作った機体。
キット化して小遣いを稼ぐ野望を抱いている様です。

MP1584EN その2

フライトコントローラーへの搭載を目論んでいるMP1584使用のDCDCコンバータがうまく動作しない話を先日書きました。
だいぶ更新をサボっていましたがその後の記録です。

まず前回はAliexpressで購入したMP1584ENがパチもんではないかという疑いを持ったのでマルツエレック経由DigiKeyにMP1584単体と、これを使用したモジュールを発注したというお話でした。

まずは届いたモジュールの動作を確認・・・

MP1584ENモジュール

1A流した時。きれいな波形が出ています。
※CH1(黄)は未接続、CH2がインダクタ通過後の出力波形。

CH2(青)が 5V出力5Ω負荷。
CH1はオープンです。

ICのスイッチング出力にCH1(黄)のプローブを当てると1MHz弱の矩形波が見えています。なお上の波形では綺麗だった出力が ここにプローブを当てる事でノイズが載る様です。

CH2(青)が 5V出力5Ω負荷。
CH1は(黄)はSW出力(MP1584の1pin)

次にIC単体で購入したMP1584EN

上がAliexpressで購入。
下がマルツ経由Digikeyで購入。

これは結論から言うとICがパチモンで上手く動作しないという訳ではありませんでした。
自作基板のMP1584ENをAliexpress購入からマルツ購入の物に変えても全く変わりません。

で、何が問題だったのか

結局は配線の取り回しが最大の原因でした。
欲張ってスイッチング周波数を上げると極力配線を短くする必要があります。それは言葉では分かっているのですが、では実際どれくらいギリギリまで詰める必要があるのかというと、もうとにかくできるだけ! 試作だからといってリード部品を使った時点でアウトだったみたいです。
今回やったのは次の点・・・
・まずインダクターとか転流ダイオード、コンデンサ類はとにかく可能な限り近づけます。
・インダクターも前回はアキシャルリードのパワーインダクタを使っていましたがチップ部品に変えました。
・Compensation端子につけるCRや周波数決定端子の抵抗もリード部品ではスイッチング波形が乱れていたのがチップ部品に変えると綺麗になりました。

ダメダメな配線
なんとかなった配線
ダメダメな波形
CH1は(黄)はSW出力
CH2(青)は5V出力5Ω負荷。
何とかなった波形
CH1は(黄)はSW出力
CH2(青)は 5V出力5Ω負荷。

何とかなった波形
CH1は(黄)はオープン、
CH2(青)は5V出力5Ω負荷。

スイッチング周波数の1MHzって電波の周波数やマイコンのクロックと比べると大したこと無いイメージですが、大電流のスイッチングは難しいんですね。

という事で・・・

6セルに対応するDCDCコンバータをフライトコントローラーに搭載できるめどが立ちました。
改良版フライトコントローラのプリント基板設計は、一番最初に電源回路からパターンを作っていこうと思います。

BRAVO BST12修理 その3

またゴムボート用ポンプBST12の修理の話です。
このブログに過去2回投稿しましたが・・・
BRAVO BST12修理 その1
BRAVO BST12修理 その2
この時修理したのは息子が通っていたヨットクラブにあったポンプで今回は自分のなのです。

今回、久々に自分のポンプを動作させてみるとブロアーモードは正常に動くのにコンプレッサーモードに切り替わらず止まってしまうのです。
ま、今すぐに使うわけではないのですが、壊れたとなると直したくなるのが人情というもの。
早速開けてみました。

これがコンプレッサー側のモーター。モーターに直接電源をつなぐと回るので今回はモーターは壊れていない様です。

上のリレーがRL2、下がRL1です
(回路図に落とす際に勝手につけた番号)

となると制御回路の問題かな。
基板を取り外す為、バラバラにしました。

基板の裏側・・・

ここから回路図を書きだします。もしかすると間違っているかもしれないけど、たぶんこんな感じ・・・

部品番号は適当に割り振っています。

2個のリレーの内、RL1が全体のON/OFF、RL2は2個のモーターを切り替えるのに使っている様です。
FLAPと書いたスイッチはブロアーの出口に風を受けて動作するスイッチで、空気が流れているとON,ゴムボート内の空気が満タンに近づき流れが弱まるとOFFになります。
PRESSUREと書いたスイッチはあらかじめダイヤルで設定した圧力になるとOFFになるスイッチで強制停止ボタンと直列につながっていて、どちらかがOFFになれば全体の動作が止まる様になっています。

正常時の動作としては、STARTボタンを押すとRL1,2両方がONになりブロアー側のモーターが回り始めます。ここでSTARTボタンを放してもRL1はD3→PRESSUREスイッチ→STOPスイッチを経由して電流が流れるのでONを維持します。またブロアーが回る事でFLAPスイッチがONになるのでRL2もONを維持します。
暫くしてボートに空気が溜まってくるとブロアーの流れが減りFLAPスイッチがOFFになります。するとRL2がOFFになる事でブロアーは止まってコンプレッサーが回り始めます。
その後、圧力が高まりPRESSUREスイッチが切れるとRL1もOFFになって終了するという動作になっています。

今回はブロアーが動作するのでRL1,RL2両方ONにはなっている様ですが、FLAPがOFFしたところで全体が止まってしまうという症状です。

モーターをバンバン回しながら調べるのも騒々しいのでモーターの代わりにLEDを付けてみました。

これでSTART押し→FLAP押し→START放し→FLAP放し とするとちゃんと動作してコンプレッサー側につないだLEDは点灯するんですよね。でもモーターをつないでやるとダメでRL1,2共にOFFしてしまいます。

・・・てことはモーターが回りだすことで電圧が下がってRL1のONを維持できなくなっているのでしょうかね。
配線が ヘタっているのかとか基板にクラックがあるのかとか疑いましたが根本原因にはたどり着けませんでした。モーターがヘタって始動時に大電流が流れているのかもしれません。

RL1の接点を手で動かしてやると(むき出しのリレーなので手で動かせるのです)コンプレッサー側モーターは元気に回って手を放しても回り続けるので切り替えの瞬間だけ電圧が落ちている感じなんでしょうか。

ところでRL2のコイル両端には1000μFの電解コンが付いています。たぶんFLAPスイッチのバタつきを拾わない様に時定数を持たせているんじゃないかと思います。これをヒントにRL1にも電解コンを付けて始動時の大電流をやり過ごしてやると上手く切り替わる様になりました。根本対策にはなっていない気もしますが今のところ正常動作しています。

パーツケースにあった1000μF/25Vの電解コンをこんな感じで取り付けました・・・

基板の裏にスペースがあるので他の部品には当たらないのです。

あとはフタを閉めて元の状態に戻しました。

根本原因が分かっていないのが気持ち悪いですが、取り合えずは動作しているのでこれで様子を見ます。