Category Archives: 工作

電子負荷 PLZ72W ~その2~

ジャンクで貰った電子負荷のPLZ72W。先日の投稿でA設定側が動作しない旨を書きました
とりあえずはB側が使えれば望みの用途には使えるのですが、気になるので再びケースを開けてイジっているといつの間にか直ってしまいました

たぶんですが、電流値を決める多回転ボリュームが狭い所にあるので、どこかに接触していたのではないかと思います。電源スイッチを修理する時に前面パネルと共にボリュームも外したので、その時にやらかしたのかと。

ボリュームの取り付け角度によっては周囲の部品に当たるのです。
念のため、もう一度ボリュームを外して安心な角度で取り付け直しました。

A/B両方が正常になると電子負荷内部の発振器で負荷電流を交互に切替える事ができるので電源の追従性等も確認できます。

ためしに10V電源から5Ω抵抗を経由して1A⇔0.1Aを切替えた電圧を測定してみました。

予定通り9.5Vと5Vを交互に繰り返す波形が出てきます。
なおA/Bの保持時間を右下のツマミで変更できるので周波数やデューティーを設定できます。

ばっちりですね。次に電源を作るときには活用しようと思います。

電子負荷

息子がとある所からジャンクの電子負荷を貰ってきました(でかした!)。
電子負荷というのは電圧を入れてやると一定の電流が流れ続ける装置で、電源やバッテリーの動作を確認するのに便利なのです。

以前DC-DCコンバーターをいじくっていた時に電子負荷があったらいいなーとは思っていましたが、そう度々使う物でもなく、その時はセメント抵抗を並べて負荷にしていました。

で、今回入手したのはこれです。菊水電子のPLZ 72W。70Wまで喰わせる事ができます。
また設定電流をA/Bの2種類準備しておいて、手動及び内部発振器により交互切替えができる様です。

ではプラグをコンセントに挿し込んで電源スイッチを入れてみます。
・・・が、電源入りません。ち~~ん。
まあジャンクですからね。

とにかく開けてみました。

AC100V入力を辿っていくと一方は直接トランスに、もう一方はガラス管ヒューズを経由して前面パネルの電源スイッチに繋がっています。

という事で、一番怪しいヒューズをチェック・・・切れてないですねぇ。
この状態で電源を繋いだところ、電源スイッチまでは100Vが来ていますが、スイッチONにしてもその先には来ません。どうやらスイッチの問題みたいです。

このスイッチは3接点×2回路のスライドスイッチで、2回路を並列に接続してあります。
しかし2回路共接触不良になるのかな?
そこで暫定的にスイッチの接点をジャンパーで繋ぐと電源が入りました。やっぱりスイッチの異常ですね。

ではフロントパネルを外してスイッチを取り外してみます。テスターの抵抗レンジで測るとやはりON側が導通しません。
ならばスイッチをバラして接点を磨こうかと思いましたが、よく見るとこのスイッチは上下が完全に対象です。
今までOFF側の接点には何も配線されていませんがスイッチOFF時に抵抗レンジで測ると正常に導通しています。
という事は上下逆にしてやれば今まで使っていなかった方の接点をON側に使えそうです。・・・という事でスイッチを上下反転して配線し直したところ電源が入る様になりました


では安定化電源に繋いで動作させてみましょう。
電源はこの時購入したPAB70-1A(こちらも菊水電子製)です。

動作させた結果、負荷電流をA/Bの2種類設定できる内のA側は故障している様で、設定ツマミを回しても0Aのまま上がりません。
しかしB側はツマミの回転に応じて電流が上がっていき、安定化電源の電流表示とほぼ一致しています。B側は使えそうですね。

ダウンロードした取説を見ると次の様なブロック図が載っています。A側が動作しないのは中央付近の「アナログスイッチ」か「定電流/定抵抗切替回路」あたりが怪しいですが、とりあえずB側が使えれば欲しかった機能は使えるので、今回はここまでにしておきます。

CBF125T タコメーター故障&作成 ~その3 また壊れて修理~

ウチのバイク、中国は新大州本田製CBF125Tで、昨年タコメーターが壊れてステッピングモーターで作り直したのですが、先日猛暑日に走っていたら止まってしまいました。

これエンジン掛けてない状態です。

記録を見返すと最初にタコメーターが壊れたのが昨年の日本一周で東北町を走っていた頃、8月26日だったので丁度1年前ですね。その後ツーリングから帰り、11月にステッピングモーター化して使っていました。

バラして原因を調べる。

うーん1年で故障かぁ。とにかく開けてみます。

バイクから外してきて・・・


これが基板。Arduino-NANOを載せています。

半固定抵抗は以前液晶表示にした名残り

原因を調べる

電源に12Vを入れてみました。しかしArduino-NANOのLEDが点きません。
VIN端子まで12Vは来ていますが5V端子からは出てこないですね。
ソケットから外して裏を見ると・・・

コンデンサが弾けてパターンを切った様です。

コンデンサが弾け飛んでいて、その下を通っていたVIN配線パターンも切ってしまった様です。これではマイコンに電源が入りません。
猛暑に耐えられなかったんでしょうね。ケースの中で風も当たらないし・・確かに厳しい条件だったと思います。
またArduino-NANOと言っていますが中国製の互換品なのでどんなコンデンサを使っていたのかも分かりません。

ところでこのコンデンサ、VINとGNDとの間にありますが回路図には見当たりません。
レギュレーターへの入力なら普通は最短位置にコンデンサを付けますが・・回路図の抜けなのか互換品が気を利かせたのか?
値が分からないので手持ちにあった10μF/35Vのチップコンを取り付けました。
(安心の村田製作所製です。→https://akizukidenshi.com/catalog/g/g113161/
また切れた配線は前後のレジストを剥がしてメッキ線で接続し直しました。

これで動作は正常に戻ったのですが、よく見たらとなりのダイオードのモールドにもヒビ入ってますね。まぁ動作はしているのでヨシ!としましょう。

追記(2024-09-01):
ArduinoNANOに入れる電源電圧を下げる目的で、12V電源にシリコンダイオードを2本直列に入れてみました。多少は負担が減る筈。
更に2~3本入れるかツェナーダイオードで5V程落とせばもっと安心かもしれません。

ついでにソフトを見直す。

外したついでに今まで気になっていた下記の部分についてソフトを見直します。

  • まだ揺れが大きい。特にアクセルを開けた状態。
  • 長時間走っていると(恐らくモータが脱調して)指針がずれている。

という事でステップ時間を延ばし、移動平均フィルタのサイズも倍に増やしました。
また上昇/下降の変化点では1回休みの処理を入れてみました。

スケッチ→ https://www.hoihoido.com/data/tachometerX27_4.zip

取り付けて走ってみると・・・揺れはだいぶ納まった(まだ少しある)様です。
脱調の有無は長距離を走らないとわからないですが、揺れが減った時点で少なくともマシになっているものと期待しています。

カブ系エンジン用自動進角CDI ~その4~ 作り方ページ開設

先日投稿した カブ系エンジン用自動進角CDI ~その3~ シリアル接続で小型化する。を元にしたCDIの作り方ページを開設しました。→カブ系エンジン用自動進角CDIの作り方

今回は敷居を低くするため、切削で作る方式ではなくユニバーサル基板にArduinoNANOを載せる方式で作っています。

またこれまでは下の様なハードウェア的なコントローラーで動作を設定していましたが、これも同時に作ると結構大変なので第一段階はPCで設定する事にしています。

PCからの設定は、当初はコントローラーがやり取りする情報をArduinoIDEのシリアルモニターから手入力する方式で記載していましたが、これだと結構面倒です。

そこで急遽C#でGUIなツールを作成しました。このツールはコントローラーのエミュレータになっていて、ハードウェアコントローラーと同じ操作をPC上で実行できます。

ご興味がある方は下記リンクをご参照ください。

また、これまで投稿したCDI製作関係へのリンクです。

カブ系エンジン用自動進角CDI ~その3~ シリアル接続で小型化する。

カブ系エンジン用自動進角CDI自作の続きです。
先日の自動進角CDIですがサイズが大きくてカブに積み辛かったので小型化しました。
またコントローラーとの接続がパラレル接続だと線を伸ばし難かったので、シリアル接続に変更する事で扱いやすくします。

シリアル接続するにはコントローラ側にもマイコン(本体同様ATmega328p使用)を載せる必要がありますが、配線を伸ばせるとコントローラーをハンドル近くに設置してタコメーター代わりにも使えるのです。

回路図

まず本体側・・・
シリアル化によりコントローラーとの接続本数が減ってスッキリしています。

そしてコントローラー側。
こちらはマイコンを追加しています。また本体からケーブル経由で12Vを供給するので、コントローラー内に5Vを作り出すレギュレーターも載せています。
ケーブルを通す電源は5Vにしても良かったかな?LCDのバックライトに比較的大電流を流すのでレギュレーターを通す前の12Vを使ったんですが。。。

そして本体基板のパターンを設計。
なお図では両面基板ですが実際には片面基板に切削して表側(赤色)パターンはジャンパーで配線します。
シリアル接続にした事でコンパクトになり、ほぼ純正CDIと同じサイズにできました。
追記:前回はArduinoNANOの基板を載せていましたが今回はATmega328Pを直接実装したのでこれも小型化に効いていますね。

あ、レギュレーターの極性を間違っている!

基板はいつもの様にCNCで切削します。
ところで切削で使う刃物は以前からオリジナルマインドさんで売られている「土佐昌典VC」を使っていますが、だいぶ前から使っているので刃先が劣化して切り跡ががケバ立ってきました。
これ、最近オリジナルマインドのページで見つけられなかったので販売が終了したのかと思っていましたが実は探し切れていなかっただけで、またちゃんとあった事が判り、今回新たに購入しました(1本¥2980円。これ凄くイイんですがちょっとお高いんですよね)。

まあとにかく切削実行!・・・結果、下の写真の様に上下に2回切っていますが、下側は深さ0.15mmで切削したら深すぎたので上側の0.1mmでやり直しました。
使い古した刃物で0.1mmだと切れていない事があったので0.15mmにしたのですが、断線したところがあります。
やはり新しい刃物は切れ味が良く0.1mmでバッチリです。

今回は表面実装のマイコンを載せるのでピッチが細かく、また高圧部分もあるので短絡の心配を減らす為に不要パターンを手作業で剥がしました。

そして部品を搭載。レギュレーターの極性を間違っていた部分はパターンをカットしてジャンパーで修正しました。
その後ArduinoNANO用ブートローダーを書込み、そしてファームも書込みます。

部品搭載後の表側。
高圧用コンデンサは前回のと見た目が違いますが1μF,630Vの同等品です。
コントローラーとの接続用に4pinのXHコネクタを設けています。

そしてコントローラー側のパターンも作って・・・

切削!
こちらは実験的に不要銅箔もCNCで取り除いてみたところ、切削時間は大幅に伸びますが手作業で剥がすよりも楽です。刃物は半月刃を使っていました(土佐昌典VCは切れ幅が狭いし第一勿体ないので)。
切削直後はまだ細い銅箔が残っていますが、これは手作業で除去します。

そして実装(裏面)

本体に接続するケーブルは4芯接続なので古い電話線を使ってグルーガンで補強しています。
またコントローラーは前回と同じケース(MDF材で作成した)に収めています。
現状MDF材ですが、ずっと使うなら防水が必要ですね。

本体側は3Dプリントしたケースに収めます。
これも現状オープン状態ですが、十分にテストした後は樹脂で埋めて防水するつもり。

では前回と同じカブ(息子が50ccをボア/ストロークアップした107ccエンジン搭載車)に積んでみます。
CDI本体の小型化によりサイドカバーを閉めやすくなりました。

コントローラーは長めの4芯ケーブル(古い電話線)で接続。

ケーブルを1.5m程度に伸ばしたので見やすい場所にコントローラーを設置できる様になりました。

走った感触

点火部分はソフト、ハード共に前回から変わっていないので走った感触は前回のままです。

ファームウェア(Arduinoスケッチ)を掲載

試行錯誤の後が残ったままで汚いですが現状のファームウェアを掲載します。
マイコン(本体、コントローラー共)にはArduino NANOのブートローダーを書き込んだ上でこのスケッチを書いています。なのでもし追試される方はArduinoNANOをそのまま使う方が手っ取り早いかもしれません。

本体用→https://www.hoihoido.com/data/CDI-AC6.zip

コントローラー用→https://www.hoihoido.com/data/CDI-AC_Control.zip

なお前回の投稿ではコントローラーをパラレルで接続していました。今回の本体用ファームはシリアルコントローラー、パラレルコントローラー、どちらにも使用可能です(前回投稿の回路図で作ったCDIに書いても使える)。

回路図とファームウェアを使用される場合の注意

この回路図やファームウェアを参考にされる場合は事前に「免責・著作権・肖像権・リンク」のページを御一読願います(要は何か問題があっても責任持てませんよとか、自作するのは自由ですが販売とかを考えられるなら相談してねとか、そのあたりです)。

カブ系エンジン用自動進角CDI ~その2~ 107ccカブに積んでみる。

前回、自作の自動進角CDIを50ccカブに積んでみて効果が今ひとつ体感できなかった事を書きました。
その後、息子がもう一台ジャンクの50ccカブをボア、ストロークアップにより107cc化したので、そちらに積んでみたところ、効果が見られました。

107ccカブ(なお原付2種としてちゃんとナンバー取り直してます)
自動進角CDI

はっきり効果が見られたのは低速側です。
純正CDIの点火タミングは全回転域で上死点前27度(BTDC27°)に固定されているのに対し、自作CDIはアイドリング回転数付近は17°に設定しています。これにより、まずキックスタート時のケッチンが発生し難くなりました。また走り出しの加速もスムーズです。
一方高速側は最大37°程度にしてみましたが効果があるのか無いのか判りません。50cc程度なら急な上り坂で全開走行を試せるかもしれませんが107ccともなると公道で試す訳にいかず、多分サーキットとかシャーシダイナモで試さにゃハッキリしない気がします。

そして・・・

いずれにしても50cc用純正CDIよりは良くなるので107ccカブではこのCDIを使います。
という事でもうちょっと安心できる形にしたいと思います。現在の状態(上の写真)だと雨の日は心配ですもんね。

という事で純正CDIと同程度のサイズになる様、以下の点を踏まえて作り直そうと思います。
・ArduinoNANOを載せるのをやめてATmega328pを直接載せる。
・コントローラーとの接続をUARTに変更する事で、本体⇔コントローラー間の配線本数を減らす。
・最終的には樹脂で埋めて防水する。

では下記の基板パターンで試作してみます。まずは切削で基板を作る予定。
・・・なのですが切削用刃物がだいぶ劣化していて上手く削れなかったので刃物入荷待ちです。

まとめ

50ccエンジンだと効果が感じられなかったけど、107cc化したエンジンでは特に低回転側で効果がありました。
なお90ccカブの純正CDIが15°~28°の間で変化する様なので高回転側をあまり増やしても効果ないのかもしれません。実際はどうなんでしょうね?
どなたかこのCDIを試してみられますか?

レースに使っていたフライトコントローラーにArdupilotをインストールする。

息子の大学の研究室に買ったままの状態のドローンがあり、教授からこれを飛ばす様に言われたらしいのですが、これがまた数十万円もする機体で、慣れ親しんだレース機の様に墜落上等!!なモノとは緊張感が違う様です。
この機体のフライトコントローラー(以下FC)にはPixhawk(これも10万円前後するやつ!)が載っていて、ファームウェアにはArdupilotが書き込まれています。

FCのオープンソースなファームは各種ありますが、レーシングドローンだとBetaflightがメジャーなのに対し、オートパイロット用途ではこのArdupilotPX4等が多く使われている様です。

Ardupilotを初めて知ったのはMake:日本版Vol09の記事でした。この頃はArduinoベース(なのでArdupilotという名前)でしたが最近はPixhawkが主流になっています。

で、いきなり何十万円もする機体を飛ばす前に、落ちてもダメージが少ない5インチ程度の機体を使ってArdupilotに慣れたいという希望が出てきた様です。そこで手持ちのFCにArdupilotをインストールできないか調べてみました。上手くいけば自作フライトコントローラーのHOIHOI-FCに載せられるかもしれません。(下まで読んで貰えると現状のHOIHOI-FCには載せられなかった事が分かるのですが)

何はともあれArdupilotをビルド

必ずしも手元でビルドできる必要は無いかもしれませんが、最終的にHOIHOI-FCに載せるとしたら設定を変えてビルドする必要が出てきそうです。
という事で今回もWSL(Windows Subsystem for Linux)上にビルド環境を作ってみます。
基本は下記のドキュメントに沿って作業していきました。

https://ardupilot.org/dev/docs/building-setup-windows10_new.html
https://ardupilot.org/dev/docs/building-setup-linux.html
https://github.com/ArduPilot/ardupilot/blob/master/BUILD.md

という事で、まずはWSLを開き、GithubのArdupilotリポジトリをクローンします(gitの環境は予めインストールしてあります)。
但しその前に改行コードを勝手にCRLFに変更しない設定にしておきます。「CRLFにする」設定のままで作業すると、後々エラーが出てしまったのです。

git config --global core.autocrlf false   ←勝手にCRLFに書換えない設定。
git clone --recurse-submodules https://github.com/Ardupilot/ardupilot

出来上がったardupilotディレクトリに移動して設定スクリプトを実行しました。

cd ardupilot
Tools/environment_install/install-prereqs-ubuntu.sh -y

スクリプトが.profileに加えた変更を反映させます(ログインし直しても良いですが)。

. ~/.profile

ビルド可能なボード名一覧を参照し、この中からMatekF405をビルドしてみました。
(MatekF405を選んだのはBetaflight用HOIHOI-FCをビルドした時、MatekF411を元に作成したので今回も近いボードで試したいから)

./waf list_boards    ←ビルド可能なボード一覧を見る
./waf configure --board MatekF405 
./waf copter

暫くすると”adrupilot/build/MatekF405/bin/”の下に”arducopter_with_bl.hex”ができました。
FCがMatekF405であれば、このままファイルを書き込めば良い筈です。

HOIHOI-FC用にビルドできるか?

ではHOIHOI-FC用の設定を作ろうと思います。
各FC用の設定はどうやら”ardupilot/libraries/AP_HAL_ChibiOS/hwdef”の下にFC名のディレクトリを作ってそこに置く様です。
先ほどのMatekF405だと”ardupilot/libraries/AP_HAL_ChibiOS/hwdef/MatekF405″で、この中に”hwdef-bl.dat”,”hwdef.dat”の二つのファイルがあります。
よってこのディレクトリをHOIHOI-FCディレクトリとして丸ごとコピーした後に変更を加えていこうと思います。
・・・ところがHOIHOI-FCに載せているマイコン、STM32F411はArdupilotでサポートされていない事が分かりました。
wikiによるとフラッシュメモリが1MB以上必要との事。STM32F411は512KBなのでファームが入りきらない様ですね。
ならばSTM32F722もHOIHOI-FCに載せた事があるのでこれならどうだっけ?・・こちらも512KBでサポート対象外ですね。 うーん、なんてこった。

iFLIGHT SuccexF405に載せてみる。

このまま止める訳にもいかず、手持ちの中からArdupilotがサポートしているFCを探したところ、iFLIGHTのSuccexF405がありました。このボードに載っているSTM32F405(フラッシュ容量1MB)ならOKです。

ではSuccexF405のファームをビルドして書き込んでみます。書き込み方法は“1/3三田式3型改1製作記さん”のブログ“を参考にしました。
まずFCのBOOTボタンを押しながらUSBに接続する事によりDFUモードで起動し、STM32CubeProgrammerで先ほどのファームを指定して「Download」ボタンを押すと書き込みが始まります

書込みは特に問題なく終了しました。
一旦USBケーブルを外し、今度はBOOTボタンを押さずに接続すると・・・反応ありません。
WindowsのデバイスマネージャーにCOMxとして認識されるはずなんですけどねぇ。

そこでSTM32CubeProgrammerでVerifyをやると不一致のエラーがでました。上手く書けていない様ですね。
結局、消去ページで一旦全体消去をしてから同様の書き込みをするとVerifyも一致し正常に動作する様になりました。「Download」ボタンで自動的に消去もやってくれる訳ではない様です。

以上によりMissionPlannerとも接続でき、まだ細かい所はこれからですがArdupilotとして動作し始めました。

次はGPSやコンパスを繋ぐ必要がありますね。。。

超音波洗浄機を作ってみる。

3年ほど前になりますが、日本橋のデジット閉店セールの時に激安の超音波振動子を買った事を書きました。その時は振動子にタッパーを両面テープで貼り付けるという雑な状態で洗浄してみましたが、もっとちゃんとした形にしようと思いながら早三年。

器にはタッパーではなくステンレスを使いたいのですが、購入すると2~3千円するので何となく放置していました。
ところが先日百円ショップの「ワッツ」で丁度良いサイズのステンレス容器を見つけました。値段は660円。しかも内側にピッタリの金網が330円。合計しても990円ですね。

百円ショップのワッツで見つけたステンレス容器

内側にピッタリ入る金網

作る

さて容器と振動子をどうやって取り付けるかです。振動子にはネジ穴が開いていますが容器側に穴を開けると漏水が心配です。ネットで調べると接着剤でくっつける様な事が書いてありましたが、どんな接着剤を使うかを書いた資料までは見つけられませんでした。

素人考えですが、なるべく超音波振動を吸収せずに伝えてほしいので硬化後に弾力があるタイプよりもカチッと固まる方が良さそうな気がします。という事でエポキシ系接着剤で試してみましょう。
まず接着面をヤスリで荒らして表面積を稼ぎ・・・

そして接着!

固まるまでの間に筐体を作ります。
いつもの様にMDFをレーザーカットして作成。本当は水に濡れる可能性が高いのでMDF材よりもアクリル等にしたいのですが、まずは安い材料でやってみます。

こんな図面を書いてレーザーカットし・・・

そして組み立てたところ・・・

またもや素人考えなのですが筐体と容器の間についてはあまりカチッと固定すると振動が抑えられそうなので、シリコンラバー(ダイソーで200円)をレーザーカットして間に挟んでみます。

内側の金網に真鍮線の取手を付けて、ひとまず完成。
本当はドライバ基板もケースに入れてタイマーなんぞを付けると使いやすいんでしょうけど・・・またその内に考えます(多分このままになる)。

では動かしてみましょう。
洗浄物として適当な物を探してきました。カブのインテークマニホールド。
台所用洗剤を水に混ぜた液に半分浸して洗浄してみます。

電源を入れるとジリジリとした音が聞こえるので、一応は振動が伝わっているのでしょう。
徐々に液が白っぽくなってきました。
そして30分程経過した後がこれ・・・濡れてると良く分からないですね。

という事で乾いた後・・・

綺麗になった・・・のかな?洗浄前の写真を残しておくべきでしたね。
もうちょい色々と試してみます。

という事で今後・・

色々と洗浄条件を変えて試そうと思います。
そして上にも書いた様にタイマーを追加してドライブ基板と一緒にケースに収めたいですね。
また市販品を見ると温度を上げる機能も付いている様です。以前3Dプリンターのホットエンド用ヒーターを10本まとめ買いしたのが残っているので使えないかな?

カブ系エンジン用自動進角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ストロークエンジンでは一回転毎に燃焼する為パルス間隔も変動している可能性があるので一回置きに計算します・・・言葉で説明し辛いですが図にすると下の様になります。

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

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

マップのセッティング

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


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

先日タイミングライトを作りましたが、エンジンの回転数を上げると揺れて見えるのが気になってきました。常にフライホイールが1度回る時間だけLEDを点灯する様にプログラムしたのですが、数千rpmで回ると1度といっても十数μSとかの時間になってくるのでうまくプログラムを作らないとずれてきてしまいます。

スケッチを書き直す。

という事でタイミングパルス入力→LED点灯までの遅延を最小にするため、割込み処理をインラインアセンブラで書き直してみました。
また前回はLEDの点灯時間をメインルーチン内のmicros()関数の値で判断していましたが、これもタイマー割込みにすることで正確に1度回転する期間だけLEDを点灯する事を目指します。
AVRのアセンブラは初だし、割込み/インラインアセンブラのオーバーヘッドを極力減らすため、レジスタの退避(pushやpop)も含めて手書きしたので色々調べながら作りましたが、もっと効率の良い書き方があるかもしれません。

しかしこれで動作させるとまだ揺れて見えます。むしろ酷くなったような。。。
うーん。では改めて下記回路図(前回と同じ)でのSigとMPULSEの波形を見ていきます。
(Sigはエンジンから来るタイミング信号、MPULSEはマイコンに入れる割込み信号。)

下がその波形でCH1(黄)がSig、CH2(青)がMPULSE。
思いっきりバウンドしていましたね。300μSもの間大きく揺れ、この間に何度も割込みが掛かっている様です。
前のプログラムでもこれが揺れる原因だったのかもしれません。

揺れが約300μS続く内、必要なのは先頭の瞬間のみです。この揺れを抑える為にフィルターを用いると遅延が大きく発生する可能性が高いので、ソフトウェア的に対処します。具体的にはタイミング信号による割込み発生後、次の割込み許可は800μS後にする事でバウンドをやり過ごしました。

スケッチはこちら。http://www.hoihoido.com/data/TimingLight2.zip

以上によってアイドリング~高回転までピタッと止まって見える様になりました!!

でもやっぱりLEDが暗い

しかしやっぱりLEDが暗いですね。前回電源を12V→9V(角型電池)に変更して少し暗くなっていたのが、9V電池が消耗すると更に効いてきて、曇りの日なら良いですが晴天だと日陰でも見えづらいのです。
まず9V電池にした時点で回路図の12Vライン(今は9V)にあるC6が1μFだと小さすぎるのでLED点灯の瞬間少し電圧が下がっていました。これを1000μFに変更して電圧降下は無視できるレベルになりましたが・・・体感光量は大きく変りませんね。
現在LED6個には以下の様な回路で電流を流しています。これに9Vの角型電池とパワーMOSFET(2SK2232)が直列に入ります。

LEDのスペック上のVf(順方向電圧)は3.1Vと記載されているので2個直列だと6.2V。電池が9Vだと5Ω抵抗(10Ωの2並列)には2.8Vが加わるので各LEDには560mAが流れる目論みでした。しかし考えてみると定格100mAのLEDに大幅な大電流を流すとVfも高くなってきますよね。そこで制限抵抗5Ωの両端電圧を測る(160μSのON期間中最後の瞬間をオシロで測定)と、1.76Vしか掛かっていません。電流にすると350mAなので想定よりかなり少ないです。

という事で定格を超える状態でのVfと電流の関係を大雑把に調べると下記グラフの様になっていました。
横軸はLEDを2個直列した合計のVf電圧です。また前半と後半で別個体のLEDで測ったりしているので凸凹しているのはそのあたりの影響だと思いますが大体の傾向はつかめます。

これによると9V電源なら抵抗など無くしても620mA程度でそれ以上は流せません。
当然ながら絶対最大定格を超えているので壊れない保証はないですがデューティーが1/360なので頑張ってくれる事を期待してもっと(1Aとか)流してみたいところです。
案としては現在の2個直列を止めて1個ずつにすればもっと電圧を掛けれますね。
これらはいずれ試すとして今回は制限抵抗無しにしてみました。これで620mAなので現状の約1.8倍になります。

動作しているところの動画・・・まだ暗いけどマシにはなりました。

回転数も問題なく測れています。

以上でだいぶマシになりましたがピーカンの屋外は厳しいですね。あまりそういうシーンはないですが。
・・・これで暫く使ってみて、まだ暗かったら配線(またはLEDの機種)を見直します。