原付バイクのCDIを作ってみる。

前回(タイミングライトの時)書いた様にCDIを作っています。
ネット上では色々試された先輩方がおられるので参考にしながら制作中。
なおCDIとはバイクの点火プラグに火花を飛ばす為の回路です。詳しくはこちら→Wikipedia CDI

上記Wikipediaにも書かれている通りCDIには交流式と直流式があります。
先日イジくったDioチェスタは直流式なのでCDI内部で直流12Vを2~300Vに昇圧し、これをコンデンサに貯めた後、一気にイグニッションコイルに流してプラグに点火します。ざっくり書くと下図の構造になっている様です。点火用の電源は直流12Vだけなので内部に昇圧回路が必要です。
最初はこれを対象に考えていましたが、Dioチェスタは息子が友達に売り払ったのでもうありません。

という事で今回は交流式のカブ系エンジン(カブ50とかJazz50。)を対象にしようと思います。
交流式のざっくりした回路は下図の様な構造。発電コイルが発生する交流が元々2~300VあるのでCDI内部では整流するだけで済みます。これはシンプルで済むのですが直流電源がCDIには入っていないので制御回路に複雑な処理(マイコンとか)を入れようとすると5V程度の電源が欲しくなって、これをどうするかを考える必要があります。

正規品CDIの波形

正規品CDIの動作に当たりをつけるため、Jazz50の波形を見てみました。
※注意:「正規品」と書いていますが中古バイクなので本当に正規なのかというと保証はありません。

まずステーターコイルからCDIに入ってくるAC入力

AC入力は本来正弦波のはずですがCDI内の整流回路の影響でギザギザの波形になっています。
ここから想像混じりですが以下の動作をしていると思います。

まずフライホイール1回転で4サイクル分の交流波形が出て、整流した電荷を段階的にコンデンサに貯めていく。その後点火する事で電荷が抜ける・・を繰り返す。

LT-Spiceで試した結果、整流部分は以下の回路になっていると辻褄が合います(TP1の波形)。
ACジェネレータの内部抵抗は分からないのでとりあえず波形が近くなる値を入れました。
また回路中V2、IGNは電荷を抜く為にあります(実物ではサイリスタに相当)。
ダイオードD2がなぜ要るのかはわかりません。これが無いと負電圧期間が全然違う波形になりますが、それでも動作上は問題なさそうに思えます・・・負電圧期間にD1に加わる逆電圧を減らす為かな?という予想をしています。そうであれば今回使用しているダイオード(IN4007)は逆耐圧1000VなのでD2を無くしても良いかもしれません。

次にタイミング入力とイグニッションコイルに出力する信号を見ます。
CH1(黄色)がタイミング入力、CH2(青色)がイグニッション出力
※2回分の波形が重なってしまいました。
タイミング信号は+の山の後に-の谷が来るみたいですね。この内の+3Vのあたりで点火している事が判ります。

とにかく動作するものを作ってみる。

最終的には進角・遅角機能を盛り込みたいですが、まずはとにかく動作するものを作ってみようと思います。
ネット情報を参考に最初に試したのは下の回路。

C1およびD1,D2でAC入力の振幅を2倍の直流に昇圧してC2に貯めておき、サイリスタ(TY625)にトリガを入れるとC2に貯めた電荷がイグニッションコイルから引き抜かれて点火する仕組みです。タイミング信号はQ1で受け、このままだと逆相になるのでQ3でもう一度反転してからサイリスタのゲートに伝えます。

AC入力を倍電圧整流にしたので上で見た波形にはならない筈で正規版CDIとは回路が違っていると思いますが、まずは確実に火花が飛びそうな方法にしています。またQ1,Q2を動作させるために外からDC5Vの電源を入れる必要があります。正規版CDIはDC電源は不要ですが、これも一旦確実に動作しそうな方式でやってみます。

ではバイク(息子が整備中のJazz50)に繋いで・・・

キックするとあっさりエンジンが掛かりました!!
では波形を見てみましょう。オシロを持ってきて・・・

まずはCH1:タイミング入力CH2:AC入力
予想通りAC入力はグニャグニャで正規版CDIとは違う波形になっています。
真ん中あたりのガクンと下がっているところが点火タイミングでしょう。


次にCH1はタイミング信号のままCH2をC2の左側端子(ほぼC2の充電電圧を表示)に繋ぎ変えてみます。
※タイムスケールは変更しています。
C2は倍電圧整流の効果で600V以上にまで上がっていて、点火の威力はあると思いますがコンデンサやサイリスタの耐圧ギリギリなので、倍電圧整流は止めた方が良さそうです。

では倍電圧整流を止めるためにC1を短絡してみます。
これでAC入力としてはLT-Spiceで試した回路と同じになりますが、今度はエンジンが掛かりません。
掛からないながらもキックの瞬間に撮った波形は下の通りです(プローブは上と同じ接続)。予定通りC2は300Vに下がっています。エンジンが掛からないのは電圧が下がったためでしょうか?


ならば点火エネルギーを増やすため、C2に1μFを追加して計1.47μFにするとエンジンが掛かりました。
(後で考えるとキャブレターの調子が不安定なのが影響していたのかもしれませんが。)
この状態でのCH1:タイミング信号CH2:AC入力波形を見ます。AC入力は倍電圧を止めた事で正規品CDIと似た波形になっています。

次にCH1:タイミング信号CH2:C2波形
C2電圧が少し低くなっています。容量が増えた事で上昇が間に合っていないんでしょうか?
でもこの方がエンジンが掛かりやすいのは容量アップでトータルの電荷が増えているからかな。

結局、1.47μF(コンデンサ2個)は寸法的に大きすぎるので1μFに減らしたところ、これでもエンジンは回ったので1μFを採用します。本当は0.47μFと1μFの間も試して余裕がある事を確認したいところですが、そんなに高耐圧コンデンサを持っていないのです。

以上を踏まえミニマムな構成で2号機を考えます。

まず倍電圧整流は止めます
あと5V電源もなくしたいですね。そうするとタイミング信号をバイポーラトランジスタで受ける事はできません。正規CDIがどうやっているのか判りませんが、たぶんそのままサイリスタのゲートに入れているのではないでしょうか?という事でタイミング信号をそのまま抵抗経由でゲートに入れてみます。この場合ゲート信号が-レベルの時、サイリスタのゲート逆耐圧である-5Vを超える危険があるのでダイオードD3で保護しておきます。
それとエンジンを停止させる機能が付いていなかったのでENの配線を追加しています(1号機では省いていたので停止させるのに手間がかかったのです)。バイクのキーをOFFにした時、ここがGNDに落ちるのでサイリスタがトリガーされなくなって停止します。

という事で2号機は下のかなりシンプルな回路にします。
(たぶん正規品もこうなっているんじゃないかと思っています)

これでもエンジンは掛かったので波形を見ます。

CH1:タイミング入力CH2:AC入力
正規CDIと同様の波形になっています。

CH1:タイミング入力CH2:IGN出力
特に何という事もないですがIGN出力を時間軸を拡大で見ました。


そして回っているところの動画。※音量注意。
なおピザのチラシは絶縁目的で敷いています。

走ってみる。

実際のバイクで走行テストする為、同じ回路で小型版を作りました。
正規品とほぼ同サイズ(コネクタは電線経由ですが)。

適当にビニールテープで絶縁して息子のカブに積んで走ってみましょう。
(上で試しているJazz50はまだ整備中で公道を走れないのです)

カブの正規CDIを外して・・・

いい加減な方のCDIを付けます。

そして家の周りを5分程走ってみました。
特に違和感なく普通に走れるし、走行後も熱を持つ様子は見当たりません。

という事で・・・

ミニマムなCDIを作成する事で理解が深まりました。たぶん正規品も同じ構造じゃないでしょうかね。
この後は進角/遅角機能を盛り込みたいのですが、マイコンを使うとすると上記の通りDC電源をどうするか問題が発生します。あんなガタガタで250Vもある電源から安定したDC5Vを作り出すのは難易度高そうです。空き端子から12Vを入れても良いのですが、そうするとバイク側の改造が必要です。でもできればCDIだけポン付けで交換できる様にしたいですし。。。
なおカブでも90CCのモデルだと進角機能付きのCDIを採用している様で、これがどうなっているのかは気になります。

LEDタイミングライト(回転数表示付き)

先日の投稿以来、原付バイクの電装系が気になっておりCDIを作ってみたくなりました。
CDIというのはエンジンの点火プラグに火花を飛ばすための回路で、エンジンから来るタイミング信号を受けてイグニッションコイルに電流を流すという仕事をしています。

CDIの例

最終的には回転数に応じて微妙にタイミングをずらす(進角とか遅角)事を考えているので、そうすると実際の点火タイミングを確認したくなります。それにはタイミングライトなるものが必要です・・・が、持っていません。

タイミングライトというのは点火プラグに繋がるコードの被覆の上から電極を挟み込んで信号を取り出し、その瞬間にライトがピカッと光るという動作をします。その光でエンジンのフライホイールを照らすと、フライホイールが毎回同じ角度になった瞬間に照らされるので人間の目にはフライホイールが止まって見えるというものです。
フライホイールには点火すべきタイミングの位置に刻印がされているのでこの刻印がどの位置に見えるかによって思い通りのタイミングで点火しているかどうかを確認できるのです。

フライホイールの例

で、タイミングライトの構造をネットで調べてみました。昔からある市販品はカメラのストロボ同様のキセノン管を使っているそうで、ネット上では使い捨てカメラのストロボで自作されている記事が見当たります。
またLEDを使って自作されている方もおられます。
今回、使い捨てカメラを入手するのも面倒なので手持ちのLEDで試してみました。
なお特にLEDの場合は光量が低くて見づらかったという情報が多いので、この辺りを気にしながら作ってみます。

構想

LEDでタイミングライトを作ると光量が足りないという問題ですが、ネットでよく見る例ではプラグコードから検出した信号をそのままトランジスタに入れてONした瞬間にLEDが光るという構造でした。

そこでプラグコードから検出する信号の幅を実測したところ2μS程度しかありません(これはバイクの機種や信号取り出し方法によって差があるとは思います)。
仮にエンジンが1000回転/分(以下rpm)で回っているとすると1回転に要する時間は60mSです。
この場合60mS毎に2μSだけLEDが発光するのでONしている割合は0.0033%。よくLEDを調光する時にPWMを使いますが、デューティー0.0033%でLEDを光らせる様なものなので、これはやっぱり暗いでしょうね。

という事でプラグコードから検出する信号幅に係わらず一定の時間LEDを光らせる構造にする必要がありそうです。
ではどれだけの時間光らせるかですが、まずはフライホイールが回る角度にして1度を目標でやってみる事にします。すると1000rpmの時、60mS/360度なので167μSですね。これでもデューティ0.28%ですが直接よりも80倍以上明るくなるだろうという目論みです。これで足りない部分はLEDに流す電流を増やしてみましょう。

で、LEDですが手持ちにこんなのがありました。12Vで7WのLED。これだと光量はたっぷりとれそうですが試してみると内部に諸々の回路が入っていて瞬間的な発光ができませんでした。

そこでいつだかジャンクで購入したチップLEDを使う事にします。定格100mA、瞬間的には150mA流せる事になっています。

これを2個直列で使用してみます。

試作1号

という事で次のような回路で試してみました。

プラグコードから取り出した信号を4本のダイオードで電圧制限してQ1に入力します。Q1がONになるとQ2とQ3のワンショット回路をトリガーして一定時間分Q4をONにすることでLEDが点灯します。

なお電源には12Vを用いて抵抗経由でLEDに流しますが、ワンショット回路付近はレギュレータで5Vに落として使っています。5Vに落としているのは特に意味はなく、これも試行錯誤の痕跡です。
Q4のMOSFETは2N7000という、あまり大電流を流せるFETではありません。これはゲート容量を低く抑える為で、大容量のパワーMOSFETだとゲート容量も大きくなり遅延が発生するのを防ぐ目的です。

ワンショット時間はC2とR2で決まります。またLEDに流す電流はR5で決まります。試行錯誤の結果、これらの値は上記回路図に対し次の様に変更しています。
C2:0.01μF(回路図通り)、R2:68KΩ、R5:8.5Ω
これで発行時間を約170μSに固定しています。
またR5はLEDに瞬間的に流す電流を決めます。ここでは約0.7Aを流しているのでLEDもMOSFETも定格オーバーですが光量を得るためなのです。実際には1/360の期間しか点灯しないので平均電流だと余裕で定格に収まっているんですよね。実際どうなんでしょう。

そして実際に作ったのがこれ。C2,R2,R5のあたりに試行錯誤の痕跡が残っています。
またプラグコードからの検出には事務用クリップ(目玉クリップと呼ばれるやつ)に電線を繋いで、これでコードを挟んで点火信号を取り出します。
車体アースに接続するワニ口クリップも設けましたが、接続しなくても動作しました(目玉クリップも近づけるだけで点灯した)。

では実際のバイクでタイミングを見てみます。カブ系エンジン(Jazz50)のフライホイールです。

一応「F」マークの位置が見えていますね。
但しLEDの点灯時間が170μS固定なので1000rpmで回っている時はフライホイール1度の期間点灯しますが、仮に1万rpmで回ると分解能10度となってしまい広すぎます(それにLED点灯のデューティも1/36となり破壊のリスクも高まる)。
実際上の動画で若干ブレて見えるのは回転数が高めだったので1度を超えているのだと思います。
できれば回転数に係わらず1度の期間だけ点灯させたいですね。これをアナログ回路で実現するのは難しいので次の試作ではマイコン(Arduino)に頼ることにします。

試作2号

Arduinoで制御しますが、そのまま入れるのは勿体ないので裸のATmega328PにArduino UNOのブートローダを書き込んで使いました。
プラグコードから検出した信号はQ5経由でArduinoのD2端子(ATmega328PのPD2)に入力して割込みを掛けます。
するとD5端子(ATmega328PのPD5)から一定期間のパルスを出し、これをパワーMOSFETのゲートに入れてLEDをドライブします。
今回はマイコンのGPIOがゲートを叩くので多少ゲート容量が大きくても影響は少ない事を期待してパワーMOSFET(手持ちの2SK2252)を用いる事にします。

パワーMOSでドライブすると大電流を流せるのでLEDも2直列×3並列の計6個を光らせてみます。
LEDと制限抵抗は回路図に含まれていませんが下図の様に接続しました。
LEDの定格Vfが3.1V×2個で電源が12V、よって合成抵抗5Ωには5.8Vが加わります。なので各LEDの瞬間電流は1.16Aとなり、定格に対して10倍位多いですがデューティ1/360なので耐えてくれる事を期待しています。
実際手で触った感触では全く温度が上がった様には感じられませんが、もし壊れる様なら電流を減らそうと思います。

LED基板はこんな感じ。抵抗は裏側に付けています。


一方Arduinoのスケッチでは点火信号の間隔を測定しておき、それに比例してワンショットの発光時間を決めています。これにより回転数に係わらずフライホイールが1度回転する時間だけLEDが点灯します。

また点火信号による割込みからLEDオン迄の時間を最小にするため、DigitalWrite関数は使わず直接PORTDレジスタに値を(1バイトまとめて)書き込んでいます。なので後述する液晶ディスプレイはPORTDを避けた端子に接続しました。
なお割込み処理の内部ではdelayMicroseconds関数を使って時間待ちをするという無理やりな事をしています。もしかするとこれによりmicros()関数や1秒タイマーの精度に影響があるのかもしれません。このあたりはArduinoのシステムの動作をきちんと調べるべきですが、影響しても1/360なのでとりあえずこのまま進めます。

そして折角マイコンを載せるのならと液晶ディスプレイに回転数を表示してみました(1秒毎に割込みを掛けてその間のパルス数から算出しているだけなので分解能は高くないです)。

一時CBF125Tのタコメーターとして働いていた液晶ディスプレイを流用

実際動作させてみた時の写真。上とは別のバイクなのでタイミングマークが分かりにくいのですが、明るくはなっているし回転数を上げてもタイミングが見えています。

ケースに入れて最終形態にする。

このままだと使いづらいのでケースに入れたいと思います。
ただ電源に12Vを入れるのは面倒なので006Pの角型9V電池にしました。これによりLEDに流れる電流は約半分になり、少し暗くなりましたがまあ使えます。制限抵抗を減らしても良いのですが当面このままで試してみます。


測定中の動画

以上で点火タイミングを確認できるようになったのでCDIを作れる準備ができました。
で、対象とするバイクは当初は先日修理したDioチェスタを予定してしていたのですが、息子が友達に売り払ってしまった(原付バイクが沢山あり過ぎて邪魔だといったのは私です)のでカブ系エンジンのバイクに変更しようと思います。
Dioチェスタはバッテリー式CDIだったので12Vから250V程度に昇圧する必要がありましたがカブ系は最初から250V程度の交流を元に点火するのでCDI内部では整流するだけで済みます。
実はもう実験を始めているのですが、それはまた次のお話・・・。

最後に参考用としてArduinoのプログラムを載せておきます(言うまでもないと思いますが、これを参考にされて何か起こっても責任は持てません)。

スケッチ(Arduino UNO用)

CBF125T タコメーター故障&作成 ~その2 ステッピングモーター化~

先日液晶表示のタコメーターを作りましたが、液晶ディスプレイが小さいのと昼間はコントラストが低くて見づらかったのでステッピングモーターに置き換えて針を振らせてみました。

まず前回のタコメーターは下の状態。

反射光でもバックライトでも見えるというディスプレイですが、はやりちょっと見づらいのです。

今回のステッピングモーターについて

ステッピングモーターはAmazonで2個¥1940円で購入。
X27-168という型番で、CNCや3Dプリンタで使う様なヤツではなく、下の写真の様にメーター用の軽量のものです。

後ろ

このモーターはこちらのブログで紹介されていました
またデーターシートはここで発見しました

元々付いていた(壊れた)タコメーターと比べるとこんな感じ。電子回路が別に必要だとしてもかなり小さくて済みそうです。

ところでこのステッピングモーター、2相のバイポーラ動作ですがコイルの駆動が5V/20mAで済むのですね。
という事はAtmega328PのArduinoで直接駆動できます。改めてAtmega328Pの絶対最大定格を見たらI/Oピン電流は40mAと書かれています(20mAだと思ってたのでギリのつもりでしたが、実は結構余裕だったのね)。

また通常動作(マイクロステップ等にしない場合)では、1ステップで1/3度回るのでタコメーターの分解能としては十分です。

回路

回路的には先日作った液晶方式からディスプレイを取り外し、ステッピングモーターの配線4本をつないだだけ。
あ、あとパルスを割込みでカウントするため、入力ピンをD5→D2に変更しています(Atmega328PのArduinoで割込みを使うにはD2かD3に入れる必要があるので)。

取り付け

パネルへは新たな穴を開けて直接モーターを取り付けました。
不要になった穴は夜間に光が漏れそうなので裏からプラパテで埋めたのち、表から黒塗りしています。


取り付けにちょうど良いサイズのタッピングビスが手持ちになかったので、モーターの取り付け穴(元々Φ1.85)にタップを立ててM2ネジで取り付けました。

指針は元々付いていたものを使うのですが、軸の太さが元のメーターだと0.8mmに対し、今回のモーターは1mmと太くなります。
そこで指針の軸穴を0.95mmのドリルで拡大したら丁度良くなりました。
因みに0.95mmのドリルは写真のセットに含まれています(Tinyドローンの軸拡大にも時々0.95mmを使うので単品で買っておきたいのですが売っているのを見かけません。通販で買っとけばよいのですが)。

そして一通り接続したところ。。。

プログラム

前回はゲートタイム200mSでパルスをカウントしていましたが、低回転での分解能を改善するため1パルス毎に割込みをかけてArduinoのmicros()時刻からパルス間隔を測定しています。
モーターコイル2本のそれぞれ両端に加える電圧は以下の配列を用意しておき順次切替えています。

// 各ステップの端子状態
int coil1a[]={1,1,0,0,0,0};
int coil1b[]={0,0,0,1,1,0};
int coil2a[]={1,0,0,0,0,1};
int coil2b[]={0,0,1,1,0,0};

動作させてみる・・・

アイドリング時の振れが大きいです。
またキーをOFFした時に0rpmに戻らずその場で止まってしまうのがカッコ悪いですね。

対策

まず振れが大きい問題についてはソフト的にローパスフィルターの処理を強目にしました。

次にキーOFF時の動作ですが、OFFの瞬間に電源が切れてしまうと0に戻せないので、戻すまでの時間分の電力を貯めておく必要があります。なら電解コンデンサでしょうね。
ざっくり計算で10000μF程度をつけたいところですが手持ちにないし大きすぎるので試しに4700μFを、ArduinoNANOのレギュレータに供給している12VとGND間に付けてみました。
・・が、キーOFF時に0rpmには戻りませんね。
でもこれは想定内。単に12VとGND間にコンデンサを繋いだだけではコンデンサに貯めた電荷は車体側にも流れてしまうのであっという間に放電し、タコメーター側に供給する電力は僅かになってしまいます。
これを防ぐため、バイクから供給する12Vとタコメーターの間をダイオードで分離してみます。また電源ON時にガバッと流れるのがイヤなので抵抗とダイオードをパラにつないで下図の様に接続しました。

これでコンデンサの容量を替えて試したところ2200μFでOKですが1000μFだとダメ。よって少し余裕を持たせて3300μFを取り付けました(4700μFの方が安心ですが50V品で大きくてケースに入らないのです)。

実際の配線は下の様なのを作ってギボシ端子接続に割り込ませています。

コンデンサはテープで貼り付けました。この位置ならケース内に納まります。

もう一度動作確認・・・

指針の揺れがかなり納まり、キーOFF時に0rpmに戻る様になりました。
しかし実際に走ってみると、アクセルを開けている間だけまだ揺れがすこし大きいですね。
もう少しローパスフィルターを強めに効かせようと思いますが、またメーターを外すのが面倒なので次回バラす機会があればやろうと思います。

Arduinoのスケッチ

参考に今回のプログラムを載せておきます。

http://www.hoihoido.com/data/tachometerX27_2.zip

フライトコントローラーを自作してみる。~その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角は諦めて基板サイズを広げるかもしれません。

レーザー管劣化

レーザー管が劣化してしまいました。

いきさつ・・・

前に冷却水をこういうのにした事を書いたのですが・・・

Water2_7
不凍液を電動ポンプで回し、ラジエーターで冷却していますが
水流がちょっと弱めでした。
手押しポンプが付いているのは電動ポンプまで水を通す為です。

あまり冷却が弱いとレーザー管が劣化するという事を読んだので直ぐに元の風呂水ポンプに戻していました。

今まで使っていた風呂水ポンプ

この状態で使っていても徐々に劣化感はあったのですが、先日MDF材を切っていたら途中でレーザーが出なくなっていました。みるとポンプが壊れてセンサーが水流を検出しなくなり、レーザーを停止させていた様です。

水流センサー
水流センサーのインジケーター

ポンプはもうウンともスンともいいません。でもこれは予備として買っておいたこちらの水中ポンプに交換します。

いつだか買っておいた水中ポンプに交換。

これで水は依然よりも良く流れるようになったのですが・・・・レーザーが弱々しくなり、フルパワーでも2.5mm厚のMDFが切れなくなってしまいました。

水流センサーが働いてレーザーは止まっていた筈ですが、余熱が逃げないだけで劣化してしまうのでしょうか?

ためし撃ち
購入時の試し打ち風景。
ブログを見返すとこのレーザー管は2015年に購入しています。
約5年使ったと考えれば諦めもつくかな。

という事で・・・

とりあえずレーザー加工機のない生活は考えられないので新たなレーザー管を発注しましたが、新型コロナで世の中おかしくなっているこのご時世、いつ届くのでしょうか?

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

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

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

レーザー加工機の冷却水~不凍液投入~

先日水冷システムを変更したレーザー加工機ですが、冷却液には水道水をそのまま使っていました。今は5月なので凍結の心配はありませんが、その前にカビやコケが生えると嫌なので、ちゃんとした冷却液に入れ替えます。

冷却液には何を入れようかとネットで調べると、自動車用でよく使われているエチレングリコールというのは毒性があるそうなので漏れた時が嫌で使いたくありません。グリセリン系というのもあり無害でそのまま下水に流せるそうですが粘性が高いとの事。

このあたり素人で良くわかりませんが、プロピレングリコール系というのが毒性が低いとの事なのでこれを買ってみました。カビやコケの防止効果があるかどうかはわかりませんが・・・。

water2_1

プロピレングリコール系冷却液”コガブラインPG40”。Amazonで¥923-

早速リザーバータンク(として使うペットボトル)に入れてみました。かき氷のイチゴシロップみたいでおいしそう。

water2_2

約2リットル投入。

で、接続してみます。

water2_3

全体がピンク色。

電動ポンプをONにしといて灯油ポンプでプライミングしてやると循環し始めます。
しかし水道水の時と比べて流量が明らかに減っています。やはりこれも粘度が高いのでしょうか?水流センサーも反応しません。

水流センサーの出力を見ると6.89Hzです。センサーは10Hz以上を流量有りと判定する様にプログラムしているのでこれでは反応せず、このままではコントローラーがレーザー発射を止めてしまいます。

Water2_3

水流センサーの出力

レーザー管にどれくらいの水を流す必要があるのか分かりませんが、今までフルパワーで動かしても特に水が温まる感じも無かったので、とりあえずこの流量でもいいんじゃないかと(ええかげんやなー)、センサー閾値の方を4Hzに落としました。

と、一旦これで良しとしたのですが、やはりちょっと不安なので冷却液に精製水を混ぜて濃度を下げる事にします。冷却液を500ml抜いて代りに精製水500mlを入れました。冷却液そのままだと凍結温度が-25℃ですが、さすがにそこまで冷える事は無いので多少薄くなっても大丈夫でしょう。

Water2_5

精製水500ml。
ドラグコスモスで¥98-で購入。割安な気がしましたが元は水ですもんね。

これで若干ですが流量が増えています。センサー出力も9Hzにアップ。

Water2_6

不凍液を薄めた後の水流センサー出力。約9Hzにアップ。

なおこの水流センサー(YF-S201)は以下の式で周波数が決まる仕様になっています。
 Frequency (Hz) = 7.5 * Flow rate (L/min)
という事は9Hzだと、9÷7.5=1.2L/minとなります。適正値が判りませんが少ない気もするので
温度に注意しながら使ってみます。

Water2_7

何だか、派手な色が入り混じっています。

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

やっぱり二代目3Dプリンターにラズパイを取付けました。
初代RaspberryPiのModelBです。

3dp28_1

Raspberry Piをねじ止め。

ラズパイにモニターやキーボードは取付けていませんが、Xwindowの画面をメインPCに飛ばしPronterfaceを実行できます。
又はTeratermでログインしてPronsoleを使う事も。。。

フロントパネルにはラズパイ専用の電源スイッチとシャットダウンボタンを設置したのでLCDコントローラだけで動作させる場合にはラズパイ電源はOFFにできます。

3dp28_2

手持ちのスイッチを取付け。

なお特に対策をしなければラズパイ専用電源をOFFにしてもArduinoからの電圧でラズパイのLEDが点いてしまいます。正常動作する程の力はない様ですがArduino側のレギュレータに負荷が掛かりそうです。気持ち悪いのでUSBコネクタの+5V端子にカプトンテープを貼って絶縁するという、いい加減な対策をしました。

3dp28_3

USBコネクタの+5V端子を絶縁。

 

これで3Dプリンタ2号機は一旦完成とします(多分まだ何かやりますが)。

3dp28_4

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

前回の続きでpronsoleの中を調べています。まだよくわからない部分も多々あるのですが、まず1番の疑問としてGコードのロードになぜ時間がかかるのか、またどこにロードしているのかについては、どうやらPythonの配列に全てのコードを読み込んでいる様です。という事はメインメモリーに取り込んでいる事になります。但し時間がかかっているのは読み込みそのものではなく、その後にレイヤー数や実行時間を計算する部分の様です。という事は実行時間表示を諦めたらロードが早くなってサクサク動くんではないかと期待し、そのうち試してみたいと思います。

LCDコントローラ検討

そもそもは制御PCをどうするかという話でしたが、LCDコントロールパネル+SDカードでも良いんではないかという気がしてきました。これまた世の中では当たり前なのでしょうけどウチでは今までPC接続でしか動かした事が無かったんです(このあたりが世の中から周回遅れなのです)。

手持ちのLCDで丁度良いのがなく、Aliexpressをみたら¥1031-でこんなのがあったのでポチりました。ロータリーエンコーダやSDカードソケットまでついて送料無料です(今見たら若干値段が変っていましたが)。

そして随分と早く、9日間で到着。

3DP27_1

立派な箱に入って到着しました。

開封・・・

3DP27_2

中身一式。
ケーブルに加えRAMPSに挿す為の変換基板も付いています。

接続

早速接続します。配線は本体と変換基板をケーブルでつなぎ、変換基板をRAMPSに挿すだけです。
そしてMarlin側は次の4箇所のコメントを外しました。

#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
       ←接続するコントローラのタイプが「Discount Full graphic controller」である事を示す。
#define REVERSE_ENCODER_DIRECTION     ←ロータリエンコーダの回転方向を逆にする。
#define SDSUPPORT             ←SDカードを使用可能にする。
#define LCD_LANGUAGE kana        ←表示をカナ表示にする。
#define INDIVIDUAL_AXIS_HOMING_MENU  ←各軸単独でHOMINGする為のメニューを追加する。

電源投入

そして電源を入れると・・・

3DP27_3

おお、灯いた。

事前の情報でSDカードに保存するGコードは8+3形式のファイル名でないとダメと聞いていたのでこの通りに作成し、余っていた128MBのSDカード(128GBではなく128MB)に入れてみましたが・・・ファイルを見つける事が出来ません。そこで8GBのSDHCに入れたところ問題なく読み出せました。今どき128MBは想定外なのでしょうか? ま、しかしこれで問題なくプリントできます。

取付け

本体に取付ける為、Thingiverseから適当なケースを落としてきてプリントしました。そしてケースに入れてねじ止めすると、画面の真ん中あたりの横一列に表示の欠損が発生しました。

3DP27_4

真ん中付近に横一列の表示欠けが出ました。

改めてケースから外してみると正常に表示できます。どうやらサイズギリギリにプリントしたケースに基板を押し込んだ為、応力が加わりディスプレイの配線が接触不良をおこしているのだと思います。 そこでケースを少し削って余裕を持たせたら正常に戻りました。

そして本体に取付け。
おー!いい感じです。

3DP27_5

本体に取付けたところ。

そして・・・

元々1号機があった場所に置いてみました。
手前からレーザー加工機、3Dプリンタ2号機、基板切削用CNCです。

3DP27_6

わが家の自作工作機器

結局のところ、まだRaspberry piは繋いでいません。
なんだかこのままSDカードだけでで行ってしまいそうです。

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

3Dプリンタ2号機製作の続きです。

Z軸を上に引っ張ると抜けてしまう構造だった件はこの写真の様にMDFボードを上下からベアリングで挟みストッパーで固定する方式にしました。多分これで大丈夫。

3DP2_41

Z軸抜け対策

 

調整で苦労したのはエクストルーダからの吐出量が安定しない(なんだか少ない)点です。最初こんなエクストルーダを使っていました。

3DP24_1

PLAでプリントしたWade’s Extruder

そこで1号機で使っていたMakerGear製エクストルーダに交換しようとしたらパーツが割れていました。つい先日まで1号機で働いていたのですが。

3DP24_2

MakerGear製エクストルーダのパーツ破損

仕方ないので2号機で補修パーツをプリントして取付けます。

3DP24_3

補修して取付け。
黄色いパーツが新たにプリントした部分。

このエクストルーダは実績があり音も静かです。しかし吐出量が少ないのは変化ありません。プリントしたエクストルーダが原因では無かった様ですが静かなのでこのままこっちを使います。

改めて、エクストルーダの送り量を再測定してみると・・・
無負荷では指定通りの長さが出ていくのですが、温めたノズルから吐き出しながらだと1割くらい少ない量しか出ません。そこで送りギヤの締め付けネジを強くしたらだいぶマシになった(でもまだちょっと少ない)のですが、この状態でプリントしていると途中でエクストルーダのモーターがゴトゴトという音をたてて脱調し始めました。フィラメントを引き抜いてみると送りギヤで傷付けた部分がテフロンチューブ内で抵抗になり、手で出し入れしても明らかに滑りが悪くなっています。仕方ないので締め付けネジを少し緩め、脱調はせずに送り量もまあまあなギリギリのところに調整しています。結局これでも吐出量が少な目なのでスライサー(curaです)側で少し多めに出す設定にしました。

今回の2号機のエクストルーダは’Bowdenタイプ’にしています。ホットエンドとコールドエンドを分離してテフロンチューブでつないでいるので、X-Y動作時にエクストルーダのモーターを一緒に振り回さなくて済む(なので動作が軽い)のと、将来的に複数のエクストルーダを付けるためヘッド周りのスペースを空けておけるというメリットがありあります。しかしチューブで間を繋いで精度的に大丈夫かという不安がありましたが、やっぱりこのあたりが難しいのかもしれません。

次に前回プリントベッドのガラスにヒビを入れてしまったのでガラスを交換します。いつだったか複合プリンタをバラしたときに取っておいたスキャンベッドのガラスを使います。ガラスを切るのは初めてですが過去に家のタイル補修時に買ったタイル切りがあるのでこれでガラスを切ってみます。

3DP24_5

ガラス板を切ります。

適当なゴム板があったので滑らない様に定規との間に挟み、タイルカッターで傷を入れます。Youtubeで見た動画だと「キー」という高い音と共に傷が入っていましたが「ゴリゴリ」という音しかしません。腕の違いなのかカッターの違いなのか。でも何とか傷は入った様です。

3DP24_6

細長いゴム板があったので定規との間に挟んでガラスに傷をつけました。

そして恐る恐る力を入れると・・・

3DP24_7

おおっ、上手く割れました。

もう一辺も切る必要があります。同様にやっていくと・・・

3DP24_8

今度は失敗です。ギタギタになりました。

仕方ないのでダイヤモンドヤスリと回転ツールで削って真っ直ぐにしていきます。

3DP24_9

削ってなるべく真っすぐに修正した後。
(でもデコボコしています)

まだデコボコしていますが、手を切らない様にエッジは丸めておいたので実用上の問題は無いと思います。

カプトンテープを貼って取付けました。今度は割らない様に注意します。

3DP24_10

筋が入って見えるのはヒビではなく反射です。