waiasu’s diary

バーグマン200のカスタムをメインに。

エンジン出力エミュレータ

どうすれば出来るん?って話なのでスケッチ晒し。車両側のTPS電圧が5vなので分圧して入力しているのと、IAPとO2の出力は適当なケミコンつけてなだらかにしてECMへ入力。ピックアップ信号はそのまま入力。スケッチ内のmap関数でTPS電圧の微調整とフィードバックさせるならリーンとリッチの値を適当に入れれば動くと思います。

ラズパイ ピコで片側のコアでTPS電圧のチェック、別のコアでリーン・リッチを出力する為に2サイクル分(4回転)を力技で書いてるだけです。無駄にデュアルコア使ってます。

int VOL_IN=26;  //ボリューム
int RPM_OUT=10; //回転出力
int IAP_OUT=11; //吸気圧出力
int O2S_OUT=12; //O2出力
int VIN=0;      //analogRead初期値
int STP=0;      //時間初期値

int PIK_UP=40;  //ピックアップ幅値
int O2S_HI=90; //O2出力HI値 85
int O2S_LO=90;  //02出力LOW値 75

int IAP_01=40;  //
int IAP_02=10;  //LO
int IAP_03=10;  //LO
int IAP_04=10;  //LO
int IAP_05=40;  //
int IAP_06=70;  //
int IAP_07=100; //
int IAP_08=130; //
int IAP_09=160; //
int IAP_10=190; //
int IAP_11=220; //
int IAP_12=250; //HI
int IAP_13=250; //HI
int IAP_14=250; //HI
int IAP_15=250; //HI
int IAP_16=250; //HI
int IAP_17=250; //HI
int IAP_18=250; //HI
int IAP_19=220; //
int IAP_20=190; //
int IAP_21=160; //
int IAP_22=130; //
int IAP_23=100; //
int IAP_24=70;  //

void setup() {
 
  pinMode(VOL_IN,INPUT);
  Serial.begin(9600);
 
}

void setup1() {
 
  pinMode(RPM_OUT,OUTPUT);
  pinMode(IAP_OUT,OUTPUT);
  pinMode(O2S_OUT,OUTPUT);
  Serial.begin(9600);
 
}

void loop() {

  VIN=((VIN*9)+analogRead(VOL_IN))/10;
//int TMP=map(VIN,3,1014,450,2900);   //vol
  int TMP=map(VIN,980,180,450,2900);  //tps450 2900
  if (TMP<=450) { STP=450; } else { STP=TMP; }
  delay(20);

//Serial.println(STP);

}


void loop1() {

  unsigned long TIM=millis();

//1週目

  analogWrite(IAP_OUT,IAP_01);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸1
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹1
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_02);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸2
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹2
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_03);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸3
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹3
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_04);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸4
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹4
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_05);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,LOW);  //凸5 凹
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹5
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_06);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸6
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹6
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_07);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸7
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹7
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_08);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸8
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹8
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_09);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸9
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹9
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_10);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸10
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹10
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_11);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸11
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹11
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_12);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸12
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹1
    delayMicroseconds(STP);

//Serial.println((1000/(millis()-TIM))*60);

//2週目

  analogWrite(IAP_OUT,IAP_13);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸1
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹1
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_14);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸2
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹2
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_15);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸3
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹3
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_16);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸4
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹4
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_17);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,LOW);  //凸5 凹
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹5
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_18);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸6
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹6
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_19);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸7
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹7
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_20);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸8
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹8
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_21);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸9
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹9
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_22);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸10
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹10
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_23);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸11
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹11
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_24);  //IAP
  analogWrite(O2S_OUT,O2S_HI);  //02

    digitalWrite(RPM_OUT,HIGH); //凸12
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹12
    delayMicroseconds(STP);

//3週目

  analogWrite(IAP_OUT,IAP_01);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸1
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹1
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_02);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸2
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹2
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_03);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸3
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹3
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_04);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸4
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹4
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_05);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,LOW);  //凸5 凹
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹5
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_06);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸6
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹6
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_07);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸7
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹7
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_08);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸8
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹8
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_09);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸9
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹9
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_10);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸10
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹10
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_11);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸11
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹11
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_12);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸12
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹1
    delayMicroseconds(STP);

//4週目

  analogWrite(IAP_OUT,IAP_13);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸1
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹1
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_14);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸2
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹2
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_15);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸3
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹3
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_16);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸4
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹4
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_17);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,LOW);  //凸5 凹
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹5
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_18);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸6
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹6
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_19);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸7
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹7
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_20);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸8
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹8
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_21);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸9
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹9
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_22);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸10
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹10
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_23);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸11
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹11
    delayMicroseconds(STP);

  analogWrite(IAP_OUT,IAP_24);  //IAP
  analogWrite(O2S_OUT,O2S_LO);  //02

    digitalWrite(RPM_OUT,HIGH); //凸12
    delayMicroseconds(PIK_UP);
    digitalWrite(RPM_OUT,LOW);  //凹12
    delayMicroseconds(STP);

}

間違いとかコッソリ教えて下さいね。