FC2ブログ

    記事一覧

    arduinoで進角制御3

    本日、始めて自作CDIのテスト走行をしました。
    最初は、カブ系のエンジンの点火プログラムをNSR50系のエンジンのプログラムに修正するのが、上手く行かなくて苦労しました。
    プログラムの補正が出来ると、あっけないほど普通に始動できました。
    プログラムの修正や取り付けに時間が掛かってあまりテスト走行は出来ませんでしたが、少し走った感じだとトルク特性が少しフラットに成ったかな・・・?
    あと、高回転も少し良さそう。(レブリミッターを設定してないから?)
    まだ、本格的に調整できてないので何ともいえませんが、全体としては悪くないです。
    これで耐久性が有れば完璧だと思います。

    今回は、CDIから自作していますが、制御するなら車用のダイレクトイグニッションを利用したほうが、楽かも?(バッテリー点火には成ってしまいますが・・・。)

    需要が有るとは思えませんが、自分用に回路図をアップしておきます。
    過去にハードディスククラッシュで、ひどい目に合いました。(新エンジン計画で作ったエンジンの設計図の90%以上を消失しました)


    回路図は多分あっていると思いますが、制作の際は自己責任で。
    すばらしいCDIを考案されたHTRocketさんに改めて感謝です。
    マイクロカーに搭載する時に整備しやすいように、シートを跳ね上げ式にしました。


    一応、完成したCDIの写真も載せておきます。(作業に熱中してたら写真を撮り忘れた。)
    ケースを開けた状態です、車体に搭載した時には閉じてあります。
    コントローラーは、まだ固定する場所を決めてないので、とりあえず、ひざの上に置いておきました。


    ちなみに、このCDIでは進角を進めることは出来ません。
    自作CDIをNSR50系のエンジンで使うと、異常に点火時期が進んでしまうので、それを少し遅らせて適正なタイミングにしています。

    今の所ダイヤルの左から
    ~4000
    4000~5000
    5000~6000
    6000~7000
    7000~8000
    8000~
    の6分割しています。

    今回のテスト走行で気が付いたことは、タコメーターを見ながらの調整は困難なので、今後調整可能なダイヤルにLEDを付けて光らせようかと思います。

    以下はarduino のスケッチです。
    プログラム初心者が無理やり作ったプログラムなので公開するのは恥ずかしいですが、これもデータバックアップだと思う事にします。
    もっとスマートなプログラムが書けるように成りたい・・・。(arduinoの講習会ってやってないのかな?)



    const int enPin1 = 7;
    int inpin =12;

    unsigned long us;
    unsigned long ptime;

    void setup() {
     
      pinMode(enPin1, INPUT);
      pinMode(inpin,OUTPUT);
     }

    void loop() {
      int val0;
      int val1;
      int val2;
      int val3;
      int val4;
      int val5; 
      val0=analogRead(0);
      val1=analogRead(1);
      val2=analogRead(2);
      val3=analogRead(3);
      val4=analogRead(4);
      val5=analogRead(5);
     
       us=pulseIn(enPin1,LOW);

        if(us>3750){
      ptime=((us/45)*(val0/22));
      delayMicroseconds(ptime);
      digitalWrite(inpin, HIGH);
       delayMicroseconds(30);
    digitalWrite(inpin, LOW);
        }
    else if(us<=3750&&us>3000){
     ptime=((us/45)*(val1/22));
      delayMicroseconds(ptime);
      digitalWrite(inpin, HIGH);
       delayMicroseconds(30);
    digitalWrite(inpin, LOW);
    }
    else if(us<=3000&&us>2500){
     ptime=((us/45)*(val2/22));
      delayMicroseconds(ptime);
      digitalWrite(inpin, HIGH);
       delayMicroseconds(30);
    digitalWrite(inpin, LOW);
    }
    else if(us<=2500&&us>2144){
     ptime=((us/45)*(val3/22));
      delayMicroseconds(ptime);
      digitalWrite(inpin, HIGH);
       delayMicroseconds(30);
    digitalWrite(inpin, LOW);
    }
    else if(us<=2144&&us>1875){
     ptime=((us/45)*(val4/22));
      delayMicroseconds(ptime);
      digitalWrite(inpin, HIGH);
       delayMicroseconds(30);
    digitalWrite(inpin, LOW);
    }
    else if(us<=1875){
     ptime=((us/45)*(val5/22));
      delayMicroseconds(ptime);
      digitalWrite(inpin, HIGH);
       delayMicroseconds(30);
    digitalWrite(inpin, LOW);
    }
    }



    スポンサーサイト



    コメント

    コメントの投稿

    非公開コメント

    プロフィール

    engine太郎

    Author:engine太郎
    FC2ブログへようこそ!

    エンジン太郎カウンター