フライトコントローラーを自作してみる。~その18~ またまたF7

久々のFC自作ネタですが、内容は前回とほぼ同じ。
壊れたFCを大量に貰ってきたので、ここからSTM32のF7マイコンを外して自作基板に載せるのです。
未だにSTM32マイコンは入手困難なので壊れたFCを頂けると非常に助かります。

ESCまで含まれていますがこっちの自作は難易度高く、今の所FCだけ。

こうしてみると見るからに壊れている基板からパッと見では何ともなさそうなモノまで色々あります。正常っぽいのはもしかして直るかもという期待もあるので今回は明らかに壊れていそうな中から2枚を選び、マイコンを外して新しいFCを2個作ろうと思います。

では取り外しから。ヒートガンで温めると・・・

隣の発振子も一緒に外れました。

もう一個も外しましょう。今度はレギュレーターらしきICも一緒に外れました。

次に新しい基板にハンダペーストを塗って部品を載せます。前回までは古くなったハンダペーストにアルコールをスプレーして無理やり使っていましたが今回は新しいハンダペーストを使う事にします。

そしてリフロー

なんかいっぱいブリッジしています。

でも裏面に進み、またリフロー。

裏面は結構うまくできました。

問題は表面のブリッジ。 基板から外した時にリードが曲がり、これを完全に直していなかったのでバラバラです。
実装前にもっと完璧に直しておくべきでしたね。
もう半田ゴテでやるしかありません。汗かきながらなんとか修正しました。

またSHコネクタが思いっきりずれているのを発見。
リフロー前に手でも当たったのな?こちらも修正。


なおこの部分、F4の頃はSBUS信号を入れる為に反転回路を通す必要があったのでXOR用ICを載せる設計にしていましたが、前回F7だと反転不要である事が判ったのでXORは載せずに直結しています。

ところで私のレベルでは実装をミスる事が結構あるので実機に載せてテストするまで安心できません。という事で実装テスト。

一番良く実装をミスるのがジャイロセンサーのMPU6000ですが、今回新品のハンダペーストが効いたのか一発で動作しました。

しかし片方の基板はバッテリーから電源を供給するとDCDCコンバータ付近からジーという音がします。このDCDCはバッテリー電圧から5Vを作り出しますが、5V波形をオシロで見てもガタガタです。
DCDC周りの配線を見まわしても原因らしきものが見当たらないし、以前「MP1584EN その3」の時にハズレICを引いているので今回もMP1584ENを外してみました。外観は異常ない様ですが、別の個体を取り付けてみると正常になったので、やっぱりハズレICを引いたんですかね(もう一度このICに戻せばハッキリするんですがやる気が起きません)。’’

前回のハズレ品は裏面パッドが無かったけど今回はちゃんとついています。

今のところ10個買った内の2個がハズレなのは確率高すぎですね。やっぱりパチもんだったのかなぁ。まだ半導体不足になる前とはいえ10個で218円だったしなぁ。

ところでこの部分、VTX用の5V電源をチップコンデンサの根本から取っています。

回路図ではこの部分で・・・

ここから5Vを取ればUSBから電源供給する時にはVTXを動作させなくできます。
もし通常の5V端子からVTX電源を取ると、レースや大勢で飛ばすとき、PCと接続してレートを変更するだけでも電波が出てしまうと色々と不都合があるのです。
次に基板を設計する際はこのためのパッドを設けておこうと思います。

そんなこんなでFC2枚完成です。

実は今年も7月23,24日のJDL宮崎戦に参加する予定なので予備基板を作っておきたかったのです。機体に積んでいるFCは去年作ったF4搭載の物なので今回作ったF7の方が高性能ですが、レースまでに飛ばす機会がないので実績のある方を積んでいきます。
去年は自作FCで参戦する事が目標な感じでしたが、今回は人並みのタイムで飛ばし、できれば(オープンクラスですけど)予選を通過したいと思います。

フライトコントローラーを自作してみる。~その17~ F7マイコンを載せる。

自作フライトコントローラーにはSTM32F411というマイコンを搭載していました。これは普通に飛ぶには十分な性能ですが、RPMフィルター等という負荷の高い処理には計算周期を下げる必要があるのです。そこでもっと早いマイコンを試したかったのですが、恐らく昨今の半導体不足のせいで納期が未定だったり発注してもキャンセルされたりして入手できていなかったのです。

そこに救世主が現れました。

宮崎ドローンクラブにお邪魔して練習させていただいたとき、基板のパターンがはがれて使えなくなったフライトコントローラーを頂いてきたのです。
これにはSTM32F722RET6という、まさに欲しかったヤツが載っています。

という事で、この基板からマイコンだけ取外しHOIHOI-FCに載せてみました。
今回も色々発見があったので忘れない内にこのブログに書いておきます。

まず頂いた基板をヒートガンで温めてマイコンを外しました。

そしてHOIHOI-FC Rev2基板に搭載します。

組み立て後の一発目、安定化電源から5Vを供給して電流を測ると180mAも流れていました。 F411搭載基板では70mA程度なので、 これはどこかミスったと思いショートした箇所を探したのですが、それらしき所は見当たりません。

そこで恐る恐るUSBケーブルでPCとつないでみたところ、あっさりとDFUモードに入りファームを書き込む事が出来ました(F722用ファームは前にビルドしておいたのです)。
もしかするとOSDデバイスに大電流が流れているのかという事も考えたのですが、カメラとVTXを繋ぐとこちらも正常動作しています。
またESCと接続してモーターを回しても正常です。
暫く通電していると結構温まりますがF7だとこれくらい流れるのでしょうか?データーシートには最大300mA流れる様な事が書いてあるので今の所これで正常だろうと思っています。

という事で、とりえあずはあっさり動作したかと思ったのですが、そう簡単にはいきませんでした。

受信機からSBUS信号を入れても受け付けてくれないのです。

このFCでは下図の回路でUART6RX端子にSBUS信号を入れています。

SBUS信号は通常のUARTとは極性が逆なので間にXORを入れて反転し、将来通常のUARTデバイスを接続したくなった場合はJP3をショートさせる事で正極性に戻せる様にしているのです。
今回SBUS信号を何故か受付けず、色々試してもダメなので 反転回路を外部のブレッドボードに載せてUART2から入れてみたけど、これでもダメでした。

こりゃファームの設定が間違っているのかと見直してもそれらしい箇所が見当たりません。

で、色々試している内に突然動作したのです。
改めて回路を見直すと、誤って外部で反転させた信号をまたXORで反転させていました。
・・・という事は反転しなくても良かったの?
そこでXORのジャンパーJP3をショートさせると正常に動作する様になりました。またUART2に直接(反転なしで)入力しても動作します。

F4の時は反転必須だったのにF7だと不要になった・・・?
F7のデーターシートでUARTの機能を確かめると次の文言があります。

「Separate signal polarity control for transmission and reception」

極性を個別に設定できる?(って事は個別じゃなければ今までもできたんか?)
詳しい事は解りませんがマイコン自体に極性を反転する機能が付いたのでBetaflightがこの機能を使って上手くやってくれるみたいですね。
という事はF4の時みたいにSBUS信号は反転回路がついたUART端子に接続しなければならないという制約はなくなり、F7なら受信機をどのUART端子にでも接続できるのだと思います。これは便利になりましたね。
今回はXORの片方の入力をLに落として対処しましたが次からはXORの搭載自体を止めて直結しようと思います。

という事でF7で一通りの機能が動作したので息子が持っていた適当な機体に載せてみました。
飛ばしてみると上手く飛んでいる様です。

RPMフィルターでハマる。

次にせっかくのF7なのでRPMフィルターをオンにすると・・・
フリップした時に変な挙動をしました。何だか急に思った以上のレートで回転した様です(さっきから「様です」と言うのはこの辺りのテストパイロットは息子に任せているのです。自分じゃフリップとかできないので。)。
もう一度RPMフィルターOFFに戻すと正常。またONにすると異常。
明らかにRPMフィルターが絡んでいます。

なんか、波形的な問題か?
そこで写真の様な中継基板を作ってFCとESCの間に割り込ませ、オシロのプローブを当ててみます。

で、波形はこれ。。。

モーター2 のDSHOT600 双方向ONの波形

ちょっとオーバーシュートはあるけど鈍ったりはしてなさそうですけどねー。
気になって市販のFCを眺めると、STM32の出力とモーター信号の間に100Ωの抵抗が載っていました。たぶんオーバーシュートを抑えるダンピング抵抗ですかね。または双方向Dshotで万一信号がぶつかった時の保護?

市販FCはこうなっていました。HOIHOI-FCには抵抗はなく直結です。

これが無いとだめなのかな?そこで先程の中継基板に100Ωを割り込ませてみましたが・・・効果はありませんでした。

ここであと一つ心当たりが・・・RPMフィルターをONにして動作を確認したとき、BetaflightConfiguratorのモータータブを使ってモーターを回転させ、回転数が取れている事を確認しますが、この時モーター2だけエラーレートが0.6%前後となっていたのです。

赤線部分が回転数取得のエラーレート。

BetraflightのWikiによれば1%程度までに抑える様にと書かれています。0.6%なので良さそうにも思えますが、過去に幾つかの市販FCで試した時は0%しか見たことはなく、今回の動作異常と関係しているかどうかは分かりませんがちょっと気になります。

この原因、色々試した結果 ファームをビルドする際のコンフィグファイルtarget.hに以下の記述があるとダメでこれをコメントアウトするとエラーは消えました。

#define DSHOT_BITBANG_DEFAULT   DSHOT_BITBANG_OFF

この記述はCLIで設定を見たときの’DSHOT_BITBANG’に相当します。
‘DSHOT_BITBANG’ はON|OFF|AUTOのいずれかを選択する内、上記行が記述してある場合はOFF、上記行を削除するとAUTOになる様です。
そして回転数取得のエラーはOFFだと発生し、AUTOまたはONだと発生しませんでした。

この辺り、BetaflightWikiにはOFFにしろと書いてある様に見えるので(英語ですが、たぶんそういう意味だと思います。汗。)、試した現象とは逆なのです。
どなたか真相が分かりますか?(そもそも DSHOTでのBITBANGとは何を意味するのでしょう?)。

何はともあれ市販のFCを見てもAUTOになっているし、HOIHOI-FCもAUTOで様子を見る事にします。

そして回転数取得エラーが無い状態で飛行させると「変な挙動」は無くなりました。やっぱり回転数エラーと同じ原因だったみたいですね。
以上で当面の使用には問題はなくなりました。

でもあと一つ気になっている事があります。

HOIHOI-FCはモーター8個まで制御できる端子を設けており、いずれオクタコプター(モーター8個の機体です)を作るという野望があるのです。
ここでCLIモードでDUMPコマンドを使って設定を見るとDMA周りが次の様になっていてB09端子にDMAが割り付けられていません。

 dma pin B04 0
pin B04: DMA1 Stream 4 Channel 5
dma pin B05 0
pin B05: DMA1 Stream 5 Channel 5
dma pin B06 0
pin B06: DMA1 Stream 0 Channel 2
dma pin B07 0
pin B07: DMA1 Stream 3 Channel 2
dma pin B08 0
pin B08: DMA1 Stream 7 Channel 2
dma pin B09 NONE
dma pin A00 0
pin A00: DMA1 Stream 5 Channel 3
dma pin A01 0
pin A01: DMA1 Stream 6 Channel 3

なおDMAというのはDirectMemoryAccessの略で、CPUを介さずメモリーと周辺レジスタとの間でデーター転送を行う機能です。その間CPUは別の仕事ができるので負荷が下がるのですが、具体的にDSHOTの制御として何をしているのかは分かりません。
これでも全端子ESCに繋いで回せる事は確認済みなのですが・・・。
でも一つだけDMAを使えないというのは気持ち悪いですよね。 もしかするとこれもRPMフィルターで影響を受けるのかも。

で、B09端子というのはモーター6に割り付けています。これはファームのコンフィグファイルtarget.cの中で下記(ここではPB9と表現)の様に指定しています。
そしてこのモーター端子はタイマー4のCH4を使用しています。

 DEF_TIM(TIM3, CH1, PB4 ,  TIM_USE_MOTOR,  0, 0), // MOT1
DEF_TIM(TIM3, CH2, PB5 , TIM_USE_MOTOR, 0, 0), // MOT2
DEF_TIM(TIM4, CH1, PB6 , TIM_USE_MOTOR, 0, 0), // MOT3
DEF_TIM(TIM4, CH2, PB7 , TIM_USE_MOTOR, 0, 0), // MOT4
DEF_TIM(TIM4, CH3, PB8 , TIM_USE_MOTOR, 0, 0), // MOT5
DEF_TIM(TIM4, CH4, PB9 , TIM_USE_MOTOR, 0, 0), // MOT6
DEF_TIM(TIM2, CH1, PA0 , TIM_USE_MOTOR, 0, 0), // MOT7
DEF_TIM(TIM2, CH2, PA1 , TIM_USE_MOTOR, 0, 0), // MOT8

なぜこのモーター6だけがDMAが割り当てられないのか、この原因を探るため、STM32F72xxxリファレンスマニュアルを調べると下の表がありました。タイマー番号_チャンネル番号毎にDMAの割り当てが決まっている様です。
表の中で色を塗っている項目はHOIHOI-FCでモーターに使っているタイマー番号ですがモーター6に割り当てているTIM4_CH4は記載がありません(なので恐らくDMAが割り当てられない)。

次に基板を変更するときはこの辺りの端子割当ても考え直そうと思います。
また今の基板のままオクタコプターをやるなら他の端子を使う事も可能です。例えば現状UART2に割り当てているPA2,PA3だとTIM2_CH3,TIM2_CH4なので,どちらもDMAの割り当てがあります。UART端子は1本減りますが。

という事で・・・

まずはF7でも使えそうだという事が分かってきました。
次に基板を作るなら直したいところが色々と溜まってきましたが 、そもそもF7のマイコンがまだ普通に買えそうにないんですよね。

フライトコントローラーを自作してみる。~その15~ 基板データ公開

フライトコントローラーを作ってみませんか~?
HOIHOI-FC F411 Rev2基板のKi-cadデータとガーバーを公開します。

基板データ

Ki-cadデータ→HOIHOIFCF411R2.zip
ガーバーデータ→HOIHOIFCF411R2_gerber20210314.zip
※Ki-cadはVer5.1.9で作成しました。
 ライブラリのキャッシュファイルも含んでいるので大丈夫なつもりですが、
 もし何か不足していたら連絡ください。
※そのままの形で基板を発注するならガーバーデーターだけで大丈夫です。

部品表

部品表→HOIHOIFCF411Rev2BOM.ods
※参考に私の購入先も記載しています。

部品配置図

部品配置図(表)→HOIHOIFCF411R2PlaceFront.png
部品配置図(裏)→ HOIHOIFCF411R2PlaceBack.png

基板データの使用に関する表示

今までこのサイトの掲載物に著作権的な表示をしてこなかったのですが、利用しやすくする為、きちんと表示したいと思います。
どういう形式が良いか考えた結果、クリエイティブコモンズ CC BYとして公開するのが良かろうという結論になりました。詳細はこちらを参照ください。

クリエイティブ・コモンズ・ライセンス
上記基板パターンはクリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供しています。

Betaflightファームウェア

ファーム→ betaflight_4.2.8_HOIHOIF411R2_101738d8e.zip

FCを作るには

もっと詳細に書くべきですが取り合えず簡単にいうと・・・
まず基板メーカーにガーバーデーターを送って発注します。この時メタルマスク(裏/表)も一緒に作成します(私はPCBGOGOに発注しました)。
並行して部品表に記載した部品を入手します。
メタルマスクを使って基板にクリームハンダを塗ります。
配置図に従って部品を載せ、リフローすれば完成!
あとはBetaflightConfiguratorを使ってファームを書き込んで使います。
※細かい所は過去に書いたブログを参照願います。

フライトコントローラーを自作してみる。~その14~ マイコンパワーアップ検討

これまでフライトコントローラーに搭載するマイコンはSTM32F411RET6を使っていました。パッケージはLQFPの64ピンです。普通に飛ぶ為の性能としてはこれで問題ないのですが、RPMフィルターを使う場合はPIDループの周波数を落とす必要がある様です。RPMフィルターとはESCからモーター回転数の情報を読み取ってノイズを取り除く機能で色々な効能があります。
詳しくはここ→https://github.com/betaflight/betaflight/wiki/Bidirectional-DSHOT-and-RPM-Filter
そう考えるともっと処理能力の高いSTM32F405やSTM32F722あたりを使ってみたくなるのですが、前回も書いた様に中々入手ができません。

取りえず今のところは以下の様な構想をするにとどめておきます。

STM32F405RGT6

最大クロック周波数がSTM32F411の100MHzに対しSTM32F405は168MHzとなります。
これもLQFP64パッケージでF411とほぼ同じピン配置なのですが微妙に異なるところがあるんですね。
下図はデーターシートの抜粋で、31pinと47pinがF411ではVSSだったのに対しF405ではVCAPになっています。
なおVCAPは内蔵レギューレータにキャパシタを繋ぐ端子です。

今回作ったRev2基板では47pinはキャパシタまたは0Ω抵抗を選べる様にしていました。F411の場合は0Ω抵抗を取り付けてGNDに落とし、F405の場合はキャパシタを取り付けるという算段。。。

しかし31ピンについてはGNDに直結してしまいました。。。これはマズったですね。
パターン的にカットもできないのでF405を取り付けるときは31ピンのリードを無理やり曲げて30ピンのパターンに接続するしかなさそうです。ここも次にパターンを変更する事があれば0Ωかキャパシタを選択できる様に改良しましょう。

STM32F722RET6

F722になると周波数も最大216MHzとなります。
コイツのLQFP64版はVSS,VCAP共F411と同じ配置なので換装し易そうです。ただし25~29ピンの並びがF411/F405とは違うんですよね。なんで同じにしてくれないのでしょう。

STM32F722RET6のピン並びがRev2基板で問題になるのは27pinに接続している電流センサー端子です。27pinはF411/F405ではPB1が割り当てられているのですがF722ではPB2となっています。最初はPB2でも問題ないだろうと思っていたのですが機能をよく見るとPB2はA/Dコンバーター入力ではないんですね。アナログ値を取り込めないのでF722だとここから電流値を読めません。まあこれはモーター7,8やUART2に割り当てている端子にアサインし直すのも有りだと思うので大きな問題はないでしょう。
(そもそもワタシ電流検出機能を使った事がないのです)

まあいずれにしてもマイコンが入手できないとどうしようもないのですが。
いま再びRSコンポーネンツを見たら入荷予定が11月とか来年とかそんな予定になっていました。やれやれです。

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

いよいよ電源を入れて動作を確認します。
まずは実験用電源からUSBコネクタへ、電流制限しながら5Vを印可・・・問題なし。

ではBOOTボタンを押しながらUSBケーブルでPCと接続・・・BetaflightConfiguratorを立ち上げておくとDFUモードに入る筈ですが反応ありません。
調べていくとR1とC7が入替わって取り付けていることに気づきました。
パターン上の近い場所にあったので間違った様です。リセットかかりっぱなしだしクロックも発振しないし、こりゃ動作しませんよね。

R1とC7が入替っていた。動く訳ないっす。

R1とC7を正しく取り付けなおすとDFUモードに入る様になったのでBetaflightのファームウェアを書き込んでリブート。すると今度はBOOTボタンを押していなくてもDFUモードに入る様になってしまいました。
原因はBOOT0端子のプルダウン抵抗R11のはんだ付け不良で、クリームハンダの乗りが少なかった様です。

ここまでで安定に動作モードに入る様になり、BetaflightConfiguratorからも認識されましたが、今度はジャイロ(加速度機能も)が認識されません。基板を傾けても画面上の機体は静止したままなのです。
ここは色々悩んだのですが結局はこれもジャイロの接続不良でMPU-6000を取り付け直したら正常動作となりました。

どうも今回ははんだ付け不良が多いなぁ。Rev1基板の時はもっとリードが細かいジャイロIC(MPU-6500)でも接続不良は無かったのに。。。
やっぱり固まったクリームハンダを溶かして使ったのが原因でしょうか?

まあナンダカンダで正常動作する様になりました。OSDも正常です。
また手持ち数が少ないので取り付けていなかったフラッシュメモリ(BlackBOX用)も取付けてログが取れる様にもなりました。

では5インチ機に積んでホバーリングテスト

特に問題なく飛びます。この後FPVでも問題ありませんでした。

という事でFC完成とします。
この後は処理能力の高いSTM32F405やSTM32F722を試そうと思ったのですが、昨今の半導体不足の為か入手できません。Aliexpressでは何度もキャンセル食らうし、RSやチップワンストップも入荷未定になっています。

STM32F411ならあと数個持っているのですが出来れば早いマイコンで試したいですよね。

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

PCBGOGOからRev2基板が届きました。
が・・・ メタルマスクが裏面の分しか入っていません。発注内容を確かめると確かに裏面だけを注文していますね。
毎回なにかミスるなぁ。今回、基板自体は散々見直したんですけどね。

基板の裏/表。メタルマスクは裏面用のみ。

仕方ないのでメタルマスクの表面だけ再発注したところ、1週間せずに到着しました。早い!

メタルマスク表側

とにかく必要なものは揃ったので組立てに入ります。
机の上を片付けて適当な紙を敷きました。

こうやってマスクを被せた上からクリームハンダを塗るつもりなのですが・・・

クリームハンダがだいぶ固くなっています。
これって数か月で劣化してしまうらしいですね。一応冷蔵庫には入れていたのですが。

試しに無水エタノールを吹きかけて練り直してみると柔らかくなりました。
エタノールは何かと使うので、のどスプレーの空き容器に入れておくと便利です。

柔らかくなったのでメタルマスクの上から塗ってみます。


マスクを外すと・・・・なんか多くの箇所で短絡している。

柔らかくしすぎたかな。一旦クリームハンダをふき取ってやり直します。
少しアルコールを飛ばして適当な粘度になったところで塗りなおし(実際は何度かくりかえした)、大体いい感じになったと思うので部品を載せて・・・

リフローした結果がこれ。前回もそうでしたがマイコンのリードにブリッジができています。リフロー条件の問題か?
後から半田ゴテで修正します。

そして裏面も同様にリフローした後。こちらはブリッジは見られませんね。
なおU7と書いてあるところに部品が載ってませんが、これはBlackBOX用のFLASHメモリーを載せる場所で、部品の手持ちが少ないので一通り確認した後に手はんだで載せる予定です。

動作確認編へつづく・・・

フライトコントローラーを自作してみる。~その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なので多分大丈夫。(ただし送料が若干高い気がするし、また面付けすると高くなるので用途によって使い分けてます)

つづく・・・

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

フライトコントローラーを自作してみる。~その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端子のプルダウン

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