当前位置: 首页 > news >正文

CAN总线硬件原理入门 差分信号帧结构仲裁与容错机制

CAN总线硬件原理入门_差分信号帧结构仲裁与容错机制

面向机器人与嵌入式工程实践的 CAN 硬件原理讲解:从节点硬件组成、差分电气特性、帧与仲裁、位时序与负载率,到 CAN FD 演进与排障方法,帮助把“能通信”升级到“可量产维护”。


目录

  1. CAN 在机器人系统中的定位
  2. 节点硬件组成与总线拓扑
  3. 物理层原理:差分信号与终端匹配
  4. 帧类型与标准数据帧结构
  5. 非破坏性仲裁机制
  6. 位时序与采样点(工程关键)
  7. 错误检测、TECREC 与 Bus-Off 恢复
  8. 关键工程参数与设计边界
  9. CAN FD 相比经典 CAN 的变化
  10. 应用层协议与生态:CANopen、J1939
  11. 调试与排障清单
  12. 免责声明

CAN 在机器人系统中的定位

CAN(Controller Area Network)常用于底盘、电池管理、执行器状态与低到中带宽控制链路。

对比维度传统点对点CAN 总线
布线复杂度节点增多后线束快速膨胀共享总线,显著简化线束
扩展性新增节点常需重布线节点可直接挂接
多主并发需额外协调机制协议原生仲裁
抗干扰依赖单端链路质量差分传输 + 协议容错

机器人语境下,CAN 通常适合“控制与状态”而不是“高带宽感知流”。


节点硬件组成与总线拓扑

一个 CAN 节点常由三部分组成:

MCU(含CAN Controller) <-> CAN Transceiver <-> CAN_H/CAN_L

应用任务

CAN 控制器

CAN 收发器

CAN_H/CAN_L 总线

拓扑建议:

  • 优先线性主干 + 短分支
  • 总线两端各一个120Ω终端电阻
  • 避免星形长分支与“中间节点加终端”

物理层原理:差分信号与终端匹配

CAN 使用CAN_HCAN_L差分传输,信息由两线电压差承载。

逻辑态名称典型电压(示意)差分电压
0显性(Dominant)CAN_H≈3.5VCAN_L≈1.5V2V
1隐性(Recessive)CAN_H≈CAN_L≈2.5V0V

关键点:

  • 共模噪声通常同时耦合到两线,差分接收可显著抑制
  • 显性覆盖隐性,是仲裁成立的电气前提
  • 终端匹配用于抑制反射,减少高波特率误码
[Node]--+==============================+--[Node] | | 120Ω 120Ω (总线一端) (总线另一端)

帧类型与标准数据帧结构

常见帧类型

帧类型作用
数据帧发送有效负载
远程帧请求对方发送某 ID 数据(现代系统使用较少)
错误帧节点检测到错误时插入
过载帧请求短暂延迟下一帧

标准数据帧(CAN 2.0A,11 位 ID)

SOF | Arbitration(ID+RTR) | Control(DLC) | DATA | CRC | ACK | EOF
字段作用
SOF帧起始(显性)
ID(11 位)仲裁与优先级(数值越小优先级越高)
RTR数据帧/远程帧标记
DLC数据长度(经典 CAN 常见 0~8 字节)
DATA业务数据
CRC校验
ACK接收确认
EOF帧结束

非破坏性仲裁机制

多个节点同时发送时,CAN 通过位级比较进行非破坏性仲裁。

CAN BusNode B(ID=0x120)Node A(ID=0x100)CAN BusNode B(ID=0x120)Node A(ID=0x100)显性(0)覆盖隐性(1)发送仲裁位发送仲裁位发送1却读到0 ->> 仲裁失败停止发送并转接收继续发送完整帧

仲裁规则:

  1. 显性0优先于隐性1
  2. 逐位比较 ID,ID 更小者胜出

这保证高优先级报文低延迟通过,同时不破坏总线数据完整性。


位时序与采样点(工程关键)

CAN 控制器将每一位切成若干时间片(TQ),核心参数决定抗抖动能力。

参数作用工程影响
Bitrate Prescaler分频得到 TQ决定位时间基准
Prop/Phase Segment传播与相位补偿区间影响采样点与容错
SJW同步跳宽影响重同步能力
Sample Point采样位置(如 75%~87.5% 常见)直接影响误码率

实践建议:

  • 先确定目标波特率与最大线长,再反推采样点
  • 多节点、多厂商收发器混网时,优先统一采样点策略
  • 高速场景优先缩短分支、优化接地与屏蔽

错误检测、TEC/REC 与 Bus-Off 恢复

CAN 错误检测包含多重机制:

错误类型含义
位错误发送位与监测位不一致
填充错误违反位填充规则
CRC 错误校验不通过
格式错误固定字段格式异常
ACK 错误发送方未收到确认

状态机常见抽象:

  • Error Active:正常通信
  • Error Passive:错误累积,发送受限
  • Bus-Off:节点主动脱离总线,避免持续污染网络

错误累积

继续累积

软件/硬件恢复策略

Error Active

Error Passive

Bus-Off

工程上应明确 Bus-Off 恢复策略(自动恢复或受控恢复),并记录恢复次数用于诊断。


关键工程参数与设计边界

波特率与距离(趋势)

波特率越高,允许总线长度通常越短(受线缆、拓扑、收发器、EMC 环境共同影响)。

配置趋势结果
高波特率(如 1Mbps)时延低,但距离与拓扑更敏感
低波特率(如几十 Kbps)距离更友好,但吞吐降低

总线负载率

负载率过高会放大高优先级报文对低优先级报文的延迟挤压。
控制与状态混网时,建议对关键报文做优先级规划并保留带宽余量。

机器人项目常见边界

场景CAN 适配度
底盘控制状态回传
BMS 与车体设备通信
高带宽相机/点云传输低(应考虑以太网链路)

CAN FD 相比经典 CAN 的变化

维度经典 CANCAN FD
数据段长度常见上限 8 字节最大可扩展到 64 字节
速率策略整帧统一速率仲裁段与数据段可不同速率
典型价值控制与状态小报文更适合固件升级与高数据量场景

升级到 CAN FD 时,需要同时确认控制器、收发器与网络节点兼容性。


应用层协议与生态:CANopen、J1939

物理层 CAN 只定义“怎么传”,应用层协议定义“传什么、怎么组织”。

协议常见领域特点
CANopen工业自动化、机器人执行器对象字典、PDO/SDO、设备互操作性好
J1939商用车、工程机械参数组(PGN)体系成熟,整车网络实践多

选型要点:

  • 设备生态优先:先看现有设备支持何种上层协议
  • 诊断与运维优先:是否有成熟工具链与报文规范
  • 不建议在应用层“自定义一切”导致后期互联成本飙升

调试与排障清单

现象优先检查项
高波特率偶发丢帧两端120Ω、分支长度、采样点设置、接地与共模噪声
总线几乎不可通信波特率一致性、终端位置、收发器供电、线序
某节点频繁 Bus-Off节点硬件异常、参数失配、EMC 干扰、重发策略不当
ACK 错误多是否有有效接收节点、滤波是否过严、节点是否静默模式
低优先级报文延迟大报文 ID 规划不合理、总线负载率过高

建议调试顺序:电气层 → 位时序 → 报文层 → 系统负载层,不要直接从应用层猜原因。


免责声明

  • 文中电压、距离、速率等为常见工程示意,具体数值以控制器/收发器手册和实测为准。
  • 不同 CAN IP、收发器型号、线缆与 EMC 环境会显著影响时序裕量,量产前应做边界条件测试。
http://www.cnnetsun.cn/news/2197594.html

相关文章:

  • 【稀缺首发】FDA最新SWCG 2024草案解读:C语言优化必须新增的3项可追溯性元数据字段及自动化注入方案
  • 01华夏之光永存・开源:黄大年茶思屋榜文保姆级解法「27期 1题」 大规模移动承载网络时间性能探测算法 保姆级完整解法
  • Vue 3 + TypeScript 后台管理系统架构设计与核心功能实现
  • C语言实现TSN协议栈调试工具(工业现场已验证的7个关键断点设计)
  • 开发智能客服系统时采用 Taotoken 实现多模型备援与负载均衡的策略
  • Nucleus Co-Op终极指南:如何让单机游戏秒变多人分屏派对游戏?
  • Home Assistant进阶开发:OpenClaw工具链实现工程化与热重载
  • 创业团队如何利用 Taotoken 统一管理多个 AI 模型的调用与成本
  • STC8H单片机如何用PWMB模块搞定霍尔编码器测速?保姆级配置流程分享
  • 实战演练:基于快马平台构建可部署的个人知识库应用,打通前端到上线全流程
  • MySQL数据表操作与CRUD详解:从建表、插入到查询的全流程
  • 什么是驱动?
  • 多层建筑内部引导疏散路径优化与仿真多智能体建模【附代码】
  • 用贪心算法搞定多机调度:一个Python实现带你理解最长处理时间优先策略
  • Arm Fast Models硬件追踪组件在嵌入式调试中的应用
  • 实测避坑:ESP32 ADC采样率虚标?手把手教你用DMA模式获取真实数据(附IDF V4.4.2修复方案)
  • 大模型动态记忆管理:MemAct框架原理与实践
  • 沉淀仓核心配件(H 管)安装与作用
  • DDrawCompat解决方案:让Windows 11完美运行DirectX 1-7经典游戏
  • Hyprland窗口抖动插件开发:从原理到编译配置全解析
  • Python 3.15 WASM部署全链路踩坑手册,含Pyodide 0.26+、Emscripten 3.1.61兼容矩阵与内存泄漏修复补丁(仅限首批内测开发者)
  • Godot 3集成LuaJIT插件:原理、配置与高性能游戏脚本开发实践
  • 知网重复率过了,却卡在 AIGC 疑似率高?这 3 个降重工具能帮你一次搞定
  • StarRailCopilot:崩坏星穹铁道全自动脚本终极解决方案
  • 手把手教你用STM32F407软件模拟I2S驱动SIPEED麦克风阵列(附完整代码)
  • RoboMaster开发板C型嵌入式开发:从零到机器人控制的完整指南
  • 神经网络扰动下的局部高斯性与熵增现象研究
  • 揭秘Sentinel-2/Landsat自动解译流水线:如何用3行代码调用高精度AI模型完成农田/水体/城市变化检测?
  • LLM de skill 和tools 实现代码生成与命令行执行:LangGraph智能Agent实战
  • AUTOSAR CanNm实战:巧用‘降低总线负载’机制优化CAN网络性能