Mazda MX-5 NC 的 CAN 笔记:10 个 ID 与 RaceChrono 公式

作者:

在

结论:Mazda MX-5 NC(2005–2015)的公开 CAN 笔记给出 10 个可用 ID 与配套 RaceChrono 公式,但覆盖面有硬边界:0x081 转向角、0x085 制动压力、0x090 疑似加速度三帧只在带 DSC 模块的车型(2007 年起)上出现;10 秒怠速直方图里 20 个 ID 中只有 8 个达到 100 Hz,真正被写清解码的不超过 10 个。

先分清哪些 ID 依赖 DSC

这份笔记面向第三代 MX-5(NC / NCFL / NCFLFL,即 MK3 / MK3.5 / MK3.75),按 CAN ID 组织,每个 ID 给出字节含义表与 RaceChrono 通道公式。使用时第一个判断不是「这个 ID 有没有」,而是「这辆车有没有 DSC 模块」——转向角、制动压力、疑似加速度三组信号都只在配备 DSC 的车型上存在,也就是 2007 年之后的车。

CAN ID 更新频率 关键字节 公式 前提条件
0x201 100 Hz 0–1 转速、4–5 车速、6 油门、7 恒为 FF 转速 = bytestouint(raw,0,2)/4.00;车速 = ((bytestoint(raw,4,2)/100.00)−100)/3.6;油门 = bytestoint(raw,6,1)*2.00 全系
0x4B0 100 Hz 0–1 左前、2–3 右前、4–5 左后、6–7 右后 四角统一为 ((bytestoint(raw,N,2)/100.00)−100)/3.6 全系,独立承担轮速
0x200 100 Hz 6 制动开关、7 节气门位置 制动 = data[6] 与 0x1 按位与;节气门 = bytestouint(raw,7,1)*100/255.00 全系;byte7 与 0x215 byte6 同源
0x215 100 Hz 6 节气门位置,其余多为故障码 bytestouint(raw,6,1)*100/255.00 全系;byte0 与 byte2 互为镜像,byte1 与 byte3 互为镜像
0x231 40 Hz 1 的 bit3 空挡、bit1 离合 空挡 = data[1] 与 0x4 按位与;离合 = data[1] 与 0x2 按位与 手动挡其余字节恒为 FF 或 00
0x240 10 Hz 0 计算负载、1 水温、4 进气温度 水温 = bytestouint(raw,1,1)−40;进气 = bytestouint(raw,4,1)−40 全系;水温与 0x420 byte0 同源
0x081 100 Hz 2–3 有符号转向角,仅 4 字节 bytesToInt(raw,2,2),正值向右 需 DSC 模块,2007 年起
0x085 100 Hz 0–1 制动压力、2 的 bit0 制动开关 压力 = (3.4518689053*bytesToInt(raw,0,2)−327.27)/1000.00,单位 kPa 需 DSC;系数源自 miata.net 用户数据,作者标注可能错误

表里最该被记住的不是公式本身,而是最后一列。0x081 与 0x085 一旦用在 2006 年及以前的车上,会表现为「完全没有该 ID」,而不是数值为零。

车速公式里那两个魔数的来历

0x201 与 0x4B0 共用同一套换算:原始值以 km/h 为单位但带 100 km/h 偏移,因此先除以 100 再减 100;末尾的 3.6 是把 km/h 换成 m/s,因为 RaceChrono 内部以 m/s 计算,之后由软件按用户选择的单位再乘回去。自己写解析器时若直接用 m/s 之外的单位,就要把这一级换算还原。

油门通道的公式是 bytestoint(raw,6,1)*2.00,对应 0.5% 的步进;0x201 的 byte2 与 byte3 虽跟随转速变化,但笔记标注它疑似带 0x7fff 偏移且与发动机扭矩无关,属未完成解析项。

10 秒直方图:用帧数反推频率

笔记给了一张停车场怠速状态下 10 秒窗口的报文计数直方图,共 20 个 ID。把帧数除以 10 就得到各 ID 的实际频率,这张表可以直接用来判断采样与总线负载。

10 秒帧数 换算频率 CAN ID(十六进制) 说明
1000 100 Hz 081、085、090、200、201、211、215、4B0 含全部已解析的动态信号
500 50 Hz 204、21A 未解析
400 40 Hz 231、4EC 231 为变速箱,与笔记标注的 40 Hz 一致
100 10 Hz 212、240、39A、420、430、4FF 240 为发动机数据,与标注的 10 Hz 一致
10 1 Hz 4F0、4F1 低频,疑似诊断或状态帧

这张表的实用价值在于排错:如果某台设备上 0x4B0 的计数明显低于 1000,先查总线负载与过滤规则,再去怀疑解码;如果它和 0x240 一起掉,问题多半在总线本身而非解析。

恒值与未完成项要单独标记

笔记里有几类条目不能当信号使用。0x211 全为 0xFF;0x212 恒为 80 00 20 40 00 00 00 00,原文用问号表示这只是观察结果;0x090 整帧标记为 WIP,只推测与加速度有关;0x430 的 byte2–7 恒为 0x00,且笔记提示 0x430 在 ND 上才是油量。把它们写进解析配置只会产生恒零通道。

0x240 这一帧同样混着可用与不可用项:byte0 的计算负载公式为 100*(bytestouint(raw,0,1)/255.00,笔记说明作者在 RaceChrono 的通道列表里找不到对应的 Engine Load 通道;byte3 的节气门位置被标注为绝对开度(计入怠速开度),但作者实测怠速值偏高(约 11%),提示缩放仍需调整;byte2 疑似点火提前角,未给出公式。

常见问题

这份 MX-5 NC 的 CAN 笔记覆盖哪些年款?

笔记标题写明覆盖 2005–2015 的第三代车型(NC / NCFL / NCFLFL,即 MK3 / MK3.5 / MK3.75)。但转向角 0x081、制动压力 0x085 与疑似加速度 0x090 只在带 DSC 模块的车型上存在,也就是 2007 年起;更早的车上这些 ID 根本不会出现。

0x085 的制动压力公式能直接用吗?

需谨慎。笔记给出的公式是 (3.4518689053*bytesToInt(raw,0,2)−327.27)/1000.00,单位为 kPa,但作者明确标注系数来自 miata.net 用户数据、可能有误。作为替代,笔记还给出百分比算法 min(0.2*(bytesToInt(raw,0,2)−102),100),未踩时基准值为 102,松开后短暂降到 99 会出现轻微负值。

车速公式里为什么既要减 100 又要除以 3.6?

两级换算是两件事。原始车速以 km/h 为单位但带 100 km/h 偏移,所以先除以 100 再减 100 还原真实 km/h;再除以 3.6 是换成 m/s,因为 RaceChrono 内部以 m/s 计算,最终按用户选择的单位自动乘回。自建解析器时若不需要 m/s,应去掉这一级。

离合与空挡信号在自动挡车上也能用吗?

不能直接套用。0x231 的 byte1 中 bit3 表示空挡、bit1 表示离合,笔记说明该字节的解读基于手动挡车:手动挡时 byte0、byte2、byte3 恒为 FF,byte4–byte7 恒为 00。笔记也提到该帧对自动挡车可能有更多有意义的数据,但并未给出自动挡下的解析。

延伸阅读

参考资料

  • 项目 01 —— public-can-dbc-datasets/additional/hatsunearu-mx5-nc-notes/mazda_mx5_nc.md(10 个 CAN ID 的字节表、RaceChrono 公式、更新频率与 10 秒怠速直方图)

免责声明

本文内容整理自公开开源笔记,其中公式、系数与频率均为原作者基于自车观察给出的结果,部分条目被作者本人标注为未完成或可能错误,未经独立实车验证。不同年款、市场、ECU 版本与是否带 DSC 模块均会导致差异,请以实际抓包与官方资料为准。

更新记录

  • 2026-10-14 初稿

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注