カブ系エンジン用自動進角CDI

先日ミニマム構成なCDIを作った事を書きました。今回は自動進角機能を盛り込んでみます。

※5/7追記:この記事で純正カブの進角を28度と記載していますが、正しくは
 27度でした。 1度の違いで大きな影響はないと思いますが訂正いたします。

進角について

ここで言う進角とはエンジンの点火タイミングの事です。よくあるエンジンの行程説明ではピストンが上まで上がり切ったタイミング(上死点)に点火していますが、実際には混合ガスが燃え広がるのに時間を要するので上死点よりも少し早めにプラグに火を飛ばします。
この時どれくらい早めに点火するかをクランクの回転角で表し「進角xx度」と表現します。

我が家にある(1995年頃の)スーパーカブ50では回転数に係わらず進角は28度辺りに固定されています。28度というのはピストンが上死点に達するよりもクランクが28度早いタイミングでプラグに点火する事を意味します。
情報によると90ccのカブでは15度~28度の自動進角CDIになっているとか。またDAYTONA製CDIをレーシングモードにすると22度~37度位を自動進角する様です。

構想

スーパーカブ50ではフライホイールの回転角をピックアップコイルが検出してCDIにパルスを送ります。CDIではこのパルスが入ったら即時プラグに点火するので、進角が28度固定となっています。
よって自動進角する為に28度よりも遅らせるにはアナログ的な遅延も可能ですが、進める事は簡単にはできそうにありません。だってピックアップパルスよりも早く点火信号を出すのですもの。。。


これを可能にする方法ですが、多分それ以前の回転数を元に次の回転数を予測し、ここぞというタイミングに点火するしかなさそうです。(車体側を改造してピックアップタイミングを大幅に進めてしまえば遅らせる処理だけで済みますが、改造のリスクが大きそうですし。。。)
この複雑な動作を実現するにはマイコンで処理するのが良いでしょう。

という事でピックアップパルスをマイコン(Arduino-Nano)に入力し、良い頃合いに点火信号を出す仕組みにしようと思います。

回路

以下の回路でやってみます。
ACジェネレーターの電圧をコンデンサやサイリスタを使ってイグニッション信号を出す部分は前回のミニマムCDIと同じです。
違うのはピックアップコイルのタイミング信号をマイコン(Arduino-Nano)に入力するあたりで、このマイコンがタイミングを見計らってサイリスタのゲートを駆動します。
また設定変更用にコントローラーを接続する為の13pinのコネクタを設けています。
なおマイコンを動作させる電源は車体からDC12Vを貰う事にし、Arduino内部のレギュレータで5Vに落としています。

コントローラーは次の回路で、ボタン4つとLCD(よくある1602タイプのヤツ)を接続しています。

作ったハードウェア

最終的には防水する必要があると思いますが現時点はこんな状態でテストしています。

フラットケーブルの先には設定用コントローラーが繋がっていて回転数毎の進角を変更できます。
またカブにはタコメーターが無いのでLCDに回転数を表示します。
コネクタで接続しているのでセッティングが決まったら取り外して本体のみで使用します。

Arduinoに入力するDC電源は写真の様な分岐線を作ってウィンカーリレーの配線から分岐しました。

ソフトウェアの動作

まずArduino-NanoのEEPROMにマップデータを保存します。
マップデータは4点の回転数(1000,3000,5000,7000rpm)に対応する進角値とします。各数値の間は直線で補完し、1000rpm以下は1000rpmの設定値、7000rpm以上は7000rpmの設定値を用いる事にします。
グラフにすると下の様な感じ(具体的な値は実験中)。

横軸が回転数(rpm)、縦軸が進角(度)

動作としてはピックアップパルスが入る度にタイマーで一つ前からの時間を測定し、それを回転数に変換して上記マップに基づいた進角値を求め、次に点火するまでの時間を算出します。
この時、ピックアップタイミングの28度よりも点火タイミングが遅い場合と早い場合に応じて色々と処理が分かれます。

まず28度よりも遅い場合・・・
下図の様に進角28度のタイミングで車体からパルスが来るので、ここからAの時間分遅らせた赤線のタイミングで点火します。その後のTと書いたタイミングが上死点です。

28度よりも早い場合・・・
1周期よりも少し短いBの時間分遅らせて点火する事で、次の周期では28度よりも早い赤線のタイミングに点火します。

面倒なのは28度よりも遅い状態と早い状態を切り替えるときです。

遅い→早いに切り替わる場合・・・
切替りの周期ではA,Bの2発の点火信号が必要となります。

早い→遅いに切り替わる場合・・・
こちらは逆に全く点火させない周期が発生します。

遅角を予定していたのに次のパルスが来てしまった場合。。。
回転数が下がってくる上がっていく時には予定していた点火タイミングよりも先に次のパルスが来てしまう事も考えられます。その場合はとりあえず直ちに一発点火を発生させます。

ちょっと面倒でしょ。でもまあこれらの考えられるパターンへの対応をプログラムしていきました。

動作させてみるが・・・

実車に繋いでタイミングライトを当ててみます。
本来ならアクセルを開けると回転数が上がるに応じて進角も進んでいく筈ですが、少し遅れて進角が進みます。特にアクセルを閉じた時は逆に進角が大きくなり、十分回転数が落ちてから進角が戻ります。
どうやら回転の加減速が早いので直前の周期が次の周期と同じ前提だと無理がある様です。

加減速予測

対策として回転数の加速/減速を加味して次の周期を予測する事にします。具体的には前2回分のパルス間隔の変化(=加速度)が次も続くと仮定する事にします。
更に4ストロークエンジンでは一回転毎に燃焼する為パルス間隔も変動している可能性があるので一回置きに計算します・・・言葉で説明し辛いですが図にすると下の様になります。

これで動作させると下の動画の様にそれっぽい動作をする様になりました。

それっぽく動くようになった動画

マップのセッティング

以上で思惑通りに動作していると思います。
そこで実際にカブで走ってセッティング中ですが、今ひとつ進角の効果が体感できません。
車体が古くて本来の性能を発揮できていない事も十分考えられます。。。
点火タイミングだけじゃ大きく変わらないのかな。。。もう少し試行錯誤してみます。


原付バイクの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用)

LCR-T4 ~LCR・トランジスタ 測定器~

電子回路をイジっているとコンデンサやコイルの値を測定したい時があります。
コンデンサについては割と安物のマルチメーターでも測定レンジがあるので何とかなりますがコイルまで測定できる物は少なく、これまで簡易的にブレッドボード上に回路を組んで測定したりしていました。しかし作業後バラしてしまうのでその都度組み直すのも面倒です。

ネットで見ると秋月電子にはDE-5000というLCRメーターが現時点9480円で売られています。そろそろ奮発してこれを買うか?と思っているとLCR-T4なる物が目につきました。AmazonAliexpressでは多数のショップから出品されている様で値段も数百円~二千円前後です。
LCRに加えてバイポーラトランジスタやFETも測定できる様で、驚くのは3本の測定端子に適当に繋いでボタンを押せば、それが何の部品であるかも含めて知らべてくれるらしいのです。
画像で見る限りほぼマイコン1個で測定している様なので精度は望めないと思いますが、まあ自分の用途ではコイルの場合は大体の値が分かれば十分。あまり長く待ちたくないのでAmazonに発注しました。税込み1690円です。

そして到着。

表側

裏側

どうやらこのLCR-T4には色々なバージョンがある様です。オリジナルはAVR(現マイクロチップ)のATmega328等が載っている様ですが届いた基板にはAPT32F172という謎のICが載っています。
もしかしたらATmega互換かと思って調べたところ中国語のデーターシートしか見つかりませんでしたがC-Sky Microsystemsの32bitマイコンらしいです。中国でATmegaから移植したんでしょうか?

動かしてみる

では006Pの角型9V電池をつなぎ、ネット上の記事に従いキャリブレーションをやります。
その為には3本をショートさせる必要があるので下の様なショートピンを作りました。

このショートピンを繋いでボタンを押すとキャリブレーションが始まります。
その後メッセージに従いピンを外し、そして0.1μFのコンデンサを差して暫く待つと完了となります。
しかし「0.1μF以上のコンデンサをつなげろ」というメッセージですが「以上」ってのは精度は不要なんでしょうか?そのあたりはイマイチ分からないままとりあえず先に進みます。

では過去の測定で100μHだと思っているコイルを測定してみます。

130μH(0.13mH)ですね。過去の測定も簡易的なものなのでまあこんなものだと思います。

トランジスタもコンデンサもつないでボタンを押すだけでどれがどの端子かを含めて表示してくれます。便利ですねぇ。

LCR-T4について調べる

この基板、ネットで直ぐに見つかるサイトではあまり詳しい情報が示されていなかったので、もう少し粘って調べるとGitHubに以下のページに辿り着きました。

https://github.com/Mikrocontroller-net/transistortester

そして140ページもの詳細なドキュメントが下記の場所に。

https://github.com/Mikrocontroller-net/transistortester/blob/master/Doku/trunk/pdftex/english/ttester.pdf

これによるとオリジナルはやはりAVRマイコンみたいです。またLCR-T4基板(何故かLCD-T4と書かれている)についても言及されていますがAPT32F172版の記述は見つかりません。

またボタンを長押しするとメニューが出て色々と設定ができる筈ですが、自分の基板では何も起こりませんでした。マイコンが異なるので上記サイトのファームを書く訳にもいかず・・・という事で購入する時はATmega搭載の基板を選ぶ方が良いかもしれません。
(因みにパッと見ではATmega版はマイコンの横に水晶振動子が載っていますがAPT32F172版はこれが見当たりません。また基板の取付け穴の位置も違う様です。)

次に気になったのは電解コンデンサをどっち向きに挿入するのが良いかです。流石に電解コンデンサの極性まで自動判別はできないでしょうから適当につなぐと逆電圧を印可するのでは? この辺りを上記のドキュメントで調べると次の様な説明がありました。

Normally the polarity of part is irrelevant, you can also connect pins of electrolytical capacitors in any order. The measurement of capacity is normally done in a way, that the minus pole is at the test port with the lower number. But, because the measurment voltage is only between 0.3V and at most 1.3V , the polarity doesn’t matter.

Google先生に訳してもらうと・・・

通常、部品の極性は関係ありません。電解コンデンサのピンを任意の順序で接続することもできます。 容量の測定は通常、マイナス極が番号の小さいテストポートに来るようにして行われます。 ただし、測定電圧は 0.3V ~ 1.3V の間だけなので、極性は関係ありません。

マイナス側を小さい番号に繋ぐ方が良いけどあまり気にするなという事みたいですね。
それでも気になったのでコンデンサを測る時の波形を見ると下の様になっていました。コンデンサを1,2ピンに接続し、青色が1ピン,黄色が2ピン、紫色は差電圧(黄-青)です。結構上下逆転している瞬間があるみたいですが気にしないでおきましょう(でもタンタルコンデンサみたいに逆電圧に特に弱いのは避ける方が良いかもです)。

どうやって測ってんの?

上記のドキュメントに英語で詳しく書かれている様なのでその内読んでみたい(たぶん読まない)と思いますが、測定端子は3本共下の様な接続になっている様です。
これだけで測っているんですね。

ケースを作る。

便利に使えそうなのでケースを作りました。本体はMDF、上蓋は透明アクリルをレーザーカットして作成しました。

キャリブレーション用ピンはそのままだと絶対無くす自信があるのでケース内に収納できるポケットを設けています。

なかなか便利です。

ESCを作ってみる~その4~ メロディエディターにハマる

先日のESC自作実験でbluejayファームウェアを入れた事を書きました。

bluejayにはスタートアップ時にモーターからビープ音が鳴りますが、代わりにメロディーを鳴らす機能があります。これにはESC Configurator中のMelody Editorを使う事で、PC上であれこれ試した後、納得がいった時点でESCに書き込むことができるのです。
これ、色々と鳴らしていると楽しくなってハマってしまいました。

まずやり方のメモ・・・

Bluejay ESCにスタートアップメロディを書き込む方法

まずブラウザー(Chromeでやりました)を立ち上げてESC Configuratorを開きます。
ページの真ん中より少し下あたりに「Open Melody Editor」というボタンがあり、これを押すとメロディーエディターが開きます。

下の画面がメロディーエディターです。
「bluejay:b=570,o=4,d=32:4b,p,・・・」と書かれている場所がメロディーのデーターで、立ち上げ直後はBluejay標準のビープ音が設定されています。
ここで「Play」ボタンを押すとPCからメロディーが流れます(まずはPCだけで試せるのです)。
また「Select a Melody」プルダウンにはあらかじめ色々なメロディーが収録されているので、色々切り替えて鳴らす事もできます。

で、このメロディーデータ、音楽知識ゼロなのでパッと見なんだかわかりませんが、調べるとノキアが開発したRTTTL(RingToneTextTransferLanguage)という、元は携帯電話の着メロを記述する為のものだそうです。
詳細説明はウィキペディアにありました。
→ https://en.wikipedia.org/wiki/Ring_Tone_Text_Transfer_Language

この説明をメロディーデータと見比べると何となく判ってきたので、試しに「お風呂が沸きました」のメロディーを入れてみます。ネット上に落ちていた楽譜を見ながら何とか変換したのが次のデータ。

DollsDream:b=200,o=4,d=16:8g,8f,4e,8g,8c5,4b,8g,8d5,4c5,4e5,4p,8c5,8b,4a,8f5,8d5,4c5,4b,2c5

ではこれをESCに書き込んでいきます。

PCとFCをUSBケーブルで接続し、ESCに電源を入れて・・・
ESC Configuratorの「Open Port Selection」でポート番号を選んだ後、「Connect」ボタンを押します。

下の画面が出れば接続成功なので、右下の「Read Settings」ボタンを押します。

すると下の画面に変り、諸々の設定内容が表示されています。ここで「Open Melody Editor」ボタンを押します。

すると先ほどと同じ様なメロディーエディターが開きます。
さっきと違うのは「Accept」や「Write Melodies」ボタンが増えているあたりです。

では作ったデーターをコピペして「Play」を押してみましょう。先程と同様にPCからメロディーが流れます。内容に納得がいったら「Accept」を押した後「Write Melodies」を押すとESCに書き込まれます(書込みはあっという間でした)。

あとはMelody Editorを「Close」し、ESC Configuratorの「Disconnect」を押した時点でESCが再起動するので、先ほど書き込んだメロディーが今度はモーターから流れます。

実際にESCの起動音として使うには、あまりに長いと待っていられないのでb=200の部分を調整すればよいと思います(この値はテンポなので数値を大きくすると早くなる)。

楽しくなってきたので色んな曲を入れてみました。

メロディーデーターと共に動画を掲載します(音楽は素人なので変な個所もあると思いますが・・)。

♪お風呂が沸きました
DollsDream:b=200,o=4,d=16:8g,8f,4e,8g,8c5,4b,8g,8d5,4c5,4e5,4p,8c5,8b,4a,8f5,8d5,4c5,4b,2c5

♪Jupiter
Jupiter:b=150,o=4,d=16:8f,8g#,4a#.,8c#5,8c5,8g#,8c#5,4d#5,4c#5,8c5,8a#,8c5,4a#,4g#,2f

♪ロンドンデリーの歌
Londonderry:d=4,o=4,b=150:8d,8d#,8f,4g.,8f,8g,8c5,8a#,8g,8f,8d#,4c,8d#,8g,8g#,4a#.,8c5,8a#,8g,8d#,8g,2f

♪トトロ
Totoro:b=140,o=4,d=32:8c,8d,8e,8f,8g,8p,8e,4c,4g,8f,8f,4d,.2p,8f,8p,8d,4b3,4a,8g,8g,4e.

♪まんが日本昔話
mukashi:b=140,o=4,d=16:8a,8g, 2a,16g.,32p,16g.,32p,16f.,32p,16f.,32p,16g.,32p,16g.,32p,16g.,32p,8f,2g

♪威風堂々Elger:b=150,o=4,d=16:2c5,8b,8c5,4d5,2a,2g,2f,8e,8f,4g,2d,4d.,8p,2e,8f#,4g,8a,2d5,2g,2c5,8c5,4b,8a,2g,4g.,8p

♪未来少年コナンConan:b=150,o=4,d=16:16e.,32p,16e.,32p,16d.,32p,8c,8c,8c,8e,4a,4g,2p,16f.,32p,16f.,32p,16f.,32p,8e,8d,8d,8d,8f,4b,4a,8p

で、ESC製作計画の方ですが・・・

4in1ESCを作ってみようと悪あがきしていますが、やっぱり格安の両面プリント基板では厳しいです。
4層基板じゃないと無理かなぁ。できれば銅箔も分厚くしたいし。でも値段が一気に上がるんですよね。。。

配線がぐちゃぐちゃになる。。。脳みそ沸騰中。

MP9943GQ 同期整流式ダウンコンバータ ~その2~

昨日の投稿で最終的に下の様な波形になった事を書きましたが、やはり納得いかないのです。
出力にスパイク状のノイズが見えるのはプローブの当たり方の問題ですが、正弦波っぽく揺れるリプルが大きすぎます。また、そもそもSW出力が一定の周期でないのも変ですよね。

CH1:(黄)がMP9943GQのSW出力。CH2:(青)がインダクタを通った後の最終的な出力。

SWのプローブは取り外し、出力だけを20mVレンジで拡大するとこんな感じで振幅400mV程度で揺れています。

改めてMP9943GQのデーターシートを見ると下の様な波形が載っていました。
出力が3.3Vだったり負荷電流が3Aだったりで自分のとは条件が違いますが、リプルは10mV以下の振幅に収まっているしSW出力も一定周期で変化しています。自分のはやっぱりおかしいですよね。

もう一度回路図を眺めながら・・・

ここでMP9943GQのFB端子にどんな電圧が入っているかを見ようとしてプローブを当てると出力リプルの振幅が20mV程度に減ってしまいました。FB端子からプローブを離すとまた400mVに増えます。

どうやらFB端子回りの問題っぽいです。
苦し紛れにFB端子とGND端子の間に12pFのコンデンサをつけると振幅20mV程度に収まりましたが、あまり対処療法的なのは嫌ですよね。

何が原因でしょうか?
5V出力に設定する為、R7,R8を68K/12Kに設定していますがデーターシートの推奨値は41.2K/7.68Kです。
まあこんな値の抵抗は持ってないし、あまり影響なさそうとは思いつつ39K/6.8Kに変更しましたが、予想通り変化なしでした。

フィードバックの経路にスイッチングノイズが載るんでしょうか?
次にR7,R8の分割抵抗をチップに近づける様、図の場所に移動すると・・・

納まりました!

よく見るとデーターシートにもFB端子回りの抵抗はできるだけチップの近くに取り付けろと書いてありましたね。

5) Place the T-type feedback resistor close to chip to ensure the trace which connects to FB pin as the short as possible.

拡大しても振幅10mV程度になっています。

SW出力もちゃんと一定周期な波形になっているし・・・

たぶん、今度はちゃんと動作していると思います。

MP9943GQ 同期整流式ダウンコンバータ

いきさつ

MP9943GQモノリシックパワー社のDC-DC スイッチングダウンコンバータ用ICで、最近のドローン用フライトコントローラーのBEC回路にはこのICがよく積まれています。
ほいほい堂本舗ではこれまでスイッチングコンバーター用ICMP2359DJ,MP1584ENを試してきましたが、今回MP9943GQも試してみます。なぜこのICを試したいかというと同期整流回路が内蔵されているのです。

同期整流回路はコンバーターの効率UPを目的として使われる事が多いのですが、フライトコントローラーにとってはそれよりもダイオードを省略できるので基板面積を節約できて嬉しいのです。

以前製作したHOIHOIフライトコントローラRev2にはMP1584ENを使った下の様な回路を載せていました。

MP1584ENの内部にはINとSWの間にスイッチング用MOS-FETが入っています。コイツがONの時はVBATからインダクタL1に電流を供給し、OFFの時はインダクタL1に貯めたエネルギーがダイオードD2を通して流れます。なのでD2には結構電流容量の大きなダイオードが必要なのです。
一方、同期整流の場合、外付けダイオードに代わってIC内にもう一つのMOS-FETが入っており、内部でタイミングを合わせてON/OFFしてくれるのです。

上述のHOIHOI-FC Rev2では写真の様な容量2Aのショットキーダイオードを載せていました。MP1584ENの規格上は3Aの能力がありますが、ダイオードが大きくなるので2Aタイプで済ませています。MP9943GQになるとこのダイオードが不要なのに加え、IC自体のパッケージサイズも3mm×3mmとコンパクトになっており、この点でも面積が節約できます

試してみる

という事でMP9943GQを動作させる実験を行います。
例によってジャンクのFC基板からICとインダクタ(10μH)を取り出しました。
(データーシートによるとAMGMとマーキングしてある内、AMGがMP9943GQを示すそうです。
最後のMはyearコードとなっていますがMは何年を示すのでしょうね?)

Ki-Cadで回路を書いて・・・

基板のパターンも書きます。今回基板は切削するので広めに部品を配置して・・・。

それでもこのまま我が家のCNCで加工するのは精度的に厳しいので一旦加工データーをDXFで保存し、jw-cadに読み込んで切削しやすい様に修正しました。

作った基板がこれ。
(配線間にサンハヤトのソルダーレジスト補修液を塗っていますがハンダを載せたい部分にも付着してイマイチなので後で除去しました)

そして一通り部品を載せたところ。。。

なおベタパターンを設けたかったので両面基板にしています。
裏面はこんな感じ。。。

実は片面基板を2枚張り合わせたナンチャッテ両面基板です。

動作させてみる

3mmx3mmのQFNを切削基板にハンダ付けするのに苦労し、何度か加熱し直してようやく動作しました。

5Vの出力端子に負荷として5Ω抵抗を接続したときの波形です。CH1(黄)がICのSW出力。CH2(青)が最終的なDCDC出力。
DCDC出力にスイッチングノイズが載っている様にみえますが、これはプローブの当たり方の影響で、この時はプローブのワニグチクリップでGNDを取っていました。

DCDC出力のみにして200mV/Divに拡大。
このプローブの取り方だとスパイク状のノイズが振幅800mV程度で出ている様に見えます。

そこでプローブの取り方を下の写真の様に最短にしてみます。
(写真右上に見えている白いカタマリは5Ωのセメント抵抗)

すると・・・

スパイク状のノイズはかなり納まりましたね。
でも振幅数十mVでグニャと揺れているのでSW端子と重ねてみると・・・

スイッチング周期と同期している様です。
因みに無負荷だと綺麗に収まっています。


どうでしょう?まあこんなものなんでしょうかね?

ESCを作ってみる~その3~

ESC自作実験の続きです。

回路

何はともあれ目標とする回路図を書いてみました。動作させてみてマズいところは修正していきます。

マイコンのマニュアルはSiLabsの公式ページからダウンロードしました。
 https://www.silabs.com/documents/public/reference-manuals/efm8bb2-rm.pdf
ドライバのマニュアルは良く分からないところからダウンロードしました。
 https://static.qingshow.net/fortiortech/file/1597746029372.pdf

回路をざっと説明すると次の通りです。

  • 制御用マイコン
    SiLabsのEFM8BB21F16G。この中のBLHeli_Sファームウェアが全体を制御します。
  • 出力パワーMOS-FET
    モーターのコイルに電流を流す為のNch MOS-FETで、手持ちの2SK2232を使用します。
    全てはこの6個のMOS-FETを狙い通りにON/OFFする事がESCの目的となります。
  • FET駆動用ゲートドライバ
    FORTIORのFD6288Q。パワーMOSのゲート駆動用ICです。ゲート駆動するのもそれなりのパワーがいるので電圧及び電流容量アップ、またH/L同時ONの防止等を行います。
  • ブートストラップ回路
    NchのパワーMOSを駆動するにはソース端子よりも10V程度高い電圧が必要です。H側FETがONしている時、ソースとドレインはほぼ同電位なので、結局電源よりも高い電圧が必要です。
    そこでL出力期間にコンデンサにチャージしておき、H出力期間に電源以上の電圧を取り出します。
  • 電気角検出回路
    ブラシレスモーターをセンサー(ホール素子等)を使わずに回すには、現在の回転角を検出する必要があります。このためコイル電圧を抵抗分割してマイコン内臓のコンパレーターで検出します。

ゲートドライバICにはパワーMOSと同じ電源電圧を入れているので2~4セル程度の電圧なら回せると思いますが、2SK2232のゲート・ソース間電圧が最大20Vなので6セルで回すとFETが壊れるかもしれません。
なお部品摘出元の市販ESCでは12Vのレギュレータを挟んでゲートドライバに入れてありました。

製作

で、作ったのがこれ。
パワーMOSは手元にあった2SK2232を6個使用しています。
マイコンとゲートドライバは先日作った基板に載せて、それをブレッドボードに挿しています。
モーターは軸が曲がったジャンク品を接続。
黄色いUSBケーブルを挿しているのはHOIHOI-FC Rev1。既にRev2があるので実機には載せないけど諸々の実験には便利に使っています(なにせ内部の回路が全て判っているので)。ここからDshot信号を発生させるのです。

動作

配線をミスってたりQFNのハンダ付けが上手くいってなかったりしましたが、何とか動作しました。
動作中の動画・・・

Bluejayを入れてみる

マイコンにSiLabs EFM8BB2を使ったESCではBluejayというファームウェアをインストールできます。(Bluejayの存在は最近知ったのですけど・・・)
BluejayはRPMtelemtryが使える等の機能強化がなされているのです。
インストールするにはブラウザから下記のサイトを開くとコンフィグレータが立上がります。
https://esc-configurator.com/
(Chromeで実行しました。ほかのブラウザは試していません。
スタンドアロン版もある様ですがメンテしないので非推奨と書かれていました。ドローンの場合ネットが繋がらない環境で使う事も多いので、その場合どうなんでしょうね?)

実行結果が下の画面です。BLHeliSuite同様、FC経由でConnectしてファームを書き換えました。
更にメロディーエディター機能もあるのでスタートアップのビープ音も変更してみました。

Bluejayに書換後、モーターが回らないので焦りましたが、原因はFCのプロトコル設定がPWMになっていました。BluejayはPWMのサポートは無くDshot専用なんですね。

Dshotに変更し、更にRPMtelemetryをONにした動画。BetaflightConfiguratorに回転数が表示されています。

という事で・・・

バラック状態ですがESCを作れる事が分かってきました。
この先ですが、最終的にはFCとESCを纏めて巷で言うAIO(All In One)基板を作るという野望があります。でもこれはかなり大変そうですね。Ki-cad上で基板設計は出来たとしてもチップ抵抗もこれまでより細かいサイズにする必要があるでしょうし、部品点数も多いので手作業での実装はたぶん無理。また基板も4層以上になるでしょうから値段も上がるし・・・
まずは4in1ESCを作るところからかな?

ESCを作ってみる~その2~

大晦日に基板が到着したので作業を続行します。

前回の投稿にジャンクESCからマイコン(EFM8BB21F16G)とドライバIC(FD6288Q)を摘出した事を書きました。これらのICを基板に載せ、ブレッドボード上であれこれ実験する予定です。

基板に搭載

今回はメタルマスクを作らなかったのでコピー用紙をレーザーカットしてクリームハンダを塗ります。

部品を載せて・・・

リフローしました。

チップ内蔵クロックを使用するので発振子も不要ですし、この後ピンヘッダと電源のコンデンサだけを取り付けました。

マイコンの動作確認

ではEFM8BB2マイコンのGNDとP05端子にフライトコントローラー(以下FC)を接続し、3.3Vの電源を入れます。
この状態でBLHeliSuiteを起動すると設定内容を読出せたので、マイコンは生きていますね(ジャンクから取出したので一応確認)。

次はマイコンに何か書き込んでみたいのですが、公式の書込み機(Toolstick)は持っていません。
調べたところEFM8BBxマイコンにプログラムを書き込むにはざっと以下の方法がある様です。

  • C2インターフェース経由での書込み。
    公式の書き込み機(Toolstick)はこのC2インターフェースに接続する様です。
  • ファクトリーブートローダー
    新品状態ではこのブートローダーが書かれていてUARTから書ける様ですが、今回ESCから摘出したマイコンには下記のBLHeliブートローダーが上書きされているので、この方法は使えません。
  • BLHeliブートローダー
    ESCを購入した時点でファームウェアと共に書かれているブートローダーで、FCからの信号端子をそのまま使ってファームを書き換える事ができます。
    普段FC経由でファームをアップデートする時はこのブートローダーが動作しています。

という事でまずはBLHeliブートローダーからのファーム書換えをやってみます。
と言っても普段やっている通りで、FCを接続すると問題なく書換えができました。

しかし将来的に新品マイコンを買ってきた場合にはこの方法は使えないのでC2インターフェース経由でも読書き可能な事を確認したいですね。公式のマニュアルによると開発ツールのSimplicityStudioから書込み機(Toolstick)を使って接続する様ですが、上記の通りToolstickは持っていません。

そこで見つけたのはPCでBLHeliSuiteを立上げておいてArduino経由でC2インターフェースに接続する方法。 この方法ならBLHeliのファームを壊して文鎮化した場合でも書き直せる様です。

BLHeliSuiteからArduino経由C2-I/Fでファームを書いてみる。

ざっと流れを言うと、BLHeliSuiteを起動し、まずArduinoにファームを書込むことでArduinoがC2インターフェースでの書込み機に変身します。(この時ArduinoIDE等は使わず、BLHeliSuiteから直接書くことができます。)
その後Arduinoとマイコンを接続してマイコンにファームを書込む流れとなります。

ではまずPC上でBLHeliSuiteを実行し、「Make interfaces」タブをクリックすると下の様な画面になりました。

次にPCのUSBポートにArduino(今回NANOを使用)を接続しておき、画面右のボード選択でArduinoNANOを選択、画面最下部でCOMポート番号を選んだら右下の「Arduino 4way-interface」をクリックします。

ここで3つのファームから1つを選ぶ画面が現れたので4wArduinoNano_16_PB3PB4v20002.hexを選択しました。
(ここでPB3PB4とかPD3PD2というのはArduinoのどの端子をC2インターフェースに接続するかの違いだと思います。MULTIというのは良く分かりませんが複数のESCを接続できるんでしょうね?)

あとは「開く」とか「OK」(だったかな?)とかを適当に押すとArduinoにファームが書き込まれます。
これでArduinoが書込み機となりました。

次にArduinoとEFM8BB2マイコンの間を接続して電源を入れます。接続は下の3本です。

 <Arduino>     <EFM8BB2>
 PB3又はD11 ⇔  C2CK
 PB4又はD12 ⇔  C2D
 GND        ⇔  GND

BLHelisuiteのメニュー「Select ATMEL/SiLABS Interface」から、B SiLABS C2(4way-if)を選択します。

あとは普段通り。「Connect」→「Flash BLHeli」とボタンを押してファームを選択すると書込みができました。

Lチカプログラムを書いてみる。

上記の方法で当面の目的は叶えられました。でも折角なので前回ビルドしたLチカサンプルプログラムを書込んでみようと思います・・・が、BLHelisuiteでLチカプログラムを書こうとするとエラーが出てきました。「変なものを書いているよ」という警告ですがキャンセルボタンしか無いです。
どうやらなんでも書き込めるわけではない様ですね。

そこで更に調べていくとow-Silprogというのを発見しました。こちらもBLHelisuiteと同じ様にArduino経由で読み書きするツールです(どうやらBLHelisuiteのC2接続機能のベースになったツールっぽい)。
こちらはAvrBurnToor_V101.exeを使ってArduinoにファームを書込みますが、そこからC2インターフェースに接続するので基本的にやっている事は同じです(但しArduinoに書いたファームはBLHelisuiteとは互換性はない様でした)。
このサイトの説明によるとWindows上で動くGUIツールを使った読み書きもできる様ですが、このツールの存在場所を見つけられませんでした。が、コマンドラインから使う為の命令一覧が載っているので、こちらは実行できました。
この方法でマイコンFLASH内のアドレスを指定して内容を読出す事ができます。実はジャンクから摘出したマイコンではファクトリーブートローダーは上書きされていると先ほど書いたのはこれで読んだ結果からです。

で、bwというコマンドではインテルHEX形式を指定して書込めるという事なので、下の様に1行ずつ書き込んでいきました(Lチカプログラムは10行もないのでコピペで実施した)。

これでLチカも動作していますね。
ならばファクトリーブートローダーを書き戻す事も出来そうですがキリが無いので一旦止めて、本来の目的であるESCを動かす事を先に進めたいと思います。

つづく・・・

ESCを作ってみる~その1~

前からやってみたかったESCの製作をしてみました。
以前FCを作ったので、加えてESCも作れるとドローンの主要パーツが揃う事になります。(あ、モーターは別ですね)

※略語の確認
 FC :フライトコントローラー
     マイコン基板にセンサーが載ったやつ。ドローンを制御する。
 ESC:エレクトリック・スピード・コントローラー
     ブラシレスモーターを回すドライバ。

ドローン系ESCの種類

今回もESCのファームウェアを1から作るような根性はないのでオープンソースの優秀なファームを使う予定です。
レース系ドローンでよく使われるESC用ファームにはBLHeliというのがあり、更にBLHeli内の分類、その他最近登場したファームも含めて整理してみました。

  • BLHeli
    AtmelやSiLabsのマイコンが対象ですがちょっと古いタイプでレースではあまり使われません。
  • BLHeli_S
    マニュアルによるとBLHeliのnext generationという事です。_Sが何を意味するのかは判りません。SiLabs製マイコンのみ対象でAtmelは対象外みたいですね。
  • BLHeli_32
    STM32マイコンを使った32bit版です。
    RPM telemetry(回転数をFCに送信する機能)がありFC側でRPMフィルターという高度な処理ができるのですが、上の二つと違ってソースが公開されてないっぽいです。
  • bluejay
    これ最近知ったのですがBLHeli_Sの派生版で、SiLabsのマイコンが対象ですがRPM telemetryが使えます。
  • AM32
    これも先ほど知ったのですがSTM32を使ったオープンソースのファームウェアらしいです。

今回製作するESCはBLHeli_Sを対象にします。そして上手くいけば後にbluejayも試そうと思っています。

SiLabs製マイコンについて

という事でSiLabsのマイコンを使う事になりますが、このメーカーって馴染みが無いので調べてみました。
BLHeli_SでサポートしているのはEFM8BBxという8bitマイコンで、このCPUコアはインテル8051の命令セットとコンパチです。8051って随分昔に使った事があり懐かしいですね。たしか8080に周辺回路をつけてワンチップマイコン化した様なやつだったと思います。でもEFM8BBxは処理速度が大幅に向上しているそうです。
ところでBLHeli_Sのソースはアセンブラで書かれているんですね。80のアセンブラなんてすっかり忘れたなー。

BLHeli_Sのビルド

EFM8BBxの開発環境はSimplicity StudioというのがSiLabsのサイトからダウンロードできます。
そこで絶対必要というわけではない(ビルド済HEXファイルをダウンロードすればよいので)ですがBLHeli_Sをビルドしてみたいと思います。
Simplicity StudioにはWindows上で動くGUIな開発環境が付属していますがBLHeli_Sのビルドはコマンドラインからバッチファイルを実行します。
で、実行してみたところC8051開発ツールが評価版なのでサイズの制限でビルドできないっぽいメッセージが出ました。えー、お金いるの? どうやら内部で使っているKeliというコンパイラ/アセンブラのライセンスをARMから買うっぽいですね。
まぁBLHeli_Sのビルドは絶対ではないので一旦置いといて付属のサンプルからLチカプログラムを実行したところ、やはり同じメッセージが出て止まりました。
でもSimplicity Studioを使うならKeliのラインセンスは無料でもらえっぽいメッセージが出ているので表示に従ってラインセンスをもらうとビルドできてしまいました。
という事はBLHeli_Sもビルドできる様になったのかな・・・もう一度バッチを実行してみると確かにこちらも最後まで進み、無事HEXファイルが出来ていました。

ハードウェアの準備

何はともあれ実行してみる為のハードウェアが必要です。
EFM8BBxの評価ボードを調べると市販はされていますが5000円以上します。でもよく考えるとこのマイコンは沢山持っていますよね。
こんな感じで・・・

ジャンクのESC群。ここから摘出すればよいのです。ついでにパワーMOS FETをドライブするドライバIC(FORTIOR FD6288Q)も摘出できます。
なおドライバICのFD6288QはH側にN-MOSを使う場合に必要な電源電圧より数V高い電圧を発生してくれたり、H側とL側が同時にONして貫通電流でFETを壊す事故を回避してくれます。

という事で摘出しました。
・マイコン:EFM8BB21F16G x3個
・ドライバ:FD6288Q x3個

マイコンとドライバ、どちらも0.5mmピッチのQFNパッケージなのでそのままでは配線し辛く、引き出し基板が必要です。Ki-Cadで描いてFutionPCBに発注しました(送料込みで$16.4)。

引き出し基板が届いたら色々試していきたいと思います。