土曜日は晴れたが、日曜日はまたもや雨。

CDIの方はいくつかの山を越えて微調整を残して完成。
その記録。

まずPIC16F145xのIOC(Interrupt on Change)機能で、立下りエッジを無効に出来ない件。
iPhone 001

eratta情報には載っていないので、自分の使い方が間違っているのかどうかはわからないけど、おそらくエラーだと思う。
今回信号を受け取るRA4のIOC設定順は大体こんな感じ
TRISA = 0b00010000;
ANSELA = 0b00000000;
IOCAP = 0b00010000;
IOCAN = 0b00000000;
IOCAF = 0;
IOCIE = 1;
PEIE = 1;
GIE = 1;

前回4万回転まで回っていると表示された原因はこれで、ピックアップ信号の立ち上げ、立下りで割り込みが入ったため。
これはもう色々やってみたがどうも駄目なので諦めてIF文一個追加して対処した。


次にUSB接続しないとCDIが動作しない件。
そもそもこのCDIはマイコンが死んでしまってもアナログ回路で点火するので逆に軽くはまったけど、単にUSB接続されてない場合は省電力モードに移行するのが原因だった。
当然ながらUSBの電力に期待する事はないので、これは切った。
具体的にはusb_device.c内のUSBSuspend()をコメントアウトしただけ。

/*
* Task C: Service other USB interrupts
*/
if(UIRbits.IDLEIF) {
//USBSuspend();


main()→USBDeviceTasks()→USBSuspend()→USBCBSuspend()
USBCBSuspend()の中身はこんな感じ。

    Sleep(); // Go to sleep, wake up when a USB activity event occurs
    //If using the WDT, should go back to sleep if awoke by WDT instead of USBIF
    while ((USBIF_FLAG == 0)) //If using the WDT, should go back to sleep if awoke by WDT instead of USBIF
    {
        Sleep(); //Entry into sleep clears WDT count, much like executing ClrWdt() instruction
    }

これにて次のUSBイベントが発生するまでSleep()を繰り返すという処理が走る。
本来ならばUSB2.0の仕様書に従って、USBCBSuspend()の内容を書き換えて、25mA以下の消費電力になるようにしないといけないのだが、CDIで使うには適切でない。
今回はスタックが深い気がするので、根元(USBDeviceTasks())でとめてしまった。
usb_callbaks.cはユーザーが必要なカスタマイズをするためのソースコードなので、本来はこちらを修正すべきであるのだが、こちらで止めるだけではUSBSuspend()内でサスペンド処理が一部走ってしまう。

本来であれば、外部電源を感知する為のピンを割り当てる必要があるのだが、今回は省略しているのでしょうがない。次回基板を作成するときは考慮しようかと思う。

最後に点火のカットオフ機能の実装。
SNSにて被験者ライダーであるゆうさんが、
  • シフトミス等で15,000rpmまでまわしてしまうことがあるので、そういう状況ではなるべく回らないようにしてほしい。
  • 12,000rpmも回れば十分、それ以上はパワーも無く実践では使わない。そもそも壊れるのが心配。
とのことで以下のような現在仕様としている。
12,000rpm以上はマイコン点火はせず、アナログ点火(B.T.D.C.7度)のみ。
12,800rpm以上はアナログ点火もとめる。

アナログ点火をとめるのは、サイリスタのゲートを常時オンにする事によって、コンデンサの充電を行わない様にしている。
これは実車で確かめる必要があるだろう。

以上で、ようやくこれでソースコードをきれいにする時期が来た。
後は実車にてタイミングの微修正をする必要がある。
IMAG005
ピックアップの波形はアナログなので、信号の立ち上がりが緩やか。
この緩やかな信号を受けてフォトカプラで正規化するのだが、フォトカプラもトランジスタの一種であるので、信号はなめる。

以下はフォトカプラの電圧(下)とPICから出力したサイリスタゲートの電圧(上)の波形図。
IMAG001

この様にちょっとずつ遅れは出てくるので、それに対して調整は必要。
まぁでもこの部分はあとからUSB経由で書き込むパラメータ部分でもあるので、現時点では大して気にしなくてもいいのかも。



今のところノイズにも悩まされず来ている。順調順調。