当前位置:首页 > 汽车电子 > 汽车电子
[导读]自动驾驶域控上CAN不是“能发就行”,是仲裁竞争下的实时资源共享。CAN位仲裁规则很硬:ID数值越小优先级越高,多节点同时发时低ID靠显性位赢总线,败者退出发送。 所以ID分配不是编号习惯,是直接决定“制动指令能不能在100μs内出去”的调度策略。


自动驾驶域控上CAN不是“能发就行”,是仲裁竞争下的实时资源共享。CAN位仲裁规则很硬:ID数值越小优先级越高,多节点同时发时低ID靠显性位赢总线,败者退出发送。 所以ID分配不是编号习惯,是直接决定“制动指令能不能在100μs内出去”的调度策略。

一、ID分段:按实时等级而不是按ECU

常见坑是把ID按节点顺手编:动力0x1xx、底盘0x2xx、诊断0x7xx……结果空调状态ID比刹车还小,仲裁时刹车反而等它。正确是按“安全实时等级”分段:

低ID段:制动指令、扭矩请求、AEB/碰撞状态、转向角指令——硬实时,1~10ms

中ID段:车速、轮速、横纵向状态、规划轨迹摘要——20~50ms

高ID段:BMS汇总、诊断、标定、日志、NM——100ms以上或事件触发

最高ID段:调试帧、OTA流水,默认不进量产周期表

标准帧和扩展帧混跑时标准帧仲裁占优,别把关键帧放扩展帧里跟标准帧抢。

二、周期分配:先算负载再定频率

500k下标准帧8字节理论约2.16%,算上位填充实际按2.4%~2.5%估,峰值负载留20%~30%余量,别压到70%以上。

经验法则:

控制指令:周期取“控制环周期”即可,别盲目10ms

状态量(门状态、档位):100ms足够

慢变量(水温、SOC、版本):500ms~1s

传感器目标列表:走CAN FD或以太网,别塞经典CAN

DBC里用GenMsgCycleTime锁周期,网络评审阶段就把每条报文负载率加总,别等实车CANoe抓到红条再改。

三、事件触发必须加最小间隔

Direct模式适合“状态变化少”的信号:门锁、充电枪、故障位置位。但轮速、踏板开度、方向盘角速度别配纯Direct——行驶中持续变化会每周期狂发,4轮轮速能把一条500k总线顶到40%+。

正确做法:

/* COM层发送模式配置伪代码 */

typedef enum { PERIODIC, DIRECT, MIXED } tx_mode_t;

typedef struct {

   uint32_t id;

   tx_mode_t mode;

   uint16_t cycle_ms;     // 周期兜底

   uint16_t min_delay_ms; // 事件触发最小间隔

} can_msg_cfg_t;


static const can_msg_cfg_t cfg[] = {

   {0x101, PERIODIC, 10, 0},    // 制动指令:纯周期

   {0x180, MIXED,    50, 10},   // 雷达目标:50ms兜底+变化10ms内限流

   {0x2A0, DIRECT,   0,  20},   // 门锁状态:变化才发,限流20ms

   {0x7E0, DIRECT,   0, 100},   // 诊断:事件触发

};

MIXED最实用:正常周期保活,故障时立即重发。

配了min_delay后,信号抖1000次也只按间隔发一帧,总线不会被单点信号刷爆。

四、信号打包与网关聚合

同采样时刻的信号打一帧:三轴加速度、四轮转速、车辆速度+档位,别分四条ID。

布尔状态用bit域挤一字节

浮点转Q格式,别直接抛float32

多相似小报文合并成复用帧

网关跨域转发做过滤:底盘域不需要看BMS细节就不往那条总线投

域控内部大量目标列表/点云别走CAN,走CAN FD或车载以太网TSN;CAN只留“必须硬实时”的控制与状态。

五、时间触发兜底防饿死

纯事件触发在高负载时会饿死低优帧。工程上两种办法:

调度表:时间触发报文先发,末尾留一个事件窗给动态报文

Com_MainFunctionTx任务优先级高于应用层、低于ISR,发送队列按ID排序

高优先级帧也不能常占总线,否则低ID诊断永远发不出。

六、验证与监控

改ID分配后必须实测三件事:

峰值负载率(CANoe/candump统计1秒帧数)

关键帧最坏延迟(GPIO拉脚+示波器,或CANalyzer)

错误帧/重传次数

上线前跑压力场景:诊断扫描、OTA流水、多ECU同时上电、AEB触发突发。运行时暴露每ID负载计数,现场出问题直接看是哪条报文顶满。

七、落坑清单

ID按ECU编号→刹车输给空调

轮速配Direct无min_delay→总线被打满

状态量10ms刷→负载白白翻倍

调试帧忘关→量产还在发

低ID全给控制→诊断帧饿死

只算理论负载不算位填充→实车超70%

大目标列表塞经典CAN→改CAN FD或挪以太网

按“ID按实时等级分段→周期按负载预算定→状态信号MIXED+最小间隔→同采信号打包→网关过滤→时间触发兜底”做,自动驾驶域控CAN拥塞基本可控。ID分配的本质是“把仲裁优先级当成调度器用”——CAN没中心主机,ID就是你的调度策略表。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭