设为首页 加入收藏

TOP

AIR32F103(九) CAN总线的通信和ID过滤机制及实例(一)
2023-07-23 13:28:51 】 浏览:64
Tags:AIR32F103 CAN 通信和

目录

CAN 总线

CAN是 Controller Area Network 的简称, 最初由BOSCH公司开发, 后来成为国际标准(ISO 11898), 是当前应用最广泛的现场总线之一, 是汽车控制系统和嵌入式工业控制局域网事实上的标准.

CAN 总线的物理连接

相对于近距离传输的I2C, SPI协议, 以及RS485总线, CAN 总线定义了更先进的物理层和链路层, 以及种类丰富的上层协议. 与I2C, SPI等基于时钟信号同步的通讯方式不同, CAN通讯不使用时钟信号进行同步, 它是一种异步通讯, 只有 CAN_High 和 CAN_Low 两条信号线, 共同构成一组差分信号线, 以差分信号的形式进行通讯.

CAN 物理层主要分为闭环总线及开环总线网络两种形式, 一个适合于高速通讯, 一个适合于远距离通讯.

  • CAN闭环通讯网络是一种遵循 ISO11898 标准的高速, 短距离网络, 总线最大长度为40m, 通信速度最高为1Mbps, 总线的两端各要求有一个120欧的电阻做阻抗匹配, 减少回波反射.
  • CAN开环总线网络是遵循 ISO11519-2 标准的低速, 远距离网络, 最大传输距离为1km, 最高通讯速率为125kbps, 两根总线互相独立, 不形成闭环, 要求每根总线上各串联有一个 2.2KR 的电阻.

关于共地

CAN 在多个收发器之间的连接, 可以不共地, 只需要 CANH 和 CANL 两线连接.

CAN 总线的通信机制

CAN总线上可以挂载多个通讯节点, 节点之间的信号经过总线传输, 实现节点间通讯. CAN通讯协议不对节点进行地址编码, 而是对数据内容进行编码, 所以网络中的节点个数理论上不受限制, 只要总线的负载足够即可, 可以通过中继器增强负载.

CAN通讯节点由一个CAN控制器及CAN收发器组成, 控制器与收发器之间通过 CAN_Tx及 CAN_Rx 信号线相连, 收发器与CAN总线之间使用 CAN_High 及 CAN_Low 信号线相连. 其中 CAN_Tx 及 CAN_Rx 使用普通的类似TTL逻辑信号, 而 CAN_High 及 CAN_Low 是一对差分信号线, 当CAN节点需要发送数据时, 控制器把要发送的二进制编码通过 CAN_Tx 线发送到收发器, 然后由收发器把这个普通的逻辑电平信号转化成差分信号, 通过差分线 CAN_High 和 CAN_Low 输出到CAN总线网络. 收发器接收总线上的数据时则是相反的过程, 收发器把总线上收到的 CAN_High 及 CAN_Low 信号转化成普通的逻辑电平信号, 再通过 CAN_Rx 输出到控制器中.

差分信号

差分信号又称差模信号, 与传统使用单根信号线电压表示逻辑的方式有区别, 使用差分信号传输时, 需要两根信号线, 这两个信号线的振幅相等, 相位相反, 通过两根信号线的电压差值来表示逻辑0和逻辑1. 相对于单信号线传输的方式, 使用差分信号传输具有如下优点

  • 抗干扰能力强, 当外界存在噪声干扰时, 几乎会同时耦合到两条信号线上, 而差分信号只关心两个信号的差值, 所以外界的共模噪声可以被抑制
  • 能有效抑制它对外部的电磁干扰, 由于两根信号的极性相反, 对外辐射的电磁场可以相互抵消, 耦合的越紧密, 泄放到外界的电磁能量越少
  • 时序定位精确, 由于差分信号的开关变化是位于两个信号的交点, 而不像普通单端信号依靠高低两个阈值电压判断, 因而受工艺, 温度的影响小, 能降低时序上的误差, 同时也更适合于低幅度信号的电路

由于差分信号的这些优点, 在USB协议, 485协议, 以太网协议及CAN协议的物理层中, 都使用了差分信号传输.

CAN协议中的差分信号

CAN协议中对它使用的 CAN_High 及 CAN_Low 表示的差分信号做了规定. 以高速CAN协议为例, 当表示逻辑1时(隐性电平), CAN_High 和 CAN_Low 线上的电压均为2.5V, 即它们的电压差为 0, 而表示逻辑0时(显性电平), CAN_High的电平为 3.5V, CAN_Low线的电平为1.5V, 电压差为 2V.

CAN 总线的特点

CAN 总线网络是一种多主网络, 在总线处于空闲状态时, 任何一个节点单元都可以申请成为主机, 向总线发送消息. 其原则是: 最先访问总线的节点单元可以获得总线的控制权, 多个节点单元同时尝试获取总线的控制权时, 将发生仲裁事件, 具有高优先级的节点单元将获得总线控制权.

CAN 协议中, 所有的消息都以固定的数据格式打包发送. 两个以上的节点单元同时发送信息时, 根据节点标识符(常称为 ID, 打包在固定的数据格式中)决定各自优先级关系, CAN 总线没有其他总线的地址概念, 在总线上增加节点单元时, 连接在总线的其他节点单元的软硬件都不需要改变.

CAN 总线的通信速率和总线长度有关, 在总线长度小于 40m 的场合中, 数据传输速率可以达到 1Mbps, 而即便总线长度上升至 1000m, 数据的传输速率仍可达到 50Kbps, 无论在速率还是传输距离都明显优于常见的 RS232, RS485 和 I2C 总线.

对于总线错误, CAN 总线有错误检测功能, 错误通知功能, 错误恢复功能三种应对措施, CAN 总线上的每个节点都可以通过判断得出, 当前总线上的错误是暂时错误(如瞬间的强干扰)还是持续错误(如总线断裂). 当总线上发生持续错误时, 引起故障的节点单元会自动脱离总线.

CAN 总线上的节点数量在理论上没有上限, 但在实际上收到总线上的时间延时及电气负载的限制. 降低最大通信速率可以增加节点单元的连接数, 反之减少节点单元的连接数则最大通信速率可以提高.

CAN 总线通信

CAN 数据位传输时间

为了实现位同步, CAN协议把每一个数据位(bit)的时序分解成SS段, PTS段, PBS1段, PBS2段, 这四段的长度加起来即为一个CAN数据位的长度.

CAN传输的最小的时间单位是Tq(即CAN外设的时钟周期), 一个完整的位由8~25个Tq组成.

CAN 的数据帧

CAN 总线的数据通信是以数据帧的格式进行的, 了解CAN的数据帧, 可以帮助了解CAN的过滤机制. 下面是一个完整的CAN数据帧的结构

CAN Data Frame

  • SOF 应该是 start of frame, 一个bit位拉低总线用于开始传输
  • Identifier 就是数据的 ID, 11个bit
  • RTR (Remote Transmission Request) 用于声明这是一个数据帧还是一个远程帧
  • IDE 用于声明使用的标准ID还是扩展ID
  • r 是一个保留 bit
  • DLC 用于声明后面携带的数据字节数量
  • D
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇微机原理与系统设计笔记5 | 总线.. 下一篇痞子衡嵌入式:浅谈i.MXRT10xx系..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目