shiro tomari
/
LPC1768_RPM_Counter_0.1
RPM counter Rev.0.1
Revision 3:3e6b0e3a77fc, committed 2019-02-27
- 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; }