フライトコントローラーを自作してみる。~その10~ FPVで飛ばす。

前回、自作フライトコントローラーでホバーリングできるところまで確認したので次はFPVで飛ばしてみたいと思います。

が、その前に電源周りをもう少し強化しておきます。前回ノイズっぽかったのを転流ダイオードの配線を縮めて改善したのですが、まだスイッチングノイズが載っているのでその他の配線も縮めました。またGNDも配線追加により強化し、ノイズがかなりマシになりました。第二弾の基板ではこの辺りを盛り込む必要があります。

スイッチングレギュレータ周りの配線短縮&GND強化
だんだん汚くなってきました。

また機体発見ブザーを鳴らすトランジスタ、2SC2712のピン配を間違っていてブザーが鳴りませんでした。そこで無理やりトランジスタの向きを変えて取り付けています。
更にベース電流を決めるR14を100KΩにしていたのは大きすぎで5.1KΩに変更しました。試作基板はちゃんと5.1Kだったのになぜか回路図の段階で間違っていたのです。

機体発見ブザー周り。
トランジスタ斜め取付け。
R14はこの後変更しています(5.1Kの手持ちがなく6.8Kを使用)

以上の対策をした上でレース機に積むのですが、5インチ機にいきなり積むのも勇気がいるのでまずは3インチ機で試します。しかしフライトコントローラは35mm角なので一般的な3インチ機には積めません。そこで以前作ったウッドフレームに積んでみます。これだと35mm角の基板を載せるスペースがあるのです。


久々に登場、木製フレーム機。

この機体、いまはバラバラなので別の3インチ機からフレームとFC以外の部品を持ってきました。
ESCは25mm角なのでこの様な変換スペーサーをプリントして載せることにします。

35mm角⇔25mm角変換スペーサー

こんな感じで25mm角のESCの上に35mm角のFCが載っています。

全てが無理やり・・・

そしてホバーリング実験。
この時点ではBetaflightのバージョン3.5を書き込んでいて、前回の確認と同じで問題なくホバーリングできます。。
次にBetaflight4.2を書き込んでみます。前回の機体では4.2だと機体の揺れが収まらなかったのですが・・・この機体だとピタッと安定しています。

ならばFPVやっても大丈夫そうですねー。
という事で近くの原っぱにやってきました。

ゴーグルを付けて飛ばしてみると、何事もなく飛んでいきます!!
基板はツギハギだらけですが飛んでいる間は市販FCと特に違いは感じられないのです。
息子にも飛ばさせてみましたが特に違和感は無い様でした。

という事で色々見つかった不具合を修正すべく第二弾のパターン設計をしながらも次は5インチ機で試そうと思います。

フライトコントローラーを自作してみる。~その9~ 動作確認

前回基板に部品を実装したので、いよいよ動作させてみます。

まずはUSBコネクタから5Vを入れて電流が振り切れない事を確認しました・・・これは問題なし。
その後、BOOTボタンを押しながらPCとUSBケーブルで接続するとDFUモードに入る筈ですが・・・入りません。(T_T)

回路を見直していくと基本的な間違いに気づきました。USBのD+とD-が逆になっています!!そりゃダメだわ。


完全に見落としですねー。

とにかく修正します。
D+とD-には後からダンピング抵抗を入れられる様0Ωの抵抗を付けているのでこのパターンを使って配線をクロスさせます。

モーターのコイル巻き直しに使ったエナメル線で配線をクロスさせました。

改めてケーブルをつなぎなおすと、今度はDFUモードに入りました。
そこでBetaflightConfiguratorのUpdateFirmware画面から以前作ったファームを書き込みました。
ここまで何とか問題なし(いや問題はあったけどとりあえず修正済)。

そして改めてケーブルを挿し直してBetaflightConfiguratorで接続すると、ちゃんと認識されています。この状態で基板を手で動かすと傾きが表示されるので、ジャイロセンサーも正常に接続できている事になります。実はここのパターンが細かくて一番心配でしたが正常にリフローできた様です。

あとはフライトコントローラーとしての諸々の設定をしていきます。
ここまで正常。

次に受信機を接続し、送信機の操作が伝わっている事も問題なし。

ではESCを接続してモーターを回してみます。安定化電源から2セル分の7.4Vを供給してBetaflightConfiguratorモーターつまみを上げていくと・・・ちゃんと回ります。

ならばバッテリー(3セル)を接続して送信機から制御してみると・・・なぜかArmingできません。安定化電源に戻して色々試したところ、どうやら2セル電圧だとArmingできるのに3セル電圧だとダメみたいです。
となるとBEC回路ですかね。電源電圧によって違いがあるのはBEC回路より手前だけの筈・・・。

そこでBEC回路の出力をテスターであたるとちゃんと5Vになっています。
しかしオシロで見るとBECのスイッチングノイズが電源が高いと大きく載る様です(波形取り忘れた)。

原因はどうやら図のところ、スイッチング電源のダイオードのループが長すぎた様です。
2層基板に無理やり載せたので電源周りが厳しい気がしていたのですがやっぱり。 GNDの取り回しが遠回りな感じ。

そこでGND側を最短になる様に配線を追加しました。これでもOKだったのですが念のため5Vラインに47uFを追加しています。でもまだちょっとノイズっぽいけど先に進めていきます。

これで3セル電圧でもArmingできる様になったので例の「えー加減な機体」にペラを付け、Angleモードでホバーリングさせてみます。

すると斜めに振動しながら浮き上がりました。でもこれは想定内。試作回路で飛ばした時もファームがBetaflight4.2だと同様の現象が起こり、市販のFCでも同じでBetaflight3.xに下げると安定したのです。今回もファームのバージョンは4.2を書き込んでます。
4.2で揺れる原因は調べていませんが何か機体の特性みたいです。でもバージョンで変わるのでPIDかフィルターかそのあたりを調整すれば4.2でも納まりそうな気がします。

とりあえず今回はBetaflight3.xを書き込んでみます。
・・・すると、あれ?またDFUモードに入らないぞ?

どうもDFUに入る時と入らないときがあります。
DFUモードに入れる方法には二通りあって、BOOTボタンを押しながら電源を投入する方法とBetaflightConfiguratorの「ブートローダー/DFUを有効化」ボタンを押す方法があります。このどちらの方法も不安定で、ダメなときはずっとダメなのに入る時は繰り返してもうまく入るのです。成功率30%くらいでしょうか。

BOOTボタンを押すとSTM32F411のBoot0端子がHレベルになる筈で、実際オシロで見てもHになっていて、この部分は大丈夫だと思います。
ここでひとつ気になるのはBoot1端子です。 Boot1はPB2と共通の端子で、マニュアルによるとDFUモードに入れるためにはこれをLレベルにすることになっています。
しかしDIOと共有なんですよね。この端子を本当にLに落とす必要があるのか、回路図を書くとき疑問に思いました。そこでSTマイクロエレクトロニクス社の純正開発ボードSTM32F411Nucleoを調べたらこの端子はオープンで、これを使った試作機は問題なかったので、安心してフライトコントローラーもオープンにしていたのです。
しかし改めてマニュアルを読むとやはりLにしろと書いてあります。
という事で0.5mmピッチQFPのリードに無理やり電線をハンダ付けしてプルダウン抵抗をつないでみました。

これで成功率が上がりました。でもまだ時々ミスるのでまだ何か他に原因がありそうですが、やっぱりBoot1はLにするのが正しいのですかね。まあマニュアルに書いてあるから当然そうすべきで、最低でもパターンを引き出しておけば良かったんですが。でもNucleoはなんで大丈夫なんだろう?(端子オープンなのでたまたま上手くいっているだけなのかもしれません)

時々失敗する理由は判りませんが、とにかくBetaflight3.5のファーム書き込む事ができたので再びホバーリングにチャレンジ。
初飛行の動画です。

ちょっとふらついていて調整の余地が(私の操縦技術の問題も)ありますが一応ホバーリングしています。

あとOSDとBLACKBOXへのロギングも大丈夫でした。
ここまでの問題点をまとめると次の通りです。基板の第二弾を作る時(やるのか?)修正したいと思います。

  • USBのD+とD-の入替り。
  • 5Vスイッチングレギュレータ周りのGNDの取り回し
  • Boot1端子のプルダウン

という事で何とかホバーリングするところまでたどり着いたのでレーサー機に載せてどうなるかを試していきたいと思います。

フライトコントローラーを自作してみる。~その8~

いよいよフライトコントローラーの基板に部品を実装したいと思います。

まず実装前の基板はこれです。PCBgogoで製作して入着済。

約500円で10枚作れるPCBgogoの基板

そしてメタルマスクも購入済。こっちは基板よりも高くて約¥1000します。
画用紙をレーザーカットして代用できないかとも思いますが、初めてのリフローなので確実な方でやってみます。

実装前の準備として部品を紙の上に並べていきました。コンデンサの様に何も書いていない部品もあるので手をひっかけてバラケると大変なことになります。なので紙はテープで机に貼り付けています。

そして板の上に不要な基板の切れ端を貼り付けて固定治具にします。
まずは部品が少ない裏面(機体に積んだ時に下側にくる面)から実装する事にしました。

その上からメタルマスクを貼り付けて・・・

慎重に位置合わせ・・

マスクの上からクリームはんだを塗っていきます。

プラスチック板の切れ端でスリコミ スリコミ・・・

マスクを剥がすとこんな感じでクリームハンダが載っています。
まあ大丈夫そうです。

そして1個ずつピンセットで部品を置いていった後の写真。
この時には気づいていませんが左下のスイッチングレギュレーターICの位置がずれていて、リフロー後に気づく事になります。

ではいよいよオーブントースター(改)リフロー炉に投入。
不要基板に温度計のセンサーを貼り付けて横に置き、温度を見ながらやります。

スタート!
そして リフロー中・・・

よし終わった・・・

大体良いのですが、先程書いた通りレギュレーターICがずれていたのでポロッと落ちてしまいました。これは後ほど手ハンダで取り付けます。

またよく見るとOSD用ICのリードにブリッジがあります。なにか条件が良くなかったのでしょうね。クリームハンダが厚すぎたのかな?
これもはんだゴテで除去します。

ちょっとピンボケですがMAX7456のリード2か所にブリッジが見られます。

ハンダブリッジとレギュレータずれ以外、見た感じは良さそうです。

では表面側の実装に取り掛かります。
ところで表面にクリームハンダを塗る際、裏面には既に部品がついているので先程と同じ方法だと基板が浮いてしまいメタルマスクと基板が密着できない事に気づきました。
そこでMDFをレーザーで切り、部品のない四隅を支える治具を作成しました。このままだと基板厚の分MDFより高くなるので厚みが基板とほぼ同じ1.6mmの段ボールを見つけてきて基板の周りに置く事で全体が面一になりました。

1.6mm厚の段ボールに窓を開けてこの上に載せると全体が同じ高さになるのです。

あとは先程同様クリームハンダを塗って部品を載せました。

SHコネクタやタクトスイッチが溶けないか心配

リフローの時、実装済みの裏面から部品が落ちるとまずいのでアルミ箔で熱を遮ってみました(効果の程は判りませんがとりあえず大丈夫でした)。

リフロー完了

コネクタやスイッチが溶けないか心配していましたが無事みたいです。
でもやっぱりマイコンのリードにブリッジがありますね。何がいけないんだろう。
なお表面の過熱により裏面のブリッジが直っていないかと期待しましたが変化ありませんでした。 まとめてはんだゴテで除去します。

リフロー×ブリッジでググると、クリームハンダがそもそもブリッジしている場合は当然として、高温時間が長い場合も狭い隙間にハンダを吸い上げてしまう様です。毛細管現象みたいなものですかね。
今回のはリードの少し上でブリッジしているので高温長すぎの方かもしれません。

何はともあれ、基板に部品がつきました。
次は動作を確認していきたいと思います。

フライトコントローラーを自作してみる。~その7~ リフロー炉

細々と続けているフライトコントローラー自作の続きです。
部品が一通り揃ったのでリフローの準備を始めます。

フライトコントローラーはすべて表面実装部品を使うので手ハンダでは難しく、リフローで実装したいのです。
また35mm角の基板に部品を載せていくと両面実装になるので、ホットプレートを使ったリフローでは裏側実装のとき密着できない懸念があり、ここはやはりリフロー炉を使う必要がありそうです。

という事でオーブントースターを改造してリフロー炉を作る事にします。
内容的にはスイッチサイエンスさんのこのキットを真似して作ります。
(キットはずっと品切れなのでバラで部品を集めます)

まずオーブントースターを入手。リサイクルショップで適当なものを¥1800で買ってきました。TIGERのKAM-A130という機種で1300Wの品です。どれだけのパワーがいるか不明なので、足りないとどうしようもないので強めの機種を選びました。

ヒーターは3本備えていますが、この内2本は並列につながっています。常温で抵抗値を測ったところ並列状態の2本と単独の1本が同程度の値になっていて、2系統の配線が半分ずつのパワーを受け持つ様に制御しています。

前面にはタイマーと温度設定つまみがあります。タイマーはゼンマイ式で0まで戻ると「チン」となるアレです。温度設定つまみはバイメタル式サーモスタットらしき機構につながっています。
タイマーの方はそのまま安全タイマー(なにかトラブルがあって通電を続けても時間が来たら止まる)として使いたかったのですが、カバーが金属のツメを折り曲げて止めてあり、一度外すと元に戻せなくなりそうなので諦めました。
結局ヒーターに接続する電線だけを引き出して利用することにします。

回路はこれ。
オリジナルのスイッチサイエンスのキットはATMega328Pを3.3Vで動作させていて、これはたぶん温度センサーのMAX31855が3.3V動作の為だと思います。でも今回はAdafluitのMAX31855モジュール基板(秋月電子で入手)を使うので内部に5V→3.3Vレギュレータを持っているし、更にSSRは入力が4V以上となっているので5V系のArduino UNOの方が都合が良いのです。

温度を測定する熱電対は秋月電子で買ったステンレス管に入ったタイプでやってみます。
オーブンの内部に突っ込むので電線がピラピラしているよりもしっかりした棒状のセンサーを突っ込む方が保持しやすいと思ったのです(が、これは失敗だった事に後で気づきます)。

では改造です。
オーブントースターの筐体に穴をあけて電線を引き出します。穴の縁が鉄板そのままだと電線を傷つけそうなのでハトメを打ちました。 でもハトメの穴も案外ギザギザしているんですね。これだと効果が薄いので結局ハトメは外して他の方法を探します。

そして見つけたのがこれ「ダイソーのシリコーンマット」。230度までOKとなっています。これを適当に切り電線の周りに巻いて穴にツッコミました。


これで電線を傷つける心配はないと思います。

制御回路はまだバラックです。

ファームをGithabから取ってきてリフロー条件もそのままでArduinoに書き込みました。
そしてとりあえず何か焼いてみます。以前基板を発注したら間違って届いたものを使い、適当なランドにクリームはんだを塗って適当なチップ抵抗を載せます。


まずはソースコードに最初から書かれていた温度プロファイルそのままでやってみます。これは130℃まで上がるとで15秒待ち、その後230℃まで上がると目標を225℃に下げ、更に100秒経過するとすべてのヒーターを止めるという動作です。

ではスタートスイッチをポチッと。
最初の段階は1系統のみヒーターONで130℃を目指して温まっていきます。 そして130℃で一旦ヒーターが切れますがそれでも暫く温度が上昇し140℃まで上がりました。そして15秒のタイムアップ後2系統共ヒーターONとなり230℃を目指して上昇していきます。230℃に達するとヒーターOFFになり目標温度が225℃に下がるのですがまだまだ温度が上昇し240℃を超えてしまいました。基板からは時々プチッという音が聞こえてきます。その後225℃まで下がるか下がらないかの間に100秒の待ち時間が過ぎて一通りの処理が終了しました。

扉を開けると・・・

何か色が濃い・・・

結果・・・基板が黒くなっていて過熱しすぎっぽいですね。

左はリフロー前, 右がリフロー後。
過熱により黒くなりました。

ならば温度センサーがちゃんと温度を取れているのか、熱電対温度計と並べてヒートガンで過熱してみます。

結果、温度はまあ一致するのですが、ステンレス管に入った方は温度が伝わるのに時間がかかり、遅れて追いつく様な感じになります。
ステンレス管の熱電対を選んだのは失敗ですねー。さっき温度読みが240まで上がりましたがこれは遅れた表示なので実際はもっと上がっていたと想像できます。
まあちょっと予想はしていて、電線直接の熱電対が何本か手持ちが あるのでステンレス管がダメならこっちに変えようと考えていました。

電線直接の熱電対だと固定しずらいのでどうするかですが・・・3Dプリンタで使ったテフロンパイプがまだあった筈。これを適当に切ってその中に熱電対を通し庫内まで貫通させてみます。

次は制御回路と温度計、二つの熱電対を基板のほぼ同じ位置に貼り付けて動作させてみます。

こうすると制御回路と温度計の表示がほぼ同じで動作しているので測定自体は大丈夫みたいです。しかし通電を止めてから10℃くらい上がるのは変わりません。ヒーターからセンサーまで熱が伝わるのに時間がかかるのでしょう。

このファームは設定値に温度が達したら通電を切り、設定値よりも下がったら通電するというシンプル制御です。そこでPIDを追加してみたりと迷走したのですが結局止めました。最大温度に達する直前に過熱をゆるめるので温度の跳ね上がりはなくなりますが、最大温度付近にいる時間が長くなってしまうのが気に入らなくなったのです。

で、結局元通りのファームを使って温度プロファイルだけ調整する事に落ち着きました。

なお庫内でピロピロしない様、こんな感じでセンサーを固定しようと思います。この状態で基板に貼り付けた温度計と比べると、温度計の方が最大10℃くらい高い温度となるのでその分と跳ね上がり分を差し引いた上限値にします。

こんな感じで横からセンサーが出っ張ります。

更に何度か試してほぼ目途がたったので、次はいよいよフライトコントローラー基板に部品を実装しようと思います。

フライトコントローラーを自作してみる。~その6~

PCBGOGOに発注していた基板ができてきました。

こんな箱に入ってきました。

そして基板・・・

10枚550円。以前と比べると信じられない低価格です。
パターンを見ていると何だか無駄な場所が見えてきます。

今回表面実装なのでリフローをする予定です。
ハンダペーストを塗るためのマスクは画用紙をレーザーカットして作れるかとも思ったのですが、リフロー初挑戦なのでメタルマスクを購入しておきました。

メタルマスクは1100円。
基板よりこっちの方が高い・・・。

基板はできましたがまだ部品が揃っていません。
オーブントースターの改造もしなければならないので組立てができるのはしばらく先になりそうです。

フライトコントローラーを自作してみる。~その5~

前回の投稿から3か月も過ぎてしまいましたが、細々とフライトコントローラーの自作は続けています。
前回までで回路は決まったので基板の設計に取り掛かったのですが、私のレベルでは35mm角に収めるのが結構大変で、最初はアナログとデジタルのGNDを分けてやろうとか色々と考えていたんですが、とにかく詰め組むのがやっとな状態です。
4層にすれば楽なんでしょうけど基板代が大幅にアップするので何とか2層に収めたいし・・・ところで市販のFCは何層なんだろう?

基板パターンって一旦配線が完了しても細かい所を色々いじっていると、どんどん時間が過ぎてしまいますよね。あまりいつまでもパターンをいじっていてもキリがないし疲れてきたのでここらで一旦発注してみる事にします。何かミスがあるとは思いますが・・・。

今回発注した基板パターン
どこかミスっている気がする。

基板の発注先ですが、過去何回かFusionPCBに発注しているので今回もそのつもりでしたが、500円ちょっとで10枚作れる仕様だとソルダーレジストの最小幅が0.4mmという制約がネックになりました。マイコンやジャイロセンサのパッドとパッドの間にソルダーレジストを塗りたいのですが、そうすると0.4mmよりも少し細くなってしまうんです。0.1mmというオプションもありますが、これを選ぶと3000円を超えて一気に値段が上がります。
そこで他社を調べたところPCBgogoというメーカーだと0.25mmまでなら500円ちょっとで作れるみたいなのでここに発注してみました。

まだ部品が全部揃ってないし、リフロー用にオーブントースターの改造もいるので、基板ができても組立てがいつになるかわわかりませんが、少しづつ進めていきます。

フライトコントローラーを自作してみる。~その4~

BlackBoxについて

前回書いた通り、基板化する前にBlackBoxを動作させてみます。
BlackBoxとはフライトコントローラー(以下FC)が諸々の情報をログとして記録する機能です。
ログの保存先としてBetaflightがサポートするメディアには、OpenLog基板、SDカード、SPIフラッシュIC 等があります。

OpenLogはSparkFun(SwitchScienceでも取扱いがある様です) のロギングデバイスで、FCには外付けする事になり機体内のスペースを取るため今回はパス。またSDカードは安くて大容量なのが魅力ですがカードコネクタがFC基板の面積を喰い設計が難しくなりそうなので、もうちょっと腕が上がってからにします。
という事で今回はSPIフラッシュを使ってみようと思います。

記録メディア

BetaflightがサポートするSPIフラッシュICはこちらのページに記載されている下記のデバイスで、この中から16MBのW25Q128を購入しました。

  • Micron/ST M25P16 -2 MByte
  • Micron/ST N25Q064 -8 MByte
  • Winbond W25Q64 -8 MByte
  • Macronix MX25L64 -8 MByte
  • Micron/ST N25Q128 -16 MByte
  • Winbond W25Q128 -16 MByte
ちょっと思っていたよりサイズが大きい。

配線

接続は電源とSPI信号をつなぐだけ・・・。

ファームウェア定義ファイル

Betaflightのターゲット定義ファイルtarget.hに以下を追記しました。
SPI3に接続しています。

#define USE_SPI_DEVICE_3 
#define SPI3_SCK_PIN PC10
#define SPI3_MISO_PIN PC11
#define SPI3_MOSI_PIN PC12
#define USE_FLASHFS
#define USE_FLASH_M25P16
#define FLASH_SPI_INSTANCE SPI3
#define FLASH_CS_PIN PA15
#define ENABLE_BLACKBOX_LOGGING_ON_SPIFLASH_BY_DEFAULT

気になったのは’USE_FLASH_M25P16’の行。M25P16は2MBのメモリーですが今回接続するW25Q128は16MBです。このあたりの設定は不要なのでしょうか? 他のFCの設定を見ても特に容量を指定する箇所もなく、単にM25P16を指定しているの様なのでこのままやってみます。

動作確認

ファームをビルドしてFCに書き込み、BetaflightConfigratorから接続してみると・・・

ちゃんと16MBとして認識しています。

適当に動作させたログをPCに取り込み、Blackbox Explorerで結果を見てみました(FCは机に置いたままなのでジャイロや加速度センサーの値は全く動いていませんけど・・)。

動作は大丈夫そうです。

ということで・・・

いよいよ基板設計を開始しました。一般的な一辺35mmの正方形に収める予定ですが、手ハンダも考慮してSMDパーツのパッドを大きめにしたため、面積的に結構厳しいです。くじけたら35mm角は諦めて基板サイズを広げるかもしれません。

フライトコントローラーを自作してみる。~その3~

前回まででとりあえず’飛ぶ’という事については何とかなったので引き続きOSD機能を試してみます。
OSDはOnScreenDisplayの略で、テレビの映像に文字等をスーパーインポーズする機能です。よくアナログ時代末期のテレビではチャンネル番号や音量が画面上に表示されていたアレです(今もあるか)。
フライトコントローラーではFPV画像に重ねてバッテリー電圧とか諸々の情報を表示する為に使用します。

大抵のフライトコントローラはマキシムのMAX7456及びその互換ICを使っている様で、これを使えば問題なくBetaflightのファームウェアがコントロールしてくれるはず。

という事でAliexpressからMAX7456Eを3個買っておきました。
SOPパッケージなのでピッチ変換基板に実装します。

そしてほぼデーターシート通りの次の回路図でやってみます。

ブレッドボード上に回路を組んで・・・

ちょっとゴチャゴチャしています。
画像の上の方に適当なカメラを仮止めしています。

実行してみるとあっけなく表示されました。
まあソフトもハードも既存の物なので当然といえば当然ですが。

次はそろそろ基板化を考えたいところですが、その前にもう一つ、最近のフライトコントローラーには動作中のログをSDカードやSPIフラッシュに残す機能があります。
調子よく動作しているときは良いのですが不調の場合には必要となる可能性があり、できれば搭載しておきたいと思います。メモリーにはマイクロSDカードが安くて容量も大きいのですが、SDソケットを載せると基板の面積を喰って設計が難しくなるので今回はSPIフラッシュで試そうと思います。
そこでRSコンポーネンツにSPIフラッシュを発注し、入着を待ちながら基板の検討を進ていめます。

フライトコントローラーを自作してみる。~その2~

前回STM32F411Nucleo64ボードでフライトコントローラーを作ってホバーリングさせてみたら斜めに振動したところまで書きました。その続き。

「斜めに振動」といっているのはこういう風に、黄色線を軸にして赤矢印の方向に2~3Hz程度で揺れ、PIDをいじっても改善しないのです。

最初はプロペラとジャイロセンサーの高さが違うのが原因かと考えました。高さが違うと上図の様に揺れた振動をジャイロだけでなく加速度センサーまで拾ってしまいおかしくなるのかと・・・

一番上の基板にセンサーが載っているのでプロペラから2cmくらい高いのです。

そこでモーターの高さを上げてみましたが効果ありません。

この時はまだ レーザー管も元気だったので簡単に作れました。
前回書いた様に、この後レーザー管が弱ってしまったのです。

次にFCを90度回して取り付けてみました。こうするとジャイロ/加速度センサーも90度回るので揺れる方向も90度回るかと思ったのですが、変わらず同じ方向に揺れました。という事はセンサーがらみではないんじゃないかな?

試しに市販のFCに載せ変えてみたら、やはり同じ様に揺れます。という事は自作FCの問題ではなく、モーターやESCを含む機体側の問題っぽい・・・

ESCは得体のしれないセパレートタイプ(4in1ではない) を4つ載せています。4個が同じ設定ではないのかと疑いましたが、ファームがBLHeil等ではなく、特に資料もないので確かめ方がわかりません。そこで先日激安で購入したESCに載せ変えてみましたが・・・これでも変化ありません。

激安ESC

残るはモーターかとも思いましたが交換できるモノがないのです。また4つとも見た感じでは元気に回っています。

ここで一旦行き詰ったのですが、以前コアレスモーターの機体にBetaflightの最新バージョンを載せたら不安定になった事があったので、ダメ元でBetaflightのバージョンを下げてみ見ました。

今までVer.4.2.0だったのをVer3.5.7に変更したところ揺れが収まったじゃないですか。最新版の何が問題なのかは判りませんが自作FC,市販FC共にVer3.5.7だと安定しています。

Ver4.2.0の何が問題かは気になるのでいずれ調べたいと思います。

・・・という事で最終的にこんなゴチャゴチャな機体になりましたがちゃんと飛ぶ様になりました。

動画です。
なんかもう、とにかく飛べば良しという機体

次はOSDの回路を載せてみたいと思います。

フライトコントローラーを自作してみる。

ドローンレースの練習をしていると色々なところを壊します。
ほいほい堂本舗は貧乏性なのでできる限り修理して再利用したり、また可能なところは自作してみたくなります。

という事でフライトコントローラーを作ってみたいと思います。フライトコントローラーとは一言でいうとマルチローター系の機体を制御するマイコンボードです。固定翼の飛行機は構造的に自立安定して飛行しますが、これと違ってマルチローターは特に制御しなければ安定して飛び続けられません。そこでジャイロや加速度センサーで機体の姿勢を検出しどのモーターをどの程度のパワーで回すかを決めるのがフライトコントローラー(以下FCと略す)です。

自作フライトコントローラーの構想

近年の(ホビー系の)FCは殆どがSTマイクロエレクトロニクス製のSTM32Fxx マイコンが使われています。これにジャイロ/加速度センサーを載せるのですがマイコンとの接続はSPIやI2Cですし、モーターを回すためのドライバ(ラジコン界ではESCという)へはPWM(およびその変形)で信号を送るので、ほぼマイコン工作で作れそうです。

またソフトについては優秀なオープンソースのファームウェアが多数出ているのでこれらを用いることができます。

といっても、いきなりプリント基板を作る勇気はないのでまずはマイコンボードを使って動作を確認してみます。マイコンボードにはSTM32F411 Nucleo-64を使う予定。

STM32F411 Nucleo-64

全体像はこのブロック図の様に考えています。このうち水色で囲んだ部分をここではフライトコントローラー(FC)と呼ぶ事にします。

実用的にレースで使うにはこの他にOSD(On Screen Display:FPVの映像に諸々の情報をスーパーインポーズして表示する機能)も必要になりますが、まずは飛べる事を確認出来た後でこれらも試したいと思います(実はOSD用ICも入手済)。

Betaflightをビルドする。

ファームウェアはいつも使っているBetaFlightを書き込む予定ですが、その前にファームウェアをビルドする環境を作っておこうと思います。
BetaFlightのビルドはUNIX環境上で行うのが基本となっている様で、Windows上のWSL(Windows Subsystem for Linux)でも実行できます。詳細はBetaflight Wikiのこのページに説明されており、この通りにやれば構築できました。
手順通りに構築するとWSL環境内の~/Git/Betaflightというディテクトリ以下にファイル一式ができています。更に下には~/Git/betaflight/src/main/targetというディレクトリがあり、ここには下図の様に各種FC毎の設定があります。

このディレクトリ下に今回作るFC用として’HOIHOIF411’というディレクトリを作るのですが、まずは似たFCである’MATEKF411’の内容を丸コピーし、そこから変更していくことにします。

HOIHOIF411ディレクトリの中にはtarget.mk、target.h、target.cの3本のファイルがあります。ここら辺の詳しい説明資料が見つからないのですが、この3本のファイルを変更するとそれぞれのFC固有のファームウェアが出来上がる様です。で、いろいろ試行錯誤した結果のファイルを添付しておきます。→HOIHOIF411.tar.gz

targetディレクトリの設定ファイルができたらカレントディレクトリを
~/Git/Betaflight に設定し、ここで’make HOIHOIF411’とコマンドを実行すると ~/Git/Betaflight/binの下にファームウェアが出来上がります。このファイルをBetaflightConfiguratorのファームフラッシャーを使って書き込んでやる訳です。

ジャイロ/加速度センサー

当初ジャイロ/加速度センサーにはモーション・フライトシミュレーターで使ったので手元にあった MPU6050ボードを使ってみました。市販のFCは大抵SPIで接続できるセンサーを使っていますがMPU6050はI2C接続専用です。一応これもBetaflightにサポートされているっぽいのですが、しかし何故かうまく接続できません。mbedで書いたプログラムだとセンサー値を取れるのですがBetaflightのファームからは取れないのです。

MPU6050ボード

そうこうしている内にポチッていたMPU6500ボードが届いたのでこれをSPIで接すると問題なく接続できました。 名前が似ていてややこしいですがMPU6500はSPIで接続するタイプで市販のFCでも結構使われています。
どのみち最終的にはMPU6500を使うつもりなのでこれで行きます。

MPU6500ボード


回路図

こんな感じで行こうと思います。
NucleoボードはArduino互換ソケットが付いているので、なるべくこれを利用する事で、Arduino用シールド基板を使って配線し易い様にします。
なおOSDは後で追加予定です。

機体

動作確認用に、息子が作って今は使っていないこの機体に乗せてみます。

製作

まずはブレッドボードで動作を確認して・・・

大体動作したのでArduino用シールド基板上に回路を載せて・・・

機体に乗せてみます。

飛ばしてみる

で、飛ばしてみると・・・一応浮き上がるのですが斜めに振動して止まりません。
原因調査中ですが、市販のFCに載せ変えても同じ様に振動するのでFCの問題ではないのかもしれません。
この続きは後日・・・