Arduinoでクルマのエンジンが動く? オープンソースECU Speeduino (3)クランク角センサー信号の生成


クランク角センサー信号をつくる

前回記事 (2)まずは動かしてみる

  • Speeduinoで、エンジン制御を動かすには、エンジンが回転している情報をマイコンに与える必要があります。
  • その準備として、Arduinoマイコンを使い、クランク角センサの疑似信号をつくります。

クランク角センサーって

  • エンジンの回転を検出するセンサーです。
  • エンジン回転数の計測、燃料噴射・点火タイミングの基準に使われます。
  • 4サイクルエンジンでは、2回転(720 deg)で一通りの工程(吸気,圧縮,膨張,排気)が行われるため、カム角センサーなどを併用してエンジンの工程を識別しています。

クランク角センサー(カム角センサー)の波形パターンは、メーカーや車種等により様々です。
下記に、Speeduinoで対応しているクランク角センサーの情報があります。
https://speeduino.com/wiki/index.php/Decoders

クランク角センサー信号には、回転角の目印となる歯欠けがあり、波形の生成が面倒です。
SpeeduinoのコミュニティサイトのBEGINNER'S GUIDEに、Ardu-Stimというツールが紹介されてました。これを使って、Speeduinoにクランク信号を入力します。
https://speeduino.com/forum/viewtopic.php?f=21&t=221

用意するもの

Arduino Uno、または、互換ボード
(SPeeduinoとは別に、クランク角センサーの疑似信号生成に使います)

インストール

  1. Ardu-Stimのソースコード
    https://gitlab.com/libreems-suite/ardu-stim/tree/master

  2. DeviceDruid(Ardu-StimのGUIに使用) Windows10(64bit)とLinuxに対応
    https://devicedruid.com/downloads/

Ardu-Stimのビルド

  1. Arduino IDEを起動
  2. スケッチ→ライブラリをインクルード→ライブラリの管理より、SerialUIライブラリをインストールします。
  3. ビルドし、マイコンボードに書き込みます。

DeviceDruid

  1. DeviceDruidを起動します。
  2. シリアルポートを指定し、9600bpsに設定します。
  3. メニュー画面で、Wheel Optionsに進みます。
  4. List wheelsをクリックすると、クランク角センサの一覧が表示されます。 (定期的にpingが行われており、テキスト画面がスクロールしてしまうため、Druid Settings>Device poll intervalを最大にするといいみたいです。)
  5. Choose wheelsで25を入力します。 (ここでは、25: 36-1 crank with 2nd trigger on teeth 33-34というパターンを使用します。)

4.Topメニューに戻り、Set Fixed RPMで回転数(例えば1500)を入力します。

クランク角センサ信号の確認

ArduinoのIOピンから、設定した回転数のクランク角センサ信号が出力されます。

  • Pin8: クランク角センサ信号
  • Pin9: カム角センサ信号(2ndクランク角センサ信号)

クランク角センサー(カム角センサー)波形データ

Ardu-Stimのソースコードwheel_def.hに以下のようなデータで記述されています。
(bit0:パルス1,bit1:パルス2 0-3の値をとる)
wheeldef.h

wheel_def.h
//  const unsigned char thirty_six_minus_one_with_second_trigger[] PROGMEM = "CM1/2,36,35t,1m:cM1/2,36,16m,1t,19m";
 /* 36-1 with second trigger pulse across teeth 33-34 on first rotation */
 const unsigned char thirty_six_minus_one_with_second_trigger[] PROGMEM = 
   { /* 36-1 */
     1,0,1,0,1,0,1,0,1,0, /* Teeth 1-5 */
     1,0,1,0,1,0,1,0,1,0, /* Teeth 6-10  */
     1,0,1,0,1,0,1,0,1,0, /* Teeth 11-15 */
     1,0,1,0,1,0,1,0,1,0, /* Teeth 16-20 */
     1,0,1,0,1,0,1,0,1,0, /* Teeth 21-25 */
     1,0,1,0,1,0,1,0,1,0, /* Teeth 26-30 */
     1,0,1,0,3,2,3,2,1,0, /* Teeth 31-35, second trigger during 33-34 */
     0,0,                 /* 36th tooth MISSING */
     1,0,1,0,1,0,1,0,1,0, /* Revolution 2  Teeth 1-5 */
     1,0,1,0,1,0,1,0,1,0, /* Teeth 6-10 */
     1,0,1,0,1,0,1,0,1,0, /* Teeth 11-15 */
     1,0,1,0,1,0,1,0,1,0, /* Teeth 16-20 */
     1,0,1,0,1,0,1,0,1,0, /* Teeth 21-25 */
     1,0,1,0,1,0,1,0,1,0, /* Teeth 26-30 */
     1,0,1,0,1,0,1,0,1,0, /* Teeth 31-35 */
     0,0                  /* 36th MISSING tooth */
   }; 

参考

最後に

クランク角センサの信号が生成できるようになりました。
次は、Speeduinoと接続して回転数を確認する予定です。