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

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

ブログの「←古い投稿」ボタンのリンク切れ修正

このブログの下の方に「←古い投稿」というボタンがあります。

赤で囲んだボタンの事です。

本来このボタンを押すと名前の通り古い投稿のページに移り、どんどん押していくと時期をどんどん遡って古い投稿が表示されていくずなのですが、最近までリンクが切れておりサーバのエラーメッセージを表示していました。

だいぶ前から気づいてはいたのですが修正方法が分からず放置していましたが、今日やっと修正ができました。

多分大丈夫です。

2020年台風10号

9月6日から7日にかけて台風10号が熊本に接近しました。
風速70m/Sとか80m/Sとかの予報で、本当に80mも吹いたら一溜りもなさそうです。
とにかく雨戸がある窓は全部閉めて、雨戸がない窓はテープを貼ります。
そして足しになるかはわかりませんが霧吹きで濡らしたガラスに梱包用ラップを 貼っておきました。

テープを貼っていると中心に星マークができます。どうでもいいんですけど、これを綺麗な形に貼ろうとしますがどっちかにずれます。

テレビで「段ボールを隙間なく貼ると良い」と言っていたので面積の広い窓に貼りました。

一昨年MakerFaireに荷物を輸送した段ボールにも頑張ってもらいましょう・・・

モバイルバッテリーに加えドローン用リポバッテリーも2本ほど充電しておきます。
リポはTiny用充電器を通すとスマホの充電にも使えるのです。

これだけやって避難します。
しかし地元の避難所はコロナ対策の為、受け入れ人数を制限すると言っており、もしかすると入れない心配も出てきました。
一時は暴風圏外の広島に宿をとって避難しようと真剣に考えましたが、道中の危険性も考えて止めました。
とにかく地元の避難所に行ってダメなら家で耐える事にします。
・・・そして避難所に行ったらあっさり入れました。

熊本最接近が夜中の3時頃との事ですが、避難所の中ではそんなに強い風には感じられず、むしろ夜が明けてからの方が風が強い気がしました。

結局朝8時に自宅に戻ったところ全く問題ありません。
段ボールも貼った時のまま。

工作室の窓も問題なし。

何事もなくて幸いでした。
予報よりも勢力が落ちたのか、たまたま何かが良い方に働いたのか・・・
でもこれに安心して今後の台風の時に対策を怠る事がない様、肝に銘じておきます。

2020年6月21日の日食

先週の日食、梅雨時なのに熊本は晴れたので日食グラスを使うとよく見えました。そこでグラス越しにスマホで撮影したけどうまく撮れませんでした。

日食グラスでみたらもっとそれっぽい形でしたが撮影するとこんなのです。

なので次の策、木洩れ日を探して撮影・・・。
明るい部分が三日月形に撮れています。夕方近かったので地面よりも壁に映る影の方が角度的にはっきり分かりました。

HONDA EM300発電機

知人から発電機を頂きました。ドローン練習の時にバッテリー充電に使いたいと思います(因みに知人とは’この時’登場したO氏です)。

HONDA EM300

40年近く前のものらしいですがエンジンはかかるし発電もします。でもそこは古い機械なのでいくつか調子の悪いところもあります。

まずリコイルスターター(エンジンをかける時のヒモ)を引っ張っても大抵は空回りしてしまいます。本来はこちらのサイトの写真の様に爪がかみ合って回転をエンジンに伝える筈なのですが、どうやら爪の動き悪い様です 。

頂いた知人は本体ごと地面に叩きつけて無理やり噛み合わせていました。
そこでこの爪の摺動部を掃除したいのですが、それにはこのフライホイールを外さねばなりません。しかし中心のボルトまでは外れたもののそれ以上が外れないのです。


右上のフライホイールが外れない。

しかたないので隙間からCRCを吹き込むと、とりあえずは噛み合う様になりました。当面はこれで様子を見る事にします。

次の問題はエンジン始動後にチョークを戻したらエンストする現象です。
十分温めた後にゆっくり戻していっても、回転が下がる→ガバナーが働いて回転が上がる→回転が下がる を繰り返し、その内停止します。

チョークレバー。始動時は上げ通常運転時は下げる筈なのです。

ネットの情報によると原因として一番怪しいのはキャブレターのジェットの詰まり。あとはタンクからキャブレター迄の燃料経路。稀にはガバナーの不調もあり得る様です。
という事でキャブのジェットを掃除するとあっけなく正常になりました。

キャブレター

一応タンクを外してストレーナやホースもチェックしておきます。


特にサビが詰まっている事もなさそう。

最後の問題は周波数のインジケーターが壊れている事。
この古い発電機はインバーター式ではないので回転数で周波数が決まり、電圧もほぼこれで決まるのでスロットルを調整して周波数を合わせる様になっています。

青と白の振動子交互に並んでいるのが周波数のインジケータ。
修理前は中で振動子が外れていました。

青色と白色が交互に並んでいるのが振動子で固有振動数があったものだけが振れるしくみです。
どうやって振動子を揺らすのかと配線をみると、イグニッションコードをくぐらせた配線で検出している様です。

インジケータを取り外すと中はこんな感じ。電気的には電磁石らしいものだけ。そして固有振動数を少しずつ変える為に長さを変えた振動子。本当は振動子が電磁石の前に固定されてるべきだと思うのですが外れています。

振動子がどの様についていたのか判らない。

元々どうやって振動子が付いていたのかわからないんですよね。外れてからかなり時間が経っているらしく、錆びてて痕跡を見ても良くわかりません。
とりあえずそれっぽい場所に両面テープで貼り付けてみます。あまり期待できませんが。

上手く振動するかな?

これで元の様に組み立てたのが先程の写真です。
で、エンジンをかけてスロットルを色々回してみるのですが、やはり振動子が振れません。取付け方が違うのかも。

結局周波数インジケーターだけは上手く動いていない状態です。
当面は電圧を測りながら使ってみる事にします。

緑のカーテン

梅雨も明けて九州は夏本番です。

少しでも工作室の気温を下げるため、今年は窓の前にヘチマを植えてみました。

レーザーカッターの前が窓でその向こうにヘチマが見えるのです。

実は昨年も植えたのですが失敗しました。プランター植えがダメだったのか、または軒下に置いたので水不足だったのか・・・。そこで今年は地植えにしたところすくすく育って実もたくさんできています。

その内ヘチマタワシを作ってみたいと思います。

しゃべるペットボトル回収箱 その後

神戸の姉から、ペットボトル回収箱が到着したのでしゃべる機構を設置したとの連絡がありました。
回収箱はペットボトル投入穴が二つ空いているタイプかと思っていたら実際は写真の様に大きな口が一つのタイプでした。

1号機

養生テープで貼り付けてあります。

2号機

こちらは机の上。

マイクロスイッチはこんな感じで取り付けて・・・

その上からクリアファイルの垂れ幕を取り付け、この垂れ幕がスイッチを押す構造にしたそうです。

横から見たところ

動画も届きました。

とりあえずは無事動作した様です。

TWE-Liteプロポ化計画

久々にMONOワイヤレスのページを見たらTWE-Liteの電波強力版である”RED”というのが出ていました。最大3Kmぐらい届くとの事。これなら空ものラジコンでも全く問題なく飛ばせそうです(実際は私が飛ばすものなんて100m程しか離れないんですけどね)。
そこでTWE-Liteを使ってラジコンプロポの代りにならないか試してみたくなりました。

なおTWE-Liteとは、当初は東京コスモス電機でしたが今はそこから分離したMONOワイヤレスが出している無線モジュールです。

こんなの・・・

TWEpropo_1

TWE-Lite(下) とTWE-Lite DIP(上)

TWE-Liteは内蔵マイコンのプログラムを書き換える事ができるので、MONOワイヤレス社からは色々な用途のプログラムをダウンロードできる様になっています。この中にはラジコン用のアプリもあるのですが、ラジコンカーを前提にされたもので、そのままで飛行機やマルチコプターを制御するのには向きません。

これを何とかして受信側TWE-LiteからS-BUS信号を出せれば小さなマルチコプターぐらい飛ばせるんじゃないかと考えています。するとフタバとかの立派なプロポを使わなくても済むし、またフライトヨークやラダーペダルで操縦したり、ちょっと夢が広がるじゃないですか

で、試してみる事にします。でもいきなり高出力版のREDを買うのもなんなので、まずは手持ちの通常出力版(こちらはBLUEという名前になったらしい)で試します。
まず送信側のTWE-Liteにはボリューム4個+スイッチ4個を付けて状態を発信します。この部分は「OpenStick無線化実験」の時のプログラムをほぼ流用です。
これを受けて受信側TWE-LiteがS-BUS信号を生成してフライトコントローラ(F3EVO)に入れるという計画です。

という事で早速プログラムを書いてデバッグです。受信側TWE-Liteが出すS-BUS信号を先日作成したS-BUS信号解読機(ArduinoMEGA256)に入力してデバッグを開始したのですが・・・受信機のデバッグ以前にS-BUS解読機側のスケッチがミスっていたのを発見。修正しました。

~~修正版S-BUS解読スケッチ(11bitデータに並び替える部分のミス修正)~~

int count;
long interval;
void setup() {
 Serial.begin(115200); // Terminal
 Serial1.begin(100000,SERIAL_8E2); // S-BUS
 count=0;
}

void loop() {
 int data[26];
 int val[19];
 int i;
 if (Serial1.available() > 0) {
 data[count]=Serial1.read();
 interval=millis();
 count++;
 }
 if ((interval+4 < millis()) && (0 < count) ) {
  count=0;

  val[0] =((data[1] & 0xff)<<0) + ((data[2] & 0x07)<<8);
  val[1] =((data[2] & 0xf8)>>3) + ((data[3] & 0x3f)<<5);
  val[2] =((data[3] & 0xc0)>>6) + ((data[4] & 0xff)<<2) + ((data[5] & 0x01)<<10);
  val[3] =((data[5] & 0xfe)>>1) + ((data[6] & 0x0f)<<7);
  val[4] =((data[6] & 0xf0)>>4) + ((data[7] & 0x7f)<<4);
  val[5] =((data[7] & 0x80)>>7) + ((data[8] & 0xff)<<1) + ((data[9] & 0x03) <<9);
  val[6] =((data[9] & 0xfc)>>2) + ((data[10] & 0x1f)<<6);
  val[7] =((data[10] & 0xe0)>>5) + ((data[11] & 0xff)<<3);
  val[8] =((data[12] & 0xff)<<0) + ((data[13] & 0x07)<<8);
  val[9] =((data[13] & 0xf8)>>3) + ((data[14] & 0x3f)<<5);
  val[10]=((data[14] & 0xc0)>>6) + ((data[15] & 0xff)<<2) + ((data[16] & 0x01)<<10);
  val[11]=((data[16] & 0xfe)>>1) + ((data[17] & 0x0f)<<7);
  val[12]=((data[17] & 0xf0)>>4) + ((data[18] & 0x7f)<<4);
  val[13]=((data[18] & 0x80)>>7) + ((data[19] & 0xff)<<1) + ((data[20] & 0x03) <<9);
  val[14]=((data[20] & 0xfc)>>2) + ((data[21] & 0x1f)<<6);
  val[15]=((data[21] & 0xe0)>>5) + ((data[22] & 0xff)<<3);
  val[16] = (data[23] & 0x1) ? 0x7ff : 0 ;
  val[17] = (data[23] & 0x2) ? 0x7ff : 0 ;
  val[18] = (data[23] & 0x8) ? 0x7ff : 0 ; // Failsafe
  for (i=0 ; i<19; i++ ) {
   Serial.print(val[i],DEC);
   Serial.print(F(" "));
  }
  Serial.print(F("\n"));
 }
}

 

大体動作がOKになったところでフライトコントローラ’F3EVO’に接続してみます。
フライトコントローラはUSBでPCに接続しておき、設定ソフト ’CleanFlight’ の ’Receiver‘ タブ使うと送信機の操作に合わせて信号が変化するのが確認できました。

CleanFlight

CleanFlightで受信機の信号をモニター中。

 

ここまではTWE-LiteのDIPタイプをブレッドボードに載せて試していました。
大体イケてるっぽいので次は表面実装版のTWE-Liteモジュールを使い、実際に機体に載せる基板を作ります。

いつもの様にKicadでパターンを書いてガーバーデータを出力して・・・

TWEpropo-Rxガーバー

Kicadで出力したパターン

 

でもウチのCNCの精度でこのパターンそのままでは削れる気がしません。そこでガーバーデータの座標値をテキストエディタで抜き出してJw-cadに読み込ませ、これを下書きにしてカットする部分を手書きしていきました。
こうしてカットラインの間隔を極力広いパターンに作り変えます。

TWEpropo-Rx Cutpattern

ピンク色がガーバーから抜き出した下書き。
黒線が手書きのカットライン。

そして切削。

TWEropo-Rx

切削完了。

と、軽く書きましたが何だかんだで失敗しながら3回切削しました。
チップ抵抗、チップコンデンサを1608サイズにしたのも失敗で、ルーペを見て汗をかきながらハンダ付けを行いました。
そして実装したのがこれ。

TWEpropo

クワッドコプターと接続したところ。
まだ受信機は固定していません。

次は送信機を作っていきたいと思います。

3Dプリンタ2号機~その6~

前回の投稿では1層目の貼り付きが悪いと言って一生懸命Z軸のレベル調整を行なった挙句、結局はプリントベッドをアルコールで拭いたら改善したというオチでした。その後も貼り付き性には問題なく、ネットで調べたらアルコール拭きは常識みたいですね。勉強不足でした。

コントロールPCのラズパイ化検討

3Dプリンタ1号機ではこの時設定したUbuntuマシンをまだ使っていました。たしかCPUはPentium4だったかな?
2号機もコイツで動かしてもいいのですが、レーザー加工機の制御PCも兼ねているので両方同時に使えないんですよね。また先日はボタン電池が切れて交換したし、そろそろいつ止まっても不思議ではない状態です。
他に使えるPCもないのでわが家に何個かあるラズパイで試してみようと思います。

Raspberry Pi1 ModelB

ラズパイの中では最も古いModelBです(+でも2でも、もちろん3でもないヤツ)。動作速度がどうかなーと思いますが、まずは試してみます。

3DP26_1

Raspberry Pi1 ModelB

Pronterfaceをインストール

Pronterfaceをインストールするのですが、まずはその前に今このRaspberry Piに入っているOSはいつのだか判らないので最新版のRaspbian(STREATCHと言うそうです)を入れ直しました。
その後・・・
’sudo apt-get install printrun’ で何事もなくインストール完了。

実行すると見慣れた画面が立ち上がります。
そしてプリンターと繋いで実行すると・・・なんかやっぱり遅いです。モデルの表示を2Dにしても操作した後10秒ぐらいしてからやっと反応する感じ。3D表示だと固まったかと思います。これはちょっと使えるレベルではありません。

pronsole

pronterfaceと一緒にpronsoleというのもインストールされています。こちらはコマンドラインでプリンターを操作できるものなので、メインPCからSSHでログインして操作可能です。 これだとGコードのロード時以外は遅さを感じないので、これもアリかと思います。

Raspberry Pi 2

Pi1だと遅いのですが、ならばRaspberry Pi2ではどうなのか試してみます。 このラスパイ、流行りに乗ってAIY VOICE KITに使ったのでこんな箱に入ったままです(AIY VOICE KITは Raspberry PI3を使うものとされていますが、わが家にPi3はないので2で試したところ、それなりに動いていました)。

3DP26_2

Raspberry Pi2(AIY VOICE KITに収納)

OSはAIY projectのイメージをSDに焼いたもの(ベースはRaspbian Jessie)が入っているのでこのまま使います。
ここでも上と同様にapt-getでインストールを試みたのですが、printurnが見つからないと言ってきます(apt-getの使い方を良くわかっていないだけかもしれません)。そこでGithubからソースを取ってきました。
実行してみると3D表示はやはり遅くてダメですが2Dなら問題なく使えるレベルです。

それぞれのレビジョン確認

ここでPi1とPi2で微妙に画面表示が異なるのが気になり、レビジョンを確認したところ・・・

Pi1   :2015.03.10
Pi2   :1.6.0

なんかレビジョン番号の付け方から異なっていて、どっちが新しいのか分かりません(当然GitHubから取ってきた1.6.0が最新だとは思いますが)。

もう一度Pi1に戻って最新版Pronterfaceをインストール

そこで再びPi1に戻って1.6.0をインストールしてみました。すると結構速度は改善されている様です。当然Pi2には負けますがなんとか使えるレベルだと思います。

(ここら辺の「使えるレベル」とか「遅い」とかは全て私の主観です。念の為。)

・・・という事で

Pi1で行こうかと考えながらも、ラズパイがつながるモニターはメインPCのしか持ってないんですよね。結局、RAMPSに液晶ディスプレイとSDカードを付ければそれでもいいかなとも思って揺れています。

RepRapのSenderって・・・

ところでPronterface等のSenderソフトって何をやっているんでしょう?想像では単にファイルからGコードを読んでArduionoに向けてシリアル送信するだけで、いくら古いラズパイだからってそんなに重い処理ではない様な気がします。実際Teratermでプリンターに接続し、’G0X10Y10F300’とか打ち込んでやるとその通りに動作します(エコーバックがないのでローカルエコーをONにし、改行コードを’LF’にしておく必要あり)。

Senderの動作としてとりあえず次のあたりが疑問です。

  • ロードとはどこにロードするのか?
    RAM上?
  • プリント中のフロー制御。
    プリンターの動作にどうやって同期しているのか?Arduinoとの接続では恐らくハードウェアフロー制御はできないと思っているので、Xon/Xoffなのか、または別の方法なのか?

という事でpronsoleのソースを眺めています(Pythonの経験値が低いので苦労しながら)。わかったら報告します。

3Dプリンタ2号機~その2~

前回の投稿後3年近く放ったらかしでしたが、正月明け頃から3Dプリンタ2号機の制作を再開しています。

まずは前回の写真・・・

3DP2

前回投稿した時の写真

 

そして現状。ぱっと見あまり変わっていませんがモーター、ベルト、エクストルーダが付きました。
3DP_2

 

ホットエンドは900円のを見つけて買っておいたのですが大丈夫でしょうか?
なおノズルは複数取付ける場所を準備しています(どうやって高さの調整をするかまでは考え付いていません)。

3DP2_3

コントローラは1号機で実績のあるArduinoMEGA256+RAMPS。とりあえずX/Yの移動ができるところまで来ました。

3DP2_4

ArduinoMEGA256+RAMPS1.4

続いてZ軸を製作中です。