RPM counter Rev.0.1

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
stoma
Date:
Wed Feb 27 15:04:22 2019 +0000
Parent:
2:eada190cda18
Commit message:
ignition added.;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed Feb 27 12:14:36 2019 +0000
+++ b/main.cpp	Wed Feb 27 15:04:22 2019 +0000
@@ -4,6 +4,8 @@
 #define BUFSIZE (1<<BUFSIZE_BIT)    //バッファサイズ
 #define BUFSIZE_MASK (BUFSIZE-1)    //バッファ演算マスク
 
+#define IGNPULSE_WIDTH 3000         //出力イグニッションパルス幅
+
 // ECU Simple1 alfa1  for mbed NXP LPC1768   2019/2/xx
 //2019/2/27 周期ベースに書き換え。リングバッファのサイズ可変。
 //          前のパルスのベクトル値を割り込み中に保存するようにして、関係各所で算出していたのを省略。
@@ -11,12 +13,16 @@
 InterruptIn clankPulse(p14);
 AnalogIn adc(p16);
 Serial pc(USBTX, USBRX);
-Timer t;
+Timer t;                            //点火パルス発生タイミング
+Timeout RearIgn_DelayTimer;         // 点火遅延タイマ、リア用
+Timeout RearIgn_PulseWidthTimer;    // 点火パルス幅タイマ、リア用
+ 
+ 
+DigitalOut IgnWait(LED2);           //点火パルス発生 遅延中
+DigitalOut IgnPulse(LED3);          //点火パルス
+DigitalOut ErrBIndicater(LED4);     //エラー(負論理)
 
-DigitalOut IgnPulse(LED1);
-DigitalOut ErrBIndicater(LED4);
-
-DigitalOut PGTrigger(LED2);         //クランク回転パルス読み取り発生フラグ
+DigitalOut PGTrigger(LED1);         //クランク回転パルス読み取り発生フラグ
 //int PGTrigger;                    //クランク回転パルス読み取り発生フラグ排他利用
 
 //パルスタイミング用バッファ定義
@@ -36,6 +42,27 @@
     t.start();                  //タイマースタート
 }
 
+
+// ワンショットタイマ 割込みハンドラ(パルス幅設定)
+void isrDlyOff(void) {
+    IgnPulse = 0;                       // 点火パルス終了
+}
+
+// ワンショットタイマ 割込みハンドラ(点火開始まち)
+void isrDlyOn(void) {
+    IgnWait = 0;               // 点灯
+    IgnPulse = 1;               // 点火パルス開始
+    // 点火パルス幅 割込み設定、タイマスタート
+    RearIgn_PulseWidthTimer.attach_us(isrDlyOff, IGNPULSE_WIDTH );   // 3ms
+}
+
+//点火処理(リア)
+void RearIgn(int RearIgn_Delay) {
+    // 点火パルス遅延 割込み設定、タイマスタート
+    RearIgn_DelayTimer.attach_us(isrDlyOn, RearIgn_Delay);       // 2.3s
+}
+
+//クランク回転パルス 割込みハンドラ
 void flip_rise(){             //risng edge interrupt
     PGTrigger = 0;
 }
@@ -49,7 +76,7 @@
     clankPulseTime[ clankPulseTimeVector ] = t.read_us() ;
 
     PGTrigger = 1;
-
+            
     if ( DBGFLAG > 1 ) {
         pc.printf("\r\n" );
         pc.printf("flip_fall: clankPulseTime: %d [us] (scale X%d) ", clankPulseTime[ clankPulseTimeVector ] );
@@ -94,16 +121,16 @@
 int ADC()
 {
     float meas_r;
-    float meas_v;
     int meas_int;
     
     meas_r = adc.read(); // Read the analog input value (value from 0.0 to 1.0 = full ADC conversion range)
-    meas_v = meas_r * 3300; // Converts value in the 0V-3.3V range
 
     meas_int = (int)( (float)(meas_r * 100 ) + (float)0.49999 );
 
     // Display values
     if ( DBGFLAG > 1 ) {
+        float meas_v;
+        meas_v = meas_r * 3300; // Converts value in the 0V-3.3V range
         pc.printf("ADC: measure = %f = %.0f mV", meas_r, meas_v );
         pc.printf(" Return value = %d ", meas_int );
         pc.printf("\r\n" );
@@ -114,14 +141,16 @@
 
 
 //PCへログ出力 デバッグ用
-void log2pc( int throttleOpenPercent ,int timeCycle ) {
+void log2pc( int throttleOpenPercent ,int timeCycle ,int RearIgn_Delay) {
 //エンジン回転数計算
     int engineRpm = (int) (  (float) 60 / timeCycle * 1000000 );
 
     pc.printf("Accell:%3d[%%]", throttleOpenPercent );
     pc.printf(" %5drpm " ,engineRpm );
-    pc.printf(" %6.3f[ms] " ,(float)timeCycle/1000 );
+    pc.printf(" %6.3f[ms] " ,(float)0.001 * timeCycle );
     pc.printf(" @vector%3d ", clankPulseTimeVector );
+    pc.printf(" delay:%3d[ms] ", (float)0.001 * RearIgn_Delay );
+
     pc.printf("\r\n" );
 
 //  ログ出力完了時間の記録
@@ -159,12 +188,14 @@
             throttleOpenPercent[0] = ADC();
 
             //マップ読み込み
+            int RearIgn_Delay = (float) engineCycle/200 * (101-throttleOpenPercent[0]) ;
             //点火出力
-            //遅延時間
+            IgnWait = 1;               // 点灯
+            RearIgn( RearIgn_Delay);
 
             //デバッグ出力
             if ( DBGFLAG > 0 ) { 
-                log2pc(throttleOpenPercent[0],engineCycle); 
+                log2pc(throttleOpenPercent[0],engineCycle,RearIgn_Delay); 
             }
             PGTrigger = 0;          
         }