CANのデータ構造を“1bit単位”で理解する(フルコンECU向け)
はじめに
CAN通信に関する理解は、最近のフルコンECUを設定したり楽しむためには必須となります。
本記事ではLINKECU を例にCANのデータ構成を紹介します。
ビットレートは本記事の主題ではないため、かつ他の記事でも書いているのでそちらを参照してください。
CANデータの例
図で示すと以下のようになります。

ID違いでデータByteに各種データを置いて、機器間でデータ通信します。
上の例ではHEX201のIDの
Byte 0〜1 に Engine Speed が割り当てられていて、Byte4 に車速が割り当てられていると解釈できます。
どのByteにどんなデータサイズで何が入っているかが重要です。
1bit / 8bit / 16bit の関係
データ構成を理解するのに、Bitの理解が必要です。

1bit(最小単位)
0か1か OFF ON等 を扱えます。 データを入れる一番小さい箱です。
2bit(箱を2つ)で4通りの情報を扱うことも可能です。
この単位で設定できると、CAN通信の自由度が上がります。
8bit = 1byte
CAN通信では8bitを基準に使うことが多いです。
2の8乗(256)までの値を扱えます。
8bit使ってONOFFを設定するのも問題ないです。
16bitを使わなくても良いデータ、例えば車速が256km/h未満であれば、8bitで扱うので良い気がします。
16bit = 2byte
8bit × 2byte を使ってデータを構築します。
2の16乗 65536 の数値が扱えるのでエンジン回転数等
10,000程度の値を扱う場合、16bitが使われることが多いです。
※より高い分解能が必要な場合は、24bitや32bitで扱うこともあります。
Bit数と扱えるデータ量の関係性
2のN乗で扱えるデータ数が計算できます。

LINKECUでのCAN設定画面の例
あるIDの1つ目のbitに CAN DI1のデータを1bitで設定した例です。
下側にデータのある位置が確認できます。
Start Position と Width でデータの位置とサイズを設定します。

5個目のByte4に8bitでデータを置いた場合が以下です。

データの校正
受信値に対してスケーリング(倍率)やオフセットを適用し、実際の物理量へ変換します。
LINKECUの場合はGENERIC DASHの仕様がHELPに書いてあります。
まとめ
CANデータは「1bitの集合体」であり、
Byteや数値もすべてbitの組み合わせで表現されています。
ECU設定で重要な観点は以下の2点です。
・Byte配置
・bit幅(8bit / 16bit)
ここを理解すれば
CANデータが読めるようになります。
捨て台詞
LINKECU GENERIC DASHは同じID1000(DEC)を使って、初めのByteの数値でデータの割り当てを切り替える構造になっています。
1つのIDで以下のデータ通信をしています
CH Channel Name
1 EngineSpeed
2 IntakeManifoldPress
3 BoostPress
4 BaroPress
5 ThrottlePos
6 FuelInjDutyPrimary
7 FuelInjDutySecondary
8 FuelInjPulsewidth
9 CoolantTemp
10 IntakeManifoldAirTemp
11 MassAirflow
12 GearPosCalculated
13 FuelInjTiming
14 IgnitionTiming
15 CamIntakeLBankPos
16 CamIntakeRBankPos
17 CamExhaustLBankPos
18 CamExhaustRBankPos
19 AFR1
20 AFR2
21 FuelPress
22 OilTemp
23 OilPress
24 ECUBatteryVoltage
25 WheelSpeedFrontLeft
26 WheelSpeedRearLeft
27 WheelSpeedFrontRight
28 WheelSpeedRearRight
29 KnockLevelCyl1
30 KnockLevelCyl2
31 KnockLevelCyl3
32 KnockLevelCyl4
33 KnockLevelCyl5
34 KnockLevelCyl6
35 KnockLevelCyl7
36 KnockLevelCyl8
37 ECU_FaultCodes
38 ECU_TriggerCounter
39 RPM_Limit
40 MAP_Limit
41 Speed_Limit
42 MaxIgnition_Flag
43 Antilag_Ign_Cut
44 HighSupplyVoltage_Limit
45 Overrun_Flag
46 Traction_Limit
47 LowSupplyVoltage_Flag
48 LaunchRPM_Limit
49 Wakeup_Flag
50 GP_RPM_Limit1
51 CL_Stepper_Limit
52 GP_RPM_Limit2
53 Ethrottle_Limit
54 Cyclic_Idle_Active
課題
Link ECU の GENERIC DASH CAN出力を行い、ほかのCAN機器で読む設定を一から作ってみると勉強になると思います。
いいなと思ったら応援しよう!
チップは新たな技術向上や計測設備導入に活用し、その内容はNoteの記事としてフィードバックされる予定です。